diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceEnricher.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceEnricher.java index 81a64968..a8afc8c6 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceEnricher.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceEnricher.java @@ -100,7 +100,7 @@ public class QInstanceEnricher ////////////////////////////////////////////////////////////////////////////////////////////////// // let an instance define mappings to be applied during name-to-label enrichments, // - // e.g., to avoid ever incorrectly camel-casing an acronym (e.g., "Tla" shoudl always be "TLA") // + // e.g., to avoid ever incorrectly camel-casing an acronym (e.g., "Tla" should always be "TLA") // // or to expand abbreviations in code (e.g., "Addr" should always be "Address" // ////////////////////////////////////////////////////////////////////////////////////////////////// private static final Map labelMappings = new LinkedHashMap<>(); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QSupplementalInstanceMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QSupplementalInstanceMetaData.java index 709417e2..cd2789e4 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QSupplementalInstanceMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QSupplementalInstanceMetaData.java @@ -32,38 +32,11 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; *******************************************************************************/ public abstract class QSupplementalInstanceMetaData { - protected String type; - - /******************************************************************************* ** Getter for type *******************************************************************************/ - public String getType() - { - return (this.type); - } - - - - /******************************************************************************* - ** Setter for type - *******************************************************************************/ - public void setType(String type) - { - this.type = type; - } - - - - /******************************************************************************* - ** Fluent setter for type - *******************************************************************************/ - public QSupplementalInstanceMetaData withType(String type) - { - this.type = type; - return (this); - } + public abstract String getType(); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/QSupplementalFieldMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/QSupplementalFieldMetaData.java index 16200ba2..02b1fe02 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/QSupplementalFieldMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/QSupplementalFieldMetaData.java @@ -28,37 +28,10 @@ package com.kingsrook.qqq.backend.core.model.metadata.fields; *******************************************************************************/ public abstract class QSupplementalFieldMetaData { - protected String type; - - /******************************************************************************* ** Getter for type *******************************************************************************/ - public String getType() - { - return (this.type); - } - - - - /******************************************************************************* - ** Setter for type - *******************************************************************************/ - public void setType(String type) - { - this.type = type; - } - - - - /******************************************************************************* - ** Fluent setter for type - *******************************************************************************/ - public QSupplementalFieldMetaData withType(String type) - { - this.type = type; - return (this); - } + public abstract String getType(); } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendTableMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendTableMetaData.java index e524a970..5ef98ebc 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendTableMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/frontend/QFrontendTableMetaData.java @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonInclude; @@ -41,6 +42,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability; import com.kingsrook.qqq.backend.core.model.metadata.tables.ExposedJoin; import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QSupplementalTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.utils.CollectionUtils; @@ -57,15 +59,13 @@ public class QFrontendTableMetaData private String label; private boolean isHidden; private String primaryKeyField; + private String iconName; - private String iconName; - - private Map fields; - private List sections; - - private List exposedJoins; - - private Set capabilities; + private Map fields; + private List sections; + private List exposedJoins; + private Map supplementalTableMetaData; + private Set capabilities; private boolean readPermission; private boolean insertPermission; @@ -81,13 +81,13 @@ public class QFrontendTableMetaData /******************************************************************************* ** *******************************************************************************/ - public QFrontendTableMetaData(AbstractActionInput actionInput, QBackendMetaData backendForTable, QTableMetaData tableMetaData, boolean includeFields, boolean includeJoins) + public QFrontendTableMetaData(AbstractActionInput actionInput, QBackendMetaData backendForTable, QTableMetaData tableMetaData, boolean includeFullMetaData, boolean includeJoins) { this.name = tableMetaData.getName(); this.label = tableMetaData.getLabel(); this.isHidden = tableMetaData.getIsHidden(); - if(includeFields) + if(includeFullMetaData) { this.primaryKeyField = tableMetaData.getPrimaryKeyField(); this.fields = new HashMap<>(); @@ -116,7 +116,7 @@ public class QFrontendTableMetaData QTableMetaData joinTable = qInstance.getTable(exposedJoin.getJoinTable()); frontendExposedJoin.setLabel(exposedJoin.getLabel()); frontendExposedJoin.setIsMany(exposedJoin.getIsMany()); - frontendExposedJoin.setJoinTable(new QFrontendTableMetaData(actionInput, backendForTable, joinTable, includeFields, false)); + frontendExposedJoin.setJoinTable(new QFrontendTableMetaData(actionInput, backendForTable, joinTable, includeFullMetaData, false)); for(String joinName : exposedJoin.getJoinPath()) { frontendExposedJoin.addJoin(qInstance.getJoin(joinName)); @@ -124,6 +124,28 @@ public class QFrontendTableMetaData } } + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + // include supplemental meta data, based on if it's meant for full or partial frontend meta-data requests // + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + for(QSupplementalTableMetaData supplementalTableMetaData : CollectionUtils.nonNullMap(tableMetaData.getSupplementalMetaData()).values()) + { + boolean include; + if(includeFullMetaData) + { + include = supplementalTableMetaData.includeInFullFrontendMetaData(); + } + else + { + include = supplementalTableMetaData.includeInPartialFrontendMetaData(); + } + + if(include) + { + this.supplementalTableMetaData = Objects.requireNonNullElseGet(this.supplementalTableMetaData, HashMap::new); + this.supplementalTableMetaData.put(supplementalTableMetaData.getType(), supplementalTableMetaData); + } + } + if(tableMetaData.getIcon() != null) { this.iconName = tableMetaData.getIcon().getName(); @@ -302,4 +324,15 @@ public class QFrontendTableMetaData { return exposedJoins; } + + + + /******************************************************************************* + ** Getter for supplementalTableMetaData + ** + *******************************************************************************/ + public Map getSupplementalTableMetaData() + { + return supplementalTableMetaData; + } } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QSupplementalProcessMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QSupplementalProcessMetaData.java index 0a5dce8b..55d62122 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QSupplementalProcessMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QSupplementalProcessMetaData.java @@ -33,38 +33,12 @@ import com.kingsrook.qqq.backend.core.model.metadata.QInstance; *******************************************************************************/ public abstract class QSupplementalProcessMetaData { - protected String type; - /******************************************************************************* ** Getter for type *******************************************************************************/ - public String getType() - { - return (this.type); - } - - - - /******************************************************************************* - ** Setter for type - *******************************************************************************/ - public void setType(String type) - { - this.type = type; - } - - - - /******************************************************************************* - ** Fluent setter for type - *******************************************************************************/ - public QSupplementalProcessMetaData withType(String type) - { - this.type = type; - return (this); - } + public abstract String getType(); diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QSupplementalTableMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QSupplementalTableMetaData.java index 1fb759db..d4bc6baf 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QSupplementalTableMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QSupplementalTableMetaData.java @@ -28,38 +28,32 @@ package com.kingsrook.qqq.backend.core.model.metadata.tables; *******************************************************************************/ public abstract class QSupplementalTableMetaData { - protected String type; + + + /******************************************************************************* + ** + *******************************************************************************/ + public boolean includeInPartialFrontendMetaData() + { + return (false); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public boolean includeInFullFrontendMetaData() + { + return (false); + } /******************************************************************************* ** Getter for type *******************************************************************************/ - public String getType() - { - return (this.type); - } - - - - /******************************************************************************* - ** Setter for type - *******************************************************************************/ - public void setType(String type) - { - this.type = type; - } - - - - /******************************************************************************* - ** Fluent setter for type - *******************************************************************************/ - public QSupplementalTableMetaData withType(String type) - { - this.type = type; - return (this); - } + public abstract String getType(); diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/ApiInstanceMetaDataContainer.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/ApiInstanceMetaDataContainer.java index cbb7aabd..71fcac0a 100644 --- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/ApiInstanceMetaDataContainer.java +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/ApiInstanceMetaDataContainer.java @@ -46,7 +46,6 @@ public class ApiInstanceMetaDataContainer extends QSupplementalInstanceMetaData *******************************************************************************/ public ApiInstanceMetaDataContainer() { - setType(ApiSupplementType.NAME); } @@ -61,6 +60,17 @@ public class ApiInstanceMetaDataContainer extends QSupplementalInstanceMetaData + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public String getType() + { + return (ApiSupplementType.NAME); + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/fields/ApiFieldMetaDataContainer.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/fields/ApiFieldMetaDataContainer.java index fa9fe94a..4b00cef0 100644 --- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/fields/ApiFieldMetaDataContainer.java +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/fields/ApiFieldMetaDataContainer.java @@ -40,13 +40,13 @@ public class ApiFieldMetaDataContainer extends QSupplementalFieldMetaData private ApiFieldMetaData defaultApiFieldMetaData; + /******************************************************************************* ** Constructor ** *******************************************************************************/ public ApiFieldMetaDataContainer() { - setType("api"); } @@ -162,4 +162,14 @@ public class ApiFieldMetaDataContainer extends QSupplementalFieldMetaData return (this); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public String getType() + { + return (ApiSupplementType.NAME); + } } diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/processes/ApiProcessMetaDataContainer.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/processes/ApiProcessMetaDataContainer.java index 496e8ea0..6463a398 100644 --- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/processes/ApiProcessMetaDataContainer.java +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/processes/ApiProcessMetaDataContainer.java @@ -48,7 +48,6 @@ public class ApiProcessMetaDataContainer extends QSupplementalProcessMetaData *******************************************************************************/ public ApiProcessMetaDataContainer() { - setType(ApiSupplementType.NAME); } @@ -80,6 +79,17 @@ public class ApiProcessMetaDataContainer extends QSupplementalProcessMetaData + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public String getType() + { + return (ApiSupplementType.NAME); + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/tables/ApiTableMetaDataContainer.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/tables/ApiTableMetaDataContainer.java index 8dd779fc..211a68db 100644 --- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/tables/ApiTableMetaDataContainer.java +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/model/metadata/tables/ApiTableMetaDataContainer.java @@ -40,12 +40,11 @@ public class ApiTableMetaDataContainer extends QSupplementalTableMetaData /******************************************************************************* - ** Constructor ** *******************************************************************************/ - public ApiTableMetaDataContainer() + public static ApiTableMetaDataContainer of(QTableMetaData table) { - setType("api"); + return ((ApiTableMetaDataContainer) table.getSupplementalMetaData(ApiSupplementType.NAME)); } @@ -53,9 +52,9 @@ public class ApiTableMetaDataContainer extends QSupplementalTableMetaData /******************************************************************************* ** *******************************************************************************/ - public static ApiTableMetaDataContainer of(QTableMetaData table) + public String getType() { - return ((ApiTableMetaDataContainer) table.getSupplementalMetaData(ApiSupplementType.NAME)); + return (ApiSupplementType.NAME); }