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 6895a258..ba2d7165 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 @@ -55,6 +55,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueB import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QSupplementalFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData; import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppChildMetaData; import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; @@ -582,6 +583,14 @@ public class QInstanceEnricher } } + //////////////////////////////////////////////////// + // enrich any supplemental meta data on the field // + //////////////////////////////////////////////////// + for(QSupplementalFieldMetaData supplementalFieldMetaData : CollectionUtils.nonNullMap(field.getSupplementalMetaData()).values()) + { + supplementalFieldMetaData.enrich(qInstance, field); + } + runPlugins(QFieldMetaData.class, field, qInstance); } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceValidator.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceValidator.java index 8f7793ef..e578d570 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceValidator.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QInstanceValidator.java @@ -72,6 +72,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType; import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment; import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldBehavior; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QSupplementalFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinOn; import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinType; @@ -1148,6 +1149,21 @@ public class QInstanceValidator } } } + + validateFieldSupplementalMetaData(field, qInstance); + } + + + + /*************************************************************************** + ** + ***************************************************************************/ + public void validateFieldSupplementalMetaData(QFieldMetaData field, QInstance qInstance) + { + for(QSupplementalFieldMetaData supplementalFieldMetaData : CollectionUtils.nonNullMap(field.getSupplementalMetaData()).values()) + { + supplementalFieldMetaData.validate(qInstance, field, this); + } } @@ -1701,6 +1717,8 @@ public class QInstanceValidator validateSimpleCodeReference("Process " + processName + " code reference:", codeReference, expectedClass); } + + validateFieldSupplementalMetaData(fieldMetaData, qInstance); } } } @@ -2238,8 +2256,7 @@ public class QInstanceValidator /******************************************************************************* ** *******************************************************************************/ - @SafeVarargs - private void validateSimpleCodeReference(String prefix, QCodeReference codeReference, Class... anyOfExpectedClasses) + public void validateSimpleCodeReference(String prefix, QCodeReference codeReference, Class... anyOfExpectedClasses) { if(!preAssertionsForCodeReference(codeReference, prefix)) { 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 02b1fe02..c683a5bf 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 @@ -22,6 +22,10 @@ package com.kingsrook.qqq.backend.core.model.metadata.fields; +import com.kingsrook.qqq.backend.core.instances.QInstanceValidator; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; + + /******************************************************************************* ** Base-class for field-level meta-data defined by some supplemental module, etc, ** outside of qqq core @@ -29,9 +33,43 @@ package com.kingsrook.qqq.backend.core.model.metadata.fields; public abstract class QSupplementalFieldMetaData { + /******************************************************************************* + ** + *******************************************************************************/ + public boolean includeInFrontendMetaData() + { + return (false); + } + + + /******************************************************************************* ** Getter for type *******************************************************************************/ public abstract String getType(); + + + /*************************************************************************** + ** + ***************************************************************************/ + public void enrich(QInstance qInstance, QFieldMetaData fieldMetaData) + { + //////////////////////// + // noop in base class // + //////////////////////// + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public void validate(QInstance qInstance, QFieldMetaData fieldMetaData, QInstanceValidator qInstanceValidator) + { + //////////////////////// + // noop in base class // + //////////////////////// + } + }