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);