CE-1955 add checks for material-dashboard resources before trying to blindly serve them; add field for QJavalinMetaData;

This commit is contained in:
2024-12-03 20:43:10 -06:00
parent 7bab11ea7e
commit 8d37ce3c54

View File

@ -33,6 +33,7 @@ import com.kingsrook.qqq.backend.core.utils.ClassPathUtils;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.core.utils.ValueUtils;
import com.kingsrook.qqq.backend.javalin.QJavalinImplementation;
import com.kingsrook.qqq.backend.javalin.QJavalinMetaData;
import com.kingsrook.qqq.middleware.javalin.specs.AbstractMiddlewareVersion;
import com.kingsrook.qqq.middleware.javalin.specs.v1.MiddlewareVersionV1;
import io.javalin.Javalin;
@ -69,6 +70,7 @@ public class QApplicationJavalinServer
private List<AbstractMiddlewareVersion> middlewareVersionList = List.of(new MiddlewareVersionV1());
private List<QJavalinRouteProviderInterface> additionalRouteProviders = null;
private Consumer<Javalin> javalinConfigurationCustomizer = null;
private QJavalinMetaData javalinMetaData = null;
private long lastQInstanceHotSwapMillis;
private long millisBetweenHotSwaps = 2500;
@ -100,6 +102,11 @@ public class QApplicationJavalinServer
{
if(serveFrontendMaterialDashboard)
{
if(getClass().getResource("/material-dashboard/index.html") == null)
{
LOG.warn("/material-dashboard/index.html resource was not found. This might happen if you're using a local (e.g., within-IDE) snapshot version... Try updating pom.xml to reference a released version of qfmd?");
}
////////////////////////////////////////////////////////////////////////////////////////
// If you have any assets to add to the web server (e.g., logos, icons) place them at //
// src/main/resources/material-dashboard-overlay (or a directory of your choice //
@ -108,7 +115,10 @@ public class QApplicationJavalinServer
// material-dashboard directory, so in case the same file exists in both (e.g., //
// favicon.png), the app-specific one will be used. //
////////////////////////////////////////////////////////////////////////////////////////
config.staticFiles.add("/material-dashboard-overlay");
if(getClass().getResource("/material-dashboard-overlay") != null)
{
config.staticFiles.add("/material-dashboard-overlay");
}
/////////////////////////////////////////////////////////////////////
// tell javalin where to find material-dashboard static web assets //
@ -128,7 +138,7 @@ public class QApplicationJavalinServer
{
try
{
QJavalinImplementation qJavalinImplementation = new QJavalinImplementation(qInstance);
QJavalinImplementation qJavalinImplementation = new QJavalinImplementation(qInstance, javalinMetaData);
config.router.apiBuilder(qJavalinImplementation.getRoutes());
}
catch(QInstanceValidationException e)
@ -526,4 +536,35 @@ public class QApplicationJavalinServer
return (this);
}
/*******************************************************************************
** Getter for javalinMetaData
*******************************************************************************/
public QJavalinMetaData getJavalinMetaData()
{
return (this.javalinMetaData);
}
/*******************************************************************************
** Setter for javalinMetaData
*******************************************************************************/
public void setJavalinMetaData(QJavalinMetaData javalinMetaData)
{
this.javalinMetaData = javalinMetaData;
}
/*******************************************************************************
** Fluent setter for javalinMetaData
*******************************************************************************/
public QApplicationJavalinServer withJavalinMetaData(QJavalinMetaData javalinMetaData)
{
this.javalinMetaData = javalinMetaData;
return (this);
}
}