You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by jk...@apache.org on 2021/08/16 09:42:29 UTC

[unomi] branch unomi-1.6.x updated: UNOMI-502: do not validate disabled segments/scoring to be able to save incomplete objects (only in case they are disabled) (#330)

This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch unomi-1.6.x
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/unomi-1.6.x by this push:
     new 06e9c69  UNOMI-502: do not validate disabled segments/scoring to be able to save incomplete objects (only in case they are disabled) (#330)
06e9c69 is described below

commit 06e9c69c3dcb8d7f99bcdb60277bfad6dd66bb1c
Author: kevan Jahanshahi <ke...@jahia.com>
AuthorDate: Mon Aug 16 11:41:31 2021 +0200

    UNOMI-502: do not validate disabled segments/scoring to be able to save incomplete objects (only in case they are disabled) (#330)
---
 .../java/org/apache/unomi/itests/SegmentIT.java    | 12 +++++++
 .../services/impl/segments/SegmentServiceImpl.java | 42 ++++++++++++----------
 2 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java b/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java
index bc05a24..207bd93 100644
--- a/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java
@@ -93,6 +93,18 @@ public class SegmentIT extends BaseIT {
         segmentService.setSegmentDefinition(segment);
     }
 
+    @Test
+    public void testSegmentWithNullConditionButDisabled() {
+        Metadata segmentMetadata = new Metadata(SEGMENT_ID);
+        segmentMetadata.setEnabled(false);
+        Segment segment = new Segment();
+        segment.setMetadata(segmentMetadata);
+        segment.setCondition(null);
+
+        segmentService.setSegmentDefinition(segment);
+        segmentService.removeSegmentDefinition(SEGMENT_ID, false);
+    }
+
     @Test(expected = BadSegmentConditionException.class)
     public void testSegmentWithInValidCondition() {
         Metadata segmentMetadata = new Metadata(SEGMENT_ID);
diff --git a/services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java
index afe551f..1dc599d 100644
--- a/services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/segments/SegmentServiceImpl.java
@@ -254,28 +254,32 @@ public class SegmentServiceImpl extends AbstractServiceImpl implements SegmentSe
     private List<Segment> getAllSegmentDefinitions() {
         List<Segment> allItems = persistenceService.getAllItems(Segment.class);
         for (Segment segment : allItems) {
-            ParserHelper.resolveConditionType(definitionsService, segment.getCondition(), "segment " + segment.getItemId());
+            if (segment.getMetadata().isEnabled()) {
+                ParserHelper.resolveConditionType(definitionsService, segment.getCondition(), "segment " + segment.getItemId());
+            }
         }
         return allItems;
     }
 
     public Segment getSegmentDefinition(String segmentId) {
         Segment definition = persistenceService.load(segmentId, Segment.class);
-        if (definition != null) {
+        if (definition != null && definition.getMetadata().isEnabled()) {
             ParserHelper.resolveConditionType(definitionsService, definition.getCondition(), "segment " + segmentId);
         }
         return definition;
     }
 
     public void setSegmentDefinition(Segment segment) {
-        ParserHelper.resolveConditionType(definitionsService, segment.getCondition(), "segment " + segment.getItemId());
-        if (!persistenceService.isValidCondition(segment.getCondition(), new Profile(VALIDATION_PROFILE_ID))) {
-            throw new BadSegmentConditionException();
+        if (segment.getMetadata().isEnabled()) {
+            ParserHelper.resolveConditionType(definitionsService, segment.getCondition(), "segment " + segment.getItemId());
+            if (!persistenceService.isValidCondition(segment.getCondition(), new Profile(VALIDATION_PROFILE_ID))) {
+                throw new BadSegmentConditionException();
+            }
+            if (!segment.getMetadata().isMissingPlugins()) {
+                updateAutoGeneratedRules(segment.getMetadata(), segment.getCondition());
+            }
         }
 
-        if (segment.getMetadata().isEnabled() && !segment.getMetadata().isMissingPlugins()) {
-            updateAutoGeneratedRules(segment.getMetadata(), segment.getCondition());
-        }
         // make sure we update the name and description metadata that might not match, so first we remove the entry from the map
         persistenceService.save(segment, null, true);
         updateExistingProfilesForSegment(segment);
@@ -524,7 +528,7 @@ public class SegmentServiceImpl extends AbstractServiceImpl implements SegmentSe
 
         List<Segment> allSegments = this.allSegments;
         for (Segment segment : allSegments) {
-            if (persistenceService.testMatch(segment.getCondition(), profile)) {
+            if (segment.getMetadata().isEnabled() && persistenceService.testMatch(segment.getCondition(), profile)) {
                 metadatas.add(segment.getMetadata());
             }
         }
@@ -543,8 +547,10 @@ public class SegmentServiceImpl extends AbstractServiceImpl implements SegmentSe
     private List<Scoring> getAllScoringDefinitions() {
         List<Scoring> allItems = persistenceService.getAllItems(Scoring.class);
         for (Scoring scoring : allItems) {
-            for (ScoringElement element : scoring.getElements()) {
-                ParserHelper.resolveConditionType(definitionsService, element.getCondition(), "scoring " + scoring.getItemId());
+            if (scoring.getMetadata().isEnabled()) {
+                for (ScoringElement element : scoring.getElements()) {
+                    ParserHelper.resolveConditionType(definitionsService, element.getCondition(), "scoring " + scoring.getItemId());
+                }
             }
         }
         return allItems;
@@ -552,7 +558,7 @@ public class SegmentServiceImpl extends AbstractServiceImpl implements SegmentSe
 
     public Scoring getScoringDefinition(String scoringId) {
         Scoring definition = persistenceService.load(scoringId, Scoring.class);
-        if (definition != null) {
+        if (definition != null && definition.getMetadata().isEnabled()) {
             for (ScoringElement element : definition.getElements()) {
                 ParserHelper.resolveConditionType(definitionsService, element.getCondition(), "scoring " + scoringId);
             }
@@ -561,12 +567,12 @@ public class SegmentServiceImpl extends AbstractServiceImpl implements SegmentSe
     }
 
     public void setScoringDefinition(Scoring scoring) {
-        for (ScoringElement element : scoring.getElements()) {
-            ParserHelper.resolveConditionType(definitionsService, element.getCondition(), "scoring " + scoring.getItemId() + " element ");
-        }
-        for (ScoringElement element : scoring.getElements()) {
-            if (scoring.getMetadata().isEnabled() && !scoring.getMetadata().isMissingPlugins()) {
-                updateAutoGeneratedRules(scoring.getMetadata(), element.getCondition());
+        if (scoring.getMetadata().isEnabled()) {
+            for (ScoringElement element : scoring.getElements()) {
+                ParserHelper.resolveConditionType(definitionsService, element.getCondition(), "scoring " + scoring.getItemId() + " element ");
+                if (!scoring.getMetadata().isMissingPlugins()) {
+                    updateAutoGeneratedRules(scoring.getMetadata(), element.getCondition());
+                }
             }
         }
         // make sure we update the name and description metadata that might not match, so first we remove the entry from the map