You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2017/01/26 21:18:49 UTC

svn commit: r1780481 - in /sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src: main/java/org/apache/sling/scripting/thymeleaf/internal/ test/java/org/apache/sling/scripting/thymeleaf/it/tests/

Author: olli
Date: Thu Jan 26 21:18:48 2017
New Revision: 1780481

URL: http://svn.apache.org/viewvc?rev=1780481&view=rev
Log:
SLING-6486 Use single pattern (regular expression) per template mode in PatternTemplateModeProvider

Added:
    sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java
Modified:
    sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java
    sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java

Modified: sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java?rev=1780481&r1=1780480&r2=1780481&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java (original)
+++ sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProvider.java Thu Jan 26 21:18:48 2017
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.scripting.thymeleaf.internal;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.regex.Pattern;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.scripting.thymeleaf.TemplateModeProvider;
@@ -33,7 +31,6 @@ import org.osgi.service.metatype.annotat
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.thymeleaf.templatemode.TemplateMode;
-import org.thymeleaf.util.PatternSpec;
 
 @Component(
     immediate = true,
@@ -47,17 +44,17 @@ import org.thymeleaf.util.PatternSpec;
 )
 public class PatternTemplateModeProvider implements TemplateModeProvider {
 
-    private final PatternSpec htmlPatternSpec = new PatternSpec();
+    private Pattern htmlPattern;
 
-    private final PatternSpec xmlPatternSpec = new PatternSpec();
+    private Pattern xmlPattern;
 
-    private final PatternSpec textPatternSpec = new PatternSpec();
+    private Pattern textPattern;
 
-    private final PatternSpec javascriptPatternSpec = new PatternSpec();
+    private Pattern javascriptPattern;
 
-    private final PatternSpec cssPatternSpec = new PatternSpec();
+    private Pattern cssPattern;
 
-    private final PatternSpec rawPatternSpec = new PatternSpec();
+    private Pattern rawPattern;
 
     private final Logger logger = LoggerFactory.getLogger(PatternTemplateModeProvider.class);
 
@@ -83,52 +80,44 @@ public class PatternTemplateModeProvider
 
     private void configure(final PatternTemplateModeProviderConfiguration configuration) {
         // HTML
-        setPatterns(configuration.htmlPatterns(), htmlPatternSpec);
-        logger.debug("configured HTML patterns: {}", htmlPatternSpec.getPatterns());
+        htmlPattern = Pattern.compile(configuration.htmlPattern());
+        logger.debug("configured HTML pattern: {}", htmlPattern.pattern());
         // XML
-        setPatterns(configuration.xmlPatterns(), xmlPatternSpec);
-        logger.debug("configured XML patterns: {}", xmlPatternSpec.getPatterns());
+        xmlPattern = Pattern.compile(configuration.xmlPattern());
+        logger.debug("configured XML pattern: {}", xmlPattern.pattern());
         // TEXT
-        setPatterns(configuration.textPatterns(), textPatternSpec);
-        logger.debug("configured TEXT patterns: {}", textPatternSpec.getPatterns());
+        textPattern = Pattern.compile(configuration.textPattern());
+        logger.debug("configured TEXT pattern: {}", textPattern.pattern());
         // JAVASCRIPT
-        setPatterns(configuration.javascriptPatterns(), javascriptPatternSpec);
-        logger.debug("configured JAVASCRIPT patterns: {}", javascriptPatternSpec.getPatterns());
+        javascriptPattern = Pattern.compile(configuration.javascriptPattern());
+        logger.debug("configured JAVASCRIPT pattern: {}", javascriptPattern.pattern());
         // CSS
-        setPatterns(configuration.cssPatterns(), cssPatternSpec);
-        logger.debug("configured CSS patterns: {}", cssPatternSpec.getPatterns());
+        cssPattern = Pattern.compile(configuration.cssPattern());
+        logger.debug("configured CSS pattern: {}", cssPattern.pattern());
         // RAW
-        setPatterns(configuration.rawPatterns(), rawPatternSpec);
-        logger.debug("configured RAW patterns: {}", rawPatternSpec.getPatterns());
-    }
-
-    private void setPatterns(final String[] strings, final PatternSpec patternSpec) {
-        final Set<String> set = new HashSet<String>();
-        if (strings != null) {
-            Collections.addAll(set, strings);
-        }
-        patternSpec.setPatterns(set);
+        rawPattern = Pattern.compile(configuration.rawPattern());
+        logger.debug("configured RAW pattern: {}", rawPattern.pattern());
     }
 
     @Override
     public TemplateMode provideTemplateMode(final Resource resource) {
         final String path = resource.getPath();
-        if (htmlPatternSpec.matches(path)) {
+        if (htmlPattern.matcher(path).matches()) {
             return TemplateMode.HTML;
         }
-        if (xmlPatternSpec.matches(path)) {
+        if (xmlPattern.matcher(path).matches()) {
             return TemplateMode.XML;
         }
-        if (textPatternSpec.matches(path)) {
+        if (textPattern.matcher(path).matches()) {
             return TemplateMode.TEXT;
         }
-        if (javascriptPatternSpec.matches(path)) {
+        if (javascriptPattern.matcher(path).matches()) {
             return TemplateMode.JAVASCRIPT;
         }
-        if (cssPatternSpec.matches(path)) {
+        if (cssPattern.matcher(path).matches()) {
             return TemplateMode.CSS;
         }
-        if (rawPatternSpec.matches(path)) {
+        if (rawPattern.matcher(path).matches()) {
             return TemplateMode.RAW;
         }
         return null;

Modified: sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java?rev=1780481&r1=1780480&r2=1780481&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java (original)
+++ sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/PatternTemplateModeProviderConfiguration.java Thu Jan 26 21:18:48 2017
@@ -28,49 +28,39 @@ import org.osgi.service.metatype.annotat
 @interface PatternTemplateModeProviderConfiguration {
 
     @AttributeDefinition(
-        name = "patterns for template mode HTML",
-        description = "The template patterns (regular expressions) for templates which should be processed with template mode HTML (e.g. *.html - NOTE: extension needs to be enabled for this script engine)."
+        name = "pattern for template mode HTML",
+        description = "The template patterns (regular expression) for templates which should be processed with template mode HTML (e.g. *.html - NOTE: extension needs to be enabled for this script engine)."
     )
-    String[] htmlPatterns() default {
-        "*.html"
-    };
+    String htmlPattern() default "^.+\\.html$";
 
     @AttributeDefinition(
-        name = "patterns for template mode XML",
-        description = "The template patterns (regular expressions) for templates which should be processed with template mode XML (e.g. *.xml - NOTE: extension needs to be enabled for this script engine)."
+        name = "pattern for template mode XML",
+        description = "The template pattern (regular expression) for templates which should be processed with template mode XML (e.g. *.xml - NOTE: extension needs to be enabled for this script engine)."
     )
-    String[] xmlPatterns() default {
-        "*.xml"
-    };
+    String xmlPattern() default "^.+\\.xml$";
 
     @AttributeDefinition(
-        name = "patterns for template mode TEXT",
-        description = "The template patterns (regular expressions) for templates which should be processed with template mode TEXT (e.g. *.txt - NOTE: extension needs to be enabled for this script engine)."
+        name = "pattern for template mode TEXT",
+        description = "The template pattern (regular expression) for templates which should be processed with template mode TEXT (e.g. *.txt - NOTE: extension needs to be enabled for this script engine)."
     )
-    String[] textPatterns() default {
-        "*.txt"
-    };
+    String textPattern() default "^.+\\.txt$";
 
     @AttributeDefinition(
-        name = "patterns for template mode JAVASCRIPT",
-        description = "The template patterns (regular expressions) for templates which should be processed with template mode JAVASCRIPT (e.g. *.js - NOTE: extension needs to be enabled for this script engine)."
+        name = "pattern for template mode JAVASCRIPT",
+        description = "The template pattern (regular expression) for templates which should be processed with template mode JAVASCRIPT (e.g. *.js - NOTE: extension needs to be enabled for this script engine)."
     )
-    String[] javascriptPatterns() default {
-        "*.js"
-    };
+    String javascriptPattern() default "^.+\\.js$";
 
     @AttributeDefinition(
-        name = "patterns for template mode CSS",
-        description = "The template patterns (regular expressions) for templates which should be processed with template mode CSS (e.g. *.css - NOTE: extension needs to be enabled for this script engine)."
+        name = "pattern for template mode CSS",
+        description = "The template pattern (regular expression) for templates which should be processed with template mode CSS (e.g. *.css - NOTE: extension needs to be enabled for this script engine)."
     )
-    String[] cssPatterns() default {
-        "*.css"
-    };
+    String cssPattern() default "^.+\\.css$";
 
     @AttributeDefinition(
-        name = "patterns for template mode RAW",
-        description = "The template patterns (regular expressions) for templates which should be processed with template mode RAW (e.g. *.raw - NOTE: extension needs to be enabled for this script engine)."
+        name = "pattern for template mode RAW",
+        description = "The template pattern (regular expression) for templates which should be processed with template mode RAW (e.g. *.raw - NOTE: extension needs to be enabled for this script engine)."
     )
-    String[] rawPatterns();
+    String rawPattern() default "^.+$";
 
 }

Added: sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java?rev=1780481&view=auto
==============================================================================
--- sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java (added)
+++ sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/test/java/org/apache/sling/scripting/thymeleaf/it/tests/PatternTemplateModeProviderIT.java Thu Jan 26 21:18:48 2017
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+package org.apache.sling.scripting.thymeleaf.it.tests;
+
+import javax.inject.Inject;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.scripting.thymeleaf.TemplateModeProvider;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.thymeleaf.templatemode.TemplateMode;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerClass.class)
+public class PatternTemplateModeProviderIT extends ThymeleafTestSupport {
+
+    @Inject
+    protected TemplateModeProvider templateModeProvider;
+
+    private static Resource mockResource(final String path) {
+        return new SyntheticResource(null, path, null);
+    }
+
+    @Test
+    public void provideTemplateMode_HTML() throws Exception {
+        final Resource resource = mockResource("/apps/thymeleaf/page/foo.html");
+        final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
+        assertThat(templateMode, is(TemplateMode.HTML));
+    }
+
+    @Test
+    public void provideTemplateMode_XML() throws Exception {
+        final Resource resource = mockResource("/apps/thymeleaf/page/foo.xml");
+        final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
+        assertThat(templateMode, is(TemplateMode.XML));
+    }
+
+    @Test
+    public void provideTemplateMode_TEXT() throws Exception {
+        final Resource resource = mockResource("/apps/thymeleaf/text/foo.txt");
+        final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
+        assertThat(templateMode, is(TemplateMode.TEXT));
+    }
+
+    @Test
+    public void provideTemplateMode_JAVASCRIPT() throws Exception {
+        final Resource resource = mockResource("/apps/thymeleaf/assets/foo.js");
+        final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
+        assertThat(templateMode, is(TemplateMode.JAVASCRIPT));
+    }
+
+    @Test
+    public void provideTemplateMode_CSS() throws Exception {
+        final Resource resource = mockResource("/apps/thymeleaf/assets/foo.css");
+        final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
+        assertThat(templateMode, is(TemplateMode.CSS));
+    }
+
+    @Test
+    public void provideTemplateMode_fall_through() throws Exception {
+        final Resource resource = mockResource("foohtml");
+        final TemplateMode templateMode = templateModeProvider.provideTemplateMode(resource);
+        assertThat(templateMode, is(TemplateMode.RAW));
+    }
+
+}