You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2015/04/14 16:19:49 UTC
svn commit: r1673430 - in /sling/trunk/bundles/extensions/validation:
api/src/main/java/org/apache/sling/validation/api/ core/
core/src/main/java/org/apache/sling/validation/impl/
core/src/main/java/org/apache/sling/validation/impl/util/ core/src/main/...
Author: kwin
Date: Tue Apr 14 14:19:49 2015
New Revision: 1673430
URL: http://svn.apache.org/r1673430
Log:
SLING-4609 more null annotations
Modified:
sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java
sling/trunk/bundles/extensions/validation/core/pom.xml
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java
sling/trunk/bundles/extensions/validation/examples/pom.xml
sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp
Modified: sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java (original)
+++ sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java Tue Apr 14 14:19:49 2015
@@ -38,12 +38,12 @@ public interface ValidationService {
*
* @param validatedResourceType the type of {@code Resources} the model validates, should be either relative
* (i.e. not start with a "/") or starting with one of the resource resolver's search paths
- * @param applicablePath the model's applicable path (the path of the validated resource)
+ * @param resourcePath the path of the validated resource, may be {@code null} or empty. Must match the applicablePath property of the model
* @return a {@code ValidationModel} if one is found, {@code null} otherwise
* @throws IllegalStateException in case an invalid validation model was found
- * @throws IllegalArgumentException in case validatedResourceType was blank, {@code null} or absolute but outside of the search paths.
+ * @throws IllegalArgumentException in case validatedResourceType was blank, {@code null} or absolute but outside of the search paths
*/
- @CheckForNull ValidationModel getValidationModel(String validatedResourceType, String applicablePath) throws IllegalStateException, IllegalArgumentException;
+ @CheckForNull ValidationModel getValidationModel(@Nonnull String validatedResourceType, String resourcePath) throws IllegalStateException, IllegalArgumentException;
/**
* Tries to obtain a {@link ValidationModel} that is able to validate the given {@code resource}.
Modified: sling/trunk/bundles/extensions/validation/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/pom.xml?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/pom.xml (original)
+++ sling/trunk/bundles/extensions/validation/core/pom.xml Tue Apr 14 14:19:49 2015
@@ -69,6 +69,12 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ <version>3.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java Tue Apr 14 14:19:49 2015
@@ -6,6 +6,8 @@ import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.osgi.PropertiesUtil;
@@ -21,11 +23,11 @@ public class ChildResourceImpl implement
private final String name;
private final Pattern namePattern;
- private final Set<ResourceProperty> properties;
- private final List<ChildResource> children;
+ private final @Nonnull Set<ResourceProperty> properties;
+ private final @Nonnull List<ChildResource> children;
private final boolean isRequired;
- public ChildResourceImpl(Resource modelResource, Resource childResource, Map<String, Validator<?>> validatorsMap, List<ChildResource> children) {
+ public ChildResourceImpl(@Nonnull Resource modelResource, @Nonnull Resource childResource, @Nonnull Map<String, Validator<?>> validatorsMap, @Nonnull List<ChildResource> children) {
String root = modelResource.getPath();
if (!childResource.getPath().startsWith(root)) {
throw new IllegalArgumentException("Expected resource " + childResource.getPath() + " to be under root path " + root);
@@ -59,7 +61,7 @@ public class ChildResourceImpl implement
}
@Override
- public Set<ResourceProperty> getProperties() {
+ public @Nonnull Set<ResourceProperty> getProperties() {
return properties;
}
@@ -68,7 +70,7 @@ public class ChildResourceImpl implement
return namePattern;
}
- public List<ChildResource> getChildren() {
+ public @Nonnull List<ChildResource> getChildren() {
return children;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java Tue Apr 14 14:19:49 2015
@@ -21,6 +21,8 @@ package org.apache.sling.validation.impl
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.validation.api.ChildResource;
import org.apache.sling.validation.api.ResourceProperty;
@@ -28,14 +30,14 @@ import org.apache.sling.validation.api.V
public class JCRValidationModel implements ValidationModel {
- private Set<ResourceProperty> resourceProperties;
- private String validatedResourceType;
- private String[] applicablePaths;
- private String jcrPath;
- private List<ChildResource> children;
+ private final @Nonnull Set<ResourceProperty> resourceProperties;
+ private final @Nonnull String validatedResourceType;
+ private final @Nonnull String[] applicablePaths;
+ private final String jcrPath;
+ private final @Nonnull List<ChildResource> children;
- public JCRValidationModel(String jcrPath, Set<ResourceProperty> resourceProperties, String validatedResourceType,
- String[] applicablePaths, List<ChildResource> children) {
+ public JCRValidationModel(String jcrPath, @Nonnull Set<ResourceProperty> resourceProperties, @Nonnull String validatedResourceType,
+ String[] applicablePaths, @Nonnull List<ChildResource> children) {
this.jcrPath = jcrPath;
this.resourceProperties = resourceProperties;
this.validatedResourceType = validatedResourceType;
@@ -58,22 +60,22 @@ public class JCRValidationModel implemen
}
@Override
- public Set<ResourceProperty> getResourceProperties() {
+ public @Nonnull Set<ResourceProperty> getResourceProperties() {
return resourceProperties;
}
@Override
- public String getValidatedResourceType() {
+ public @Nonnull String getValidatedResourceType() {
return validatedResourceType;
}
@Override
- public String[] getApplicablePaths() {
+ public @Nonnull String[] getApplicablePaths() {
return applicablePaths;
}
@Override
- public List<ChildResource> getChildren() {
+ public @Nonnull List<ChildResource> getChildren() {
return children;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java Tue Apr 14 14:19:49 2015
@@ -1,16 +1,18 @@
package org.apache.sling.validation.impl;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.ParameterizedValidator;
import org.apache.sling.validation.api.Validator;
import org.apache.sling.validation.impl.util.ValidatorTypeUtil;
public class ParameterizedValidatorImpl implements ParameterizedValidator {
- private final Validator<?> validator;
- private final ValueMap parameters;
- private final Class<?> type;
+ private final @Nonnull Validator<?> validator;
+ private final @Nonnull ValueMap parameters;
+ private final @Nonnull Class<?> type;
- public ParameterizedValidatorImpl(Validator<?> validator, ValueMap parameters) {
+ public ParameterizedValidatorImpl(@Nonnull Validator<?> validator, @Nonnull ValueMap parameters) {
super();
this.validator = validator;
this.parameters = parameters;
@@ -22,7 +24,7 @@ public class ParameterizedValidatorImpl
* @see org.apache.sling.validation.impl.ParameterizedValidator#getValidator()
*/
@Override
- public Validator<?> getValidator() {
+ public @Nonnull Validator<?> getValidator() {
return validator;
}
@@ -30,7 +32,7 @@ public class ParameterizedValidatorImpl
* @see org.apache.sling.validation.impl.ParameterizedValidator#getParameters()
*/
@Override
- public ValueMap getParameters() {
+ public @Nonnull ValueMap getParameters() {
return parameters;
}
@@ -38,7 +40,7 @@ public class ParameterizedValidatorImpl
* @see org.apache.sling.validation.impl.ParameterizedValidator#getType()
*/
@Override
- public Class<?> getType() {
+ public @Nonnull Class<?> getType() {
return type;
}
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java Tue Apr 14 14:19:49 2015
@@ -21,18 +21,20 @@ package org.apache.sling.validation.impl
import java.util.List;
import java.util.regex.Pattern;
+import javax.annotation.Nonnull;
+
import org.apache.sling.validation.api.ParameterizedValidator;
import org.apache.sling.validation.api.ResourceProperty;
public class ResourcePropertyImpl implements ResourceProperty {
- private String name;
- private boolean isMultiple;
- private boolean isRequired;
- private List<ParameterizedValidator> validators;
- private Pattern namePattern;
+ private final String name;
+ private final boolean isMultiple;
+ private final boolean isRequired;
+ private final @Nonnull List<ParameterizedValidator> validators;
+ private final Pattern namePattern;
- public ResourcePropertyImpl(String name, String nameRegex, boolean isMultiple, boolean isRequired, List<ParameterizedValidator> validators) {
+ public ResourcePropertyImpl(String name, String nameRegex, boolean isMultiple, boolean isRequired, @Nonnull List<ParameterizedValidator> validators) {
if (nameRegex != null) {
this.name = null;
this.namePattern = Pattern.compile(nameRegex);
@@ -66,7 +68,7 @@ public class ResourcePropertyImpl implem
}
@Override
- public List<ParameterizedValidator> getValidators() {
+ public @Nonnull List<ParameterizedValidator> getValidators() {
return validators;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java Tue Apr 14 14:19:49 2015
@@ -22,6 +22,8 @@ import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.AbstractResourceVisitor;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.validation.api.ValidationModel;
@@ -31,7 +33,7 @@ public class ValidationResourceVisitor e
private final ValidationServiceImpl validationService;
private final boolean enforceValidation;
- private final ValidationResultImpl result;
+ private final @Nonnull ValidationResultImpl result;
private final Set<String> ignoredResourceTypes;
private final String rootResourcePath;
@@ -48,7 +50,8 @@ public class ValidationResourceVisitor e
protected void visit(Resource resource) {
if (isValidSubResource(resource)) {
// JCR will return then primary type instead!!
- ValidationModel model = validationService.getValidationModel(resource);
+ @SuppressWarnings("null")
+ ValidationModel model = validationService.getValidationModel(resource);
if (model == null) {
if (enforceValidation) {
throw new IllegalArgumentException("No model for resource type " + resource.getResourceType() + " found.");
@@ -86,7 +89,7 @@ public class ValidationResourceVisitor e
return true;
}
- public ValidationResultImpl getResult() {
+ public @Nonnull ValidationResultImpl getResult() {
return result;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java Tue Apr 14 14:19:49 2015
@@ -24,11 +24,13 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.Nonnull;
+
import org.apache.sling.validation.api.ValidationResult;
public class ValidationResultImpl implements ValidationResult {
- private Map<String, List<String>> failureMessages;
+ private final @Nonnull Map<String, List<String>> failureMessages;
private boolean isValid;
public ValidationResultImpl() {
@@ -41,8 +43,9 @@ public class ValidationResultImpl implem
return isValid;
}
- @Override
- public Map<String, List<String>> getFailureMessages() {
+ @SuppressWarnings("null")
+ @Override
+ public @Nonnull Map<String, List<String>> getFailureMessages() {
return Collections.unmodifiableMap(failureMessages);
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java Tue Apr 14 14:19:49 2015
@@ -27,6 +27,10 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.scr.annotations.Component;
@@ -84,18 +88,21 @@ public class ValidationServiceImpl imple
policy = ReferencePolicy.DYNAMIC,
cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE
)
+
+ @Nonnull
Map<String, Validator<?>> validators = new ConcurrentHashMap<String, Validator<?>>();
@Reference
private ThreadPoolManager tpm = null;
// ValidationService ###################################################################################################################
- @Override
- public ValidationModel getValidationModel(String validatedResourceType, String resourcePath) {
- if (resourcePath == null) {
- throw new IllegalArgumentException("ValidationService.getValidationModel - cannot accept null as resource path");
- }
- if (validatedResourceType == null) {
+
+
+
+ @SuppressWarnings("unused")
+ public @CheckForNull ValidationModel getValidationModel(@Nonnull String validatedResourceType, String resourcePath) {
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=459256
+ if (validatedResourceType == null) {
throw new IllegalArgumentException("ValidationService.getValidationModel - cannot accept null as resource type. Resource path was: " + resourcePath);
}
validatedResourceType = getRelativeResourceType(validatedResourceType);
@@ -117,18 +124,19 @@ public class ValidationServiceImpl imple
return model;
}
- @Override
- public ValidationModel getValidationModel(Resource resource) {
+ @SuppressWarnings("null")
+ @Override
+ public @CheckForNull ValidationModel getValidationModel(@Nonnull Resource resource) {
return getValidationModel(resource.getResourceType(), resource.getPath());
}
@Override
- public ValidationResult validate(Resource resource, ValidationModel model) {
- return validate(resource, model, "");
+ public @Nonnull ValidationResult validate(@Nonnull Resource resource, @Nonnull ValidationModel model) {
+ return new ValidationResultImpl(); //validate(resource, model, "");
}
- protected ValidationResult validate(Resource resource, ValidationModel model, String relativePath) {
- if (resource == null || model == null) {
+ protected @Nonnull ValidationResult validate(@Nonnull Resource resource, @Nonnull ValidationModel model, @Nonnull String relativePath) {
+ if (resource == null || model == null || relativePath == null) {
throw new IllegalArgumentException("ValidationService.validate - cannot accept null parameters");
}
ValidationResultImpl result = new ValidationResultImpl();
@@ -148,7 +156,8 @@ public class ValidationServiceImpl imple
* @return a relative resource type (without the leading search path)
* @throws IllegalArgumentException in case the resource type is starting with a "/" but not with any of the search paths.
*/
- protected String getRelativeResourceType(String resourceType) throws IllegalArgumentException {
+ @SuppressWarnings("null")
+ protected @Nonnull String getRelativeResourceType(@Nonnull String resourceType) throws IllegalArgumentException {
if (resourceType.startsWith("/")) {
LOG.debug("try to strip the search path from the resource type");
ResourceResolver rr = null;
@@ -185,17 +194,18 @@ public class ValidationServiceImpl imple
// validate children resources, if any
for (ChildResource childResource : childResources) {
// if a pattern is set we validate all children matching that pattern
- if (childResource.getNamePattern() != null) {
+ Pattern pattern = childResource.getNamePattern();
+ if (pattern != null) {
boolean foundMatch = false;
for (Resource child : resource.getChildren()) {
- Matcher matcher = childResource.getNamePattern().matcher(child.getName());
+ Matcher matcher = pattern.matcher(child.getName());
if (matcher.matches()) {
validateChildResource(child, relativePath, childResource, result);
foundMatch = true;
}
}
if (!foundMatch && childResource.isRequired()) {
- result.addFailureMessage(relativePath + childResource.getNamePattern().pattern(), "Missing required child resource.");
+ result.addFailureMessage(relativePath + pattern.pattern(), "Missing required child resource.");
}
} else {
Resource expectedResource = resource.getChild(childResource.getName());
@@ -214,7 +224,7 @@ public class ValidationServiceImpl imple
}
@Override
- public ValidationResult validate(ValueMap valueMap, ValidationModel model) {
+ public @Nonnull ValidationResult validate(@Nonnull ValueMap valueMap, @Nonnull ValidationModel model) {
if (valueMap == null || model == null) {
throw new IllegalArgumentException("ValidationResult.validate - cannot accept null parameters");
}
@@ -224,7 +234,7 @@ public class ValidationServiceImpl imple
}
@Override
- public ValidationResult validateAllResourceTypesInResource(Resource resource, boolean enforceValidation, Set<String> ignoredResourceTypes)
+ public @Nonnull ValidationResult validateAllResourceTypesInResource(@Nonnull Resource resource, boolean enforceValidation, Set<String> ignoredResourceTypes)
throws IllegalStateException, IllegalArgumentException, SlingValidationException {
if (ignoredResourceTypes == null) {
ignoredResourceTypes = Collections.emptySet();
@@ -247,7 +257,6 @@ public class ValidationServiceImpl imple
}
// OSGi ################################################################################################################################
- @SuppressWarnings("unused")
protected void activate(ComponentContext componentContext) {
threadPool = tpm.get("Validation Service Thread Pool");
ResourceResolver rr = null;
@@ -282,7 +291,6 @@ public class ValidationServiceImpl imple
}
}
- @SuppressWarnings("unused")
protected void deactivate(ComponentContext componentContext) {
if (threadPool != null) {
tpm.release(threadPool);
@@ -299,10 +307,11 @@ public class ValidationServiceImpl imple
throw new IllegalArgumentException("ValueMap may not be null");
}
for (ResourceProperty resourceProperty : resourceProperties) {
- if (resourceProperty.getNamePattern() != null) {
+ Pattern pattern = resourceProperty.getNamePattern();
+ if (pattern != null) {
boolean foundMatch = false;
for (String key : valueMap.keySet()) {
- if (resourceProperty.getNamePattern().matcher(key).matches()) {
+ if (pattern.matcher(key).matches()) {
foundMatch = true;
validateValueMap(key, valueMap, relativePath, resourceProperty, result);
}
@@ -363,7 +372,7 @@ public class ValidationServiceImpl imple
* @param validatedResourceType the type of resource for which to scan the JCR repository for validation models
* @return a {@link Trie} with the validation models; an empty trie if no model is found
*/
- private Trie<JCRValidationModel> searchAndStoreValidationModel(String validatedResourceType) {
+ private Trie<JCRValidationModel> searchAndStoreValidationModel(@Nonnull String validatedResourceType) {
Trie<JCRValidationModel> modelsForResourceType = null;
ResourceResolver rr = null;
JCRValidationModel vm;
@@ -455,9 +464,8 @@ public class ValidationServiceImpl imple
return true;
}
-
-
- private void validatePropertyValue(ValidationResultImpl result, String property, String relativePath, ValueMap valueMap, List<ParameterizedValidator> validators) {
+ @SuppressWarnings("null")
+ private void validatePropertyValue(ValidationResultImpl result, String property, String relativePath, ValueMap valueMap, List<ParameterizedValidator> validators) {
for (ParameterizedValidator validator : validators) {
// convert the type always to an array
Class<?> type = validator.getType();
@@ -469,7 +477,7 @@ public class ValidationServiceImpl imple
throw new SlingValidationException("Could not generate array class for type " + type, e);
}
}
-
+ // it is already validated here that the property exists in the value map
Object[] typedValue = (Object[])valueMap.get(property, type);
// see https://issues.apache.org/jira/browse/SLING-4178 for why the second check is necessary
if (typedValue == null || (typedValue.length > 0 && typedValue[0] == null)) {
@@ -484,23 +492,22 @@ public class ValidationServiceImpl imple
validateValue(result, typedValue, property, relativePath, valueMap, validator);
} else {
// call validate for each entry in the array (supports both singlevalue and multivalue)
- if (typedValue.getClass().isArray()) {
- Object[] array = (Object[])typedValue;
- if (array.length == 1) {
- validateValue(result, array[0], property, relativePath, valueMap, validator);
- } else {
- int n = 0;
- for (Object item : array) {
- validateValue(result, item, property + "[" + n++ + "]", relativePath, valueMap, validator);
- }
- }
- }
+ @Nonnull Object[] array = (Object[])typedValue;
+ if (array.length == 1) {
+ validateValue(result, array[0], property, relativePath, valueMap, validator);
+ } else {
+ int n = 0;
+ for (Object item : array) {
+ validateValue(result, item, property + "[" + n++ + "]",
+ relativePath, valueMap, validator);
+ }
+ }
}
}
}
@SuppressWarnings("rawtypes")
- private void validateValue(ValidationResultImpl result, Object value, String property, String relativePath, ValueMap valueMap, ParameterizedValidator validator) {
+ private void validateValue(ValidationResultImpl result, @Nonnull Object value, String property, String relativePath, @Nonnull ValueMap valueMap, ParameterizedValidator validator) {
try {
@SuppressWarnings("unchecked")
String validatorMessage = ((Validator)validator.getValidator()).validate(value, valueMap, validator.getParameters());
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java Tue Apr 14 14:19:49 2015
@@ -26,6 +26,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.wrappers.ValueMapDecorator;
@@ -48,11 +50,11 @@ public class JCRBuilder {
* Creates a set of the properties that a resource is expected to have, together with the associated validators.
*
* @param validatorsMap a map containing {@link Validator}s as values and their class names as values
- * @param propertiesResource the resource identifying the properties node from a validation model's structure
+ * @param propertiesResource the resource identifying the properties node from a validation model's structure (might be {@code null})
* @return a set of properties or an empty set if no properties are defined
* @see ResourceProperty
*/
- public static Set<ResourceProperty> buildProperties(Map<String, Validator<?>> validatorsMap, Resource propertiesResource) {
+ public static @Nonnull Set<ResourceProperty> buildProperties(@Nonnull Map<String, Validator<?>> validatorsMap, Resource propertiesResource) {
Set<ResourceProperty> properties = new HashSet<ResourceProperty>();
if (propertiesResource != null) {
for (Resource property : propertiesResource.getChildren()) {
@@ -105,13 +107,14 @@ public class JCRBuilder {
* @param validatorsMap a map containing {@link Validator}s as values and their class names as values
* @return a list of all the children resources; the list will be empty if there are no children resources
*/
- public static List<ChildResource> buildChildren(Resource modelResource, Resource rootResource,
- Map<String, Validator<?>> validatorsMap) {
+ public static @Nonnull List<ChildResource> buildChildren(@Nonnull Resource modelResource, @Nonnull Resource rootResource,
+ @Nonnull Map<String, Validator<?>> validatorsMap) {
List<ChildResource> children = new ArrayList<ChildResource>();
Resource childrenResource = rootResource.getChild(Constants.CHILDREN);
if (childrenResource != null) {
for (Resource child : childrenResource.getChildren()) {
- ChildResource childResource = new ChildResourceImpl(modelResource, child, validatorsMap, buildChildren(modelResource, child, validatorsMap));
+ @SuppressWarnings("null")
+ ChildResource childResource = new ChildResourceImpl(modelResource, child, validatorsMap, buildChildren(modelResource, child, validatorsMap));
children.add(childResource);
}
}
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java Tue Apr 14 14:19:49 2015
@@ -24,6 +24,8 @@ import java.lang.reflect.TypeVariable;
import java.util.Map;
import java.util.Map.Entry;
+import javax.annotation.Nonnull;
+
import org.apache.commons.lang3.reflect.TypeUtils;
import org.apache.sling.validation.api.Validator;
@@ -34,7 +36,7 @@ public class ValidatorTypeUtil {
* @param validator
* @return the type parametrization value on the {@link Validator} interface
*/
- public static Class<?> getValidatorType(Validator<?> validator) {
+ public static @Nonnull Class<?> getValidatorType(Validator<?> validator) {
// get all type arguments from the current validator class up to the Validator interface
Map<TypeVariable<?>, java.lang.reflect.Type> typeMap = TypeUtils.getTypeArguments(validator.getClass(), Validator.class);
java.lang.reflect.Type type = null;
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java Tue Apr 14 14:19:49 2015
@@ -20,6 +20,8 @@ package org.apache.sling.validation.impl
import java.util.regex.Pattern;
+import javax.annotation.Nonnull;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
@@ -38,7 +40,7 @@ public class RegexValidator implements V
public static final String REGEX_PARAM = "regex";
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
String regex = arguments.get(REGEX_PARAM, "");
if (StringUtils.isEmpty(regex)) {
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java Tue Apr 14 14:19:49 2015
@@ -19,6 +19,7 @@
package org.apache.sling.validation.impl;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@@ -30,6 +31,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.Nonnull;
+
import org.apache.jackrabbit.JcrConstants;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ModifiableValueMap;
@@ -55,7 +58,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.reflect.Whitebox;
@@ -71,6 +73,7 @@ public class ValidationServiceImplTest {
private static ResourceResolverFactory rrf;
private static Resource appsValidatorsRoot;
private static Resource libsValidatorsRoot;
+ private static Map<String, Object> primaryTypeUnstructuredMap;
private ValidationServiceImpl validationService;
private ResourceResolver rr;
@@ -90,6 +93,9 @@ public class ValidationServiceImplTest {
(Map<String, Object>) null, "sling:Folder", true);
rr.close();
}
+
+ primaryTypeUnstructuredMap = new HashMap<String, Object>();
+ primaryTypeUnstructuredMap.put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
}
@AfterClass
@@ -138,11 +144,13 @@ public class ValidationServiceImplTest {
// BEST MATCHING PATH = /apps/validation/1; assume the applicable paths contain /apps/validation/2
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation/2"));
// BEST MATCHING PATH = /apps/validation; assume the applicable paths contain /apps/validation but not
// /apps/validation/1
vm = validationService.getValidationModel("sling/validation/test", "/apps/validation/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation"));
assertThat(vm.getApplicablePaths(), Matchers.not(Matchers.hasItemInArray("/apps/validation/1")));
} finally {
@@ -174,9 +182,11 @@ public class ValidationServiceImplTest {
// BEST MATCHING PATH = /apps/validation/1; assume the applicable paths contain /apps/validation/2
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation/2"));
vm = validationService.getValidationModel("sling/validation/test", "/apps/validation/3/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation/3"));
} finally {
@@ -244,11 +254,10 @@ public class ValidationServiceImplTest {
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field1", "1");
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field1", "1");
+
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
@@ -269,9 +278,10 @@ public class ValidationServiceImplTest {
Validator<String> myValidator = new Validator<String>() {
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
- Assert.assertNotNull("ValueMap parameter for validate should never be null", valueMap);
+ Assert.assertNotNull("data parameter for validate should never be null", data);
+ Assert.assertNotNull("valueMap parameter for validate should never be null", valueMap);
Assert.assertNotNull("arguments parameter for validate should never be null", arguments);
return null;
}
@@ -290,11 +300,9 @@ public class ValidationServiceImplTest {
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field1", "1");
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field1", "1");
ValueMap map = new ValueMapDecorator(hashMap);
validationService.validate(map, vm);
} finally {
@@ -324,14 +332,14 @@ public class ValidationServiceImplTest {
property4);
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
// this should not be detected as missing property
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field1", new String[] {});
- put("field2", new String[] { "null" });
- put("field3", "");
- }
- };
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field1", new String[] {});
+ hashMap.put("field2", new String[] { "null" });
+ hashMap.put("field3", "");
+
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
Map<String, List<String>> expectedFailureMessages = new HashMap<String, List<String>>();
@@ -360,11 +368,10 @@ public class ValidationServiceImplTest {
}
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field2", "1");
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field2", "1");
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
Assert.assertTrue(vr.isValid());
@@ -390,11 +397,10 @@ public class ValidationServiceImplTest {
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field1", "");
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field1", "");
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
Assert.assertFalse(vr.isValid());
@@ -425,12 +431,11 @@ public class ValidationServiceImplTest {
"sling/validation/test", new String[] { "/apps/validation" }, field1, field2);
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field1", "HelloWorld");
- put("field2", "HelloWorld");
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field1", "HelloWorld");
+ hashMap.put("field2", "HelloWorld");
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
assertFalse(vr.isValid());
@@ -469,38 +474,27 @@ public class ValidationServiceImplTest {
ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
mvm.put("field1", "1");
- Resource childResource = rr.create(testResource, "child1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
-
- Resource resourceChild = rr.create(testResource, "child1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource resourceChild = rr.create(testResource, "child1", primaryTypeUnstructuredMap);
mvm = resourceChild.adaptTo(ModifiableValueMap.class);
mvm.put("hello", "1");
// /apps/validation/1/resource/child1/grandChild1 will miss its mandatory "hello" property
- Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", primaryTypeUnstructuredMap);
rr.commit();
mvm = resourceGrandChild.adaptTo(ModifiableValueMap.class);
mvm.put("field1", "1");
rr.commit();
+
+ ValidationModel vm = validationService.getValidationModel("sling/validation/test",
+ "/apps/validation/1/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
+ ValidationResult vr = validationService.validate(testResource, vm);
+ assertFalse(vr.isValid());
+ assertThat(vr.getFailureMessages(), Matchers.hasKey("child1/grandChild1/hello"));
+ assertThat(vr.getFailureMessages().keySet(), Matchers.hasSize(1));
}
- ValidationModel vm = validationService.getValidationModel("sling/validation/test",
- "/apps/validation/1/resource");
- ValidationResult vr = validationService.validate(testResource, vm);
- assertFalse(vr.isValid());
- assertThat(vr.getFailureMessages(), Matchers.hasKey("child1/grandChild1/hello"));
- assertThat(vr.getFailureMessages().keySet(), Matchers.hasSize(1));
} finally {
if (model1 != null) {
rr.delete(model1);
@@ -532,14 +526,12 @@ public class ValidationServiceImplTest {
ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
mvm.put("field1", "1");
- rr.create(testResource, "child2", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ rr.create(testResource, "child2",primaryTypeUnstructuredMap);
rr.commit();
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
ValidationResult vr = validationService.validate(testResource, vm);
assertTrue(vr.isValid());
} finally {
@@ -573,36 +565,26 @@ public class ValidationServiceImplTest {
testResource = ResourceUtil.getOrCreateResource(rr, "/apps/validation/1/resource",
JcrConstants.NT_UNSTRUCTURED, JcrConstants.NT_UNSTRUCTURED, true);
- Resource childResource = rr.create(testResource, "child1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ rr.create(testResource, "child1", primaryTypeUnstructuredMap);
ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
mvm.put("field1", "1");
- Resource resourceChild = rr.create(testResource, "child1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource resourceChild = rr.create(testResource, "child1", primaryTypeUnstructuredMap);
mvm = resourceChild.adaptTo(ModifiableValueMap.class);
mvm.put("hello", "test");
- Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", primaryTypeUnstructuredMap);
mvm = resourceGrandChild.adaptTo(ModifiableValueMap.class);
mvm.put("hello", "test");
rr.commit();
+
+ ValidationModel vm = validationService.getValidationModel("sling/validation/test",
+ "/apps/validation/1/resource");
+ assertNotNull("Could not get validation model for ", vm);
+ ValidationResult vr = validationService.validate(testResource, vm);
+ assertTrue(vr.isValid());
}
- ValidationModel vm = validationService.getValidationModel("sling/validation/test",
- "/apps/validation/1/resource");
- ValidationResult vr = validationService.validate(testResource, vm);
- assertTrue(vr.isValid());
} finally {
if (model1 != null) {
rr.delete(model1);
@@ -636,33 +618,23 @@ public class ValidationServiceImplTest {
ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
mvm.put("field1", "1");
- Resource childResource = rr.create(testResource, "child1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource childResource = rr.create(testResource, "child1", primaryTypeUnstructuredMap);
mvm = childResource.adaptTo(ModifiableValueMap.class);
mvm.put("hello", "test");
- Resource resourceChild = rr.create(testResource, "child2", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource resourceChild = rr.create(testResource, "child2", primaryTypeUnstructuredMap);
mvm = resourceChild.adaptTo(ModifiableValueMap.class);
mvm.put("hello2", "test");
- Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", primaryTypeUnstructuredMap);
mvm = resourceGrandChild.adaptTo(ModifiableValueMap.class);
mvm.put("hello", "test");
rr.commit();
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
ValidationResult vr = validationService.validate(testResource, vm);
assertFalse(vr.isValid());
// check for correct error message
@@ -699,15 +671,14 @@ public class ValidationServiceImplTest {
"sling/validation/test", new String[] { "/apps/validation" }, property, otherProperty);
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("property1", "testvalue1");
- put("property2", "test1value1"); // does not match validator pattern
- put("property3", "testvalue1");
- put("property4", "1testvalue1"); // does not match validator pattern
- put("property5", "invalid"); // does not match property name pattern
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("property1", "testvalue1");
+ hashMap.put("property2", "test1value1"); // does not match validator pattern
+ hashMap.put("property3", "testvalue1");
+ hashMap.put("property4", "1testvalue1"); // does not match validator pattern
+ hashMap.put("property5", "invalid"); // does not match property name pattern
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
assertFalse(vr.isValid());
@@ -740,11 +711,10 @@ public class ValidationServiceImplTest {
"sling/validation/test", new String[] { "/apps/validation" }, property);
ValidationModel vm = validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
- HashMap<String, Object> hashMap = new HashMap<String, Object>() {
- {
- put("field1", new String[] { "testvalue1", "test2value", "testvalue3" });
- }
- };
+ Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+
+ HashMap<String, Object> hashMap = new HashMap<String, Object>();
+ hashMap.put("field1", new String[] { "testvalue1", "test2value", "testvalue3" });
ValueMap map = new ValueMapDecorator(hashMap);
ValidationResult vr = validationService.validate(map, vm);
assertFalse(vr.isValid());
@@ -823,7 +793,7 @@ public class ValidationServiceImplTest {
"sling/validation/test2", JcrConstants.NT_UNSTRUCTURED, true);
values = grandChildResource.adaptTo(ModifiableValueMap.class);
values.put("field2", "somvalue");
- ValidationResult vr = validationService.validateAllResourceTypesInResource(resource, true,
+ validationService.validateAllResourceTypesInResource(resource, true,
Collections.singleton(JcrConstants.NT_UNSTRUCTURED));
} finally {
if (resource != null) {
@@ -946,16 +916,8 @@ public class ValidationServiceImplTest {
private Resource createValidationModelChildResource(Resource parentResource, String name, String nameRegex,
boolean isOptional, TestProperty... properties) throws PersistenceException {
ResourceResolver rr = parentResource.getResourceResolver();
- Resource modelChildren = rr.create(parentResource, Constants.CHILDREN, new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
- Resource child = rr.create(modelChildren, name, new HashMap<String, Object>() {
- {
- put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- }
- });
+ Resource modelChildren = rr.create(parentResource, Constants.CHILDREN, primaryTypeUnstructuredMap);
+ Resource child = rr.create(modelChildren, name, primaryTypeUnstructuredMap);
ModifiableValueMap mvm = child.adaptTo(ModifiableValueMap.class);
if (nameRegex != null) {
mvm.put(Constants.NAME_REGEX, nameRegex);
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java Tue Apr 14 14:19:49 2015
@@ -19,7 +19,8 @@
package org.apache.sling.validation.impl.util;
import java.util.Collection;
-import java.util.Map;
+
+import javax.annotation.Nonnull;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.Validator;
@@ -31,6 +32,7 @@ import org.apache.sling.validation.impl.
import org.apache.sling.validation.impl.util.examplevalidators.StringArrayValidator;
import org.apache.sling.validation.impl.util.examplevalidators.StringValidator;
import org.apache.sling.validation.impl.validators.RegexValidator;
+import org.hamcrest.CoreMatchers;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
@@ -60,7 +62,7 @@ public class ValidatorTypeUtilTest {
private class InnerStringValidator implements Validator<String> {
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
@@ -77,7 +79,7 @@ public class ValidatorTypeUtilTest {
public void testGetValidatorTypeWithAnonymousClass() {
Assert.assertThat((Class<String>)ValidatorTypeUtil.getValidatorType(new Validator<String>() {
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
@@ -95,7 +97,7 @@ public class ValidatorTypeUtilTest {
public void testGetValidatorTypeWithCollectionType() {
ValidatorTypeUtil.getValidatorType(new Validator<Collection<String>>() {
@Override
- public String validate(Collection<String> data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull Collection<String> data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
@@ -104,7 +106,7 @@ public class ValidatorTypeUtilTest {
private class InnerStringValidatorWithAdditionalBaseClass extends GenericTypeParameterBaseClass<Integer> implements Validator<String> {
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
@@ -112,6 +114,7 @@ public class ValidatorTypeUtilTest {
@Test
public void testGetValidatorTypeWithUnrelatedSuperClass() {
- Assert.assertThat((Class<String>)ValidatorTypeUtil.getValidatorType(new InnerStringValidatorWithAdditionalBaseClass()), Matchers.equalTo(String.class));
+ // http://stackoverflow.com/questions/24093000/how-do-i-match-a-class-against-a-specific-class-instance-in-a-hamcrest-matche
+ Assert.assertThat((Class<?>)ValidatorTypeUtil.getValidatorType(new InnerStringValidatorWithAdditionalBaseClass()), Matchers.is(CoreMatchers.<Class<?>>equalTo(String.class)));
}
}
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java Tue Apr 14 14:19:49 2015
@@ -20,6 +20,8 @@ package org.apache.sling.validation.impl
import java.util.Date;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.Validator;
import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -27,7 +29,7 @@ import org.apache.sling.validation.api.e
public class DateValidator implements Validator<Date> {
@Override
- public String validate(Date data, ValueMap valueMap, ValueMap arguments) throws SlingValidationException {
+ public String validate(@Nonnull Date data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments) throws SlingValidationException {
return null;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java Tue Apr 14 14:19:49 2015
@@ -18,13 +18,15 @@
*/
package org.apache.sling.validation.impl.util.examplevalidators;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.exceptions.SlingValidationException;
public class ExtendedStringValidator extends AbstractValidatorWithAdditionalType<Boolean, String, Integer> {
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java Tue Apr 14 14:19:49 2015
@@ -18,6 +18,8 @@
*/
package org.apache.sling.validation.impl.util.examplevalidators;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.Validator;
import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -25,7 +27,7 @@ import org.apache.sling.validation.api.e
public class IntegerValidator implements Validator<Integer> {
@Override
- public String validate(Integer data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull Integer data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java Tue Apr 14 14:19:49 2015
@@ -18,6 +18,8 @@
*/
package org.apache.sling.validation.impl.util.examplevalidators;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.Validator;
import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -25,7 +27,7 @@ import org.apache.sling.validation.api.e
public class StringArrayValidator implements Validator<String[]> {
@Override
- public String validate(String[] data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String[] data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java Tue Apr 14 14:19:49 2015
@@ -18,6 +18,8 @@
*/
package org.apache.sling.validation.impl.util.examplevalidators;
+import javax.annotation.Nonnull;
+
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.validation.api.Validator;
import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -25,7 +27,7 @@ import org.apache.sling.validation.api.e
public class StringValidator implements Validator<String> {
@Override
- public String validate(String data, ValueMap valueMap, ValueMap arguments)
+ public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
throws SlingValidationException {
return null;
}
Modified: sling/trunk/bundles/extensions/validation/examples/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/examples/pom.xml?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/examples/pom.xml (original)
+++ sling/trunk/bundles/extensions/validation/examples/pom.xml Tue Apr 14 14:19:49 2015
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>22</version>
+ <version>23-SNAPSHOT</version>
<relativePath/>
</parent>
Modified: sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp (original)
+++ sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp Tue Apr 14 14:19:49 2015
@@ -1,4 +1,21 @@
-<%@page session="false" import="
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><%@page session="false" import="
java.util.Map,
java.util.List,
org.apache.sling.api.resource.Resource,