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 2017/03/03 13:12:45 UTC
svn commit: r1785290 - in /sling/trunk/bundles/extensions/validation/core:
./ src/main/java/org/apache/sling/validation/impl/
src/main/java/org/apache/sling/validation/impl/util/
src/test/java/org/apache/sling/validation/core/it/tests/ src/test/java/or...
Author: kwin
Date: Fri Mar 3 13:12:44 2017
New Revision: 1785290
URL: http://svn.apache.org/viewvc?rev=1785290&view=rev
Log:
SLING-6581 use PatriciaTrie from commons collections and get rid of our own implementation
Removed:
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/Trie.java
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/TrieNode.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/TrieTest.java
Modified:
sling/trunk/bundles/extensions/validation/core/pom.xml
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
Modified: sling/trunk/bundles/extensions/validation/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/pom.xml?rev=1785290&r1=1785289&r2=1785290&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/pom.xml (original)
+++ sling/trunk/bundles/extensions/validation/core/pom.xml Fri Mar 3 13:12:44 2017
@@ -133,6 +133,12 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-collections4</artifactId>
+ <version>4.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.serviceusermapper</artifactId>
<version>1.2.0</version>
@@ -216,12 +222,6 @@
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-collections4</artifactId>
- <version>4.1</version>
- <scope>test</scope>
- </dependency>
<!-- Apache Felix -->
<dependency>
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java?rev=1785290&r1=1785289&r2=1785290&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java Fri Mar 3 13:12:44 2017
@@ -22,16 +22,18 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.SortedMap;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
+import org.apache.commons.collections4.trie.PatriciaTrie;
+import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.validation.impl.model.MergedValidationModel;
-import org.apache.sling.validation.impl.util.Trie;
import org.apache.sling.validation.model.ValidationModel;
import org.apache.sling.validation.model.spi.ValidationModelProvider;
import org.apache.sling.validation.spi.Validator;
@@ -114,20 +116,28 @@ public class ValidationModelRetrieverImp
}
private @CheckForNull ValidationModel getModel(@Nonnull String resourceType, String resourcePath) {
+ PatriciaTrie<ValidationModel> modelsForResourceType = fillTrieForResourceType(resourceType);
ValidationModel model = null;
- Trie<ValidationModel> modelsForResourceType = fillTrieForResourceType(resourceType);
-
- model = modelsForResourceType.getElementForLongestMatchingKey(resourcePath).getValue();
+ // for empty/null resource paths, always return the entry stored for ""
+ if (StringUtils.isEmpty(resourcePath)) {
+ model = modelsForResourceType.get("");
+ } else {
+ // get longest prefix entry, which still matches
+ SortedMap<String, ValidationModel> modelMap = modelsForResourceType.subMap("", resourcePath + "/");
+ if (!modelMap.isEmpty()) {
+ model = modelMap.get(modelMap.lastKey());
+ }
+ }
if (model == null && !modelsForResourceType.isEmpty()) {
- LOG.warn("Although model for resource type {} is available, it is not allowed for path {}", resourceType,
+ LOG.warn("Although at least one model for resource type '{}' is available, none of them are allowed to be applied to path {}", resourceType,
resourcePath);
}
return model;
}
- private @Nonnull Trie<ValidationModel> fillTrieForResourceType(@Nonnull String resourceType) {
+ private @Nonnull PatriciaTrie<ValidationModel> fillTrieForResourceType(@Nonnull String resourceType) {
// create a new (empty) trie
- Trie<ValidationModel> modelsForResourceType = new Trie<ValidationModel>();
+ PatriciaTrie<ValidationModel> modelsForResourceType = new PatriciaTrie<ValidationModel>();
// fill trie with data from model providers (all models for the given resource type, independent of resource path)
// lowest ranked model provider inserts first (i.e. higher ranked should overwrite)
@@ -137,7 +147,7 @@ public class ValidationModelRetrieverImp
for (ValidationModel model : models) {
for (String applicablePath : model.getApplicablePaths()) {
LOG.debug("Found validation model for resource type {} for applicable path {}", resourceType, applicablePath);
- modelsForResourceType.insert(applicablePath, model);
+ modelsForResourceType.put(applicablePath, model);
}
}
if (models.isEmpty()) {
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java?rev=1785290&r1=1785289&r2=1785290&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java Fri Mar 3 13:12:44 2017
@@ -87,7 +87,8 @@ public class ValidationTestSupport exten
return composite(
slingLaunchpadOakTar(workingDirectory, httpPort),
slingExtensionI18n(),
- slingInstallerProviderJcr()
+ slingInstallerProviderJcr(),
+ mavenBundle().groupId("org.apache.commons").artifactId("commons-collections4").versionAsInProject()
);
}
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=1785290&r1=1785289&r2=1785290&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 Fri Mar 3 13:12:44 2017
@@ -166,17 +166,28 @@ public class ValidationModelRetrieverImp
applicablePathPerResourceType.put("test/type", "/content/site1");
applicablePathPerResourceType.put("test/type", "/content/site1/subnode/test");
applicablePathPerResourceType.put("test/type", "/content/site1/subnode");
+ applicablePathPerResourceType.put("test/type", "/content/site1/subnode/test/somepage/within");
+ applicablePathPerResourceType.put("test/type", "/content/site1/subnode/test/testoutside");
- ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1/subnode/test/somepage",
- false);
+ ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1/subnode/test/somepage", false);
Assert.assertNotNull(model);
Assert.assertThat(model.getApplicablePaths(), Matchers.contains("/content/site1/subnode/test"));
}
+
+ @Test
+ public void testGetModelWithExactlyMatchingApplicablePath() {
+ applicablePathPerResourceType.put("test/type", "/content/site1/subnode/test/somepage");
+ applicablePathPerResourceType.put("test/type", "/content/site1/subnode/test/somepage/");
+
+ ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1/subnode/test/somepage", false);
+ Assert.assertNotNull(model);
+ Assert.assertThat(model.getApplicablePaths(), Matchers.contains("/content/site1/subnode/test/somepage"));
+ }
@Test
public void testGetModelWithNullApplicablePathPath() {
applicablePathPerResourceType.put("test/type", "/content/site1");
- applicablePathPerResourceType.put("test/type", null);
+ applicablePathPerResourceType.put("test/type", "");
applicablePathPerResourceType.put("test/type", "/content/site1/subnode");
ValidationModel model = validationModelRetriever.getModel("test/type", null, false);