From c07c007bc2f738f29e1ceebd848d9d6f1154114b Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 16 Jun 2023 08:37:01 -0500 Subject: [PATCH] Add capability: QUERY_STATS; rework capabilities to be smarter w/ enable, then disable --- .../core/model/metadata/QBackendMetaData.java | 39 +++++++++++++------ .../model/metadata/tables/Capability.java | 3 +- .../model/metadata/tables/QTableMetaData.java | 34 +++++++++++----- .../metadata/tables/QTableMetaDataTest.java | 10 +++++ 4 files changed, 64 insertions(+), 22 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QBackendMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QBackendMetaData.java index ef534824..543318a7 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QBackendMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QBackendMetaData.java @@ -22,7 +22,6 @@ package com.kingsrook.qqq.backend.core.model.metadata; -import java.util.Arrays; import java.util.HashSet; import java.util.Set; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -59,6 +58,10 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData() { + ///////////////////////////////////////////////////////////////////////////// + // by default, we will turn off the query stats capability on all backends // + ///////////////////////////////////////////////////////////////////////////// + withoutCapability(Capability.QUERY_STATS); } @@ -199,6 +202,10 @@ public class QBackendMetaData public void setEnabledCapabilities(Set enabledCapabilities) { this.enabledCapabilities = enabledCapabilities; + if(this.disabledCapabilities != null) + { + this.disabledCapabilities.removeAll(enabledCapabilities); + } } @@ -209,7 +216,7 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData withEnabledCapabilities(Set enabledCapabilities) { - this.enabledCapabilities = enabledCapabilities; + setEnabledCapabilities(enabledCapabilities); return (this); } @@ -221,7 +228,10 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData withCapabilities(Set enabledCapabilities) { - this.enabledCapabilities = enabledCapabilities; + for(Capability enabledCapability : enabledCapabilities) + { + withCapability(enabledCapability); + } return (this); } @@ -238,6 +248,7 @@ public class QBackendMetaData this.enabledCapabilities = new HashSet<>(); } this.enabledCapabilities.add(capability); + this.disabledCapabilities.remove(capability); return (this); } @@ -249,11 +260,10 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData withCapabilities(Capability... enabledCapabilities) { - if(this.enabledCapabilities == null) + for(Capability enabledCapability : enabledCapabilities) { - this.enabledCapabilities = new HashSet<>(); + withCapability(enabledCapability); } - this.enabledCapabilities.addAll(Arrays.stream(enabledCapabilities).toList()); return (this); } @@ -277,6 +287,10 @@ public class QBackendMetaData public void setDisabledCapabilities(Set disabledCapabilities) { this.disabledCapabilities = disabledCapabilities; + if(this.enabledCapabilities != null) + { + this.enabledCapabilities.removeAll(disabledCapabilities); + } } @@ -287,7 +301,7 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData withDisabledCapabilities(Set disabledCapabilities) { - this.disabledCapabilities = disabledCapabilities; + setDisabledCapabilities(disabledCapabilities); return (this); } @@ -299,11 +313,10 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData withoutCapabilities(Capability... disabledCapabilities) { - if(this.disabledCapabilities == null) + for(Capability disabledCapability : disabledCapabilities) { - this.disabledCapabilities = new HashSet<>(); + withoutCapability(disabledCapability); } - this.disabledCapabilities.addAll(Arrays.stream(disabledCapabilities).toList()); return (this); } @@ -315,7 +328,10 @@ public class QBackendMetaData *******************************************************************************/ public QBackendMetaData withoutCapabilities(Set disabledCapabilities) { - this.disabledCapabilities = disabledCapabilities; + for(Capability disabledCapability : disabledCapabilities) + { + withCapability(disabledCapability); + } return (this); } @@ -332,6 +348,7 @@ public class QBackendMetaData this.disabledCapabilities = new HashSet<>(); } this.disabledCapabilities.add(capability); + this.enabledCapabilities.remove(capability); return (this); } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/Capability.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/Capability.java index cc0b8f56..e5e39c73 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/Capability.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/Capability.java @@ -33,9 +33,10 @@ public enum Capability TABLE_COUNT, TABLE_INSERT, TABLE_UPDATE, - TABLE_DELETE + TABLE_DELETE, /////////////////////////////////////////////////////////////////////// // keep these values in sync with Capability.ts in qqq-frontend-core // /////////////////////////////////////////////////////////////////////// + QUERY_STATS } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaData.java index cba66e16..76a93b41 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaData.java @@ -862,6 +862,10 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData public void setEnabledCapabilities(Set enabledCapabilities) { this.enabledCapabilities = enabledCapabilities; + if(this.disabledCapabilities != null) + { + this.disabledCapabilities.removeAll(enabledCapabilities); + } } @@ -872,7 +876,7 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData *******************************************************************************/ public QTableMetaData withEnabledCapabilities(Set enabledCapabilities) { - this.enabledCapabilities = enabledCapabilities; + setEnabledCapabilities(enabledCapabilities); return (this); } @@ -884,7 +888,10 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData *******************************************************************************/ public QTableMetaData withCapabilities(Set enabledCapabilities) { - this.enabledCapabilities = enabledCapabilities; + for(Capability enabledCapability : enabledCapabilities) + { + withCapability(enabledCapability); + } return (this); } @@ -901,6 +908,7 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData this.enabledCapabilities = new HashSet<>(); } this.enabledCapabilities.add(capability); + this.disabledCapabilities.remove(capability); return (this); } @@ -912,11 +920,10 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData *******************************************************************************/ public QTableMetaData withCapabilities(Capability... enabledCapabilities) { - if(this.enabledCapabilities == null) + for(Capability enabledCapability : enabledCapabilities) { - this.enabledCapabilities = new HashSet<>(); + withCapability(enabledCapability); } - this.enabledCapabilities.addAll(Arrays.stream(enabledCapabilities).toList()); return (this); } @@ -940,6 +947,10 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData public void setDisabledCapabilities(Set disabledCapabilities) { this.disabledCapabilities = disabledCapabilities; + if(this.enabledCapabilities != null) + { + this.enabledCapabilities.removeAll(disabledCapabilities); + } } @@ -950,7 +961,7 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData *******************************************************************************/ public QTableMetaData withDisabledCapabilities(Set disabledCapabilities) { - this.disabledCapabilities = disabledCapabilities; + setDisabledCapabilities(disabledCapabilities); return (this); } @@ -962,11 +973,10 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData *******************************************************************************/ public QTableMetaData withoutCapabilities(Capability... disabledCapabilities) { - if(this.disabledCapabilities == null) + for(Capability disabledCapability : disabledCapabilities) { - this.disabledCapabilities = new HashSet<>(); + withoutCapability(disabledCapability); } - this.disabledCapabilities.addAll(Arrays.stream(disabledCapabilities).toList()); return (this); } @@ -978,7 +988,10 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData *******************************************************************************/ public QTableMetaData withoutCapabilities(Set disabledCapabilities) { - this.disabledCapabilities = disabledCapabilities; + for(Capability disabledCapability : disabledCapabilities) + { + withCapability(disabledCapability); + } return (this); } @@ -995,6 +1008,7 @@ public class QTableMetaData implements QAppChildMetaData, Serializable, MetaData this.disabledCapabilities = new HashSet<>(); } this.disabledCapabilities.add(capability); + this.enabledCapabilities.remove(capability); return (this); } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaDataTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaDataTest.java index f663e637..1b3f513e 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaDataTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/tables/QTableMetaDataTest.java @@ -69,6 +69,16 @@ class QTableMetaDataTest extends BaseTest // table:false & backend:false = false assertFalse(new QTableMetaData().withoutCapability(capability).isCapabilityEnabled(new QBackendMetaData().withoutCapability(capability), capability)); + + // backend false, but then true = true + assertTrue(new QTableMetaData().isCapabilityEnabled(new QBackendMetaData().withoutCapability(capability).withCapability(capability), capability)); + + // backend true, but then false = false + assertFalse(new QTableMetaData().isCapabilityEnabled(new QBackendMetaData().withCapability(capability).withoutCapability(capability), capability)); + + // table true, but then false = true + assertFalse(new QTableMetaData().withCapability(capability).withoutCapability(capability).isCapabilityEnabled(new QBackendMetaData(), capability)); + } } \ No newline at end of file