sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From romb...@apache.org
Subject [sling-org-apache-sling-scripting-sightly-repl] 02/22: SLING-4713 - Update Sightly REPL to display generated Java source code
Date Wed, 18 Oct 2017 23:22:29 GMT
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-repl.git

commit 63df47baaa426d1fcb733a810b70b6b834d95538
Author: Radu Cotescu <radu@apache.org>
AuthorDate: Tue May 12 15:49:25 2015 +0000

    SLING-4713 - Update Sightly REPL to display generated Java source code
    
    * Java source code for generated class is displayed by reading the *.java files from disk
    in case the org.apache.sling.commons.fsclassloader bundle is active and the classes' source
    code was generated by enabling Sightly's dev mode
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1678985 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            | 51 ++++++++++++++++
 .../sightly/repl/REPLJavaSourceCodeServlet.java    | 68 ++++++++++++++++++++++
 .../SLING-INF/apps/repl/components/repl/repl.html  |  4 +-
 .../SLING-INF/apps/repl/components/repl/repl.js    | 49 ----------------
 4 files changed, 121 insertions(+), 51 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9ac1113..2d421e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,17 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+                <dependencies>
+                    <dependency>
+                        <groupId>javax.jcr</groupId>
+                        <artifactId>jcr</artifactId>
+                        <version>2.0</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <extensions>true</extensions>
                 <configuration>
@@ -74,4 +85,44 @@
             </plugin>
         </plugins>
     </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.api</artifactId>
+            <version>2.4.0</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/scripting/sightly/repl/REPLJavaSourceCodeServlet.java
b/src/main/java/org/apache/sling/scripting/sightly/repl/REPLJavaSourceCodeServlet.java
new file mode 100644
index 0000000..346df18
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/sightly/repl/REPLJavaSourceCodeServlet.java
@@ -0,0 +1,68 @@
+package org.apache.sling.scripting.sightly.repl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SlingServlet(
+        resourceTypes = {"repl/components/repl"},
+        selectors = {"java"},
+        methods = "GET",
+        extensions = "html"
+)
+public class REPLJavaSourceCodeServlet extends SlingSafeMethodsServlet {
+
+    private static final String FS_CLASSLOADER_SN = "org.apache.sling.commons.fsclassloader";
+    private static final Logger LOGGER = LoggerFactory.getLogger(REPLJavaSourceCodeServlet.class);
+
+    private File classesFolder;
+
+    @Activate
+    @SuppressWarnings("unused")
+    protected void activate(ComponentContext componentContext) {
+        for (Bundle bundle : componentContext.getBundleContext().getBundles()) {
+            if (FS_CLASSLOADER_SN.equals(bundle.getSymbolicName())) {
+                BundleContext context = bundle.getBundleContext();
+                classesFolder = new File(context.getDataFile(""), "classes");
+            }
+        }
+    }
+
+    @Override
+    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
+        response.setContentType("text/plain");
+        response.getWriter().write(getClassSourceCode());
+    }
+
+    private String getClassSourceCode() {
+        if (classesFolder != null && classesFolder.isDirectory()) {
+            File classFile = new File(classesFolder, "/apps/repl/components/repl/SightlyJava_template.java");
+            if (classFile.isFile()) {
+                try {
+                    return IOUtils.toString(new FileInputStream(classFile), "UTF-8");
+                } catch (IOException e) {
+                    LOGGER.error("Unable to read file " + classFile.getAbsolutePath(), e);
+                    return "";
+                }
+            }
+        }
+        LOGGER.warn("Source code for " + (classesFolder.isDirectory() ? classesFolder.getAbsolutePath()
: "") +
+                "/apps/repl/components/repl/SightlyJava_template.java was not found. Maybe
you need to enable dev mode for Sightly?");
+        return "";
+    }
+
+}
diff --git a/src/main/resources/SLING-INF/apps/repl/components/repl/repl.html b/src/main/resources/SLING-INF/apps/repl/components/repl/repl.html
index a41811f..6d0d9e1 100644
--- a/src/main/resources/SLING-INF/apps/repl/components/repl/repl.html
+++ b/src/main/resources/SLING-INF/apps/repl/components/repl/repl.html
@@ -31,7 +31,7 @@
         <link rel="stylesheet" type="text/css" href="/etc/clientlibs/repl/style.css">
     </head>
 
-    <body data-sly-use.repl="repl.js">
+    <body>
         <div id="logo">&nbsp;</div>
         <h1><small>Read-Eval-Print Loop</small></h1>
 
@@ -58,7 +58,7 @@
                 </div>
                 <div id="source" class="output-view editor" data-src="/sightly/repl.template.html"
data-mode="ace/mode/html"></div>
                 <iframe id="view" class="output-view hidden" src="/sightly/repl.template.html"></iframe>
-                <div id="java" class="output-view editor hidden" data-src="${repl.classPath}"
data-mode="ace/mode/java"></div>
+                <div id="java" class="output-view editor hidden" data-src="/sightly/repl.java.html"
data-mode="ace/mode/java"></div>
             </div>
         </div>
 
diff --git a/src/main/resources/SLING-INF/apps/repl/components/repl/repl.js b/src/main/resources/SLING-INF/apps/repl/components/repl/repl.js
deleted file mode 100644
index 09ca13a..0000000
--- a/src/main/resources/SLING-INF/apps/repl/components/repl/repl.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * 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.
- ******************************************************************************/
-use(function () {
-
-    var slingSettings = sling.getService(Packages.org.apache.sling.settings.SlingSettingsService);
-    var CLASS_ROOT_FOLDER  = '/var/classes/' + slingSettings.getSlingId() + '/sightly';
-    var COMPONENT_PATH     = '/apps/repl/components/repl';
-    var JAVA_TEMPLATE_FILE = 'SightlyJava_template.java';
-
-    // Recursively walks down the given path until it finds an apps folder, then returns
the full path of the Java compiled template file.
-    function getAppsPath(res) {
-        return res.getChildren().then(function (children) {
-            var length = children.length;
-
-            // Let's see if one of the children is the apps folder.
-            for (var i = 0; i < length; i++) {
-                if (children[i].name === 'apps') {
-                    return res.path + COMPONENT_PATH + '/' + JAVA_TEMPLATE_FILE;
-                }
-            }
-
-            // If apps wasn't found but there's only one child folder, then let's recrusively
walk that one down.
-            if (length === 1) {
-                return getAppsPath(children[0]);
-            }
-        });
-    }
-
-    return {
-        classPath: sightly.resource.resolve(CLASS_ROOT_FOLDER).then(getAppsPath)
-    };
-
-});

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <commits@sling.apache.org>.

Mime
View raw message