Initial refactoring to abstract baseclass to allow for additional functionality across all routers

This commit is contained in:
2025-06-17 15:16:50 -05:00
parent fecfb5c19a
commit a6047dcc18
4 changed files with 60 additions and 19 deletions

View File

@ -76,9 +76,9 @@ public class QApplicationJavalinServer
private boolean serveFrontendMaterialDashboard = true; private boolean serveFrontendMaterialDashboard = true;
private String frontendMaterialDashboardHostedPath = "/"; // TODO - Things like this should be moved into a central configuration file system, so that it can be changed in userspace without code changes. private String frontendMaterialDashboardHostedPath = "/"; // TODO - Things like this should be moved into a central configuration file system, so that it can be changed in userspace without code changes.
private boolean serveLegacyUnversionedMiddlewareAPI = true; private boolean serveLegacyUnversionedMiddlewareAPI = true;
private List<AbstractMiddlewareVersion> middlewareVersionList = List.of(new MiddlewareVersionV1()); private List<AbstractMiddlewareVersion> middlewareVersionList = List.of(new MiddlewareVersionV1());
private List<QJavalinRouteProviderInterface> additionalRouteProviders = null; private List<QJavalinRouteProvider> additionalRouteProviders = null;
private Consumer<Javalin> javalinConfigurationCustomizer = null; private Consumer<Javalin> javalinConfigurationCustomizer = null;
private QJavalinMetaData javalinMetaData = null; private QJavalinMetaData javalinMetaData = null;
private long lastQInstanceHotSwapMillis; private long lastQInstanceHotSwapMillis;
@ -133,15 +133,17 @@ public class QApplicationJavalinServer
{ {
if(resource != null) if(resource != null)
{ {
config.staticFiles.add("/material-dashboard-overlay"); config.staticFiles.add(staticFileConfig -> {
staticFileConfig.hostedPath = this.frontendMaterialDashboardHostedPath;
staticFileConfig.directory = "/material-dashboard-overlay";
});
} }
} }
//////////////////////////////////////////////////////////////////////////////////// config.staticFiles.add(staticFileConfig -> {
// tell javalin where to find material-dashboard static web assets // staticFileConfig.hostedPath = this.frontendMaterialDashboardHostedPath;
// in this case, this path is coming from the qqq-frontend-material-dashboard jar // staticFileConfig.directory = "/material-dashboard";
//////////////////////////////////////////////////////////////////////////////////// });
config.staticFiles.add("/material-dashboard");
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// set the index page for the SPA from material dashboard // // set the index page for the SPA from material dashboard //
@ -184,7 +186,7 @@ public class QApplicationJavalinServer
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// additional route providers (e.g., application-apis, other middlewares) // // additional route providers (e.g., application-apis, other middlewares) //
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
for(QJavalinRouteProviderInterface routeProvider : CollectionUtils.nonNullList(additionalRouteProviders)) for(QJavalinRouteProvider routeProvider : CollectionUtils.nonNullList(additionalRouteProviders))
{ {
routeProvider.setQInstance(qInstance); routeProvider.setQInstance(qInstance);
@ -194,6 +196,10 @@ public class QApplicationJavalinServer
config.router.apiBuilder(javalinEndpointGroup); config.router.apiBuilder(javalinEndpointGroup);
} }
/////////////////////////////////////////////////////////////////////////////////////////////
// If the additional route provider has an SPA root defined, add it to the Javalin config. //
/////////////////////////////////////////////////////////////////////////////////////////////
routeProvider.acceptJavalinConfig(config); routeProvider.acceptJavalinConfig(config);
} }
}); });
@ -202,7 +208,7 @@ public class QApplicationJavalinServer
// also pass the javalin service into any additionalRouteProviders, // // also pass the javalin service into any additionalRouteProviders, //
// in case they need additional setup, e.g., before/after handlers. // // in case they need additional setup, e.g., before/after handlers. //
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
for(QJavalinRouteProviderInterface routeProvider : CollectionUtils.nonNullList(additionalRouteProviders)) for(QJavalinRouteProvider routeProvider : CollectionUtils.nonNullList(additionalRouteProviders))
{ {
routeProvider.acceptJavalinService(service); routeProvider.acceptJavalinService(service);
} }
@ -380,7 +386,7 @@ public class QApplicationJavalinServer
} }
} }
for(QJavalinRouteProviderInterface routeProvider : CollectionUtils.nonNullList(additionalRouteProviders)) for(QJavalinRouteProvider routeProvider : CollectionUtils.nonNullList(additionalRouteProviders))
{ {
routeProvider.setQInstance(newQInstance); routeProvider.setQInstance(newQInstance);
} }
@ -555,7 +561,7 @@ public class QApplicationJavalinServer
/******************************************************************************* /*******************************************************************************
** Getter for additionalRouteProviders ** Getter for additionalRouteProviders
*******************************************************************************/ *******************************************************************************/
public List<QJavalinRouteProviderInterface> getAdditionalRouteProviders() public List<QJavalinRouteProvider> getAdditionalRouteProviders()
{ {
return (this.additionalRouteProviders); return (this.additionalRouteProviders);
} }
@ -565,7 +571,7 @@ public class QApplicationJavalinServer
/******************************************************************************* /*******************************************************************************
** Setter for additionalRouteProviders ** Setter for additionalRouteProviders
*******************************************************************************/ *******************************************************************************/
public void setAdditionalRouteProviders(List<QJavalinRouteProviderInterface> additionalRouteProviders) public void setAdditionalRouteProviders(List<QJavalinRouteProvider> additionalRouteProviders)
{ {
this.additionalRouteProviders = additionalRouteProviders; this.additionalRouteProviders = additionalRouteProviders;
} }
@ -575,7 +581,7 @@ public class QApplicationJavalinServer
/******************************************************************************* /*******************************************************************************
** Fluent setter for additionalRouteProviders ** Fluent setter for additionalRouteProviders
*******************************************************************************/ *******************************************************************************/
public QApplicationJavalinServer withAdditionalRouteProviders(List<QJavalinRouteProviderInterface> additionalRouteProviders) public QApplicationJavalinServer withAdditionalRouteProviders(List<QJavalinRouteProvider> additionalRouteProviders)
{ {
this.additionalRouteProviders = additionalRouteProviders; this.additionalRouteProviders = additionalRouteProviders;
return (this); return (this);
@ -586,7 +592,7 @@ public class QApplicationJavalinServer
/******************************************************************************* /*******************************************************************************
** Fluent setter to add a single additionalRouteProvider ** Fluent setter to add a single additionalRouteProvider
*******************************************************************************/ *******************************************************************************/
public QApplicationJavalinServer withAdditionalRouteProvider(QJavalinRouteProviderInterface additionalRouteProvider) public QApplicationJavalinServer withAdditionalRouteProvider(QJavalinRouteProvider additionalRouteProvider)
{ {
if(this.additionalRouteProviders == null) if(this.additionalRouteProviders == null)
{ {

View File

@ -32,8 +32,9 @@ import io.javalin.config.JavalinConfig;
** Interface for classes that can provide a list of endpoints to a javalin ** Interface for classes that can provide a list of endpoints to a javalin
** server. ** server.
*******************************************************************************/ *******************************************************************************/
public abstract class QJavalinRouteProviderInterface public abstract class QJavalinRouteProvider
{ {
private String spaRootPath = null;
/*************************************************************************** /***************************************************************************
** For initial setup when server boots, set the qInstance - but also, ** For initial setup when server boots, set the qInstance - but also,
@ -41,6 +42,8 @@ public abstract class QJavalinRouteProviderInterface
***************************************************************************/ ***************************************************************************/
public abstract void setQInstance(QInstance qInstance); public abstract void setQInstance(QInstance qInstance);
/*************************************************************************** /***************************************************************************
** **
***************************************************************************/ ***************************************************************************/

View File

@ -33,6 +33,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
public class JavalinRouteProviderMetaData implements QMetaDataObject public class JavalinRouteProviderMetaData implements QMetaDataObject
{ {
private String hostedPath; private String hostedPath;
private String spaRootPath;
private String fileSystemPath; private String fileSystemPath;
private String processName; private String processName;
@ -206,4 +207,35 @@ public class JavalinRouteProviderMetaData implements QMetaDataObject
return (this); return (this);
} }
/*******************************************************************************
** Getter for spaRootPath
*******************************************************************************/
public String getSpaRootPath()
{
return (this.spaRootPath);
}
/*******************************************************************************
** Setter for spaRootPath
*******************************************************************************/
public void setSpaRootPath(String spaRootPath)
{
this.spaRootPath = spaRootPath;
}
/*******************************************************************************
** Fluent setter for spaRootPath
*******************************************************************************/
public JavalinRouteProviderMetaData withSpaRootPath(String spaRootPath)
{
this.spaRootPath = spaRootPath;
return (this);
}
} }

View File

@ -43,7 +43,7 @@ import com.kingsrook.qqq.backend.core.utils.StringUtils;
import com.kingsrook.qqq.backend.core.utils.ValueUtils; import com.kingsrook.qqq.backend.core.utils.ValueUtils;
import com.kingsrook.qqq.backend.javalin.QJavalinImplementation; import com.kingsrook.qqq.backend.javalin.QJavalinImplementation;
import com.kingsrook.qqq.backend.javalin.QJavalinUtils; import com.kingsrook.qqq.backend.javalin.QJavalinUtils;
import com.kingsrook.qqq.middleware.javalin.QJavalinRouteProviderInterface; import com.kingsrook.qqq.middleware.javalin.QJavalinRouteProvider;
import com.kingsrook.qqq.middleware.javalin.metadata.JavalinRouteProviderMetaData; import com.kingsrook.qqq.middleware.javalin.metadata.JavalinRouteProviderMetaData;
import com.kingsrook.qqq.middleware.javalin.routeproviders.authentication.RouteAuthenticatorInterface; import com.kingsrook.qqq.middleware.javalin.routeproviders.authentication.RouteAuthenticatorInterface;
import io.javalin.apibuilder.ApiBuilder; import io.javalin.apibuilder.ApiBuilder;
@ -56,7 +56,7 @@ import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair;
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public class ProcessBasedRouter implements QJavalinRouteProviderInterface public class ProcessBasedRouter extends QJavalinRouteProvider
{ {
private static final QLogger LOG = QLogger.getLogger(ProcessBasedRouter.class); private static final QLogger LOG = QLogger.getLogger(ProcessBasedRouter.class);