You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2018/12/10 12:01:07 UTC
[sling-scriptingbundle-maven-plugin] 02/17: Refactor a bit and add
some tests.
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-scriptingbundle-maven-plugin.git
commit b9b0acedddc9338d395579152b6f84e7ec1f3b43
Author: Karl Pauls <pa...@apache.org>
AuthorDate: Mon Apr 16 13:32:40 2018 +0200
Refactor a bit and add some tests.
---
.../maven/plugin/ScriptingMavenPlugin.java | 144 +++++++++++----------
.../maven/plugin/ScriptingMavenPluginTest.java | 85 ++++++++++++
2 files changed, 161 insertions(+), 68 deletions(-)
diff --git a/src/main/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPlugin.java b/src/main/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPlugin.java
index 5cf84c8..701cd70 100644
--- a/src/main/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPlugin.java
@@ -51,7 +51,7 @@ public class ScriptingMavenPlugin extends AbstractMojo
@Parameter(defaultValue = "${session}", readonly = true)
private MavenSession session;
- private final Set<String> METHODS = new HashSet<>(Arrays.asList(new String[]{"TRACE", "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE"}));
+ private static final Set<String> METHODS = new HashSet<>(Arrays.asList(new String[]{"TRACE", "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE"}));
public void execute() throws MojoExecutionException
{
@@ -62,7 +62,7 @@ public class ScriptingMavenPlugin extends AbstractMojo
scanner.addDefaultExcludes();
scanner.scan();
- List<String> scripts = Stream.of(scanner.getIncludedFiles()).map(path -> new File(project.getBuild().getOutputDirectory(), path))
+ List<String> scriptPaths = Stream.of(scanner.getIncludedFiles()).map(path -> new File(project.getBuild().getOutputDirectory(), path))
.map(file -> file.getPath().substring((new File(project.getBuild().getOutputDirectory(), "javax.script").getPath() + File.pathSeparatorChar).length()))
.collect(Collectors.toList());
@@ -70,75 +70,23 @@ public class ScriptingMavenPlugin extends AbstractMojo
List<String> requires = new ArrayList<>();
List<String> capabilities = new ArrayList<>();
- for (String script : scripts)
+ for (String scriptPath : scriptPaths)
{
- String[] parts = script.split("/");
+ Script script = getScripts(scriptPath);
- String rt = parts[0];
- String version = parts.length > 2 ? new Version(parts[1]).toString() : null;
- String name = parts.length > 2 ? parts[2] : parts[1];
- String scriptExtension;
- int idx = name.lastIndexOf('.');
- if (idx != -1)
- {
- scriptExtension = name.substring(idx + 1);
- name = name.substring(0, idx);
- }
- else
- {
- scriptExtension = null;
- }
-
- String extension;
- idx = name.lastIndexOf('.');
- if (idx != -1)
- {
- extension = name.substring(idx + 1);
- name = name.substring(0, idx);
- }
- else
- {
- extension = "html";
- }
-
- String method;
- idx = name.indexOf('.');
- if (idx != -1)
- {
- String methodString = name.substring(0, idx);
- if (METHODS.contains(methodString.toUpperCase()))
- {
- method = methodString.toUpperCase();
- name = name.substring(idx + 1);
- }
- else
- {
- method = null;
- }
- }
- else if (METHODS.contains(name.toUpperCase()))
- {
- method = name.toUpperCase();
- name = "";
- }
- else
- {
- method = null;
- }
-
- String capability = "sling.resourceType;sling.resourceType=\"" + rt.replace("\"", "\\\"") + "\"";
+ String capability = "sling.resourceType;sling.resourceType=\"" + script.rt.replace("\"", "\\\"") + "\"";
- if (!(rt.equals(name) || rt.endsWith("." + name) || name.isEmpty()))
+ if (!(script.rt.equals(script.name) || script.rt.endsWith("." + script.name) || script.name.isEmpty()))
{
- if (!name.equalsIgnoreCase("requires"))
+ if (!script.name.equalsIgnoreCase("requires"))
{
- if (!name.equalsIgnoreCase("extends"))
+ if (!script.name.equalsIgnoreCase("extends"))
{
- capability += ";sling.resourceType.selectors:List<String>=\"" + name.replace("\"", "\\\"") + "\"";
+ capability += ";sling.resourceType.selectors:List<String>=\"" + script.name.replace("\"", "\\\"") + "\"";
}
else
{
- try (BufferedReader input = new BufferedReader(new FileReader(new File(new File(project.getBuild().getOutputDirectory(), "javax.script"), script))))
+ try (BufferedReader input = new BufferedReader(new FileReader(new File(new File(project.getBuild().getOutputDirectory(), "javax.script"), scriptPath))))
{
String extend = input.readLine();
@@ -153,7 +101,7 @@ public class ScriptingMavenPlugin extends AbstractMojo
}
else
{
- try (BufferedReader input = new BufferedReader(new FileReader(new File(new File(project.getBuild().getOutputDirectory(), "javax.script"), script))))
+ try (BufferedReader input = new BufferedReader(new FileReader(new File(new File(project.getBuild().getOutputDirectory(), "javax.script"), scriptPath))))
{
for (String line = input.readLine(); line != null; line = input.readLine())
{
@@ -166,15 +114,15 @@ public class ScriptingMavenPlugin extends AbstractMojo
}
}
}
- capability += ";sling.resourceType.extensions:List<String>=\"" + extension.replace("\"", "\\\"") + "\"";
+ capability += ";sling.resourceType.extensions:List<String>=\"" + script.extension.replace("\"", "\\\"") + "\"";
- if (method != null)
+ if (script.method != null)
{
- capability += ";sling.servlet.methods:List<String>=\"" + method.replace("\"", "\\\"") + "\"";
+ capability += ";sling.servlet.methods:List<String>=\"" + script.method.replace("\"", "\\\"") + "\"";
}
- if (version != null)
+ if (script.version != null)
{
- capability += ";version:Version=\"" + version + "\"";
+ capability += ";version:Version=\"" + script.version + "\"";
}
capabilities.add(capability);
}
@@ -196,4 +144,64 @@ public class ScriptingMavenPlugin extends AbstractMojo
project.getProperties().setProperty(ScriptingMavenPlugin.class.getPackage().getName() + "." + Constants.PROVIDE_CAPABILITY, String.join(",", capabilities));
project.getProperties().setProperty(ScriptingMavenPlugin.class.getPackage().getName() + "." + Constants.REQUIRE_CAPABILITY, String.join(",", requirements));
}
+
+ static class Script {
+ String rt;
+ String version;
+ String name;
+ String extension;
+ String scriptExtension;
+ String method;
+ }
+
+ static Script getScripts(String script) {
+ Script result = new Script();
+ String[] parts = script.split("/");
+
+ result.rt = parts[0];
+ result.version = parts.length > 2 ? new Version(parts[1]).toString() : null;
+ result.name = parts.length > 2 ? parts[2] : parts[1];
+ int idx = result.name.lastIndexOf('.');
+ if (idx != -1)
+ {
+ result.scriptExtension = result.name.substring(idx + 1);
+ result.name = result.name.substring(0, idx);
+ if (result.scriptExtension.isEmpty())
+ {
+ result.scriptExtension = null;
+ }
+ }
+
+ idx = result.name.lastIndexOf('.');
+ if (idx != -1)
+ {
+ result.extension = result.name.substring(idx + 1);
+ result.name = result.name.substring(0, idx);
+ if (result.extension.isEmpty())
+ {
+ result.extension = "html";
+ }
+ }
+ else
+ {
+ result.extension = "html";
+ }
+
+ idx = result.name.indexOf('.');
+ if (idx != -1)
+ {
+ String methodString = result.name.substring(0, idx).toUpperCase();
+ if (METHODS.contains(methodString))
+ {
+ result.method = methodString;
+ result.name = result.name.substring(idx + 1);
+ }
+ }
+ else if (METHODS.contains(result.name.toUpperCase()))
+ {
+ result.method = result.name.toUpperCase();
+ result.name = "";
+ }
+ return result;
+ }
}
diff --git a/src/test/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPluginTest.java b/src/test/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPluginTest.java
new file mode 100644
index 0000000..e6a4262
--- /dev/null
+++ b/src/test/java/org/apache/sling/scripting/maven/plugin/ScriptingMavenPluginTest.java
@@ -0,0 +1,85 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.maven.plugin;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ScriptingMavenPluginTest
+{
+ @Test
+ public void testScriptNameFullCalculation()
+ {
+ String scriptPath = "org.apache.foo/1.0.0/POST.hi.xml.jsp";
+
+ ScriptingMavenPlugin.Script script = ScriptingMavenPlugin.getScripts(scriptPath);
+
+ Assert.assertEquals("org.apache.foo", script.rt);
+ Assert.assertEquals("1.0.0", script.version);
+ Assert.assertEquals("hi", script.name);
+ Assert.assertEquals("POST", script.method);
+ Assert.assertEquals("xml", script.extension);
+ Assert.assertEquals("jsp", script.scriptExtension);
+ }
+
+ @Test
+ public void testScriptNameMinCalculation()
+ {
+ String scriptPath = "org.apache.foo/foo";
+
+ ScriptingMavenPlugin.Script script = ScriptingMavenPlugin.getScripts(scriptPath);
+
+ Assert.assertEquals("org.apache.foo", script.rt);
+ Assert.assertNull("1.0.0", script.version);
+ Assert.assertEquals("foo", script.name);
+ Assert.assertNull(script.method);
+ Assert.assertEquals("html", script.extension);
+ Assert.assertNull(script.scriptExtension);
+ }
+
+ @Test
+ public void testScriptNameVersionAndMethodCalculation()
+ {
+ String scriptPath = "org.apache.foo/1.2.0/Post.jsp";
+
+ ScriptingMavenPlugin.Script script = ScriptingMavenPlugin.getScripts(scriptPath);
+
+ Assert.assertEquals("org.apache.foo", script.rt);
+ Assert.assertEquals("1.2.0", script.version);
+ Assert.assertEquals("", script.name);
+ Assert.assertEquals("POST", script.method);
+ Assert.assertEquals("html", script.extension);
+ Assert.assertEquals("jsp", script.scriptExtension);
+ }
+
+ @Test
+ public void testScriptNameVersionAndMethodMinCalculation()
+ {
+ String scriptPath = "org.apache.foo/1.2.0/Post.";
+
+ ScriptingMavenPlugin.Script script = ScriptingMavenPlugin.getScripts(scriptPath);
+
+ Assert.assertEquals("org.apache.foo", script.rt);
+ Assert.assertEquals("1.2.0", script.version);
+ Assert.assertEquals("",script.name);
+ Assert.assertEquals("POST", script.method);
+ Assert.assertEquals("html", script.extension);
+ Assert.assertNull(script.scriptExtension);
+ }
+}