From 1c75df3a0953b7d1778cf1c27e652a332341b0a1 Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Tue, 6 Sep 2022 19:00:12 -0500 Subject: [PATCH] added initial version of branding as metadata --- .../core/actions/metadata/MetaDataAction.java | 8 + .../actions/metadata/MetaDataOutput.java | 26 ++- .../model/dashboard/widgets/BarChart.java | 2 +- .../core/model/dashboard/widgets/QWidget.java | 2 +- .../dashboard/widgets/QuickSightChart.java | 4 +- .../core/model/metadata/QInstance.java | 25 +++ .../metadata/branding/QBrandingMetaData.java | 148 ++++++++++++++++++ .../metadata/dashboard/QWidgetMetaData.java | 2 +- .../dashboard/QuickSightChartMetaData.java | 2 +- .../sampleapp/SampleMetaDataProvider.java | 37 +++-- 10 files changed, 237 insertions(+), 19 deletions(-) create mode 100644 qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/branding/QBrandingMetaData.java diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java index ce21b93f..97d460ab 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java @@ -109,6 +109,14 @@ public class MetaDataAction } metaDataOutput.setAppTree(appTree); + //////////////////////////////////// + // add branding metadata if found // + //////////////////////////////////// + if(metaDataInput.getInstance().getBranding() != null) + { + metaDataOutput.setBranding(metaDataInput.getInstance().getBranding()); + } + // todo post-customization - can do whatever w/ the result if you want? return metaDataOutput; diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java index 759ba708..afb3d709 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java @@ -25,6 +25,7 @@ package com.kingsrook.qqq.backend.core.model.actions.metadata; import java.util.List; import java.util.Map; import com.kingsrook.qqq.backend.core.model.actions.AbstractActionOutput; +import com.kingsrook.qqq.backend.core.model.metadata.branding.QBrandingMetaData; import com.kingsrook.qqq.backend.core.model.metadata.frontend.AppTreeNode; import com.kingsrook.qqq.backend.core.model.metadata.frontend.QFrontendAppMetaData; import com.kingsrook.qqq.backend.core.model.metadata.frontend.QFrontendProcessMetaData; @@ -43,6 +44,8 @@ public class MetaDataOutput extends AbstractActionOutput private List appTree; + private QBrandingMetaData branding; + /******************************************************************************* @@ -89,7 +92,6 @@ public class MetaDataOutput extends AbstractActionOutput - /******************************************************************************* ** Getter for appTree ** @@ -131,4 +133,26 @@ public class MetaDataOutput extends AbstractActionOutput { this.apps = apps; } + + + + /******************************************************************************* + ** Getter for branding + ** + *******************************************************************************/ + public QBrandingMetaData getBranding() + { + return branding; + } + + + + /******************************************************************************* + ** Setter for branding + ** + *******************************************************************************/ + public void setBranding(QBrandingMetaData branding) + { + this.branding = branding; + } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/BarChart.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/BarChart.java index 5c5ccf4b..27f6689b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/BarChart.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/BarChart.java @@ -26,7 +26,7 @@ import java.util.List; /******************************************************************************* - ** Model containing datastructure expected by frontend material dashboard bar chart widget + ** Model containing datastructure expected by frontend bar chart widget ** *******************************************************************************/ public class BarChart implements QWidget diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidget.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidget.java index d62c35df..8eb0b721 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidget.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidget.java @@ -23,7 +23,7 @@ package com.kingsrook.qqq.backend.core.model.dashboard.widgets; /******************************************************************************* - ** Interface for frontend material dashboard widget's datastructures + ** Interface for frontend widget's datastructures ** *******************************************************************************/ public interface QWidget diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QuickSightChart.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QuickSightChart.java index de738d6f..5aec5320 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QuickSightChart.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QuickSightChart.java @@ -23,8 +23,8 @@ package com.kingsrook.qqq.backend.core.model.dashboard.widgets; /******************************************************************************* - ** Model containing datastructure expected by frontend material dashboard - ** AWS quick sight widget + ** Model containing datastructure expected by frontend AWS quick sight widget + ** TODO: this might just be an IFrameChart widget in the future ** *******************************************************************************/ public class QuickSightChart implements QWidget diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java index c221d013..1fd65d4c 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java @@ -30,6 +30,7 @@ import java.util.Map; import com.fasterxml.jackson.annotation.JsonIgnore; import com.kingsrook.qqq.backend.core.instances.QInstanceValidationKey; import com.kingsrook.qqq.backend.core.model.metadata.automation.QAutomationProviderMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.branding.QBrandingMetaData; import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaDataInterface; import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValueSource; @@ -53,6 +54,7 @@ public class QInstance private Map backends = new HashMap<>(); private QAuthenticationMetaData authentication = null; + private QBrandingMetaData branding = null; private Map automationProviders = new HashMap<>(); //////////////////////////////////////////////////////////////////////////////////////////// @@ -508,6 +510,28 @@ public class QInstance + /******************************************************************************* + ** Getter for branding + ** + *******************************************************************************/ + public QBrandingMetaData getBranding() + { + return branding; + } + + + + /******************************************************************************* + ** Setter for branding + ** + *******************************************************************************/ + public void setBranding(QBrandingMetaData branding) + { + this.branding = branding; + } + + + /******************************************************************************* ** Getter for authentication ** @@ -551,6 +575,7 @@ public class QInstance } + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/branding/QBrandingMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/branding/QBrandingMetaData.java new file mode 100644 index 00000000..c02b25fd --- /dev/null +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/branding/QBrandingMetaData.java @@ -0,0 +1,148 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2022. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.backend.core.model.metadata.branding; + + +/******************************************************************************* + ** Meta-Data to define branding in a QQQ instance. + ** + *******************************************************************************/ +public class QBrandingMetaData +{ + private String companyName; + private String logo; + private String icon; + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public String toString() + { + return ("QBrandingMetaData[" + companyName + "]"); + } + + + + /******************************************************************************* + ** Getter for companyName + ** + *******************************************************************************/ + public String getCompanyName() + { + return companyName; + } + + + + /******************************************************************************* + ** Setter for companyName + ** + *******************************************************************************/ + public void setCompanyName(String companyName) + { + this.companyName = companyName; + } + + + + /******************************************************************************* + ** Fluent setter for companyName + ** + *******************************************************************************/ + public QBrandingMetaData withCompanyName(String companyName) + { + this.companyName = companyName; + return this; + } + + + + /******************************************************************************* + ** Getter for logo + ** + *******************************************************************************/ + public String getLogo() + { + return logo; + } + + + + /******************************************************************************* + ** Setter for logo + ** + *******************************************************************************/ + public void setLogo(String logo) + { + this.logo = logo; + } + + + + /******************************************************************************* + ** Fluent setter for logo + ** + *******************************************************************************/ + public QBrandingMetaData withLogo(String logo) + { + this.logo = logo; + return this; + } + + + + /******************************************************************************* + ** Getter for icon + ** + *******************************************************************************/ + public String getIcon() + { + return icon; + } + + + + /******************************************************************************* + ** Setter for icon + ** + *******************************************************************************/ + public void setIcon(String icon) + { + this.icon = icon; + } + + + + /******************************************************************************* + ** Fluent setter for icon + ** + *******************************************************************************/ + public QBrandingMetaData withIcon(String icon) + { + this.icon = icon; + return this; + } + +} diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java index 7234eb90..95a2de76 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QWidgetMetaData.java @@ -26,7 +26,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; /******************************************************************************* - ** Base metadata for frontend material dashboard widgets + ** Base metadata for frontend dashboard widgets ** *******************************************************************************/ public class QWidgetMetaData implements QWidgetMetaDataInterface diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QuickSightChartMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QuickSightChartMetaData.java index 6d1b82f6..55d7e31b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QuickSightChartMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/dashboard/QuickSightChartMetaData.java @@ -26,7 +26,7 @@ import java.util.Collection; /******************************************************************************* - ** AWS Quicksite specific meta data for frontend material dashboard widget + ** AWS Quicksite specific meta data for frontend dashboard widget ** *******************************************************************************/ public class QuickSightChartMetaData extends QWidgetMetaData implements QWidgetMetaDataInterface diff --git a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index f9175e14..028262f8 100644 --- a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -37,6 +37,7 @@ import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInpu import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationType; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.branding.QBrandingMetaData; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeType; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeUsage; @@ -128,7 +129,7 @@ public class SampleMetaDataProvider qInstance.addProcess(defineProcessSimpleThrow()); defineWidgets(qInstance); - + defineBranding(qInstance); defineApps(qInstance); return (qInstance); @@ -136,6 +137,18 @@ public class SampleMetaDataProvider + /******************************************************************************* + ** + *******************************************************************************/ + private static void defineBranding(QInstance qInstance) + { + qInstance.setBranding(new QBrandingMetaData() + .withLogo("/kr-logo.png") + .withIcon("/kr-icon.png")); + } + + + /******************************************************************************* ** *******************************************************************************/ @@ -146,10 +159,10 @@ public class SampleMetaDataProvider .withCodeReference(new QCodeReference(PersonsByCreateDateBarChart.class, null))); QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); - String accountId = interpreter.interpret("${env.QUICKSIGHT_ACCOUNT_ID}"); - String accessKey = interpreter.interpret("${env.QUICKSIGHT_ACCESS_KEY}"); - String secretKey = interpreter.interpret("${env.QUICKSIGHT_SECRET_KEY}"); - String userArn = interpreter.interpret("${env.QUICKSIGHT_USER_ARN}"); + String accountId = interpreter.interpret("${env.QUICKSIGHT_ACCOUNT_ID}"); + String accessKey = interpreter.interpret("${env.QUICKSIGHT_ACCESS_KEY}"); + String secretKey = interpreter.interpret("${env.QUICKSIGHT_SECRET_KEY}"); + String userArn = interpreter.interpret("${env.QUICKSIGHT_USER_ARN}"); QWidgetMetaDataInterface quickSightChartMetaData = new QuickSightChartMetaData() .withAccountId(accountId) @@ -219,13 +232,13 @@ public class SampleMetaDataProvider { if(USE_MYSQL) { - QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); - String vendor = interpreter.interpret("${env.RDBMS_VENDOR}"); - String hostname = interpreter.interpret("${env.RDBMS_HOSTNAME}"); - Integer port = Integer.valueOf(interpreter.interpret("${env.RDBMS_PORT}")); - String databaseName = interpreter.interpret("${env.RDBMS_DATABASE_NAME}"); - String username = interpreter.interpret("${env.RDBMS_USERNAME}"); - String password= interpreter.interpret("${env.RDBMS_PASSWORD}"); + QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); + String vendor = interpreter.interpret("${env.RDBMS_VENDOR}"); + String hostname = interpreter.interpret("${env.RDBMS_HOSTNAME}"); + Integer port = Integer.valueOf(interpreter.interpret("${env.RDBMS_PORT}")); + String databaseName = interpreter.interpret("${env.RDBMS_DATABASE_NAME}"); + String username = interpreter.interpret("${env.RDBMS_USERNAME}"); + String password = interpreter.interpret("${env.RDBMS_PASSWORD}"); return new RDBMSBackendMetaData() .withName(RDBMS_BACKEND_NAME)