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 2014/11/19 17:28:09 UTC

svn commit: r1640589 - in /sling/trunk/contrib/extensions/validation: api/src/main/java/org/apache/sling/validation/api/ core/src/main/java/org/apache/sling/validation/impl/ core/src/main/java/org/apache/sling/validation/impl/util/ core/src/test/java/o...

Author: kwin
Date: Wed Nov 19 16:28:08 2014
New Revision: 1640589

URL: http://svn.apache.org/r1640589
Log:
SLILNG-4027 removal of ValidatorLookupService

Removed:
    sling/trunk/contrib/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidatorLookupService.java
    sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidatorLookupServiceImpl.java
Modified:
    sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java
    sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
    sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java
    sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java

Modified: sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java?rev=1640589&r1=1640588&r2=1640589&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java (original)
+++ sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java Wed Nov 19 16:28:08 2014
@@ -1,11 +1,12 @@
 package org.apache.sling.validation.impl;
 
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.validation.api.ChildResource;
 import org.apache.sling.validation.api.ResourceProperty;
-import org.apache.sling.validation.api.ValidatorLookupService;
+import org.apache.sling.validation.api.Validator;
 import org.apache.sling.validation.impl.util.JCRBuilder;
 
 /**
@@ -16,13 +17,13 @@ public class ChildResourceImpl implement
     private String name;
     private Set<ResourceProperty> properties;
 
-    public ChildResourceImpl(Resource modelResource, Resource childResource, ValidatorLookupService validatorLookupService) {
+    public ChildResourceImpl(Resource modelResource, Resource childResource, Map<String, Validator<?>> validatorsMap) {
         String root = modelResource.getPath();
         if (!childResource.getPath().startsWith(root)) {
             throw new IllegalArgumentException("Expected resource " + childResource.getPath() + " to be under root path " + root);
         }
         name = childResource.getPath().replaceFirst(root + "/", "").replaceAll(Constants.CHILDREN + "/", "");
-        properties = JCRBuilder.buildProperties(validatorLookupService, childResource.getChild(Constants.PROPERTIES));
+        properties = JCRBuilder.buildProperties(validatorsMap, childResource.getChild(Constants.PROPERTIES));
     }
 
     @Override

Modified: sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java?rev=1640589&r1=1640588&r2=1640589&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java (original)
+++ sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java Wed Nov 19 16:28:08 2014
@@ -18,25 +18,21 @@
  */
 package org.apache.sling.validation.impl;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.jcr.query.Query;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.reflect.TypeUtils;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.resource.LoginException;
@@ -54,7 +50,6 @@ import org.apache.sling.validation.api.V
 import org.apache.sling.validation.api.ValidationResult;
 import org.apache.sling.validation.api.ValidationService;
 import org.apache.sling.validation.api.Validator;
-import org.apache.sling.validation.api.ValidatorLookupService;
 import org.apache.sling.validation.api.exceptions.SlingValidationException;
 import org.apache.sling.validation.impl.util.JCRBuilder;
 import org.apache.sling.validation.impl.util.Trie;
@@ -66,9 +61,6 @@ import org.osgi.service.event.EventHandl
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
-
-
 @Component()
 @Service(ValidationService.class)
 public class ValidationServiceImpl implements ValidationService, EventHandler {
@@ -79,15 +71,20 @@ public class ValidationServiceImpl imple
     static final String[] TOPICS = {SlingConstants.TOPIC_RESOURCE_REMOVED, SlingConstants.TOPIC_RESOURCE_CHANGED,
             SlingConstants.TOPIC_RESOURCE_ADDED};
 
-    private Map<String, Trie<JCRValidationModel>> validationModelsCache = new ConcurrentHashMap<String, Trie<JCRValidationModel>>();
+    protected Map<String, Trie<JCRValidationModel>> validationModelsCache = new ConcurrentHashMap<String, Trie<JCRValidationModel>>();
     private ThreadPool threadPool;
     private ServiceRegistration eventHandlerRegistration;
 
     @Reference
     private ResourceResolverFactory rrf = null;
 
-    @Reference
-    private ValidatorLookupService validatorLookupService = null;
+    @Reference(
+            name = "validator",
+            referenceInterface = Validator.class,
+            policy = ReferencePolicy.DYNAMIC,
+            cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE
+    )
+    Map<String, Validator<?>> validators = new ConcurrentHashMap<String, Validator<?>>();
 
     @Reference
     private ThreadPoolManager tpm = null;
@@ -283,9 +280,9 @@ public class ValidationServiceImpl imple
                                 String[].class));
                         Resource r = model.getChild(Constants.PROPERTIES);
                         if (r != null) {
-                            Set<ResourceProperty> resourceProperties = JCRBuilder.buildProperties(validatorLookupService, r);
+                            Set<ResourceProperty> resourceProperties = JCRBuilder.buildProperties(validators, r);
                             if (!resourceProperties.isEmpty()) {
-                                List<ChildResource> children = JCRBuilder.buildChildren(model, model, validatorLookupService);
+                                List<ChildResource> children = JCRBuilder.buildChildren(model, model, validators);
                                 vm = new JCRValidationModel(jcrPath, resourceProperties, validatedResourceType, applicablePaths, children);
                                 modelsForResourceType = validationModelsCache.get(validatedResourceType);
                                 /**
@@ -413,4 +410,13 @@ public class ValidationServiceImpl imple
                     .getClass().getName() + " for resourceProperty " + relativePath + property, e);
         }
     }
+    
+    // OSGi ################################################################################################################################
+    protected void bindValidator(Validator<?> validator, Map<?, ?> properties) {
+        validators.put(validator.getClass().getName(), validator);
+    }
+
+    protected void unbindValidator(Validator<?> validator, Map<?, ?> properties) {
+        validators.remove(validator.getClass().getName());
+    }
 }

Modified: sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java?rev=1640589&r1=1640588&r2=1640589&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java (original)
+++ sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java Wed Nov 19 16:28:08 2014
@@ -33,7 +33,6 @@ import org.apache.sling.validation.api.C
 import org.apache.sling.validation.api.ParameterizedValidator;
 import org.apache.sling.validation.api.ResourceProperty;
 import org.apache.sling.validation.api.Validator;
-import org.apache.sling.validation.api.ValidatorLookupService;
 import org.apache.sling.validation.impl.ChildResourceImpl;
 import org.apache.sling.validation.impl.Constants;
 import org.apache.sling.validation.impl.ParameterizedValidatorImpl;
@@ -47,12 +46,12 @@ public class JCRBuilder {
     /**
      * Creates a set of the properties that a resource is expected to have, together with the associated validators.
      *
-     * @param vls                the {@link ValidatorLookupService}
+     * @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
      * @return a set of properties or an empty set if no properties are defined
      * @see ResourceProperty
      */
-    public static Set<ResourceProperty> buildProperties(ValidatorLookupService vls, Resource propertiesResource) {
+    public static Set<ResourceProperty> buildProperties(Map<String, Validator<?>> validatorsMap, Resource propertiesResource) {
         Set<ResourceProperty> properties = new HashSet<ResourceProperty>();
         if (propertiesResource != null) {
             for (Resource property : propertiesResource.getChildren()) {
@@ -67,7 +66,7 @@ public class JCRBuilder {
                         Resource validator = validatorsIterator.next();
                         ValueMap validatorProperties = validator.adaptTo(ValueMap.class);
                         String validatorName = validator.getName();
-                        Validator v = vls.getValidator(validatorName);
+                        Validator<?> v = validatorsMap.get(validatorName);
                         if (v == null) {
                             throw new IllegalArgumentException("Could not find validator with name '" + validatorName + "'");
                         }
@@ -100,18 +99,18 @@ public class JCRBuilder {
      * @param modelResource          the resource describing a {@link org.apache.sling.validation.api.ValidationModel}
      * @param rootResource           the model's resource from which to search for children (this resource has to have a {@link
      *                               Constants#CHILDREN} node directly underneath it)
-     * @param validatorLookupService the {@link ValidatorLookupService}
+     * @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,
-                                                    ValidatorLookupService validatorLookupService) {
+                                                    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, validatorLookupService);
+                ChildResource childResource = new ChildResourceImpl(modelResource, child, validatorsMap);
                 children.add(childResource);
-                children.addAll(buildChildren(modelResource, child, validatorLookupService));
+                children.addAll(buildChildren(modelResource, child, validatorsMap));
             }
         }
         return children;

Modified: sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java?rev=1640589&r1=1640588&r2=1640589&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java (original)
+++ sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java Wed Nov 19 16:28:08 2014
@@ -19,8 +19,8 @@
 package org.apache.sling.validation.impl;
 
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -41,10 +41,7 @@ import org.apache.sling.api.wrappers.Val
 import org.apache.sling.jcr.resource.JcrResourceConstants;
 import org.apache.sling.validation.api.ValidationModel;
 import org.apache.sling.validation.api.ValidationResult;
-import org.apache.sling.validation.api.ValidationService;
 import org.apache.sling.validation.api.Validator;
-import org.apache.sling.validation.api.ValidatorLookupService;
-import org.apache.sling.validation.api.exceptions.SlingValidationException;
 import org.apache.sling.validation.impl.setup.MockedResourceResolver;
 import org.apache.sling.validation.impl.util.examplevalidators.DateValidator;
 import org.apache.sling.validation.impl.validators.RegexValidator;
@@ -69,8 +66,7 @@ public class ValidationServiceImplTest {
     private static ResourceResolverFactory rrf;
     private static Resource appsValidatorsRoot;
     private static Resource libsValidatorsRoot;
-    private ValidationService validationService;
-    private ValidatorLookupService validatorLookupService;
+    private ValidationServiceImpl validationService;
 
     @BeforeClass
     public static void init() throws Exception {
@@ -108,16 +104,15 @@ public class ValidationServiceImplTest {
     @Before
     public void setUp() {
         validationService = new ValidationServiceImpl();
+        validationService.validators = new HashMap<String, Validator<?>>();
         Whitebox.setInternalState(validationService, "rrf", rrf);
-        validatorLookupService = mock(ValidatorLookupService.class);
+       
     }
     
     @Test
     public void testGetValidationModel() throws Exception {
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.validators.RegexValidator")).thenReturn(new
-                RegexValidator());
-        Whitebox.setInternalState(validationService, "validatorLookupService", validatorLookupService);
-
+        validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator", new RegexValidator());
+        
         List<TestProperty> properties = new ArrayList<TestProperty>();
         TestProperty property = new TestProperty();
         property.name = "field1";
@@ -158,9 +153,7 @@ public class ValidationServiceImplTest {
 
     @Test
     public void testGetValidationModelWithOverlay() throws Exception {
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.validators.RegexValidator")).thenReturn(new
-                RegexValidator());
-        Whitebox.setInternalState(validationService, "validatorLookupService", validatorLookupService);
+        validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator", new RegexValidator());
 
         List<TestProperty> fields = new ArrayList<TestProperty>();
         TestProperty field = new TestProperty();
@@ -206,15 +199,12 @@ public class ValidationServiceImplTest {
 
     @Test()
     public void testValueMapWithWrongDataType() throws Exception {
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.validators.RegexValidator")).thenReturn(new
-                RegexValidator());
-        Whitebox.setInternalState(validationService, "validatorLookupService", validatorLookupService);
+        validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator", new RegexValidator());
 
         List<TestProperty> properties = new ArrayList<TestProperty>();
         TestProperty property = new TestProperty();
         property.name = "field1";
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.util.examplevalidators.DateValidator")).thenReturn(new
-                DateValidator());
+        validationService.validators.put("org.apache.sling.validation.impl.util.examplevalidators.DateValidator",new DateValidator());
         property.validators.put("org.apache.sling.validation.impl.util.examplevalidators.DateValidator", null);
         properties.add(property);
         ResourceResolver rr = rrf.getAdministrativeResourceResolver(null);
@@ -247,9 +237,7 @@ public class ValidationServiceImplTest {
 
     @Test
     public void testValueMapWithCorrectDataType() throws Exception {
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.validators.RegexValidator")).thenReturn(new
-                RegexValidator());
-        Whitebox.setInternalState(validationService, "validatorLookupService", validatorLookupService);
+        validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator", new RegexValidator());
 
         List<TestProperty> fields = new ArrayList<TestProperty>();
         TestProperty field = new TestProperty();
@@ -292,9 +280,7 @@ public class ValidationServiceImplTest {
 
     @Test
     public void testResourceWithMissingChildProperty() throws Exception {
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.validators.RegexValidator")).thenReturn(new
-                RegexValidator());
-        Whitebox.setInternalState(validationService, "validatorLookupService", validatorLookupService);
+        validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator", new RegexValidator());
 
         List<TestProperty> fields = new ArrayList<TestProperty>();
         TestProperty property = new TestProperty();
@@ -369,9 +355,7 @@ public class ValidationServiceImplTest {
     
     @Test
     public void testResourceWithMultivalueProperties() throws Exception {
-        when(validatorLookupService.getValidator("org.apache.sling.validation.impl.validators.RegexValidator")).thenReturn(new
-                RegexValidator());
-        Whitebox.setInternalState(validationService, "validatorLookupService", validatorLookupService);
+        validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator", new RegexValidator());
 
         List<TestProperty> fields = new ArrayList<TestProperty>();
         TestProperty property = new TestProperty();