You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/03/20 21:01:29 UTC
svn commit: r1083553 - in /incubator/clerezza/trunk/parent: ./
bundledevtool/ bundledevtool/src/main/resources/OSGI-INF/
bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/
bundledevtool/src/main/resources/org/apache/clerezza/bundledevt...
Author: reto
Date: Sun Mar 20 20:01:28 2011
New Revision: 1083553
URL: http://svn.apache.org/viewvc?rev=1083553&view=rev
Log:
CLEREZZA-465: renamed sourcebundle to bundledevtool to reflect its more generic nature
Added:
incubator/clerezza/trunk/parent/bundledevtool/
- copied from r1083437, incubator/clerezza/trunk/parent/sourcebundle/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/pom.xml
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/hello-world/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/hello-world/style.css
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Activator.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Ontology.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/
incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/BundleRoot.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevDsl.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevShellCustomizer.scala
incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/UnavailableSkeletonException.scala
Removed:
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/sourcebundle/
incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/sourcebundle/
incubator/clerezza/trunk/parent/sourcebundle/
Modified:
incubator/clerezza/trunk/parent/bundledevtool/pom.xml
incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/OSGI-INF/serviceComponents.xml
incubator/clerezza/trunk/parent/platform.launcher.storageless.parent/pom.xml
incubator/clerezza/trunk/parent/pom.xml
Modified: incubator/clerezza/trunk/parent/bundledevtool/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/pom.xml?rev=1083553&r1=1083437&r2=1083553&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/pom.xml (original)
+++ incubator/clerezza/trunk/parent/bundledevtool/pom.xml Sun Mar 20 20:01:28 2011
@@ -5,10 +5,10 @@
<artifactId>parent</artifactId>
<version>0.2-incubating-SNAPSHOT</version>
</parent>
- <artifactId>sourcebundle</artifactId>
+ <artifactId>bundledevtool</artifactId>
<version>0.1-incubating-SNAPSHOT</version>
<packaging>bundle</packaging>
- <name>Clerezza - Source-Bundle Service</name>
+ <name>Clerezza - Bundle Development Tools</name>
<dependencies>
<dependency>
<groupId>org.apache.clerezza.scala</groupId>
@@ -63,9 +63,9 @@
<configuration>
<instructions>
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
- <Export-Package>org.apache.clerezza.sourcebundle</Export-Package>
+ <Export-Package>org.apache.clerezza.bundledevtool</Export-Package>
<Private-Package>sbt,sbt.*</Private-Package>
- <Bundle-SymbolicName>org.apache.clerezza.sourcebundle</Bundle-SymbolicName>
+ <Bundle-SymbolicName>org.apache.clerezza.bundledevtool</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
Modified: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/OSGI-INF/serviceComponents.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/OSGI-INF/serviceComponents.xml?rev=1083553&r1=1083437&r2=1083553&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/OSGI-INF/serviceComponents.xml (original)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/OSGI-INF/serviceComponents.xml Sun Mar 20 20:01:28 2011
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0">
<scr:component enabled="true" immediate="true" name="org.apache.clerezza.sourcebundle.BundleRoot">
- <implementation class="org.apache.clerezza.sourcebundle.BundleRoot"/>
- <property name="service.pid" value="org.apache.clerezza.sourcebundle.BundleRoot"/>
+ <implementation class="org.apache.clerezza.bundledevtool.BundleRoot"/>
+ <property name="service.pid" value="org.apache.clerezza.bundledevtool.BundleRoot"/>
<service servicefactory="false">
- <provide interface="org.apache.clerezza.sourcebundle.BundleRoot"/>
+ <provide interface="org.apache.clerezza.bundledevtool.BundleRoot"/>
</service>
<reference name="CompilerService"
interface="org.apache.clerezza.scala.scripting.CompilerService"
@@ -16,8 +16,8 @@
bind="bindPackageAdmin" unbind="unbindPackageAdmin"/>
</scr:component>
<scr:component enabled="true" name="org.apache.clerezza.sourcebundle.DevShellCustomizer">
- <implementation class="org.apache.clerezza.sourcebundle.DevShellCustomizer"/>
- <property name="service.pid" value="org.apache.clerezza.sourcebundle.DevShellCustomizer"/>
+ <implementation class="org.apache.clerezza.bundledevtool.DevShellCustomizer"/>
+ <property name="service.pid" value="org.apache.clerezza.bundledevtool.DevShellCustomizer"/>
<service servicefactory="false">
<provide interface="org.apache.clerezza.shell.ShellCustomizer"/>
</service>
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/pom.xml?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/pom.xml (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/pom.xml Sun Mar 20 20:01:28 2011
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.2-incubating-SNAPSHOT</version>
+ </parent>
+ <artifactId>skeleton</artifactId>
+ <version>0.1-incubating-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>Clerezza - Project Skeleton</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>platform.typerendering.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>platform.typerendering.scala</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>rdf.ontologies</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>rdf.utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>rdf.scala.utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>osgi.services</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>jsr311-api</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <sourceDirectory>src/main/scala</sourceDirectory>
+ <testSourceDirectory>src/test/scala</testSourceDirectory>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Bundle-activator>skeleton.Activator</Bundle-activator>
+ <Export-Package>skeleton</Export-Package>
+ <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <configuration>
+ <downloadSources>true</downloadSources>
+ <downloadJavadocs>true</downloadJavadocs>
+ <buildcommands>
+ <buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
+ </buildcommands>
+ <additionalProjectnatures>
+ <projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
+ </additionalProjectnatures>
+ <classpathContainers>
+ <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER
+ </classpathContainer>
+ <classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER
+ </classpathContainer>
+ </classpathContainers>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.scala-tools</groupId>
+ <artifactId>maven-scala-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
+
+
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/hello-world/style.css
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/hello-world/style.css?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/hello-world/style.css (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/resources/CLEREZZA-INF/web-resources/styles/hello-world/style.css Sun Mar 20 20:01:28 2011
@@ -0,0 +1,4 @@
+.message {
+ color: green
+}
+
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Activator.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Activator.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Activator.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Activator.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,41 @@
+package skeleton
+
+import org.osgi.framework.{BundleActivator, BundleContext, ServiceRegistration}
+import scala.collection.JavaConversions.asJavaDictionary
+import org.apache.clerezza.platform.typerendering.{TypeRenderlet, RenderletManager}
+
+/**
+ * Activator for a bundle using Apache Clerezza.
+ */
+class Activator extends BundleActivator {
+
+ var helloWorldRegistration: ServiceRegistration = null
+ var renderletRegistration: ServiceRegistration = null
+ /**
+ * called when the bundle is started, this method initializes the provided service
+ */
+ def start(context: BundleContext) {
+ //import org.apache.clerezza.shell.OsgiDsl
+ //val osgiDsl = new OsgiDsl(context, System.out)
+ //import osgiDsl._
+ println("activating...")
+ val args = scala.collection.mutable.Map("javax.ws.rs" -> true)
+ helloWorldRegistration = context.registerService(classOf[Object].getName,
+ new HelloWorld(), args)
+ val renderlet = new HelloWorldMessageRenderlet
+ val serviceReference = context.getServiceReference(classOf[RenderletManager].getName)
+ renderletRegistration = context.registerService(classOf[TypeRenderlet].getName,
+ renderlet, null)
+ println("enjoy it!")
+ }
+
+ /**
+ * called when the bundle is stopped, this method unregisters the provided service
+ */
+ def stop(context: BundleContext) {
+ helloWorldRegistration.unregister()
+ renderletRegistration.unregister()
+ println("bye")
+ }
+
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,22 @@
+package skeleton
+
+import javax.ws.rs._
+import org.apache.clerezza.rdf.core.BNode
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph
+import org.apache.clerezza.rdf.ontologies.{DC, RDF}
+import org.apache.clerezza.rdf.utils.GraphNode;
+
+/**
+ * The classical Hello World root resource
+ */
+@Path("hello-world")
+class HelloWorld {
+ @GET def get() = {
+ val resultMGraph = new SimpleMGraph();
+ val graphNode = new GraphNode(new BNode(), resultMGraph);
+ graphNode.addProperty(RDF.`type` , Ontology.HelloWordMessageType);
+ graphNode.addPropertyValue(DC.description,"Hello world");
+ graphNode;
+
+ }
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,34 @@
+package skeleton
+
+import javax.ws.rs.core.MediaType
+import org.apache.clerezza.platform.typerendering._
+import org.apache.clerezza.rdf.core.UriRef
+import org.apache.clerezza.rdf.utils.GraphNode
+import org.apache.clerezza.rdf.ontologies._
+import org.apache.clerezza.rdf.core._
+import org.apache.clerezza.rdf.utils._
+import org.apache.clerezza.rdf.scala.utils.Preamble._
+import org.apache.clerezza.platform.typerendering.scala._
+
+/**
+ * A Renderlet for HelloWorldMessage
+ */
+class HelloWorldMessageRenderlet extends SRenderlet {
+
+ val getRdfType = Ontology.HelloWordMessageType
+
+ override def getModePattern = "naked"
+
+ override def renderedPage(arguments: XmlResult.Arguments) = {
+ new XmlResult(arguments) {
+ override def content = {
+ resultDocModifier.addStyleSheet("/styles/hello-world/style.css")
+ <div xmlns="http://www.w3.org/1999/xhtml" id="tx-content">
+ <h2>A Message</h2>
+ <div class="message">foo!</div>
+ </div>
+ }
+ }
+ }
+
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Ontology.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Ontology.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Ontology.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/resources/org/apache/clerezza/bundledevtool/skeletons/scala_with_activator/src/main/scala/Ontology.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,12 @@
+package skeleton
+
+import org.apache.clerezza.rdf.core.UriRef
+
+object Ontology {
+
+ /**
+ * The uri for the RDF type of HelloWordMessage
+ */
+ val HelloWordMessageType = new UriRef("http://example.org/skeleton#HelloWordMessage")
+
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/BundleRoot.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/BundleRoot.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/BundleRoot.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/BundleRoot.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,303 @@
+/*
+ * 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.clerezza.bundledevtool
+
+
+import scala.actors.DaemonActor
+import scala.io._
+import org.osgi.framework.Bundle
+import org.osgi.framework.BundleContext
+import sbt._
+import scala.actors.Actor
+import org.ops4j.pax.swissbox.tinybundles.core.TinyBundles._
+import org.ops4j.pax.swissbox.tinybundles.core.TinyBundle
+import org.apache.clerezza.scala.scripting.CompilerService
+import org.osgi.framework.Constants
+import org.osgi.service.component.ComponentContext
+import org.slf4j.LoggerFactory
+import scala.collection.mutable
+import org.osgi.service.packageadmin.PackageAdmin
+import tools.nsc.io.{AbstractFile, VirtualDirectory}
+import java.io.{File, FileInputStream, ByteArrayInputStream}
+import org.apache.clerezza.utils.osgi.BundlePathNode
+import org.wymiwyg.commons.util.dirbrowser.PathNode
+
+/**
+ * Provides a service that allows to register directories containing a maven-style project
+ * structure to be registered as SourceBundle which is added as OSGi Bundle and regenerated
+ * whenever a file is changed.
+ *
+ * Currently only scala files are compiled.
+ */
+class BundleRoot {
+
+ private var compilerService: CompilerService = null
+ private var packageAdmin: PackageAdmin = null
+
+ private var bundleContext: BundleContext = null
+
+ private val skeletonsPath = "org/apache/clerezza/bundledevtool/skeletons"
+
+ val sourceBundles = mutable.ListBuffer[SourceBundle]()
+
+ protected def activate(c: ComponentContext) {
+ this.bundleContext = c.getBundleContext
+ sourceBundles.clear()
+ for (bundle <- bundleContext.getBundles) {
+ val location = bundle.getLocation
+ if (location.startsWith(BundleRoot.sourceBundleUriPrefix)) {
+ val dir = new File(location.substring(
+ BundleRoot.sourceBundleUriPrefix.length))
+ val sourceBundle = new SourceBundle(dir, bundle)
+ sourceBundle.start()
+ sourceBundles += sourceBundle
+ }
+ }
+ }
+
+ protected def deactivate(c: ComponentContext) {
+ for (sb <- sourceBundles) sb.stop()
+ }
+
+ /**
+ * adds a SourceBundle for the sources in the specified dir
+ */
+ def addSourceBundle(dir: File) = {
+ val sourceBundle = new SourceBundle(dir)
+ sourceBundle.start()
+ sourceBundles += sourceBundle
+ sourceBundle
+ }
+
+ @deprecated
+ def createSourceBundle(dir: File) = addSourceBundle(dir)
+
+ /**
+ * list of the available skletons
+ */
+ def availableSkeletons: Seq[Symbol] = {
+ val skeletonsNode = new BundlePathNode(bundleContext.getBundle, skeletonsPath)
+ for (name <- skeletonsNode.list) yield {
+ Symbol(name.substring(1,name.length-1))
+ }
+ }
+
+ /**
+ * Creates and adds a new SourceBundle from a skeleton, no existing file is
+ * replaced
+ */
+ def createSourceBundle(skeleton: Symbol, dir: File) = {
+ dir.mkdirs
+ val skeletonsNode = new BundlePathNode(bundleContext.getBundle, skeletonsPath)
+ val skeletonNode = skeletonsNode.getSubPath(skeleton.name)
+ if (!skeletonNode.exists) {
+ throw new UnavailableSkeletonException(skeleton, availableSkeletons)
+ }
+ def processFile(p: PathNode, f: File) {
+ if (!f.exists) {
+ val in = scala.io.Source.fromInputStream(p.getInputStream)
+ val out = new java.io.PrintWriter(f)
+ try { in.getLines().foreach(out.println(_)) }
+ finally { out.close }
+ }
+ }
+ def processDir(p: PathNode, f: File) {
+ f.mkdir()
+ for (subPathString <- p.list()) {
+ val subPathNode: PathNode = p.getSubPath(subPathString)
+ val subFile: File = new File(f, subPathString)
+ if (subPathNode.isDirectory) {
+ processDir(subPathNode, subFile)
+ } else {
+ processFile(subPathNode, subFile)
+ }
+ }
+ }
+
+ processDir(skeletonNode, dir)
+ addSourceBundle(dir)
+ }
+
+ def bindCompilerService(cs: CompilerService) {
+ compilerService = cs;
+ }
+
+ def unbindCompilerService(cs: CompilerService) {
+ compilerService = null;
+ }
+
+ def bindPackageAdmin(pa: PackageAdmin) {
+ packageAdmin = pa
+ }
+
+ def unbindPackageAdmin(pa: PackageAdmin) {
+ packageAdmin = null
+ }
+
+ class SourceBundle(dir: File, existingBundle: Bundle) extends DaemonActor {
+
+ def this(dir: File) {
+ this(dir, null)
+ }
+
+ var stopped = false
+ var logger = LoggerFactory.getLogger(classOf[SourceBundle])
+
+ val sourcePath = Path.fromFile(dir)
+ var watchState = WatchState.empty
+ var bundle: Bundle = existingBundle
+
+ def getFilesAsCharArrays(file: File): List[Array[Char]] = {
+ logger.debug("getting sources in "+file)
+ var result: List[Array[Char]] = Nil
+ if (file.isDirectory) {
+ val children = file.listFiles
+ import scala.collection.JavaConversions._
+ for(child <- children) {
+ if (!child.getName.startsWith(".")) {
+ result = getFilesAsCharArrays(child) ::: result
+ }
+ }
+ } else {
+ if (file.getName.endsWith(".scala")) {
+ val in = Source.fromFile(file, "utf-8")
+ val stream = in.toStream
+ result = stream.toArray :: result
+ }
+ }
+ result
+ }
+
+ private[this] def updateBundle() {
+ logger.info("updating source bundle with root "+dir)
+
+ val tinyBundle: TinyBundle = newBundle()
+
+ def compileDir(sourceDir: File): Option[String] = {
+
+ val charArrays = getFilesAsCharArrays(sourceDir)
+ logger.debug("compiling "+charArrays.size+" files")
+
+ val vdPathPrefix = "(memory)"
+ val virtualDirectory = new VirtualDirectory(vdPathPrefix, None)
+ //val wrappedDirectory = VirtualDirectoryWrapper.wrap(virtualDirectory, outputListener)
+
+ val writtenClasses = compilerService.compileToDir(charArrays, virtualDirectory)
+ logger.debug("virtualDirectory "+virtualDirectory.size)
+ var potentialActivator: Option[String] = None
+ for (writtenClass <- writtenClasses) {
+ val fullPath = writtenClass.path
+ val path = fullPath.substring(vdPathPrefix.length+1)
+ if (path.endsWith("Activator.class")) {
+ potentialActivator = Some(path.substring(0, path.lastIndexOf('.')).replace('/', '.'))
+ }
+ tinyBundle.add(path, new ByteArrayInputStream(writtenClass.toByteArray))
+ }
+ potentialActivator
+ }
+
+ def copyResource(resourcesDir: File) {
+ def copyResource(resourcesDir: File, prefix: String) {
+ val children = resourcesDir.listFiles
+ import scala.collection.JavaConversions._
+ for(child <- children) {
+ val childName = child.getName
+ if (!childName.startsWith(".")) {
+ if (child.isDirectory) {
+ copyResource(child, prefix+childName+"/")
+ } else {
+ tinyBundle.add(prefix+childName, new FileInputStream(child))
+ }
+ }
+ }
+ }
+ copyResource(resourcesDir, "")
+ }
+
+ val symName = dir.getPath.substring(1).replace(File.separatorChar, '.')
+
+ tinyBundle.set("Bundle-SymbolicName", symName)
+
+ val scalaSourceDir = new File(dir, "src/main/scala")
+
+ val potentialActivator = if (scalaSourceDir.exists) {
+ compileDir(scalaSourceDir)
+ } else {
+ logger.debug("No source dir "+scalaSourceDir)
+ None
+ }
+ val resourcesDir = new File(dir, "src/main/resources")
+ if (resourcesDir.exists) {
+ copyResource(resourcesDir)
+ } else {
+ logger.debug("No resources dir "+resourcesDir)
+ }
+ val serviceComponentsFile = new File(resourcesDir, "OSGI-INF/serviceComponents.xml")
+ if (serviceComponentsFile.exists) {
+ tinyBundle.set("Service-Component", "OSGI-INF/serviceComponents.xml")
+ tinyBundle.set(Constants.EXPORT_PACKAGE, "!OSGI-INF, *" )
+ }
+ potentialActivator match {
+ case Some(s) => tinyBundle.set("Bundle-Activator", s)
+ case _ => ;
+ }
+ tinyBundle.set(Constants.IMPORT_PACKAGE, "*" );
+ val in = tinyBundle.build(
+ withBnd()
+ )
+
+
+ if (bundle == null) {
+ bundle = bundleContext.installBundle(BundleRoot.sourceBundleUriPrefix+dir.toString, in)
+ bundle.start()
+ } else {
+ bundle.update(in)
+ }
+
+ }
+
+ def act() {
+ while (!stopped) {
+ logger.debug("wathcing "+dir)
+ val (triggered, newWatchState) =
+ SourceModificationWatch.watch(sourcePath**(-HiddenFileFilter), 1, watchState)(stopped)
+ if (!stopped) {
+ try {
+ updateBundle()
+ } catch {
+ case e => logger.warn("Exception compiling", e)
+ }
+ watchState = newWatchState
+ }
+ }
+ }
+
+ def stop() {
+ stopped = true
+ }
+ }
+}
+
+
+object BundleRoot {
+
+ val sourceBundleUriPrefix = "bundledevtool:"
+
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevDsl.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevDsl.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevDsl.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevDsl.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,60 @@
+/*
+ * 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.clerezza.bundledevtool
+
+import java.io.File
+import java.io.OutputStream
+import java.io.OutputStreamWriter
+import java.io.PrintWriter
+import org.osgi.framework.BundleContext
+import org.apache.clerezza.osgi.services.ServicesDsl
+
+class DevDsl(outputStream: OutputStream, bundleContext: BundleContext) {
+
+ object Dev {
+ private val serviceDsl = new ServicesDsl(bundleContext)
+ import serviceDsl._
+ private lazy val out = new PrintWriter(new OutputStreamWriter(outputStream, "utf-8"), true)
+
+ def create(skeleton: Symbol) = new Object() {
+ def in(location: String): Unit = try {
+ $[BundleRoot].createSourceBundle(skeleton, new File(location))
+ } catch {
+ case u: UnavailableSkeletonException => {
+ out println "FAILURE: no skeleton "+skeleton+" is available"
+ out println "The following skeletons are available"
+ for (a <- u.available) {
+ out println " - "+a
+ }
+ }
+ }
+ }
+
+ def load(location: String) {
+ val dir = new File(location)
+ if (!dir.isDirectory) {
+ out println "No directory "+location+" found"
+ } else {
+ $[BundleRoot].addSourceBundle(dir)
+ }
+ }
+ }
+
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevShellCustomizer.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevShellCustomizer.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevShellCustomizer.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/DevShellCustomizer.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,30 @@
+/*
+ * 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.clerezza.bundledevtool
+
+import org.apache.clerezza.shell.Shell
+import org.apache.clerezza.shell.ShellCustomizer
+
+class DevShellCustomizer extends ShellCustomizer {
+ def bindings(e: Shell.Environment): List[(String, String, Any)] = {
+ List(("devDsl", classOf[DevDsl].getName, new DevDsl(e.out,
+ e.componentContext.getBundleContext)))
+ }
+ def imports: List[String] = List("devDsl._")
+}
Added: incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/UnavailableSkeletonException.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/UnavailableSkeletonException.scala?rev=1083553&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/UnavailableSkeletonException.scala (added)
+++ incubator/clerezza/trunk/parent/bundledevtool/src/main/scala/org/apache/clerezza/bundledevtool/UnavailableSkeletonException.scala Sun Mar 20 20:01:28 2011
@@ -0,0 +1,25 @@
+/*
+ * 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.clerezza.bundledevtool
+
+class UnavailableSkeletonException(val requested: Symbol, val available: Seq[Symbol])
+ extends RuntimeException("The Skeleton "+requested.name+" is not avialble") {
+
+}
Modified: incubator/clerezza/trunk/parent/platform.launcher.storageless.parent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.launcher.storageless.parent/pom.xml?rev=1083553&r1=1083552&r2=1083553&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.launcher.storageless.parent/pom.xml (original)
+++ incubator/clerezza/trunk/parent/platform.launcher.storageless.parent/pom.xml Sun Mar 20 20:01:28 2011
@@ -327,7 +327,7 @@
</dependency>
<dependency>
<groupId>org.apache.clerezza</groupId>
- <artifactId>sourcebundle</artifactId>
+ <artifactId>bundledevtool</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
Modified: incubator/clerezza/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/pom.xml?rev=1083553&r1=1083552&r2=1083553&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/pom.xml (original)
+++ incubator/clerezza/trunk/parent/pom.xml Sun Mar 20 20:01:28 2011
@@ -107,7 +107,7 @@
<module>rdf.web.proxy</module>
<module>shell</module>
<module>shell.felixshellcommand</module>
- <module>sourcebundle</module>
+ <module>bundledevtool</module>
<module>sshshell</module>
<module>templating</module>
<module>templating.seedsnipe</module>
@@ -1179,7 +1179,7 @@
</dependency>
<dependency>
<groupId>org.apache.clerezza</groupId>
- <artifactId>sourcebundle</artifactId>
+ <artifactId>bundledevtool</artifactId>
<version>0.1-incubating-SNAPSHOT</version>
</dependency>
<dependency>