You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by ds...@apache.org on 2012/01/18 12:09:14 UTC

svn commit: r1232832 - in /incubator/clerezza/issues/CLEREZZA-617: platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala...

Author: dspicar
Date: Wed Jan 18 11:09:13 2012
New Revision: 1232832

URL: http://svn.apache.org/viewvc?rev=1232832&view=rev
Log:
CLEREZZA-617: cleaned up issue code, adapted compile interface for compiling with and without bundlecontext in a scala friendly way.

Modified:
    incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java
    incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
    incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala

Modified: incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java?rev=1232832&r1=1232831&r2=1232832&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java (original)
+++ incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java Wed Jan 18 11:09:13 2012
@@ -18,7 +18,6 @@
  */
 package org.apache.clerezza.platform.typerendering.scalaserverpages;
 
-import java.util.logging.Level;
 import org.apache.clerezza.platform.typerendering.CallbackRenderer;
 import org.apache.clerezza.platform.typerendering.TypeRenderlet;
 import org.apache.clerezza.rdf.core.UriRef;

Modified: incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala?rev=1232832&r1=1232831&r2=1232832&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala Wed Jan 18 11:09:13 2012
@@ -21,12 +21,8 @@ package org.apache.clerezza.scala.script
 
 import java.security.AccessController
 import java.security.Permission
-import java.security.PrivilegedAction
 import java.security.PrivilegedActionException
 import java.security.PrivilegedExceptionAction
-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.framework.BundleEvent
 import org.osgi.framework.BundleListener
@@ -35,14 +31,11 @@ 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.IOException
 import java.io.OutputStream
 import java.io.PrintWriter
-import java.io.Reader
 import java.net._
 
 class CompileErrorsException(message: String) extends Exception(message) {
@@ -106,38 +99,19 @@ class CompilerService() extends BundleLi
 		compile(sources.toList).toArray
 	}
 
-	def compile(sources: List[Array[Char]]): List[Class[_]] = {
-		AccessController.checkPermission(new CompilePermission)
-		sharedCompiler.synchronized {
-			try {
-				AccessController.doPrivileged[List[Class[_]]](
-					new PrivilegedExceptionAction[List[Class[_]]] {
-						def run(): List[Class[_]] = {
-							val baos = new ByteArrayOutputStream
-							currentSharedCompilerOutputStream = baos
-							try {
-								sharedCompiler.compile(sources)
-							} catch {
-								case c: CompileErrorsException => throw new CompileErrorsException(
-										new String(baos.toByteArray, "utf-8"))
-								case e => throw e
-							} finally {
-								currentSharedCompilerOutputStream = null
-							}
-						}
-					})
-			} catch {
-				case e: PrivilegedActionException => throw e.getCause
-				case e => throw e
-			}
-		}
-	}
-	
+	/**
+	 * Compiles an array of class sources returning an array of compiled classes.
+	 * Uses the ClassLoader of the supplied BundleContext's bundle.'
+	 */
 	def compile(sources: Array[Array[Char]], registratorContext: BundleContext): Array[Class[_]] = {
 		compile(sources.toList, registratorContext).toArray
 	}
 	
-	def compile(sources: List[Array[Char]], registratorContext: BundleContext): List[Class[_]] = {
+	/**
+	 * Compiles a list of class sources returning a list of compiled classes.
+	 * Uses the ClassLoader of the supplied BundleContext's bundle.'
+	 */
+	def compile(sources: List[Array[Char]], registratorContext: BundleContext = null): List[Class[_]] = {
 		AccessController.checkPermission(new CompilePermission)
 		sharedCompiler.synchronized {
 			try {
@@ -147,7 +121,11 @@ class CompilerService() extends BundleLi
 							val baos = new ByteArrayOutputStream
 							currentSharedCompilerOutputStream = baos
 							try {
-								sharedCompiler.compile(sources, registratorContext)
+								var context: Option[BundleContext] = None;
+								if(registratorContext != null) {
+								  context = Some(registratorContext)
+								}
+								sharedCompiler.compile(sources, context)
 							} catch {
 								case c: CompileErrorsException => throw new CompileErrorsException(
 										new String(baos.toByteArray, "utf-8"))

Modified: incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala?rev=1232832&r1=1232831&r2=1232832&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala Wed Jan 18 11:09:13 2012
@@ -20,11 +20,8 @@
 package org.apache.clerezza.scala.scripting
 
 
-import org.apache.clerezza.scala.scripting.util.FileWrapper
-import org.apache.clerezza.scala.scripting.util.GenericFileWrapperTrait
 import org.apache.clerezza.scala.scripting.util.SplittingDirectory
 import org.apache.clerezza.scala.scripting.util.VirtualDirectoryWrapper
-import org.apache.felix.framework.BundleImpl
 import org.osgi.framework.Bundle
 import org.osgi.framework.BundleContext
 import scala.collection.mutable
@@ -35,12 +32,10 @@ import scala.tools.nsc.io.VirtualDirecto
 import scala.tools.nsc.reporters.ConsoleReporter
 import scala.tools.nsc.reporters.Reporter
 import scala.tools.nsc.util._
-import java.io.ByteArrayOutputStream
 import java.io.PrintWriter
 import java.lang.reflect.Field
 import java.net._
 
-
 /** a compiler that keeps track of classes added to the directory
  */
 class TrackingCompiler private (bundleContext : BundleContext,
@@ -70,12 +65,17 @@ class TrackingCompiler private (bundleCo
 	}
 
 	/**
-	 * compiles a list of class sources returning a list of compiled classes
+	 * Compiles a list of class sources returning a list of compiled classes.
+	 * Uses the ClassLoader of the supplied BundleContext's bundle, if supplied.
 	 */
 	@throws(classOf[CompileErrorsException])
-	def compile(sources: List[Array[Char]]): List[Class[_]] = {
+	def compile(sources: List[Array[Char]], registratorContext: Option[BundleContext] = None): List[Class[_]] = {
 		val classFiles = compileToDir(sources)
-		val classLoader = classLoaderBuilder(this.getClass.getClassLoader)
+		val classLoader = registratorContext match {
+		  case Some(x) => classLoaderBuilder(getBundleClassLoader(x.getBundle))
+		  case None => classLoaderBuilder(this.getClass.getClassLoader)
+		}
+		//println("ClassLoader: " + classLoader + " Parent: " + classLoader.getParent)
 		val result: List[Class[_]] = for (classFile <- classFiles;
 										  if (!classFile.name.contains('$'))) yield {
 			val path = classFile.path
@@ -87,26 +87,10 @@ class TrackingCompiler private (bundleCo
 	}
 	
 	/**
-	 * compiles a list of class sources returning a list of compiled classes
+	 * Return the a bundle's classloader.
+	 *
+	 * Hack to get the classloader from a bundle reference, is felix dependend
 	 */
-	@throws(classOf[CompileErrorsException])
-	def compile(sources: List[Array[Char]], registratorContext: BundleContext): List[Class[_]] = {
-		val classFiles = compileToDir(sources)
-		val classLoader = classLoaderBuilder(getBundleClassLoader(registratorContext.getBundle))
-		//val classLoader = classLoaderBuilder(this.getClass.getClassLoader)
-		//println("ClassLoader: " + classLoader + " Parent: " + classLoader.getParent + " PParent: " + classLoader.getParent.getParent)
-		println("ClassLoader: " + classLoader + " Parent: " + classLoader.getParent)
-		val result: List[Class[_]] = for (classFile <- classFiles;
-										  if (!classFile.name.contains('$'))) yield {
-			val path = classFile.path
-			println("pop: " + classFile.path)
-			val relevantPath = path.substring(path.indexOf('/')+1,path.lastIndexOf('.'))
-			val fqn = relevantPath.replace("/",".")
-			classLoader.loadClass(fqn)
-		}
-		return result
-	}
-	
     def getBundleClassLoader(bundle: Bundle): ClassLoader = {
 	  val modulesField: Field = bundle.getClass.getClassLoader.loadClass("org.apache.felix.framework.BundleImpl").getDeclaredField("m_modules")
 	  modulesField.setAccessible(true);
@@ -135,12 +119,10 @@ object TrackingCompiler {
 
 	private class TrackingCompilerSplittingDirectory extends SplittingDirectory
 
-	//private def createClassLoader(dir: AbstractFile) = new AbstractFileClassLoader(dir, this.getClass.getClassLoader())
 	private def createClassLoader(dir: AbstractFile, cl: ClassLoader) = new AbstractFileClassLoader(dir, cl)
 
 	def apply(bundleContext : BundleContext, out: PrintWriter, outputDirectoryOption: Option[AbstractFile]) = {
 		val (outputDirectory, classLoaderBuilder): (AbstractFile, (ClassLoader) => ClassLoader) = outputDirectoryOption match {
-			//case Some(d) => (d, (_: ClassLoader) => createClassLoader(d, this.getClass.getClassLoader()))
 			case Some(d) => (d, (c: ClassLoader) => createClassLoader(d, c))
 			case None => {
 					val d = new TrackingCompilerSplittingDirectory