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/18 01:06:55 UTC

svn commit: r1082762 - in /incubator/clerezza/trunk/parent/sourcebundle: ./ src/main/resources/OSGI-INF/ src/main/resources/org/ src/main/resources/org/apache/ src/main/resources/org/apache/clerezza/ src/main/resources/org/apache/clerezza/sourcebundle/...

Author: reto
Date: Fri Mar 18 00:06:54 2011
New Revision: 1082762

URL: http://svn.apache.org/viewvc?rev=1082762&view=rev
Log:
CLEREZZA-465: An initial version, supporting creating skeletons with zz>Dev create 'scala_with_activator in /path/to/some/dir, the actual project prototype has yet to be finished and the naming skeleton/prototype has to made more consistent

Added:
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/pom.xml
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Activator.scala
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Ontology.scala
    incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevDsl.scala
    incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevShellCustomizer.scala
    incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/UnavailableSkeletonException.scala
Modified:
    incubator/clerezza/trunk/parent/sourcebundle/pom.xml
    incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/OSGI-INF/serviceComponents.xml
    incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/BundleRoot.scala

Modified: incubator/clerezza/trunk/parent/sourcebundle/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/pom.xml?rev=1082762&r1=1082761&r2=1082762&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/pom.xml (original)
+++ incubator/clerezza/trunk/parent/sourcebundle/pom.xml Fri Mar 18 00:06:54 2011
@@ -44,6 +44,14 @@
 			<artifactId>pax-swissbox-tinybundles</artifactId>
 			<version>1.3.0</version>
 		</dependency>
+        <dependency>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>utils</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>shell</artifactId>
+		</dependency>
 	</dependencies>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>

Modified: incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/OSGI-INF/serviceComponents.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/OSGI-INF/serviceComponents.xml?rev=1082762&r1=1082761&r2=1082762&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/OSGI-INF/serviceComponents.xml (original)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/OSGI-INF/serviceComponents.xml Fri Mar 18 00:06:54 2011
@@ -15,4 +15,11 @@
 				cardinality="1..1"
 				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"/>
+		<service servicefactory="false">
+            <provide interface="org.apache.clerezza.shell.ShellCustomizer"/>
+        </service>
+    </scr:component>
 </components>

Added: incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/pom.xml?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/pom.xml (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/pom.xml Fri Mar 18 00:06:54 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/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Activator.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Activator.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Activator.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Activator.scala Fri Mar 18 00:06:54 2011
@@ -0,0 +1,43 @@
+package skeleton
+
+import org.osgi.framework.{BundleActivator, BundleContext, ServiceRegistration}
+import scala.collection.JavaConversions.asJavaDictionary
+import org.apache.clerezza.platform.typerendering.{Renderlet, 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)
+		renderlet bindRenderletManager context.getService(serviceReference).asInstanceOf[RenderletManager]
+
+		renderletRegistration = context.registerService(classOf[Renderlet].getName,
+												  renderlet, null)
+		println("enjoy!")
+	}
+
+	/**
+	 * 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/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorld.scala Fri Mar 18 00:06:54 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/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/HelloWorldMessageRenderlet.scala Fri Mar 18 00:06:54 2011
@@ -0,0 +1,32 @@
+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 PageRenderlet {
+
+	val rdfType = Ontology.HelloWordMessageType
+	override def mode = "naked"
+
+	override def renderedPage(arguments: RenderedPage.Arguments): RenderedPage = {
+		new RenderedPage(arguments) {
+			override def content = {
+				resultDocModifier.addStyleSheet("/styles/wall/wall.css")
+				<div xmlns="http://www.w3.org/1999/xhtml" id="tx-content">
+					<h2>Wall</h2>
+				</div>
+			}
+		}
+	}
+
+}

Added: incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Ontology.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Ontology.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Ontology.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/resources/org/apache/clerezza/sourcebundle/skeletons/scala_with_activator/src/main/scala/Ontology.scala Fri Mar 18 00:06:54 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")
+
+}

Modified: incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/BundleRoot.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/BundleRoot.scala?rev=1082762&r1=1082761&r2=1082762&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/BundleRoot.scala (original)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/BundleRoot.scala Fri Mar 18 00:06:54 2011
@@ -19,7 +19,7 @@
 
 package org.apache.clerezza.sourcebundle
 
-import java.io._
+
 import scala.actors.DaemonActor
 import scala.io._
 import org.osgi.framework.Bundle
@@ -32,24 +32,28 @@ import org.apache.clerezza.scala.scripti
 import org.osgi.framework.Constants
 import org.osgi.service.component.ComponentContext
 import org.slf4j.LoggerFactory
-import scala.tools.nsc.io.AbstractFile
-import scala.tools.nsc.io.VirtualDirectory
 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 a compiled.
+ * Currently only scala files are compiled.
  */
 class BundleRoot {
 
-	var compilerService: CompilerService = null
-	var packageAdmin: PackageAdmin = null
+	private var compilerService: CompilerService = null
+	private var packageAdmin: PackageAdmin = null
+
+	private var bundleContext: BundleContext = null
 
-	var bundleContext: BundleContext = null
+	private val skeletonsPath = "org/apache/clerezza/sourcebundle/skeletons"
 
 	val sourceBundles = mutable.ListBuffer[SourceBundle]()
 
@@ -72,16 +76,65 @@ class BundleRoot {
 		for (sb <- sourceBundles) sb.stop()
 	}
 
-  /**
-   * Creates a SourceBundle for the sources in the specified dir
-   */
-	def createSourceBundle(dir: File) = {
+	/**
+	 * 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;
 	}
@@ -137,22 +190,27 @@ class BundleRoot {
 
 			val tinyBundle: TinyBundle = newBundle()
 
-			def compileDir(sourceDir: File) {
-				
+			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) {
@@ -178,10 +236,12 @@ class BundleRoot {
 			tinyBundle.set("Bundle-SymbolicName", symName)
 
 			val scalaSourceDir = new File(dir, "src/main/scala")
-			if (scalaSourceDir.exists) {
+
+			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) {
@@ -194,6 +254,10 @@ class BundleRoot {
 				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()
@@ -206,7 +270,7 @@ class BundleRoot {
 			} else {
 				bundle.update(in)
 			}
-			
+
 		}
 
 		def act() {

Added: incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevDsl.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevDsl.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevDsl.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevDsl.scala Fri Mar 18 00:06:54 2011
@@ -0,0 +1,51 @@
+/*
+ * 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.sourcebundle
+
+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
+					}
+				}
+			}
+		}
+	}
+
+}

Added: incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevShellCustomizer.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevShellCustomizer.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevShellCustomizer.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/DevShellCustomizer.scala Fri Mar 18 00:06:54 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.sourcebundle
+
+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/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/UnavailableSkeletonException.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/UnavailableSkeletonException.scala?rev=1082762&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/UnavailableSkeletonException.scala (added)
+++ incubator/clerezza/trunk/parent/sourcebundle/src/main/scala/org/apache/clerezza/sourcebundle/UnavailableSkeletonException.scala Fri Mar 18 00:06:54 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.sourcebundle
+
+class UnavailableSkeletonException(val requested: Symbol, val available: Seq[Symbol])
+	extends RuntimeException("The Skeleton "+requested.name+" is not avialble") {
+
+}