You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2014/06/06 17:19:28 UTC
svn commit: r1600912 - in /sling/trunk/contrib/crankstart/sling-extensions:
pom.xml
src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java
src/main/resources/ src/main/resources/crankstart-header.txt
Author: bdelacretaz
Date: Fri Jun 6 15:19:28 2014
New Revision: 1600912
URL: http://svn.apache.org/r1600912
Log:
CrankstartInventoryPrinter - meant to reproduce a Sling instance in a Crankstart launcher, via /system/console/status-crankstart.txt (work in progress)
Added:
sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java
sling/trunk/contrib/crankstart/sling-extensions/src/main/resources/
sling/trunk/contrib/crankstart/sling-extensions/src/main/resources/crankstart-header.txt
Modified:
sling/trunk/contrib/crankstart/sling-extensions/pom.xml
Modified: sling/trunk/contrib/crankstart/sling-extensions/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/sling-extensions/pom.xml?rev=1600912&r1=1600911&r2=1600912&view=diff
==============================================================================
--- sling/trunk/contrib/crankstart/sling-extensions/pom.xml (original)
+++ sling/trunk/contrib/crankstart/sling-extensions/pom.xml Fri Jun 6 15:19:28 2014
@@ -28,6 +28,11 @@
<configuration>
<instructions>
<Private-Package>org.apache.sling.crankstart.extensions.*</Private-Package>
+ <Import-Package>
+ org.apache.felix.inventory.*;resolution:=optional,
+ org.apache.commons.io.*;resolution:=optional,
+ *
+ </Import-Package>
</instructions>
</configuration>
</plugin>
@@ -64,6 +69,18 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.inventory</artifactId>
+ <version>1.0.4</version>
+ <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-simple</artifactId>
<scope>provided</scope>
Added: sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java?rev=1600912&view=auto
==============================================================================
--- sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java (added)
+++ sling/trunk/contrib/crankstart/sling-extensions/src/main/java/org/apache/sling/crankstart/extensions/sling/CrankstartInventoryPrinter.java Fri Jun 6 15:19:28 2014
@@ -0,0 +1,150 @@
+/*
+ * 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.crankstart.extensions.sling;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.Enumeration;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.felix.inventory.Format;
+import org.apache.felix.inventory.InventoryPrinter;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+
+@Component
+@Service
+@Properties({
+ @Property(name = "felix.inventory.printer.name", value = "crankstart"),
+ @Property(name = "felix.inventory.printer.title", value = "Sling Crankstart Exporter"),
+ @Property(name = "felix.inventory.printer.format", value = "TEXT")
+})
+public class CrankstartInventoryPrinter implements InventoryPrinter {
+
+ private BundleContext bundleContext;
+
+ @Activate
+ public void activate(ComponentContext ctx) {
+ bundleContext = ctx.getBundleContext();
+ }
+
+ public void print(PrintWriter out, Format fmt, boolean isZip) {
+ try {
+ includeResource(out, "/crankstart-header.txt");
+ header(out, "bundles");
+ bundles(out);
+ header(out, "configurations");
+ configs(out);
+ header(out, "end of " + getClass().getSimpleName() + " status dump");
+ } catch(Exception e) {
+ e.printStackTrace(out);
+ }
+ }
+
+ private void configs(PrintWriter out) throws IOException {
+ out.println("# TODO - dump OSGi configurations with FORMAT:felix.config");
+ }
+
+ private void bundles(PrintWriter out) throws IOException {
+ int ok = 0;
+ int errors = 0;
+ for(Bundle b : bundleContext.getBundles()) {
+ final String coords = mavenCoordinates(b);
+ if(coords.length() == 0) {
+ errors++;
+ out.print("# ERROR: Maven coordinates not found for bundle ");
+ out.print(b.getSymbolicName());
+ out.print(" version ");
+ out.print(b.getVersion());
+ out.println();
+ } else {
+ ok++;
+ out.print("bundle ");
+ out.println(coords);
+ }
+ }
+
+ out.println("start.all.bundles");
+
+ out.print("# ");
+ out.print(ok);
+ out.print(" bundles processed sucessfully, ");
+ out.print(errors);
+ out.println(" errors.");
+ }
+
+ private String mavenCoordinates(Bundle b) throws IOException {
+ final StringBuilder sb = new StringBuilder();
+
+ @SuppressWarnings("unchecked")
+ final Enumeration<URL> entries = b.findEntries("META-INF/maven", "pom.properties", true);
+
+ int count=0;
+ while(entries != null && entries.hasMoreElements()) {
+ final URL u = entries.nextElement();
+ java.util.Properties props = new java.util.Properties();
+ InputStream is = null;
+ try {
+ is = u.openStream();
+ props.load(u.openStream());
+ sb.append("mvn:")
+ .append(props.get("groupId"))
+ .append("/")
+ .append(props.get("artifactId"))
+ .append("/")
+ .append(props.get("version"));
+ } finally {
+ IOUtils.closeQuietly(is);
+ }
+ count++;
+ }
+
+ if(count > 1) {
+ sb.append(" WARNING - multiple entries, how to handle that?");
+ }
+
+ return sb.toString();
+ }
+
+ private void header(PrintWriter out, String title) {
+ out.println();
+ out.print("# ");
+ out.println(title);
+ }
+
+ private void includeResource(PrintWriter out, String path) throws IOException {
+ final InputStream resource = getClass().getResourceAsStream(path);
+ if(resource == null) {
+ throw new IOException("Resource not found: " + path);
+ }
+ try {
+ IOUtils.copy(resource, out);
+ } finally {
+ resource.close();
+ }
+ }
+
+
+}
Added: sling/trunk/contrib/crankstart/sling-extensions/src/main/resources/crankstart-header.txt
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/sling-extensions/src/main/resources/crankstart-header.txt?rev=1600912&view=auto
==============================================================================
--- sling/trunk/contrib/crankstart/sling-extensions/src/main/resources/crankstart-header.txt (added)
+++ sling/trunk/contrib/crankstart/sling-extensions/src/main/resources/crankstart-header.txt Fri Jun 6 15:19:28 2014
@@ -0,0 +1,34 @@
+# ----------------------------------------------------------------------------
+# Sling Crankstart startup file generated by the CrankstartInventoryPrinter
+#
+# This file is meant to recreate an existing Sling instance using the
+# Sling Crankstart launcher.
+# ----------------------------------------------------------------------------
+
+# TODO adapt this: default values for our variables
+defaults http.port 4502
+defaults osgi.storage.path cq-crankstart
+defaults felix.http.jetty.version 2.2.0
+
+# TODO adapt this: Bootstrap classpath (variables are not supported here)
+classpath mvn:org.apache.felix/org.apache.felix.framework/4.3.0-R1558704
+classpath mvn:org.apache.sling/org.apache.sling.crankstart.core/0.0.1-SNAPSHOT
+classpath mvn:org.apache.sling/org.apache.sling.crankstart.api/0.0.1-SNAPSHOT
+classpath mvn:org.slf4j/slf4j-api/1.7.6
+
+# TODO adapt this: OSGi properties
+osgi.property org.osgi.service.http.port ${http.port}
+osgi.property org.osgi.framework.storage ${osgi.storage.path}
+osgi.property sling.home SLING-HOME
+osgi.property felix.startlevel.bundle 22
+osgi.property org.osgi.framework.startlevel.beginning 32
+
+# TODO adapt this: Logging
+osgi.property org.apache.sling.commons.log.level INFO
+osgi.property org.apache.sling.commons.log.file logs/error.log
+osgi.property org.apache.sling.commons.log.file.number 5
+osgi.property org.apache.sling.commons.log.file.size '.'yyyy-MM-dd
+
+# Start the framework
+start.framework
+