From 38293b81d7c5b4c9cc2118c0bab7f378c8aef0e9 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Thu, 23 Jan 2025 09:35:55 -0600 Subject: [PATCH] Switch QSupplementalInstanceMetaData to interface instead of abstract class; remove `getType` in favor of `getName` from its base class, TopLevelMetaDataInterface; --- .../core/model/metadata/QInstance.java | 2 +- .../QSupplementalInstanceMetaData.java | 40 ++++++++++++++----- .../ApiInstanceMetaDataContainer.java | 13 +----- 3 files changed, 31 insertions(+), 24 deletions(-) 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 a61971c8..adf62201 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 @@ -1245,7 +1245,7 @@ public class QInstance { this.supplementalMetaData = new HashMap<>(); } - this.supplementalMetaData.put(supplementalMetaData.getType(), supplementalMetaData); + this.supplementalMetaData.put(supplementalMetaData.getName(), supplementalMetaData); return (this); } 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 28ce1d40..c6acf7a8 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 @@ -22,6 +22,7 @@ package com.kingsrook.qqq.backend.core.model.metadata; +import java.util.function.Supplier; import com.kingsrook.qqq.backend.core.instances.QInstanceValidator; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; @@ -30,20 +31,13 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; ** Base-class for instance-level meta-data defined by some supplemental module, etc, ** outside of qqq core *******************************************************************************/ -public abstract class QSupplementalInstanceMetaData implements TopLevelMetaDataInterface +public interface QSupplementalInstanceMetaData extends TopLevelMetaDataInterface { - /******************************************************************************* - ** Getter for type - *******************************************************************************/ - public abstract String getType(); - - - /******************************************************************************* ** *******************************************************************************/ - public void enrich(QTableMetaData table) + default void enrich(QTableMetaData table) { //////////////////////// // noop in base class // @@ -55,7 +49,7 @@ public abstract class QSupplementalInstanceMetaData implements TopLevelMetaDataI /******************************************************************************* ** *******************************************************************************/ - public void validate(QInstance qInstance, QInstanceValidator validator) + default void validate(QInstance qInstance, QInstanceValidator validator) { //////////////////////// // noop in base class // @@ -68,9 +62,33 @@ public abstract class QSupplementalInstanceMetaData implements TopLevelMetaDataI ** *******************************************************************************/ @Override - public void addSelfToInstance(QInstance qInstance) + default void addSelfToInstance(QInstance qInstance) { qInstance.withSupplementalMetaData(this); } + + /*************************************************************************** + ** + ***************************************************************************/ + static S of(QInstance qInstance, String name) + { + return ((S) qInstance.getSupplementalMetaData(name)); + } + + + /*************************************************************************** + ** + ***************************************************************************/ + static S ofOrWithNew(QInstance qInstance, String name, Supplier supplier) + { + S s = (S) qInstance.getSupplementalMetaData(name); + if(s == null) + { + s = supplier.get(); + s.addSelfToInstance(qInstance); + } + return (s); + } + } 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 2ea76133..767d2669 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 @@ -34,7 +34,7 @@ import com.kingsrook.qqq.backend.core.utils.CollectionUtils; /******************************************************************************* ** *******************************************************************************/ -public class ApiInstanceMetaDataContainer extends QSupplementalInstanceMetaData +public class ApiInstanceMetaDataContainer implements QSupplementalInstanceMetaData { private Map apis; @@ -71,17 +71,6 @@ public class ApiInstanceMetaDataContainer extends QSupplementalInstanceMetaData - /******************************************************************************* - ** - *******************************************************************************/ - @Override - public String getType() - { - return (ApiSupplementType.NAME); - } - - - /******************************************************************************* ** *******************************************************************************/