Author: reto
Date: Mon Nov 15 00:18:54 2010
New Revision: 1035107

URL: http://svn.apache.org/viewvc?rev=1035107&view=rev
Log:
Added CompilerService

Added:
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/FileWrapper.scala
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/GenericFileWrapperTrait.scala
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/Wrapper.scala
    
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
Modified:
    incubator/clerezza/trunk/scala-scripting/pom.xml
    incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/resources/OSGI-INF/serviceComponents.xml
    incubator/clerezza/trunk/scala-scripting/tests/   (props changed)
    incubator/clerezza/trunk/scala-scripting/tests/pom.xml

Modified: incubator/clerezza/trunk/scala-scripting/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/pom.xml?rev=1035107&r1=1035106&r2=1035107&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/pom.xml (original)
+++ incubator/clerezza/trunk/scala-scripting/pom.xml Mon Nov 15 00:18:54 2010
@@ -81,6 +81,37 @@
                                        </args>
                                </configuration>
                        </plugin>
+               <plugin>
+                       <groupId>org.codehaus.mojo</groupId>
+                       <artifactId>build-helper-maven-plugin</artifactId>
+                       <executions>
+                               <execution>
+                                       <id>add-source</id>
+                                       <phase>generate-sources</phase>
+                                       <goals>
+                                               <goal>add-source</goal>
+                                       </goals>
+                                       <configuration>
+                                               <sources>
+                                                       
<source>src/main/scala</source>
+                                               </sources>
+                                       </configuration>
+                               </execution>
+                               <execution>
+                                       <id>add-test-source</id>
+                                       <phase>generate-sources</phase>
+                                       <goals>
+                                               <goal>add-test-source</goal>
+                                       </goals>
+                                       <configuration>
+                                               <sources>
+                                                       
<source>src/test/scala</source>
+                                               </sources>
+                                       </configuration>
+                               </execution>
+
+                       </executions>
+               </plugin>
                </plugins>
        </build>
 </project>

Modified: incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml?rev=1035107&r1=1035106&r2=1035107&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml (original)
+++ incubator/clerezza/trunk/scala-scripting/script-engine/pom.xml Mon Nov 15 
00:18:54 2010
@@ -44,6 +44,7 @@
                                        <instructions>
                                                
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
                                                
<Export-Package>org.apache.clerezza.scala.scripting</Export-Package>
+                                               
<Private-Package>org.apache.clerezza.scala.scripting.util</Private-Package>
                                                
<DynamicImport-Package>*</DynamicImport-Package>
                                                
<Bundle-SymbolicName>org.apache.clerezza.scala.scripting</Bundle-SymbolicName>
                                        </instructions>

Modified: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/resources/OSGI-INF/serviceComponents.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/resources/OSGI-INF/serviceComponents.xml?rev=1035107&r1=1035106&r2=1035107&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/resources/OSGI-INF/serviceComponents.xml
 (original)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/resources/OSGI-INF/serviceComponents.xml
 Mon Nov 15 00:18:54 2010
@@ -11,6 +11,13 @@
         </service>
         <property name="service.pid" 
value="org.apache.clerezza.scala.scripting.InterpreterFactory"/>
     </scr:component>
+       <scr:component enabled="true" immediate="true" 
name="org.apache.clerezza.scala.scripting.CompilerService">
+        <implementation 
class="org.apache.clerezza.scala.scripting.CompilerService"/>
+               <service servicefactory="false">
+            <provide 
interface="org.apache.clerezza.scala.scripting.CompilerService"/>
+        </service>
+        <property name="service.pid" 
value="org.apache.clerezza.scala.scripting.CompilerService"/>
+    </scr:component>
        <scr:component enabled="true" immediate="true" 
name="org.apache.clerezza.scala.scripting.ScriptEngineFactory">
         <implementation 
class="org.apache.clerezza.scala.scripting.ScriptEngineFactory"/>
                <service servicefactory="false">

Added: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala?rev=1035107&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
 (added)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
 Mon Nov 15 00:18:54 2010
@@ -0,0 +1,126 @@
+/*
+ * 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.scala.scripting;
+
+
+import java.security.AccessController
+import java.security.PrivilegedAction
+import org.apache.clerezza.scala.scripting.util.FileWrapper
+import org.apache.clerezza.scala.scripting.util.GenericFileWrapperTrait
+import org.apache.clerezza.scala.scripting.util.VirtualDirectoryWrapper
+import org.osgi.framework.BundleContext
+import org.osgi.service.component.ComponentContext;
+import scala.tools.nsc._;
+import scala.tools.nsc.interpreter._;
+import scala.tools.nsc.io.AbstractFile
+import scala.tools.nsc.io.VirtualDirectory
+import scala.tools.nsc.reporters.ConsoleReporter
+import scala.tools.nsc.util._
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.PrintWriter
+import java.io.Reader
+import java.net._
+
+
+class CompilerService() {
+       
+       protected var bundleContext : BundleContext = null;
+
+       def activate(componentContext: ComponentContext)= {
+               bundleContext = componentContext.getBundleContext
+       }
+
+       def deactivate(componentContext: ComponentContext) = {
+               bundleContext = null
+       }
+
+       def createCompiler(out: PrintWriter, outputSirectory: AbstractFile) : 
Global = {
+               val settings = new Settings
+               settings.outputDirs setSingleOutput outputSirectory
+               AccessController.doPrivileged(new 
PrivilegedAction[BundleContextScalaCompiler]() {
+                       override def run() =  {
+                               new BundleContextScalaCompiler(bundleContext, 
settings,
+                                       new ConsoleReporter(settings, null, 
out) {
+                                       
+                                               override def printMessage(msg: 
String) {
+                                                       out write msg
+                                                       out.flush()
+                                               }
+                                       }) 
+                       }
+               })
+       }
+
+       def compile(sources: List[Array[Char]]): List[Class[_]] = {
+               val virtualDirectory = new VirtualDirectory("(memory)", None)
+               compile(sources, virtualDirectory)
+       }
+
+       def compile(sources: List[Array[Char]], rawOutputDirectory: 
AbstractFile): List[Class[_]] = {
+
+               var writtenClasses: List[AbstractFile] = List[AbstractFile]()
+
+               trait VirtualDirectoryFlavour extends VirtualDirectoryWrapper {
+                       abstract override def output = {
+                               println("unexpected call to output "+name)
+                               super.output
+                       }
+               }
+               
+               def wrap(f: AbstractFile): AbstractFile = {
+                       f match {
+                               case d: VirtualDirectory => new 
VirtualDirectoryWrapper(d, wrap) with LoggingFileWrapper with 
VirtualDirectoryFlavour {
+                                               override def output = d.output
+                               }
+                               case o => new FileWrapper(o, wrap) with 
LoggingFileWrapper
+                       }
+               }
+
+               trait LoggingFileWrapper extends GenericFileWrapperTrait {
+
+                       abstract override def output = {
+                               writtenClasses ::= this
+                               super.output
+                       }
+               }
+               val outputDirectory = wrap(rawOutputDirectory)
+               val out = new ByteArrayOutputStream
+               val printWriter = new PrintWriter(out)
+               val compiler = createCompiler(printWriter, outputDirectory)
+               val sourceFiles: List[SourceFile] = for(chars <- sources) yield 
new BatchSourceFile("<script>", chars)
+               (new compiler.Run).compileSources(sourceFiles)
+               printWriter.flush
+               if (compiler.reporter.hasErrors) {
+                       compiler.reporter.reset
+                       throw new RuntimeException("compile errors: "+new 
String(out.toByteArray));
+               } 
+               val classLoader = new 
AbstractFileClassLoader(rawOutputDirectory, this.getClass.getClassLoader())
+               val result: List[Class[_]] = for (classFile <- writtenClasses;
+                                                                               
if (!classFile.name.contains('$'))) yield {
+                                                                               
        val path = classFile.path
+                                                                               
        val relevantPath = 
path.substring(path.indexOf('/')+1,path.lastIndexOf('.'))
+                                                                               
        val fqn = relevantPath.replace("/",".")
+                                                                               
        classLoader.loadClass(fqn)
+                                                                               
}
+               return result
+       }
+
+       
+}

Added: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/FileWrapper.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/FileWrapper.scala?rev=1035107&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/FileWrapper.scala
 (added)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/FileWrapper.scala
 Mon Nov 15 00:18:54 2010
@@ -0,0 +1,27 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.clerezza.scala.scripting.util
+
+import scala.tools.nsc.io.AbstractFile
+
+class FileWrapper(val wrapped: AbstractFile, val childWrapper: (AbstractFile) 
=> AbstractFile) extends AbstractFile with GenericFileWrapperTrait {
+       println("wrapping!!!")
+
+       /** overriding this hgere rather than in the trait as this is a var in 
VirtualDirectory
+       */
+       def lastModified = {
+               wrapped.lastModified
+       }
+
+       override protected def unsupported(msg: String) = {
+               println("unsupported!")
+               try {
+                       super.unsupported(msg)
+               } catch {
+                       case e => e.printStackTrace(); throw e
+               }
+       }
+}

Added: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/GenericFileWrapperTrait.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/GenericFileWrapperTrait.scala?rev=1035107&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/GenericFileWrapperTrait.scala
 (added)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/GenericFileWrapperTrait.scala
 Mon Nov 15 00:18:54 2010
@@ -0,0 +1,70 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.clerezza.scala.scripting.util
+
+import scala.tools.nsc.io.AbstractFile
+
+trait GenericFileWrapperTrait extends AbstractFile with Wrapper[AbstractFile] {
+       override def lookupNameUnchecked(name: String,directory: Boolean) = {
+               childWrapper(wrapped.lookupNameUnchecked(name, directory))
+       }
+       override def lookupName(name: String,directory: Boolean) = {
+               wrapped.lookupName(name, directory)
+       }
+       override def iterator = {
+               //TODO wrap
+               wrapped.iterator
+       }
+       override def output = {
+               wrapped.output
+       }
+       override def input = {
+               wrapped.input
+       }
+       
+       override def isDirectory = {
+               wrapped.isDirectory
+       }
+       override def delete = {
+               wrapped.delete
+       }
+       override def create = {
+               wrapped.create
+       }
+       override def file = {
+               wrapped.file
+       }
+       override def container = {
+               childWrapper(wrapped.container)
+       }
+       override def absolute = {
+               childWrapper(wrapped.absolute)
+       }
+       override def path = {
+               wrapped.path
+       }
+       override def name = {
+               wrapped.name
+       }
+
+       override def sizeOption = {
+               wrapped.sizeOption
+       }
+
+       override def lookupPath(path: String, directory: Boolean): AbstractFile 
= {
+               childWrapper(wrapped.lookupPath(path, directory))
+       }
+       override def lookupPathUnchecked(path: String, directory: Boolean): 
AbstractFile = {
+               childWrapper(wrapped.lookupPathUnchecked(path, directory))
+       }
+       override def fileNamed(name: String): AbstractFile = {
+               childWrapper(wrapped.fileNamed(name))
+       }
+
+       override def subdirectoryNamed(name: String): AbstractFile = {
+               childWrapper(wrapped.subdirectoryNamed(name))
+       }
+}

Added: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala?rev=1035107&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
 (added)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/VirtualDirectoryWrapper.scala
 Mon Nov 15 00:18:54 2010
@@ -0,0 +1,41 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.clerezza.scala.scripting.util
+
+import scala.tools.nsc.io.AbstractFile
+import scala.tools.nsc.io.VirtualDirectory
+
+class VirtualDirectoryWrapper(val wrapped: AbstractFile,
+                                                         val childWrapper: 
(AbstractFile) => AbstractFile) extends VirtualDirectory(null, None)
+                                                       with 
GenericFileWrapperTrait {
+       lastModified =wrapped.lastModified
+
+       override def output = {
+               wrapped.asInstanceOf[VirtualDirectory].output
+       }
+       override def input = {
+               wrapped.asInstanceOf[VirtualDirectory].input
+       }
+       override def file = {
+               wrapped.asInstanceOf[VirtualDirectory].file
+       }
+       override def container = {
+               wrapped.asInstanceOf[VirtualDirectory].container
+       }
+       override def absolute = {
+               wrapped.asInstanceOf[VirtualDirectory].absolute
+       }
+       override val name = {
+               wrapped.name
+       }
+       override def lookupPath(path: String, directory: Boolean): AbstractFile 
= {
+               childWrapper(wrapped.lookupPath(path, directory))
+       }
+       override def lookupPathUnchecked(path: String, directory: Boolean): 
AbstractFile = {
+               childWrapper(wrapped.lookupPathUnchecked(path, directory))
+       }
+
+}

Added: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/Wrapper.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/Wrapper.scala?rev=1035107&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/Wrapper.scala
 (added)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/util/Wrapper.scala
 Mon Nov 15 00:18:54 2010
@@ -0,0 +1,11 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.apache.clerezza.scala.scripting.util
+
+trait Wrapper[T] {
+       protected def wrapped: T
+       protected val childWrapper: (T) => T
+}

Propchange: incubator/clerezza/trunk/scala-scripting/tests/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Nov 15 00:18:54 2010
@@ -1,2 +1,3 @@
 target
 .project
+.classpath

Modified: incubator/clerezza/trunk/scala-scripting/tests/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/tests/pom.xml?rev=1035107&r1=1035106&r2=1035107&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/tests/pom.xml (original)
+++ incubator/clerezza/trunk/scala-scripting/tests/pom.xml Mon Nov 15 00:18:54 
2010
@@ -47,12 +47,6 @@
                </dependency>
 
                <dependency>
-                       <groupId>org.apache.httpcomponents</groupId>
-                       <artifactId>httpclient-osgi</artifactId>
-                       <version>4.0.1</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
                        <groupId>org.apache.clerezza.scala</groupId>
                        <artifactId>scala-library-osgi</artifactId>
                        <scope>provided</scope>

Added: 
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala?rev=1035107&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
 (added)
+++ 
incubator/clerezza/trunk/scala-scripting/tests/src/test/scala/org/apache/clerezza/scala/tests/CompilerServiceTest.scala
 Mon Nov 15 00:18:54 2010
@@ -0,0 +1,118 @@
+/*
+ * 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.scala.tests;
+
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+
+import org.ops4j.pax.exam.CoreOptions._;
+import org.ops4j.pax.exam.container.`def`.PaxRunnerOptions._;
+import org.ops4j.pax.exam.junit.JUnitOptions._;
+
+import org.apache.clerezza.scala.scripting.CompilerService
+import org.junit.Assert
+import org.junit.Before;
+import org.junit.Test;
+import org.ops4j.pax.exam.Inject;
+import org.osgi.framework.BundleContext;
+import java.io.Reader
+import java.io.StringReader
+import org.osgi.util.tracker.ServiceTracker
+import scala.actors.Actor
+import scala.math.random
+
+
+/**
+ *
+ * @author reto
+ */
+...@runwith(classOf[JUnit4TestRunner])
+class CompilerServiceTest {
+
+
+       
+       @Inject
+       private var bundleContext: BundleContext = null;
+       
+       private var webServerExist = false;
+
+       private var service: CompilerService = null;
+
+       @Before
+       def getService() : Unit = {
+               /*webServerExist = waitForWebserver();*/
+               service = waitFor(classOf[CompilerService], 300000);
+       }
+
+       private def waitFor[T](aClass: Class[T], timeout: Long): T = {
+               System.out.println("waiting for a " + aClass);
+               val tracker = new ServiceTracker(bundleContext,
+                               aClass.getName(), null);
+               tracker.open();
+               val service = tracker.waitForService(timeout);
+               return service.asInstanceOf[T];
+       }
+
+       @Test
+       def checkEngine(): Unit =  {
+
+               Assert.assertNotNull(service)
+               val s = """
+               package foo {
+                       class TestClass() {
+                               println("constructing TestClass");
+                       }
+                       object TestClass {
+                               println("constructing TestClass Object");
+                               val msg = "Hello"
+                       }
+               }
+               """
+               println("now compiling")
+               val compileResult = service.compile(List(s.toCharArray))
+               println("finished compiling")
+               Assert.assertEquals(1, compileResult.size)
+               val testClassClass: Class[_] = compileResult(0)
+               Assert.assertEquals("foo.TestClass", testClassClass.getName)
+               val method = testClassClass.getMethod("msg")
+               Assert.assertEquals("Hello", method.invoke(null))
+       }
+
+}
+
+object CompilerServiceTest {
+
+       protected val testHttpPort = 8976;
+
+       @Configuration
+       def configuration() : Array[Option] = {
+               return options(
+                               mavenConfiguration(),
+                               dsProfile(),
+                               configProfile(),
+                               //webProfile(),
+                               junitBundles(),
+                               frameworks(
+                                       felix()),
+                               
systemProperty("org.osgi.service.http.port").value(
+                               Integer.toString(testHttpPort)));
+       }
+}
\ No newline at end of file


Reply via email to