Author: kwin
Date: Thu Mar  2 16:03:11 2017
New Revision: 1785155

URL: http://svn.apache.org/viewvc?rev=1785155&view=rev
Log:
convert applicable paths from an array to a collection and add some more tests 
around it

Modified:
    
sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/ValidationModel.java
    
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/MergedValidationModel.java
    
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelBuilder.java
    
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelImpl.java
    
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
    
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/model/MergedValidationModelTest.java
    
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java

Modified: 
sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/ValidationModel.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/ValidationModel.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/ValidationModel.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/ValidationModel.java
 Thu Mar  2 16:03:11 2017
@@ -50,9 +50,9 @@ public interface ValidationModel {
      * Might return a single element array containing only the empty string, 
      * in which case the validation model has no path restriction.
      *
-     * @return a path array. Is never {@code null} nor an empty array
+     * @return a path array. Is never {@code null} nor an empty collection.
      */
-    @Nonnull String[] getApplicablePaths();
+    @Nonnull Collection<String> getApplicablePaths();
 
     /**
      * Returns the expected children for a resource validated by this model.
@@ -60,7 +60,7 @@ public interface ValidationModel {
      * @return the children list (can be empty if there are no children), 
never {@code null}
      */
     @Nonnull Collection<ChildResource> getChildren();
-    
+
     /**
      * 
      * @return a string indicating the original source of this validation 
model, e.g. a resource path

Modified: 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/MergedValidationModel.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/MergedValidationModel.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/MergedValidationModel.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/MergedValidationModel.java
 Thu Mar  2 16:03:11 2017
@@ -73,7 +73,7 @@ public class MergedValidationModel imple
             // throw exception if the applicable path is restricted in the 
modelToMerge in comparison to baseModel
             for (String path : modelToMerge.getApplicablePaths()) {
                 if (isPathRestricted(path, baseModel.getApplicablePaths())) {
-                    String msg = String.format("The path '%s' from one of the 
models to merge is more specific than any of the base paths (%s)", path, 
Arrays.toString(baseModel.getApplicablePaths()));
+                    String msg = String.format("The path '%s' from one of the 
models to merge is more specific than any of the base paths (%s)", path, 
baseModel.getApplicablePaths());
                     throw new IllegalArgumentException(msg);
                 }
             }
@@ -88,7 +88,7 @@ public class MergedValidationModel imple
      * @param pathsToCompareWith
      * @return {@code true} in case the given path is either more specific or 
not at all overlapping with one of the pathsToCompareWith
      */
-    private boolean isPathRestricted(String path, String[] pathsToCompareWith) 
{
+    private boolean isPathRestricted(String path, Collection<String> 
pathsToCompareWith) {
         for (String basePath : pathsToCompareWith) {
             if (basePath.startsWith(path)) {
                 return false;
@@ -111,7 +111,7 @@ public class MergedValidationModel imple
 
     @Override
     @Nonnull
-    public String[] getApplicablePaths() {
+    public Collection<String> getApplicablePaths() {
         return baseModel.getApplicablePaths();
     }
 

Modified: 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelBuilder.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelBuilder.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelBuilder.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelBuilder.java
 Thu Mar  2 16:03:11 2017
@@ -20,9 +20,7 @@ package org.apache.sling.validation.impl
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import javax.annotation.Nonnull;
 
@@ -38,7 +36,7 @@ public class ValidationModelBuilder {
 
     private final @Nonnull List<ResourceProperty> resourceProperties;
     private final @Nonnull List<ChildResource> children;
-    private final Collection<String> applicablePaths;
+    private final @Nonnull Collection<String> applicablePaths;
     
     public ValidationModelBuilder() {
         resourceProperties = new ArrayList<ResourceProperty>();
@@ -85,6 +83,6 @@ public class ValidationModelBuilder {
     }
     
     public @Nonnull ValidationModel build(@Nonnull String 
validatedResourceType, @Nonnull String source) {
-        return new ValidationModelImpl(resourceProperties, 
validatedResourceType, applicablePaths.toArray(new String[0]), children, 
source);
+        return new ValidationModelImpl(resourceProperties, 
validatedResourceType, applicablePaths, children, source);
     }
 }

Modified: 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelImpl.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelImpl.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/model/ValidationModelImpl.java
 Thu Mar  2 16:03:11 2017
@@ -18,12 +18,13 @@
  */
 package org.apache.sling.validation.impl.model;
 
-import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.Nonnull;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.validation.model.ChildResource;
 import org.apache.sling.validation.model.ResourceProperty;
 import org.apache.sling.validation.model.ValidationModel;
@@ -32,12 +33,13 @@ public class ValidationModelImpl impleme
 
     private final @Nonnull List<ResourceProperty> resourceProperties;
     private final @Nonnull String validatedResourceType;
-    private final @Nonnull String[] applicablePaths;
+    private final @Nonnull Collection<String> applicablePaths;
     private final @Nonnull List<ChildResource> children;
     private final @Nonnull String source;
 
     /**
      * Only used from {@link ValidationModelBuilder}
+     * Copy all modifiable properties.
      * @param resourceProperties
      * @param validatedResourceType
      * @param applicablePaths
@@ -45,26 +47,20 @@ public class ValidationModelImpl impleme
      * @param source a string identifying the model's source (e.g. a resource 
path)
      */
     ValidationModelImpl(@Nonnull List<ResourceProperty> resourceProperties, 
@Nonnull String validatedResourceType,
-                              String[] applicablePaths, @Nonnull 
List<ChildResource> children, @Nonnull String source) {
-        this.resourceProperties = resourceProperties;
+                              Collection<String> applicablePaths, @Nonnull 
List<ChildResource> children, @Nonnull String source) {
+        this.resourceProperties = new ArrayList<>(resourceProperties);
         this.validatedResourceType = validatedResourceType;
         
         if (resourceProperties.isEmpty() && children.isEmpty()) {
             throw new IllegalStateException("Neither children nor properties 
set in validation model for " + validatedResourceType + "'");
         }
-        // if this property was not set or is an empty array...
-        if (applicablePaths == null || applicablePaths.length == 0) {
-            // ...set this to the empty string (which matches all paths)
-            this.applicablePaths = new String[] {""};
+        // if this collection is empty, make it contain on entry with the emty 
string (means no restriction)
+        if (applicablePaths.isEmpty()) {
+            this.applicablePaths = Collections.singletonList("");
         } else {
-            for (String applicablePath : applicablePaths) {
-                if (StringUtils.isBlank(applicablePath)) {
-                    throw new IllegalStateException("applicablePaths may not 
contain empty values in validation model for " + validatedResourceType + "'");
-                }
-            }
-            this.applicablePaths = applicablePaths;
+            this.applicablePaths = new ArrayList<>(applicablePaths);
         }
-        this.children = children;
+        this.children = new ArrayList<>(children);
         this.source = source;
     }
 
@@ -79,7 +75,7 @@ public class ValidationModelImpl impleme
     }
 
     @Override
-    public @Nonnull String[] getApplicablePaths() {
+    public @Nonnull Collection<String> getApplicablePaths() {
         return applicablePaths;
     }
 
@@ -96,14 +92,14 @@ public class ValidationModelImpl impleme
     @Override
     public String toString() {
         return "ValidationModelImpl [resourceProperties=" + resourceProperties 
+ ", validatedResourceType=" + validatedResourceType
-                + ", applicablePaths=" + Arrays.toString(applicablePaths) + ", 
children=" + children + ", source="+ source +"]";
+                + ", applicablePaths=" + applicablePaths + ", children=" + 
children + ", source="+ source +"]";
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Arrays.hashCode(applicablePaths);
+        result = prime * result + ((applicablePaths == null) ? 0 : 
applicablePaths.hashCode());
         result = prime * result + ((children == null) ? 0 : 
children.hashCode());
         result = prime * result + ((resourceProperties == null) ? 0 : 
resourceProperties.hashCode());
         result = prime * result + ((source == null) ? 0 : source.hashCode());
@@ -120,7 +116,7 @@ public class ValidationModelImpl impleme
         if (getClass() != obj.getClass())
             return false;
         ValidationModelImpl other = (ValidationModelImpl) obj;
-        if (!Arrays.equals(applicablePaths, other.applicablePaths))
+        if (!applicablePaths.equals(other.applicablePaths))
             return false;
         if (!children.equals(other.children))
             return false;

Modified: 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
 Thu Mar  2 16:03:11 2017
@@ -170,7 +170,7 @@ public class ValidationModelRetrieverImp
         ValidationModel model = validationModelRetriever.getModel("test/type", 
"/content/site1/subnode/test/somepage",
                 false);
         Assert.assertNotNull(model);
-        Assert.assertThat(Arrays.asList(model.getApplicablePaths()), 
Matchers.contains("/content/site1/subnode/test"));
+        Assert.assertThat(model.getApplicablePaths(), 
Matchers.contains("/content/site1/subnode/test"));
     }
 
     @Test
@@ -181,7 +181,7 @@ public class ValidationModelRetrieverImp
 
         ValidationModel model = validationModelRetriever.getModel("test/type", 
null, false);
         Assert.assertNotNull(model);
-        Assert.assertThat(Arrays.asList(model.getApplicablePaths()), 
Matchers.contains(""));
+        Assert.assertThat(model.getApplicablePaths(), Matchers.contains(""));
     }
 
     @Test

Modified: 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/model/MergedValidationModelTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/model/MergedValidationModelTest.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/model/MergedValidationModelTest.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/model/MergedValidationModelTest.java
 Thu Mar  2 16:03:11 2017
@@ -57,7 +57,7 @@ public class MergedValidationModelTest {
         ValidationModel baseValidationModel = modelBuilder.build("base", "some 
source");
         modelBuilder.setApplicablePath("/base");
         ValidationModel mergedModel = new 
MergedValidationModel(baseValidationModel, modelBuilder.build("superType", 
"some source"));
-        Assert.assertThat(Arrays.asList(mergedModel.getApplicablePaths()),
+        Assert.assertThat(mergedModel.getApplicablePaths(),
                 Matchers.contains("/base/path", "/base/path2"));
     }
 

Modified: 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java?rev=1785155&r1=1785154&r2=1785155&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
 (original)
+++ 
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
 Thu Mar  2 16:03:11 2017
@@ -237,6 +237,36 @@ public class ResourceValidationModelProv
     }
 
     @Test
+    public void testGetValidationModelsWithoutApplicablePath() throws 
Exception {
+        modelBuilder = new ValidationModelBuilder();
+        // build two models manually (which are identical except for the 
applicable path)
+        ResourcePropertyBuilder resourcePropertyBuilder = new 
ResourcePropertyBuilder();
+        ValidationModel model1 = 
modelBuilder.resourceProperty(resourcePropertyBuilder.build("property1")).build("sling/validation/test",
 libsValidatorsRoot.getPath() + "/testValidationModel1");
+        
+        // build models in JCR
+        createValidationModelResource(rr, libsValidatorsRoot.getPath(), 
"testValidationModel1", model1, true);
+        
+        // check that both models are returned
+        Collection<ValidationModel> models = 
modelProvider.getModels("sling/validation/test", validatorMap);
+        Assert.assertThat(models, Matchers.containsInAnyOrder(model1));
+    }
+    
+    @Test
+    public void testGetValidationModelsWithEmptyApplicablePath() throws 
Exception {
+        modelBuilder = new ValidationModelBuilder();
+        // build two models manually (which are identical except for the 
applicable path)
+        ResourcePropertyBuilder resourcePropertyBuilder = new 
ResourcePropertyBuilder();
+        ValidationModel model1 = 
modelBuilder.resourceProperty(resourcePropertyBuilder.build("property1")).build("sling/validation/test",
 libsValidatorsRoot.getPath() + "/testValidationModel1");
+        
+        // build models in JCR
+        createValidationModelResource(rr, libsValidatorsRoot.getPath(), 
"testValidationModel1", model1, false);
+        
+        // check that both models are returned
+        Collection<ValidationModel> models = 
modelProvider.getModels("sling/validation/test", validatorMap);
+        Assert.assertThat(models, Matchers.containsInAnyOrder(model1));
+    }
+    
+    @Test
     public void testGetValidationModelsOutsideSearchPath() throws Exception {
         // build two models manually (which are identical except for the 
applicable path)
         ValidationModel model1 = modelBuilder.build("sling/validation/test", 
"some source");
@@ -332,11 +362,17 @@ public class ResourceValidationModelProv
         Assert.assertEquals("Due to caching both models should be actually the 
same instance", System.identityHashCode(models), 
System.identityHashCode(models2));
     }
 
-    private Resource createValidationModelResource(ResourceResolver rr, String 
root, String name, ValidationModel model)
+    private Resource createValidationModelResource(ResourceResolver rr, String 
root, String name, ValidationModel model) throws Exception {
+        return createValidationModelResource(rr, root, name, model, false);
+    }
+
+    private Resource createValidationModelResource(ResourceResolver rr, String 
root, String name, ValidationModel model, boolean 
leaveOutApplicablePathProperty)
             throws Exception {
         Map<String, Object> modelProperties = new HashMap<String, Object>();
         
modelProperties.put(ResourceValidationModelProviderImpl.VALIDATED_RESOURCE_TYPE,
 model.getValidatedResourceType());
-        
modelProperties.put(ResourceValidationModelProviderImpl.APPLICABLE_PATHS, 
model.getApplicablePaths());
+        if (!leaveOutApplicablePathProperty) {
+            
modelProperties.put(ResourceValidationModelProviderImpl.APPLICABLE_PATHS, 
model.getApplicablePaths().toArray());
+        }
         modelProperties
                 .put(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, 
ResourceValidationModelProviderImpl.VALIDATION_MODEL_RESOURCE_TYPE);
         modelProperties.put(JcrConstants.JCR_PRIMARYTYPE, 
JcrConstants.NT_UNSTRUCTURED);


Reply via email to