Author: radu Date: Tue Jan 5 14:10:27 2016 New Revision: 1723074 URL: http://svn.apache.org/viewvc?rev=1723074&view=rev Log: SLING-5409 - Enhance the SightlyJavaCompilerService to not enforce a package name for Use objects stored in the repository
* package names are now automatically added or replaced (depending on the case) for Use objects Added: sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java - copied, changed from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java - copied, changed from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java?rev=1723074&r1=1723073&r2=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java (original) +++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java Tue Jan 5 14:10:27 2016 @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; import org.apache.felix.scr.annotations.Activate; @@ -66,6 +67,8 @@ public class SightlyJavaCompilerService private static final Logger LOG = LoggerFactory.getLogger(SightlyJavaCompilerService.class); + public static final Pattern PACKAGE_DECL_PATTERN = Pattern.compile("package\\s+([a-zA-Z_$][a-zA-Z\\d_$]*\\.?)*;"); + @Reference private ClassLoaderWriter classLoaderWriter = null; @@ -166,6 +169,10 @@ public class SightlyJavaCompilerService IOUtils.write(sourceCode, os, "UTF-8"); IOUtils.closeQuietly(os); } + sourceCode = PACKAGE_DECL_PATTERN.matcher(sourceCode).replaceFirst(""); + sourceCode = "package " + Utils.getPackageNameFromFQCN(fqcn) + ";\n" + sourceCode; + + CompilationUnit compilationUnit = new SightlyCompilationUnit(sourceCode, fqcn); long start = System.currentTimeMillis(); Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java?rev=1723074&r1=1723073&r2=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java (original) +++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java Tue Jan 5 14:10:27 2016 @@ -16,13 +16,34 @@ ******************************************************************************/ package org.apache.sling.scripting.sightly.impl.compiler; +import org.apache.commons.lang.StringUtils; +import org.apache.sling.scripting.sightly.impl.utils.JavaEscapeUtils; + public class Utils { public static String getJavaNameFromPath(String path) { if (path.endsWith(".java")) { path = path.substring(0, path.length() - 5); } - return path.substring(1).replace("/", ".").replace("-", "_"); + String[] parts = path.split("/"); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + String part = parts[i]; + if (StringUtils.isNotEmpty(part)) { + stringBuilder.append(JavaEscapeUtils.getEscapedToken(parts[i])); + if (i != parts.length - 1) { + stringBuilder.append("."); + } + } + } + return stringBuilder.toString(); + } + + public static String getPackageNameFromFQCN(String fqcn) { + if (StringUtils.isNotEmpty(fqcn)) { + return fqcn.substring(0, fqcn.lastIndexOf(".")); + } + return null; } } Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java?rev=1723074&r1=1723073&r2=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java (original) +++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java Tue Jan 5 14:10:27 2016 @@ -85,7 +85,7 @@ public class JavaEscapeUtils { * @return a valid Java token */ public static String getEscapedToken(String token) { - String result = token.toLowerCase(); + String result = token; if (reservedKeywords.contains(result)) { result = "_" + result; } Copied: sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java (from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java) URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java?p2=sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java&p1=sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java&r1=1723054&r2=1723074&rev=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java (original) +++ sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java Tue Jan 5 14:10:27 2016 @@ -16,13 +16,23 @@ ******************************************************************************/ package org.apache.sling.scripting.sightly.impl.compiler; -public class Utils { +import org.junit.Test; - public static String getJavaNameFromPath(String path) { - if (path.endsWith(".java")) { - path = path.substring(0, path.length() - 5); - } - return path.substring(1).replace("/", ".").replace("-", "_"); +import static org.junit.Assert.assertEquals; + +public class UtilsTest { + + @Test + public void testGetJavaNameFromPath() throws Exception { + assertEquals("apps.project.components.A", Utils.getJavaNameFromPath("/apps/project/components/A.java")); + assertEquals("apps.pro_ject.components.A", Utils.getJavaNameFromPath("/apps/pro-ject/components/A.java")); + assertEquals("apps._static.project.components.A", Utils.getJavaNameFromPath("/apps/static/project/components/A.java")); } + @Test + public void testGetPackageNameFromFQCN() throws Exception { + assertEquals("apps.project.components", Utils.getPackageNameFromFQCN("apps.project.components.A")); + assertEquals("apps.pro_ject.components", Utils.getPackageNameFromFQCN("apps.pro_ject.components.A")); + assertEquals("apps._static.project.components", Utils.getPackageNameFromFQCN("apps._static.project.components.A")); + } } Copied: sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java (from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java) URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java?p2=sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java&p1=sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java&r1=1723054&r2=1723074&rev=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java (original) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java Tue Jan 5 14:10:27 2016 @@ -14,15 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ -package org.apache.sling.scripting.sightly.impl.compiler; - -public class Utils { - - public static String getJavaNameFromPath(String path) { - if (path.endsWith(".java")) { - path = path.substring(0, path.length() - 5); - } - return path.substring(1).replace("/", ".").replace("-", "_"); - } - +public class RepoPojoNoPkg { + public static final String FIELD = "nopkg"; } Modified: sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html?rev=1723074&r1=1723073&r2=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html (original) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html Tue Jan 5 14:10:27 2016 @@ -31,5 +31,6 @@ <div id="resadapt" data-sly-use.resadapt="org.apache.sling.scripting.sightly.testing.adaptable.ResourceAdapterUseObject">${resadapt.title}</div> <div id="osgi" data-sly-use.osgi="org.apache.sling.scripting.sightly.testing.use.TestService">${osgi.sayHello}</div> + <div id="repopojo-nopkg" data-sly-use.repoNoPkg="RepoPojoNoPkg">${repoNoPkg.FIELD}</div> </body> -</html> \ No newline at end of file +</html> Modified: sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java?rev=1723074&r1=1723073&r2=1723074&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java (original) +++ sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java Tue Jan 5 14:10:27 2016 @@ -169,6 +169,13 @@ public class SlingSpecificsSightlyIT { assertEquals("original", HTMLExtractor.innerHTML(url + System.currentTimeMillis(), pageContent, "#repopojo")); } + @Test + public void testRepositoryPojoNoPkg() { + String url = launchpadURL + SLING_USE; + String pageContent = client.getStringContent(url, 200); + assertEquals("nopkg", HTMLExtractor.innerHTML(url, pageContent, "#repopojo-nopkg")); + } + private void uploadFile(String fileName, String serverFileName, String url) throws IOException { HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(launchpadURL + url);