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 2013/12/04 16:21:20 UTC

[3/9] CLEREZZA-435: repaced tabs with spaces in scala files

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala
----------------------------------------------------------------------
diff --git a/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala b/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala
index 4b10708..95f6aab 100644
--- a/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala
+++ b/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala
@@ -39,202 +39,202 @@ import org.apache.clerezza.rdf.utils.UnionMGraph
  */
 class RichGraphNode(resource: Resource, graph: TripleCollection ) extends GraphNode(resource, graph) {
 
-	/**
-	 * Construct a RichGraphNode given an existing [[GraphNde]]
-	 *
-	 * @param node The GraphNode to be wrapped
-	 */
-	 def this(node: GraphNode) = this(node.getNode, node.getGraph)
-	 
-	/**
-	 * Operator syntax shortcut to get all objects as <code>RichGraphNode</code>
-	 *
-	 * @return all objects of the specified property of the node wrapped by this object
-	 */
-	def /(property: UriRef): CollectedIter[RichGraphNode] = {
-		new CollectedIter[RichGraphNode](() => new GraphNodeIter(getObjects(property)), readLock)
-	}
-
-	/**
-	 * Operator syntax shortcut to get all subjects as <code>RichGraphNode</code>ref
-	 *
-	 * @param property the property for which the subjects pointing to this node by that property are requested
-	 * @return the matching resources
-	 */
-	def /-(property: UriRef): CollectedIter[RichGraphNode] = {
-		new CollectedIter[RichGraphNode](() => new GraphNodeIter(getSubjects(property)), readLock)
-	}
-
-	/**
-	 * Get the elements of the rdf:List represented by this node
-	 * @return a List with the elements of the rdf:List represented by this node
-	 */
-	def !! = (for (listElem <- asList) yield {
-		new RichGraphNode(new GraphNode(listElem, getGraph))
-	}).toList
-
-	/**
-	 * get a specified of the rdf:List represented by this node
-	 *
-	 * @return the specified index value
-	 */
-	def %!!(index: Int) = new RichGraphNode(new GraphNode(asList.get(index),
-																												getGraph))
-
-	/**
-	 * produces a default String representation for the node, this is the lexical form of literals,
-	 * the unicode-string for UriRef and for BNodes the value returned by toString
-	 *
-	 * @return the default string representation of the node
-	 */
-	def * : String = {
-		getNode() match {
-			case lit: Literal => lit.getLexicalForm
-			case uri: UriRef => uri.getUnicodeString
-			case wrappedNode => wrappedNode.toString
-		}
-	}
-
-	private def asClass[T](clazz : Class[T]) : T= {
-		val typedLiteral = getNode().asInstanceOf[TypedLiteral]
-		clazz match {
-			case c if(c == classOf[Boolean])  => LiteralFactory.getInstance().createObject(
-					classOf[java.lang.Boolean], typedLiteral).booleanValue.asInstanceOf[T]
-			case _ => LiteralFactory.getInstance().createObject(clazz, typedLiteral)
-		}
-	}
-
-	/**
-	 * Creates an instance of specified Class-Type representing the value of the literal wrapped by this
-	 * <code>GraphNode</code>
-	 *
-	 * @return the literal represented by this node as instance of the specified type
-	 */
-	def as[T](implicit m: Manifest[T]): T = {
-		asClass(m.erasure.asInstanceOf[Class[T]])
-	}
-
-	/**
-	 * Operator syntax shortcut to get the <code>Resource</code> wrapped by this
-	 * <code>GraphNode</code>
-	 *
-	 * @return the node represented by this GraphNode as Resource, same as <code>getNode</code>
-	 */
-	def ! = {
-		getNode()
-	}
-
-	private class GraphNodeIter[T <: Resource](base: Iterator[T]) extends Iterator[RichGraphNode] {
-		override def hasNext() = {
-				base.hasNext();
-		}
-
-		override def next() : RichGraphNode = {
-			new RichGraphNode(new GraphNode(base.next(), getGraph));
-		}
-
-		override def remove() {
-			base.remove()
-		}
-	}
-
-	/**
-	 *Sets the RDF:type of the subject */
-	def a(rdfclass: UriRef): RichGraphNode = {
-		addProperty(RDF.`type`, rdfclass)
-		return this
-	}
-
-	/*
-	 * create an RichGraphNode from this one where the backing graph is protected from writes by a new
-	 * SimpleGraph.
-	 */
-	def protect(): RichGraphNode = new RichGraphNode(getNode, new UnionMGraph(new SimpleMGraph(), graph))
-
-
-	/**
-	 * relate the subject via the given relation to....
-	 */
-	def --(rel: Resource): DashTuple = new DashTuple(rel)
-
-	def --(rel: RichGraphNode): DashTuple = new DashTuple(rel.getNode)
-
-
-	/**
-	 * relate the subject via the inverse of the given relation to....
-	 */
-	def <--(tuple: RichGraphNode#DashTuple): RichGraphNode = {
-		val inversePropertyRes = tuple.first.getNode
-		val inverseProperty: UriRef =  inversePropertyRes match {
-			case p: UriRef => p
-			case _ => throw new RuntimeException("DashTuple must be a UriRef")
-		}
-		RichGraphNode.this.addInverseProperty(inverseProperty, tuple.second)
-		RichGraphNode.this
-	}
-
-
-	/** class for Inverse relations with the current RichGraphNode.ref as object */
-	//TODO add support for adding many for symmetry reasons
-//	class InverseDashTuple(rel: DashTuple) {
+  /**
+   * Construct a RichGraphNode given an existing [[GraphNde]]
+   *
+   * @param node The GraphNode to be wrapped
+   */
+   def this(node: GraphNode) = this(node.getNode, node.getGraph)
+   
+  /**
+   * Operator syntax shortcut to get all objects as <code>RichGraphNode</code>
+   *
+   * @return all objects of the specified property of the node wrapped by this object
+   */
+  def /(property: UriRef): CollectedIter[RichGraphNode] = {
+    new CollectedIter[RichGraphNode](() => new GraphNodeIter(getObjects(property)), readLock)
+  }
+
+  /**
+   * Operator syntax shortcut to get all subjects as <code>RichGraphNode</code>ref
+   *
+   * @param property the property for which the subjects pointing to this node by that property are requested
+   * @return the matching resources
+   */
+  def /-(property: UriRef): CollectedIter[RichGraphNode] = {
+    new CollectedIter[RichGraphNode](() => new GraphNodeIter(getSubjects(property)), readLock)
+  }
+
+  /**
+   * Get the elements of the rdf:List represented by this node
+   * @return a List with the elements of the rdf:List represented by this node
+   */
+  def !! = (for (listElem <- asList) yield {
+    new RichGraphNode(new GraphNode(listElem, getGraph))
+  }).toList
+
+  /**
+   * get a specified of the rdf:List represented by this node
+   *
+   * @return the specified index value
+   */
+  def %!!(index: Int) = new RichGraphNode(new GraphNode(asList.get(index),
+                                                        getGraph))
+
+  /**
+   * produces a default String representation for the node, this is the lexical form of literals,
+   * the unicode-string for UriRef and for BNodes the value returned by toString
+   *
+   * @return the default string representation of the node
+   */
+  def * : String = {
+    getNode() match {
+      case lit: Literal => lit.getLexicalForm
+      case uri: UriRef => uri.getUnicodeString
+      case wrappedNode => wrappedNode.toString
+    }
+  }
+
+  private def asClass[T](clazz : Class[T]) : T= {
+    val typedLiteral = getNode().asInstanceOf[TypedLiteral]
+    clazz match {
+      case c if(c == classOf[Boolean])  => LiteralFactory.getInstance().createObject(
+          classOf[java.lang.Boolean], typedLiteral).booleanValue.asInstanceOf[T]
+      case _ => LiteralFactory.getInstance().createObject(clazz, typedLiteral)
+    }
+  }
+
+  /**
+   * Creates an instance of specified Class-Type representing the value of the literal wrapped by this
+   * <code>GraphNode</code>
+   *
+   * @return the literal represented by this node as instance of the specified type
+   */
+  def as[T](implicit m: Manifest[T]): T = {
+    asClass(m.erasure.asInstanceOf[Class[T]])
+  }
+
+  /**
+   * Operator syntax shortcut to get the <code>Resource</code> wrapped by this
+   * <code>GraphNode</code>
+   *
+   * @return the node represented by this GraphNode as Resource, same as <code>getNode</code>
+   */
+  def ! = {
+    getNode()
+  }
+
+  private class GraphNodeIter[T <: Resource](base: Iterator[T]) extends Iterator[RichGraphNode] {
+    override def hasNext() = {
+        base.hasNext();
+    }
+
+    override def next() : RichGraphNode = {
+      new RichGraphNode(new GraphNode(base.next(), getGraph));
+    }
+
+    override def remove() {
+      base.remove()
+    }
+  }
+
+  /**
+   *Sets the RDF:type of the subject */
+  def a(rdfclass: UriRef): RichGraphNode = {
+    addProperty(RDF.`type`, rdfclass)
+    return this
+  }
+
+  /*
+   * create an RichGraphNode from this one where the backing graph is protected from writes by a new
+   * SimpleGraph.
+   */
+  def protect(): RichGraphNode = new RichGraphNode(getNode, new UnionMGraph(new SimpleMGraph(), graph))
+
+
+  /**
+   * relate the subject via the given relation to....
+   */
+  def --(rel: Resource): DashTuple = new DashTuple(rel)
+
+  def --(rel: RichGraphNode): DashTuple = new DashTuple(rel.getNode)
+
+
+  /**
+   * relate the subject via the inverse of the given relation to....
+   */
+  def <--(tuple: RichGraphNode#DashTuple): RichGraphNode = {
+    val inversePropertyRes = tuple.first.getNode
+    val inverseProperty: UriRef =  inversePropertyRes match {
+      case p: UriRef => p
+      case _ => throw new RuntimeException("DashTuple must be a UriRef")
+    }
+    RichGraphNode.this.addInverseProperty(inverseProperty, tuple.second)
+    RichGraphNode.this
+  }
+
+
+  /** class for Inverse relations with the current RichGraphNode.ref as object */
+  //TODO add support for adding many for symmetry reasons
+//  class InverseDashTuple(rel: DashTuple) {
 //
-//		/**
-//		 * ...to the following non literal
-//		 */
-//		def --(subj: NonLiteral): RichGraphNode = {
-//			RichGraphNode.this.addInverseProperty(rel, subj)
-//			RichGraphNode.this
-//		}
+//    /**
+//     * ...to the following non literal
+//     */
+//    def --(subj: NonLiteral): RichGraphNode = {
+//      RichGraphNode.this.addInverseProperty(rel, subj)
+//      RichGraphNode.this
+//    }
 //
-//		/**
-//		 * ...to the following resource (given as a string)
-//		 */
-//		def --(subj: String): RichGraphNode = --(new UriRef(subj))
+//    /**
+//     * ...to the following resource (given as a string)
+//     */
+//    def --(subj: String): RichGraphNode = --(new UriRef(subj))
 //
-//		/**
-//		 * ...to the following EzGraphNode
-//		 * (useful for opening a new parenthesis and specifying other things in more detail
-//		 */
-//		def --(subj: GraphNode): RichGraphNode = {
-//			--(subj.getNode.asInstanceOf[NonLiteral])
-//		}
-//		// since we can only have inverses from non literals (howto deal with bndoes?)
-//	}
-
-	/**
-	 *  class for relations with the current RichGraphNode.ref as subject
-	 */
-	class DashTuple(val second: Resource) {
-
-		val first = RichGraphNode.this
-		/**
-		 * ...to the following non resource
-		 */
-		def -->(obj: Resource): RichGraphNode = {
-			val property = second match {
-				case u: UriRef => u;
-				case _ => throw new RuntimeException("Property must be a UriRef")
-			}
-			RichGraphNode.this.addProperty(property, obj)
-			RichGraphNode.this
-		}
-
-
-		/**
-		 * ...to the EzGraphNode, which is useful for opening a parenthesis.
-		 */
-		def -->(sub: GraphNode): RichGraphNode = {
-			//RichGraphNode.this + sub
-			-->(sub.getNode)
-		}
-		/**
-		 * Add one relation for each member of the iterable collection
-		 */
-		def -->>[T <: Resource](uris: Iterable[T]): RichGraphNode = {
-			for (u <- uris) -->(u)
-			RichGraphNode.this
-		}
-	}
+//    /**
+//     * ...to the following EzGraphNode
+//     * (useful for opening a new parenthesis and specifying other things in more detail
+//     */
+//    def --(subj: GraphNode): RichGraphNode = {
+//      --(subj.getNode.asInstanceOf[NonLiteral])
+//    }
+//    // since we can only have inverses from non literals (howto deal with bndoes?)
+//  }
+
+  /**
+   *  class for relations with the current RichGraphNode.ref as subject
+   */
+  class DashTuple(val second: Resource) {
+
+    val first = RichGraphNode.this
+    /**
+     * ...to the following non resource
+     */
+    def -->(obj: Resource): RichGraphNode = {
+      val property = second match {
+        case u: UriRef => u;
+        case _ => throw new RuntimeException("Property must be a UriRef")
+      }
+      RichGraphNode.this.addProperty(property, obj)
+      RichGraphNode.this
+    }
+
+
+    /**
+     * ...to the EzGraphNode, which is useful for opening a parenthesis.
+     */
+    def -->(sub: GraphNode): RichGraphNode = {
+      //RichGraphNode.this + sub
+      -->(sub.getNode)
+    }
+    /**
+     * Add one relation for each member of the iterable collection
+     */
+    def -->>[T <: Resource](uris: Iterable[T]): RichGraphNode = {
+      for (u <- uris) -->(u)
+      RichGraphNode.this
+    }
+  }
 }
 
 

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EzMGraphTest.scala
----------------------------------------------------------------------
diff --git a/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EzMGraphTest.scala b/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EzMGraphTest.scala
index b4dbe6d..946d77e 100644
--- a/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EzMGraphTest.scala
+++ b/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EzMGraphTest.scala
@@ -29,7 +29,7 @@ import org.apache.clerezza.rdf.ontologies._
  */ 
 class EzMGraphTest {
 
-	val bblfishModulus = """
+  val bblfishModulus = """
     9D ☮ 79 ☮ BF ☮ E2 ☮ F4 ☮ 98 ☮ BC ☮ 79 ☮ 6D ☮ AB ☮ 73 ☮ E2 ☮ 8B ☮ 39 ☮ 4D ☮ B5 26 ✜ 68 ✜ 49 ✜ EE ✜ 71 ✜ 87 ✜
     06 ✜ 32 ✜ C9 ✜ 9F ✜ 3F ✜ 94 ✜ E5 ✜ CB ✜ 4D ✜ B5 12 ☮ 35 ☮ 13 ☮ 69 ☮ 60 ☮ 81 ☮ 58 ☮ 79 ☮ 66 ☮ F3 ☮ 79 ☮ 20 ☮
     91 ☮ 6A ☮ 3F ☮ 42 5A ✜ F6 ✜ 54 ✜ 42 ✜ 88 ✜ B2 ✜ E9 ✜ 19 ✜ 4A ✜ 79 ✜ 87 ✜ 2E ✜ 62 ✜ 44 ✜ 2D ✜ 7C 06 ☽ 78 ☽ F8
@@ -38,116 +38,116 @@ class EzMGraphTest {
     ☾ 56 87 ☮ 8D ☮ B8 ☮ 7C ☮ C6 ☮ FE ☮ E9 ☮ 61 ☮ 88 ☮ 08 ☮ 61 ☮ DD ☮ E3 ☮ B8 ☮ B5 ☮ 47 ♥
     """
 
-	/**import some references in order to reduce dependencies */
-
-	final val hex: UriRef = new UriRef("http://www.w3.org/ns/auth/cert#hex")
-	final val identity: UriRef = new UriRef("http://www.w3.org/ns/auth/cert#identity")
-	final val RSAPublicKey: UriRef = new UriRef("http://www.w3.org/ns/auth/rsa#RSAPublicKey")
-	final val modulus: UriRef = new UriRef("http://www.w3.org/ns/auth/rsa#modulus")
-	final val public_exponent: UriRef = new UriRef("http://www.w3.org/ns/auth/rsa#public_exponent")
-
-	val henryUri: String = "http://bblfish.net/#hjs"
-	val retoUri: String = "http://farewellutopia.com/reto/#me"
-	val danbriUri: String = "http://danbri.org/foaf.rdf#danbri"
-
-
-	private val tinyGraph: Graph = {
-		val gr = new SimpleMGraph
-		val reto = new BNode()
-		val danny = new BNode()
-		val henry = new UriRef(henryUri)
-
-		gr.add(new TripleImpl(reto, RDF.`type`, FOAF.Person))
-		gr.add(new TripleImpl(reto, FOAF.name, new PlainLiteralImpl("Reto Bachman-Gmür", new Language("rm"))))
-		//it is difficult to remember that one needs to put a string literal if one does not want to specify a language
-		gr.add(new TripleImpl(reto, FOAF.title, new TypedLiteralImpl("Mr", XSD.string)))
-		gr.add(new TripleImpl(reto, FOAF.currentProject, new UriRef("http://clerezza.org/")))
-		gr.add(new TripleImpl(reto, FOAF.knows, henry))
-		gr.add(new TripleImpl(reto, FOAF.knows, danny))
-
-		gr.add(new TripleImpl(danny, FOAF.name, new PlainLiteralImpl("Danny Ayers", new Language("en"))))
-		gr.add(new TripleImpl(danny, RDF.`type`, FOAF.Person))
-		gr.add(new TripleImpl(danny, FOAF.knows, henry))
-		gr.add(new TripleImpl(danny, FOAF.knows, reto))
-
-		gr.add(new TripleImpl(henry, FOAF.name, new TypedLiteralImpl("Henry Story", XSD.string))) //It is tricky to remember that one needs this for pure strings
-		gr.add(new TripleImpl(henry, FOAF.currentProject, new UriRef("http://webid.info/")))
-		gr.add(new TripleImpl(henry, RDF.`type`, FOAF.Person))
-		gr.add(new TripleImpl(henry, FOAF.knows, danny))
-		gr.add(new TripleImpl(henry, FOAF.knows, reto))
-
-		val pk = new BNode()
-		gr.add(new TripleImpl(pk, RDF.`type`, RSAPublicKey))
-		gr.add(new TripleImpl(pk, identity, henry))
-		gr.add(new TripleImpl(pk, modulus, LiteralFactory.getInstance().createTypedLiteral(65537)))
-		gr.add(new TripleImpl(pk, public_exponent, new TypedLiteralImpl(bblfishModulus, hex)))
-		gr.getGraph
-	}
-
-
-	@Test
-	def singleTriple {
-		val expected = {
-			val s = new SimpleMGraph
-			s.add(new TripleImpl(henryUri.uri, FOAF.knows, retoUri.uri))
-			s.getGraph
-		}
-		val ez = new EzMGraph() {
-			henryUri.uri -- FOAF.knows --> retoUri.uri
-		}
-		Assert.assertEquals("The two graphs should be equals", expected, ez.getGraph)
-	}
-
-	@Test
-	def inverseTriple {
-		val expected = {
-			val s = new SimpleMGraph
-			s.add(new TripleImpl(retoUri.uri, FOAF.knows, henryUri.uri))
-			s.getGraph
-		}
-		val ez = new EzMGraph() {
-			henryUri.uri <--  FOAF.knows -- retoUri.uri
-		}
-		Assert.assertEquals("The two graphs should be equals", expected, ez.getGraph)
-	}
-
-	@Test
-	def usingAsciiArrows {
-		val ez = new EzMGraph() {(
-			b_("reto").a(FOAF.Person) -- FOAF.name --> "Reto Bachman-Gmür".lang("rm")
-				-- FOAF.title --> "Mr"
-				-- FOAF.currentProject --> "http://clerezza.org/".uri
-				-- FOAF.knows --> (
-					"http://bblfish.net/#hjs".uri.a(FOAF.Person)
-						-- FOAF.name --> "Henry Story"
-				      -- FOAF.currentProject --> "http://webid.info/".uri
-				      -- FOAF.knows -->> List(b_("reto"), b_("danny"))
-				  //one need to list properties before inverse properties, or use brackets
-				  <-- identity -- (
-						   bnode.a(RSAPublicKey) //. notation because of precedence of operators
-							   -- modulus --> 65537
-							   -- public_exponent --> (bblfishModulus^^hex) // brackets needed due to precedence
-						   )  
-				)
-				-- FOAF.knows --> (
-					b_("danny").a(FOAF.Person)
-						-- FOAF.name --> "Danny Ayers".lang("en")
-				      -- FOAF.knows --> "http://bblfish.net/#hjs".uri //knows
-						-- FOAF.knows --> b_("reto")
-				)
-		)}
-		Assert.assertEquals("the two graphs should be of same size",tinyGraph.size,ez.size)
-		Assert.assertEquals("Both graphs should contain exactly the same triples",tinyGraph,ez.getGraph)
-		//We can add triples by creating a new anonymous instance
-		new EzMGraph(ez) {(
-			"http://bblfish.net/#hjs".uri -- FOAF.name --> "William"
-			-- FOAF.name --> "Bill"
-		)}
-		Assert.assertEquals("the triple colletion has grown by one",tinyGraph.size()+2,ez.size)
-		//or by just importing it
-		import ez._
-		ez.b_("danny") -- FOAF.name --> "George"
-		Assert.assertEquals("the triple colletion has grown by one",tinyGraph.size()+3,ez.size)
-	}
+  /**import some references in order to reduce dependencies */
+
+  final val hex: UriRef = new UriRef("http://www.w3.org/ns/auth/cert#hex")
+  final val identity: UriRef = new UriRef("http://www.w3.org/ns/auth/cert#identity")
+  final val RSAPublicKey: UriRef = new UriRef("http://www.w3.org/ns/auth/rsa#RSAPublicKey")
+  final val modulus: UriRef = new UriRef("http://www.w3.org/ns/auth/rsa#modulus")
+  final val public_exponent: UriRef = new UriRef("http://www.w3.org/ns/auth/rsa#public_exponent")
+
+  val henryUri: String = "http://bblfish.net/#hjs"
+  val retoUri: String = "http://farewellutopia.com/reto/#me"
+  val danbriUri: String = "http://danbri.org/foaf.rdf#danbri"
+
+
+  private val tinyGraph: Graph = {
+    val gr = new SimpleMGraph
+    val reto = new BNode()
+    val danny = new BNode()
+    val henry = new UriRef(henryUri)
+
+    gr.add(new TripleImpl(reto, RDF.`type`, FOAF.Person))
+    gr.add(new TripleImpl(reto, FOAF.name, new PlainLiteralImpl("Reto Bachman-Gmür", new Language("rm"))))
+    //it is difficult to remember that one needs to put a string literal if one does not want to specify a language
+    gr.add(new TripleImpl(reto, FOAF.title, new TypedLiteralImpl("Mr", XSD.string)))
+    gr.add(new TripleImpl(reto, FOAF.currentProject, new UriRef("http://clerezza.org/")))
+    gr.add(new TripleImpl(reto, FOAF.knows, henry))
+    gr.add(new TripleImpl(reto, FOAF.knows, danny))
+
+    gr.add(new TripleImpl(danny, FOAF.name, new PlainLiteralImpl("Danny Ayers", new Language("en"))))
+    gr.add(new TripleImpl(danny, RDF.`type`, FOAF.Person))
+    gr.add(new TripleImpl(danny, FOAF.knows, henry))
+    gr.add(new TripleImpl(danny, FOAF.knows, reto))
+
+    gr.add(new TripleImpl(henry, FOAF.name, new TypedLiteralImpl("Henry Story", XSD.string))) //It is tricky to remember that one needs this for pure strings
+    gr.add(new TripleImpl(henry, FOAF.currentProject, new UriRef("http://webid.info/")))
+    gr.add(new TripleImpl(henry, RDF.`type`, FOAF.Person))
+    gr.add(new TripleImpl(henry, FOAF.knows, danny))
+    gr.add(new TripleImpl(henry, FOAF.knows, reto))
+
+    val pk = new BNode()
+    gr.add(new TripleImpl(pk, RDF.`type`, RSAPublicKey))
+    gr.add(new TripleImpl(pk, identity, henry))
+    gr.add(new TripleImpl(pk, modulus, LiteralFactory.getInstance().createTypedLiteral(65537)))
+    gr.add(new TripleImpl(pk, public_exponent, new TypedLiteralImpl(bblfishModulus, hex)))
+    gr.getGraph
+  }
+
+
+  @Test
+  def singleTriple {
+    val expected = {
+      val s = new SimpleMGraph
+      s.add(new TripleImpl(henryUri.uri, FOAF.knows, retoUri.uri))
+      s.getGraph
+    }
+    val ez = new EzMGraph() {
+      henryUri.uri -- FOAF.knows --> retoUri.uri
+    }
+    Assert.assertEquals("The two graphs should be equals", expected, ez.getGraph)
+  }
+
+  @Test
+  def inverseTriple {
+    val expected = {
+      val s = new SimpleMGraph
+      s.add(new TripleImpl(retoUri.uri, FOAF.knows, henryUri.uri))
+      s.getGraph
+    }
+    val ez = new EzMGraph() {
+      henryUri.uri <--  FOAF.knows -- retoUri.uri
+    }
+    Assert.assertEquals("The two graphs should be equals", expected, ez.getGraph)
+  }
+
+  @Test
+  def usingAsciiArrows {
+    val ez = new EzMGraph() {(
+      b_("reto").a(FOAF.Person) -- FOAF.name --> "Reto Bachman-Gmür".lang("rm")
+        -- FOAF.title --> "Mr"
+        -- FOAF.currentProject --> "http://clerezza.org/".uri
+        -- FOAF.knows --> (
+          "http://bblfish.net/#hjs".uri.a(FOAF.Person)
+            -- FOAF.name --> "Henry Story"
+              -- FOAF.currentProject --> "http://webid.info/".uri
+              -- FOAF.knows -->> List(b_("reto"), b_("danny"))
+          //one need to list properties before inverse properties, or use brackets
+          <-- identity -- (
+               bnode.a(RSAPublicKey) //. notation because of precedence of operators
+                 -- modulus --> 65537
+                 -- public_exponent --> (bblfishModulus^^hex) // brackets needed due to precedence
+               )  
+        )
+        -- FOAF.knows --> (
+          b_("danny").a(FOAF.Person)
+            -- FOAF.name --> "Danny Ayers".lang("en")
+              -- FOAF.knows --> "http://bblfish.net/#hjs".uri //knows
+            -- FOAF.knows --> b_("reto")
+        )
+    )}
+    Assert.assertEquals("the two graphs should be of same size",tinyGraph.size,ez.size)
+    Assert.assertEquals("Both graphs should contain exactly the same triples",tinyGraph,ez.getGraph)
+    //We can add triples by creating a new anonymous instance
+    new EzMGraph(ez) {(
+      "http://bblfish.net/#hjs".uri -- FOAF.name --> "William"
+      -- FOAF.name --> "Bill"
+    )}
+    Assert.assertEquals("the triple colletion has grown by one",tinyGraph.size()+2,ez.size)
+    //or by just importing it
+    import ez._
+    ez.b_("danny") -- FOAF.name --> "George"
+    Assert.assertEquals("the triple colletion has grown by one",tinyGraph.size()+3,ez.size)
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
----------------------------------------------------------------------
diff --git a/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala b/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
index 0f507ed..0131691 100644
--- a/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
+++ b/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
@@ -27,139 +27,139 @@ import Preamble._
 
 class RichGraphNodeTest {
 
-	private val johnUri = new UriRef("http://example.org/john")
-	private val susanneUri = new UriRef("http://example.org/susanne")
-	private val listUri = new UriRef("http://example.org/list")
-	private val greetingsUri = new UriRef("http://example.org/greetings")
-	private val billBNode = new BNode()
-	private var node : RichGraphNode = null;
-	private var mGraph = new SimpleMGraph()
-
-	@Before
-	def prepare() = {
-		mGraph.add(new TripleImpl(johnUri, FOAF.name, new PlainLiteralImpl("John")));
-		mGraph.add(new TripleImpl(johnUri, FOAF.nick, new PlainLiteralImpl("johny")));
-		mGraph.add(new TripleImpl(johnUri, FOAF.name, new PlainLiteralImpl("Johnathan Guller")));
-		mGraph.add(new TripleImpl(johnUri, FOAF.knows, billBNode))
-		mGraph.add(new TripleImpl(johnUri, RDF.`type`, FOAF.Person));
-		mGraph.add(new TripleImpl(billBNode, FOAF.nick, new PlainLiteralImpl("Bill")));
-		mGraph.add(new TripleImpl(billBNode, FOAF.name, new PlainLiteralImpl("William")));
-		mGraph.add(new TripleImpl(billBNode, RDF.`type`, FOAF.Person));
-		mGraph.add(new TripleImpl(susanneUri, FOAF.knows, johnUri));
-		mGraph.add(new TripleImpl(susanneUri, FOAF.name, new PlainLiteralImpl("Susanne")));
-		mGraph.add(new TripleImpl(susanneUri, RDF.`type`, FOAF.Person));
-		val rdfList = new RdfList(listUri, mGraph);
-		rdfList.add(johnUri)
-		rdfList.add(new PlainLiteralImpl("foo"))
-		rdfList.add(new PlainLiteralImpl("bar"))
-		mGraph.add(new TripleImpl(johnUri, SKOS.related, listUri))
-		val litEn = new PlainLiteralImpl("hello",
-					new Language("en"))
-		val litFr = new PlainLiteralImpl("satul",
-					new Language("fr"))
-		mGraph.add(new TripleImpl(greetingsUri, RDF.value, litEn))
-		mGraph.add(new TripleImpl(greetingsUri, RDF.value, litFr))
-		node = new GraphNode(johnUri, mGraph)
-	}
-
-	@Test
-	def testBaseGraph {
-		val preamble = new Preamble(mGraph)
-		import preamble._
-		def asGn(gn: GraphNode)  = gn
-		val johnUriNode = asGn(johnUri)
-		Assert.assertEquals(johnUriNode, node)
-	}
-
-	@Test
-	def testSlash = {
-		val rNode = new RichGraphNode(node)
-		Assert.assertEquals(new PlainLiteralImpl("johny"), (rNode/FOAF.nick)(0).getNode)
-		Assert.assertEquals(2, (rNode/FOAF.name).length(20))
-		val stringNames = (for(name <- (rNode/FOAF.name).iterator) yield {
-			name.toString
-		}).toList
-		Assert.assertTrue(stringNames.contains("\"Johnathan Guller\""))
-		Assert.assertTrue(stringNames.contains("\"John\""))
-	}
-
-	@Test
-	def testIterate = {
-		val simple: MGraph = new SimpleMGraph();
-		val node = new GraphNode(new BNode(), simple);
-		node.addProperty(DCTERMS.provenance, new UriRef("http://example.org/foo"));
-		node.addProperty(DCTERMS.language, new UriRef("http://www.bluewin.ch/"));
-		simple.add(new TripleImpl(new UriRef("http://www.bluewin.ch/"),RDF.`type`, RDFS.Container));
-		node.addProperty(RDF.`type`, PLATFORM.HeadedPage);
-		node.addProperty(RDF.`type`, RDFS.Class);
-		val test: CollectedIter[RichGraphNode] = node/DCTERMS.language/RDF.`type`;
-		Assert.assertEquals(1, test.length)
-		var counter = 0;
-		for(k <- test) { counter = counter + 1 }
-		Assert.assertEquals(1, counter)
-	}
-
-	@Test
-	def testInverse = {
-		val rNode = new RichGraphNode(node)
-		Assert.assertEquals(1, (rNode/-FOAF.knows).length)
-	}
-
-	@Test
-	def testMissingProperty = {
-		val rNode = new RichGraphNode(node)
-		Assert.assertEquals(0, (rNode/FOAF.thumbnail).length)
-		Assert.assertEquals("", rNode/FOAF.thumbnail*)
-
-	}
-
-	@Test
-	def testInverseImplicit = {
-		Assert.assertEquals(1, (node/-FOAF.knows).length)
-	}
-
-	@Test
-	def testPath = {
-		Assert.assertEquals(1, (node/-FOAF.knows).length)
-		Assert.assertEquals(new PlainLiteralImpl("Susanne"), node/-FOAF.knows%0/FOAF.name%0!)
-		Assert.assertEquals(new PlainLiteralImpl("Susanne"), ((node/-FOAF.knows)(0)/FOAF.name)(0)!)
-		Assert.assertEquals(new PlainLiteralImpl("Susanne"), node/-FOAF.knows/FOAF.name!)
-		Assert.assertEquals(new PlainLiteralImpl("Bill"), node/FOAF.knows/FOAF.nick!)
-		Assert.assertEquals("Bill", (node/FOAF.knows/FOAF.nick)(0)*)
-		Assert.assertEquals("Bill", node/FOAF.knows/FOAF.nick*)
-	}
-
-	@Test
-	def testLists = {
-		Assert.assertEquals(new PlainLiteralImpl("foo"),(node/SKOS.related).asList().get(1))
-		Assert.assertEquals(new PlainLiteralImpl("foo"), (node/SKOS.related%0!!)(1)!)
-		Assert.assertEquals(new PlainLiteralImpl("foo"),
-							(for (value <- node/SKOS.related%0!!) yield value!).toList(1))
-		Assert.assertEquals(new PlainLiteralImpl("bar"),
-							(for (value <- node/SKOS.related%0!!) yield value!).toList(2))
-		Assert.assertEquals(new PlainLiteralImpl("foo"), node/SKOS.related%0%!!1!)
-	}
-
-	@Test
-	def sortProperties = {
-		Assert.assertEquals(new PlainLiteralImpl("bar"), (node/SKOS.related%0!!).sortWith((a,b) => ((a*) < (b*)))(0)!)
-		Assert.assertEquals(johnUri, (node/SKOS.related%0!!).sortWith((a,b) => ((a*) > (b*)))(0)!)
-	}
-
-	@Test
-	def literalAsObject = {
-		val dateLiteral = new TypedLiteralImpl("2009-01-01T01:33:58Z",
-					new UriRef("http://www.w3.org/2001/XMLSchema#dateTime"))
-		val node = new GraphNode(dateLiteral, new SimpleMGraph())
-		Assert.assertNotNull(node.as[java.util.Date])
-	}
-
-	@Test
-	def literalLanguage = {
-		node = new GraphNode(greetingsUri, mGraph)
-		val lang = new Language("en")
-		val enValue = (node/RDF.value).find(l=>(l!).asInstanceOf[PlainLiteral].getLanguage == lang).get
-		Assert.assertEquals("hello", enValue*)
-	}
+  private val johnUri = new UriRef("http://example.org/john")
+  private val susanneUri = new UriRef("http://example.org/susanne")
+  private val listUri = new UriRef("http://example.org/list")
+  private val greetingsUri = new UriRef("http://example.org/greetings")
+  private val billBNode = new BNode()
+  private var node : RichGraphNode = null;
+  private var mGraph = new SimpleMGraph()
+
+  @Before
+  def prepare() = {
+    mGraph.add(new TripleImpl(johnUri, FOAF.name, new PlainLiteralImpl("John")));
+    mGraph.add(new TripleImpl(johnUri, FOAF.nick, new PlainLiteralImpl("johny")));
+    mGraph.add(new TripleImpl(johnUri, FOAF.name, new PlainLiteralImpl("Johnathan Guller")));
+    mGraph.add(new TripleImpl(johnUri, FOAF.knows, billBNode))
+    mGraph.add(new TripleImpl(johnUri, RDF.`type`, FOAF.Person));
+    mGraph.add(new TripleImpl(billBNode, FOAF.nick, new PlainLiteralImpl("Bill")));
+    mGraph.add(new TripleImpl(billBNode, FOAF.name, new PlainLiteralImpl("William")));
+    mGraph.add(new TripleImpl(billBNode, RDF.`type`, FOAF.Person));
+    mGraph.add(new TripleImpl(susanneUri, FOAF.knows, johnUri));
+    mGraph.add(new TripleImpl(susanneUri, FOAF.name, new PlainLiteralImpl("Susanne")));
+    mGraph.add(new TripleImpl(susanneUri, RDF.`type`, FOAF.Person));
+    val rdfList = new RdfList(listUri, mGraph);
+    rdfList.add(johnUri)
+    rdfList.add(new PlainLiteralImpl("foo"))
+    rdfList.add(new PlainLiteralImpl("bar"))
+    mGraph.add(new TripleImpl(johnUri, SKOS.related, listUri))
+    val litEn = new PlainLiteralImpl("hello",
+          new Language("en"))
+    val litFr = new PlainLiteralImpl("satul",
+          new Language("fr"))
+    mGraph.add(new TripleImpl(greetingsUri, RDF.value, litEn))
+    mGraph.add(new TripleImpl(greetingsUri, RDF.value, litFr))
+    node = new GraphNode(johnUri, mGraph)
+  }
+
+  @Test
+  def testBaseGraph {
+    val preamble = new Preamble(mGraph)
+    import preamble._
+    def asGn(gn: GraphNode)  = gn
+    val johnUriNode = asGn(johnUri)
+    Assert.assertEquals(johnUriNode, node)
+  }
+
+  @Test
+  def testSlash = {
+    val rNode = new RichGraphNode(node)
+    Assert.assertEquals(new PlainLiteralImpl("johny"), (rNode/FOAF.nick)(0).getNode)
+    Assert.assertEquals(2, (rNode/FOAF.name).length(20))
+    val stringNames = (for(name <- (rNode/FOAF.name).iterator) yield {
+      name.toString
+    }).toList
+    Assert.assertTrue(stringNames.contains("\"Johnathan Guller\""))
+    Assert.assertTrue(stringNames.contains("\"John\""))
+  }
+
+  @Test
+  def testIterate = {
+    val simple: MGraph = new SimpleMGraph();
+    val node = new GraphNode(new BNode(), simple);
+    node.addProperty(DCTERMS.provenance, new UriRef("http://example.org/foo"));
+    node.addProperty(DCTERMS.language, new UriRef("http://www.bluewin.ch/"));
+    simple.add(new TripleImpl(new UriRef("http://www.bluewin.ch/"),RDF.`type`, RDFS.Container));
+    node.addProperty(RDF.`type`, PLATFORM.HeadedPage);
+    node.addProperty(RDF.`type`, RDFS.Class);
+    val test: CollectedIter[RichGraphNode] = node/DCTERMS.language/RDF.`type`;
+    Assert.assertEquals(1, test.length)
+    var counter = 0;
+    for(k <- test) { counter = counter + 1 }
+    Assert.assertEquals(1, counter)
+  }
+
+  @Test
+  def testInverse = {
+    val rNode = new RichGraphNode(node)
+    Assert.assertEquals(1, (rNode/-FOAF.knows).length)
+  }
+
+  @Test
+  def testMissingProperty = {
+    val rNode = new RichGraphNode(node)
+    Assert.assertEquals(0, (rNode/FOAF.thumbnail).length)
+    Assert.assertEquals("", rNode/FOAF.thumbnail*)
+
+  }
+
+  @Test
+  def testInverseImplicit = {
+    Assert.assertEquals(1, (node/-FOAF.knows).length)
+  }
+
+  @Test
+  def testPath = {
+    Assert.assertEquals(1, (node/-FOAF.knows).length)
+    Assert.assertEquals(new PlainLiteralImpl("Susanne"), node/-FOAF.knows%0/FOAF.name%0!)
+    Assert.assertEquals(new PlainLiteralImpl("Susanne"), ((node/-FOAF.knows)(0)/FOAF.name)(0)!)
+    Assert.assertEquals(new PlainLiteralImpl("Susanne"), node/-FOAF.knows/FOAF.name!)
+    Assert.assertEquals(new PlainLiteralImpl("Bill"), node/FOAF.knows/FOAF.nick!)
+    Assert.assertEquals("Bill", (node/FOAF.knows/FOAF.nick)(0)*)
+    Assert.assertEquals("Bill", node/FOAF.knows/FOAF.nick*)
+  }
+
+  @Test
+  def testLists = {
+    Assert.assertEquals(new PlainLiteralImpl("foo"),(node/SKOS.related).asList().get(1))
+    Assert.assertEquals(new PlainLiteralImpl("foo"), (node/SKOS.related%0!!)(1)!)
+    Assert.assertEquals(new PlainLiteralImpl("foo"),
+              (for (value <- node/SKOS.related%0!!) yield value!).toList(1))
+    Assert.assertEquals(new PlainLiteralImpl("bar"),
+              (for (value <- node/SKOS.related%0!!) yield value!).toList(2))
+    Assert.assertEquals(new PlainLiteralImpl("foo"), node/SKOS.related%0%!!1!)
+  }
+
+  @Test
+  def sortProperties = {
+    Assert.assertEquals(new PlainLiteralImpl("bar"), (node/SKOS.related%0!!).sortWith((a,b) => ((a*) < (b*)))(0)!)
+    Assert.assertEquals(johnUri, (node/SKOS.related%0!!).sortWith((a,b) => ((a*) > (b*)))(0)!)
+  }
+
+  @Test
+  def literalAsObject = {
+    val dateLiteral = new TypedLiteralImpl("2009-01-01T01:33:58Z",
+          new UriRef("http://www.w3.org/2001/XMLSchema#dateTime"))
+    val node = new GraphNode(dateLiteral, new SimpleMGraph())
+    Assert.assertNotNull(node.as[java.util.Date])
+  }
+
+  @Test
+  def literalLanguage = {
+    node = new GraphNode(greetingsUri, mGraph)
+    val lang = new Language("en")
+    val enValue = (node/RDF.value).find(l=>(l!).asInstanceOf[PlainLiteral].getLanguage == lang).get
+    Assert.assertEquals("hello", enValue*)
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/TypeConversionTest.scala
----------------------------------------------------------------------
diff --git a/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/TypeConversionTest.scala b/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/TypeConversionTest.scala
index aa86c35..6190d4e 100644
--- a/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/TypeConversionTest.scala
+++ b/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/TypeConversionTest.scala
@@ -25,47 +25,47 @@ import com.sun.xml.internal.ws.developer.MemberSubmissionAddressing.Validation
 
 class TypeConversionTest {
 
-	private val literalFactory = LiteralFactory.getInstance()
+  private val literalFactory = LiteralFactory.getInstance()
 
-	import Preamble._
+  import Preamble._
 
-	@Test
-	def useStringAsObject {
-		val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value")
-		Assert.assertEquals(literalFactory.createTypedLiteral("a value"), t.getObject)
-	}
+  @Test
+  def useStringAsObject {
+    val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value")
+    Assert.assertEquals(literalFactory.createTypedLiteral("a value"), t.getObject)
+  }
 
-	/*@Test
-	def useStringWithLanguageTag {
-		val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value"("en"))
-		Assert.assertEquals(new PlainLiteralImpl("a value", new Language("en")), t.getObject)
-	}*/
+  /*@Test
+  def useStringWithLanguageTag {
+    val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value"("en"))
+    Assert.assertEquals(new PlainLiteralImpl("a value", new Language("en")), t.getObject)
+  }*/
 
-	@Test
-	def useStringWithLanguageTag {
-	   val lit = new PlainLiteralImpl("a value", new Language("en"))
-		val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value" lang "en")
-		Assert.assertEquals(lit, t.getObject)
-	}
+  @Test
+  def useStringWithLanguageTag {
+     val lit = new PlainLiteralImpl("a value", new Language("en"))
+    val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value" lang "en")
+    Assert.assertEquals(lit, t.getObject)
+  }
 
-	@Test
-	def useStringWithType {
-		val typeUri = new UriRef("http://example.org/dt")
-		val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value"^^typeUri)
-		Assert.assertEquals(new TypedLiteralImpl("a value", typeUri), t.getObject)
-	}
+  @Test
+  def useStringWithType {
+    val typeUri = new UriRef("http://example.org/dt")
+    val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "a value"^^typeUri)
+    Assert.assertEquals(new TypedLiteralImpl("a value", typeUri), t.getObject)
+  }
 
-	@Test
-	def literaToString {
-		val lit = literalFactory.createTypedLiteral("a value")
-		val s: String = lit
-		Assert.assertEquals("a value", s)
-	}
+  @Test
+  def literaToString {
+    val lit = literalFactory.createTypedLiteral("a value")
+    val s: String = lit
+    Assert.assertEquals("a value", s)
+  }
 
-	@Test
-	def dotUri {
-		val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "http://example.org".uri)
-		Assert.assertEquals(new UriRef("http://example.org"), t.getObject)
-	}
+  @Test
+  def dotUri {
+    val t = new TripleImpl(new UriRef(("http://example.org/subject")), new UriRef(("http://example.org/predicate")), "http://example.org".uri)
+    Assert.assertEquals(new UriRef("http://example.org"), t.getObject)
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/rdf.storage.web/src/main/scala/WebProxy.scala
----------------------------------------------------------------------
diff --git a/rdf.storage.web/src/main/scala/WebProxy.scala b/rdf.storage.web/src/main/scala/WebProxy.scala
index 08ac5a9..c482dd2 100644
--- a/rdf.storage.web/src/main/scala/WebProxy.scala
+++ b/rdf.storage.web/src/main/scala/WebProxy.scala
@@ -40,229 +40,229 @@ import java.sql.Time
  */
 class WebProxy extends WeightedTcProvider with Logging {
 
-	val networkTimeoutKey = "network-timeout"
-
-	private var networkTimeout: Int = _
-
-	private var tcProvider: TcProviderMultiplexer = new TcProviderMultiplexer
-
-	/**
-	 * Register a provider
-	 *
-	 * @param provider
-	 *            the provider to be registered
-	 */
-	protected def bindWeightedTcProvider(provider: WeightedTcProvider): Unit = {
-		tcProvider.addWeightedTcProvider(provider)
-	}
-
-	/**
-	 * Deregister a provider
-	 *
-	 * @param provider
-	 *            the provider to be deregistered
-	 */
-	protected def unbindWeightedTcProvider(provider: WeightedTcProvider): Unit = {
-		tcProvider.removeWeightedTcProvider(provider)
-	}
-
-	/**OSGI method, called on activation */
-	protected def activate(context: ComponentContext) = {
-		networkTimeout = Integer.parseInt(context.getProperties.get(networkTimeoutKey).toString)
-	}
-
-
-	private var parser: Parser = null
-
-	protected def bindParser(p: Parser) = {
-		parser = p
-	}
-
-	protected def unbindParser(p: Parser) = {
-		parser = null
-	}
-
-	def getWeight: Int = {
-		return 0
-	}
-
-	/**
-	 * Any TripleCollection is available as Graph as well as immutable MGraph
-	 *
-	 * @param name
-	 * @return
-	 * @throws NoSuchEntityException
-	 */
-	def getMGraph(name: UriRef): MGraph = {
-		val graph = getGraph(name)
-		return new AbstractMGraph() {
-			protected def performFilter(subject: NonLiteral, predicate: UriRef, `object` : Resource): java.util.Iterator[Triple] = {
-				graph.filter(subject, predicate, `object`)
-			}
-
-			def size = graph.size
-		}
-	}
-
-	def getGraph(name: UriRef): Graph = {
-		try {
-			getGraph(name, Cache.Fetch)
-		} catch {
-			case e: IOException => {
-					logger.debug("could not get graph by dereferencing uri", e)
-					throw new NoSuchEntityException(name)
-			}
-
-		}
-	}
-
-	def getTriples(name: UriRef): TripleCollection = {
-		return getMGraph(name)
-	}
-
-	def createMGraph(name: UriRef): MGraph = {
-		throw new UnsupportedOperationException
-	}
-
-	def createGraph(name: UriRef, triples: TripleCollection): Graph = {
-		throw new UnsupportedOperationException
-	}
-
-	def deleteTripleCollection(name: UriRef): Unit = {
-		throw new UnsupportedOperationException
-	}
-
-	def getNames(graph: Graph): java.util.Set[UriRef] = {
-		var result: java.util.Set[UriRef] = new java.util.HashSet[UriRef]
-		import collection.JavaConversions._
-		for (name <- listGraphs) {
-			if (getGraph(name).equals(graph)) {
-				result.add(name)
-			}
-		}
-		return result
-	}
-
-	def listTripleCollections: java.util.Set[UriRef] = {
-		var result: java.util.Set[UriRef] = new java.util.HashSet[UriRef]
-		result.addAll(listGraphs)
-		result.addAll(listMGraphs)
-		return result
-	}
-
-	def listGraphs: java.util.Set[UriRef] = {
-		//or should we list graphs for which we have a cached version?
-		return java.util.Collections.emptySet[UriRef]
-	}
-
-	def listMGraphs: java.util.Set[UriRef] = {
-		return java.util.Collections.emptySet[UriRef]
-	}
-
-	/**
-	 * The semantics of this resource
-	 * @param update if a remote URI, update information on the resource first
-	 */
-	def getGraph(name: UriRef, updatePolicy: Cache.Value): Graph = {
-		logger.debug("getting graph " + name)
-		if (name.getUnicodeString.indexOf('#') != -1) {
-			logger.debug("not dereferencing URI with hash sign. Please see CLEREZZA-533 for debate.")
-			throw new NoSuchEntityException(name)
-		}
-		if (name.getUnicodeString.startsWith("urn")) {
-		  //these are not dereferenceable
-		  throw new NoSuchEntityException(name)
-		}
-		val cacheGraphName = new UriRef("urn:x-localinstance:/cache/" + name.getUnicodeString)
-		//todo: follow redirects and keep track of them
-		//todo: keep track of headers especially date and etag. test for etag similarity
-		//todo: for https connection allow user to specify his webid and send his key: ie allow web server to be an agent
-		//todo: add GRDDL functionality, so that other return types can be processed too
-		//todo: enable ftp and other formats (though content negotiation won't work there)
-		def updateGraph() {
-			val url = new URL(name.getUnicodeString)
-			val connection = url.openConnection()
-			connection match {
-				case hc: HttpURLConnection => {
-					hc.addRequestProperty("Accept", acceptHeader)
-					hc.setReadTimeout(networkTimeout)
-					hc.setConnectTimeout(networkTimeout)
-				};
-			}
-			connection.connect()
-			val in = connection.getInputStream()
-			val mediaType = connection.getContentType()
-			val remoteTriples = parser.parse(in, mediaType, name)
-			tcProvider.synchronized {
-				try {
-					tcProvider.deleteTripleCollection(cacheGraphName)
-				} catch {
-					case e: NoSuchEntityException =>;
-				}
-				tcProvider.createGraph(cacheGraphName, remoteTriples)
-			}
-		}
-		try {
-			//the logic here is not quite right, as we don't look at time of previous fetch.
-			updatePolicy match {
-				case Cache.Fetch => try {
-					tcProvider.getGraph(cacheGraphName)
-				} catch {
-					case e: NoSuchEntityException => updateGraph(); tcProvider.getGraph(cacheGraphName)
-				}
-				case Cache.ForceUpdate => updateGraph(); tcProvider.getGraph(cacheGraphName)
-				case Cache.CacheOnly => tcProvider.getGraph(cacheGraphName)
-			}
-		} catch {
-			case ex: PrivilegedActionException => {
-				var cause: Throwable = ex.getCause
-				if (cause.isInstanceOf[UnsupportedOperationException]) {
-					throw cause.asInstanceOf[UnsupportedOperationException]
-				}
-				if (cause.isInstanceOf[EntityAlreadyExistsException]) {
-					throw cause.asInstanceOf[EntityAlreadyExistsException]
-				}
-				if (cause.isInstanceOf[RuntimeException]) {
-					throw cause.asInstanceOf[RuntimeException]
-				}
-				throw new RuntimeException(cause)
-			}
-		}
-	}
-
-
-	private lazy val acceptHeader = {
-
-		import scala.collection.JavaConversions._
-
-		(for (f <- parser.getSupportedFormats) yield {
-			val qualityOfFormat = {
-				f match {
-					//the default, well established format
-					case SupportedFormat.RDF_XML => "1.0";
-					//n3 is a bit less well defined and/or many parsers supports only subsets
-					case SupportedFormat.N3 => "0.6";
-					//we prefer most dedicated formats to (X)HTML, not because those are "better",
-					//but just because it is quite likely that the pure RDF format will be
-					//lighter (contain less presentation markup), and it is also possible that HTML does not
-					//contain any RDFa, but just points to another format.
-					case SupportedFormat.XHTML => "0.5";
-					//we prefer XHTML over html, because parsing (should) be easier
-					case SupportedFormat.HTML => "0.4";
-					//all other formats known currently are structured formats
-					case _ => "0.8"
-				}
-			}
-			f + "; q=" + qualityOfFormat + ","
-		}).mkString + " *; q=.1" //is that for GRDDL?
-	}
+  val networkTimeoutKey = "network-timeout"
+
+  private var networkTimeout: Int = _
+
+  private var tcProvider: TcProviderMultiplexer = new TcProviderMultiplexer
+
+  /**
+   * Register a provider
+   *
+   * @param provider
+   *            the provider to be registered
+   */
+  protected def bindWeightedTcProvider(provider: WeightedTcProvider): Unit = {
+    tcProvider.addWeightedTcProvider(provider)
+  }
+
+  /**
+   * Deregister a provider
+   *
+   * @param provider
+   *            the provider to be deregistered
+   */
+  protected def unbindWeightedTcProvider(provider: WeightedTcProvider): Unit = {
+    tcProvider.removeWeightedTcProvider(provider)
+  }
+
+  /**OSGI method, called on activation */
+  protected def activate(context: ComponentContext) = {
+    networkTimeout = Integer.parseInt(context.getProperties.get(networkTimeoutKey).toString)
+  }
+
+
+  private var parser: Parser = null
+
+  protected def bindParser(p: Parser) = {
+    parser = p
+  }
+
+  protected def unbindParser(p: Parser) = {
+    parser = null
+  }
+
+  def getWeight: Int = {
+    return 0
+  }
+
+  /**
+   * Any TripleCollection is available as Graph as well as immutable MGraph
+   *
+   * @param name
+   * @return
+   * @throws NoSuchEntityException
+   */
+  def getMGraph(name: UriRef): MGraph = {
+    val graph = getGraph(name)
+    return new AbstractMGraph() {
+      protected def performFilter(subject: NonLiteral, predicate: UriRef, `object` : Resource): java.util.Iterator[Triple] = {
+        graph.filter(subject, predicate, `object`)
+      }
+
+      def size = graph.size
+    }
+  }
+
+  def getGraph(name: UriRef): Graph = {
+    try {
+      getGraph(name, Cache.Fetch)
+    } catch {
+      case e: IOException => {
+          logger.debug("could not get graph by dereferencing uri", e)
+          throw new NoSuchEntityException(name)
+      }
+
+    }
+  }
+
+  def getTriples(name: UriRef): TripleCollection = {
+    return getMGraph(name)
+  }
+
+  def createMGraph(name: UriRef): MGraph = {
+    throw new UnsupportedOperationException
+  }
+
+  def createGraph(name: UriRef, triples: TripleCollection): Graph = {
+    throw new UnsupportedOperationException
+  }
+
+  def deleteTripleCollection(name: UriRef): Unit = {
+    throw new UnsupportedOperationException
+  }
+
+  def getNames(graph: Graph): java.util.Set[UriRef] = {
+    var result: java.util.Set[UriRef] = new java.util.HashSet[UriRef]
+    import collection.JavaConversions._
+    for (name <- listGraphs) {
+      if (getGraph(name).equals(graph)) {
+        result.add(name)
+      }
+    }
+    return result
+  }
+
+  def listTripleCollections: java.util.Set[UriRef] = {
+    var result: java.util.Set[UriRef] = new java.util.HashSet[UriRef]
+    result.addAll(listGraphs)
+    result.addAll(listMGraphs)
+    return result
+  }
+
+  def listGraphs: java.util.Set[UriRef] = {
+    //or should we list graphs for which we have a cached version?
+    return java.util.Collections.emptySet[UriRef]
+  }
+
+  def listMGraphs: java.util.Set[UriRef] = {
+    return java.util.Collections.emptySet[UriRef]
+  }
+
+  /**
+   * The semantics of this resource
+   * @param update if a remote URI, update information on the resource first
+   */
+  def getGraph(name: UriRef, updatePolicy: Cache.Value): Graph = {
+    logger.debug("getting graph " + name)
+    if (name.getUnicodeString.indexOf('#') != -1) {
+      logger.debug("not dereferencing URI with hash sign. Please see CLEREZZA-533 for debate.")
+      throw new NoSuchEntityException(name)
+    }
+    if (name.getUnicodeString.startsWith("urn")) {
+      //these are not dereferenceable
+      throw new NoSuchEntityException(name)
+    }
+    val cacheGraphName = new UriRef("urn:x-localinstance:/cache/" + name.getUnicodeString)
+    //todo: follow redirects and keep track of them
+    //todo: keep track of headers especially date and etag. test for etag similarity
+    //todo: for https connection allow user to specify his webid and send his key: ie allow web server to be an agent
+    //todo: add GRDDL functionality, so that other return types can be processed too
+    //todo: enable ftp and other formats (though content negotiation won't work there)
+    def updateGraph() {
+      val url = new URL(name.getUnicodeString)
+      val connection = url.openConnection()
+      connection match {
+        case hc: HttpURLConnection => {
+          hc.addRequestProperty("Accept", acceptHeader)
+          hc.setReadTimeout(networkTimeout)
+          hc.setConnectTimeout(networkTimeout)
+        };
+      }
+      connection.connect()
+      val in = connection.getInputStream()
+      val mediaType = connection.getContentType()
+      val remoteTriples = parser.parse(in, mediaType, name)
+      tcProvider.synchronized {
+        try {
+          tcProvider.deleteTripleCollection(cacheGraphName)
+        } catch {
+          case e: NoSuchEntityException =>;
+        }
+        tcProvider.createGraph(cacheGraphName, remoteTriples)
+      }
+    }
+    try {
+      //the logic here is not quite right, as we don't look at time of previous fetch.
+      updatePolicy match {
+        case Cache.Fetch => try {
+          tcProvider.getGraph(cacheGraphName)
+        } catch {
+          case e: NoSuchEntityException => updateGraph(); tcProvider.getGraph(cacheGraphName)
+        }
+        case Cache.ForceUpdate => updateGraph(); tcProvider.getGraph(cacheGraphName)
+        case Cache.CacheOnly => tcProvider.getGraph(cacheGraphName)
+      }
+    } catch {
+      case ex: PrivilegedActionException => {
+        var cause: Throwable = ex.getCause
+        if (cause.isInstanceOf[UnsupportedOperationException]) {
+          throw cause.asInstanceOf[UnsupportedOperationException]
+        }
+        if (cause.isInstanceOf[EntityAlreadyExistsException]) {
+          throw cause.asInstanceOf[EntityAlreadyExistsException]
+        }
+        if (cause.isInstanceOf[RuntimeException]) {
+          throw cause.asInstanceOf[RuntimeException]
+        }
+        throw new RuntimeException(cause)
+      }
+    }
+  }
+
+
+  private lazy val acceptHeader = {
+
+    import scala.collection.JavaConversions._
+
+    (for (f <- parser.getSupportedFormats) yield {
+      val qualityOfFormat = {
+        f match {
+          //the default, well established format
+          case SupportedFormat.RDF_XML => "1.0";
+          //n3 is a bit less well defined and/or many parsers supports only subsets
+          case SupportedFormat.N3 => "0.6";
+          //we prefer most dedicated formats to (X)HTML, not because those are "better",
+          //but just because it is quite likely that the pure RDF format will be
+          //lighter (contain less presentation markup), and it is also possible that HTML does not
+          //contain any RDFa, but just points to another format.
+          case SupportedFormat.XHTML => "0.5";
+          //we prefer XHTML over html, because parsing (should) be easier
+          case SupportedFormat.HTML => "0.4";
+          //all other formats known currently are structured formats
+          case _ => "0.8"
+        }
+      }
+      f + "; q=" + qualityOfFormat + ","
+    }).mkString + " *; q=.1" //is that for GRDDL?
+  }
 }
 
 object Cache extends Enumeration {
-	/**fetch if not in cache, if version in cache is out of date, or return cache */
-	val Fetch = Value
-	/**fetch from source whatever is in cache */
-	val ForceUpdate = Value
-	/**only get cached version. If none exists return empty graph */
-	val CacheOnly = Value
+  /**fetch if not in cache, if version in cache is out of date, or return cache */
+  val Fetch = Value
+  /**fetch from source whatever is in cache */
+  val ForceUpdate = Value
+  /**only get cached version. If none exists return empty graph */
+  val CacheOnly = Value
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaCompiler.scala
----------------------------------------------------------------------
diff --git a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaCompiler.scala b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaCompiler.scala
index 1221212..bdce763 100644
--- a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaCompiler.scala
+++ b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaCompiler.scala
@@ -54,8 +54,8 @@ import scala.collection.mutable.ListBuffer
  * TODO: check if this is still true with Scala 2.20
  */
 class BundleContextScalaCompiler(bundleContext : BundleContext,
-		settings: Settings, reporter: Reporter)
-		extends Global(settings, reporter) with ReplGlobal with Logging { self =>
+    settings: Settings, reporter: Reporter)
+    extends Global(settings, reporter) with ReplGlobal with Logging { self =>
 
 
   override lazy val platform: ThisPlatform = {
@@ -85,33 +85,33 @@ class BundleContextScalaCompiler(bundleContext : BundleContext,
     }
     new MergedClassPath(result.toList.reverse, original.context)
   }
-	/*override lazy val classPath: ClassPath[AbstractFile] = {
+  /*override lazy val classPath: ClassPath[AbstractFile] = {
 
-		val classPathOrig: ClassPath[AbstractFile]  = new PathResolver(settings).result
-		var bundles: Array[Bundle] = bundleContext.getBundles
-		val classPathAbstractFiles = for (bundle <- bundles;
-										  val url = bundle.getResource("/");
-										  if url != null) yield {
-			if ("file".equals(url.getProtocol())) {
-				new PlainFile(new File(url.toURI()))
-			}
-			else {
-				BundleFS.create(bundle);
-			}
-		}
-		val classPaths: List[ClassPath[AbstractFile]] = (for (abstractFile <- classPathAbstractFiles)
-			yield {
-					new DirectoryClassPath(abstractFile, classPathOrig.context)
-				}) toList
+    val classPathOrig: ClassPath[AbstractFile]  = new PathResolver(settings).result
+    var bundles: Array[Bundle] = bundleContext.getBundles
+    val classPathAbstractFiles = for (bundle <- bundles;
+                      val url = bundle.getResource("/");
+                      if url != null) yield {
+      if ("file".equals(url.getProtocol())) {
+        new PlainFile(new File(url.toURI()))
+      }
+      else {
+        BundleFS.create(bundle);
+      }
+    }
+    val classPaths: List[ClassPath[AbstractFile]] = (for (abstractFile <- classPathAbstractFiles)
+      yield {
+          new DirectoryClassPath(abstractFile, classPathOrig.context)
+        }) toList
 
-		new MergedClassPath[AbstractFile](classPathOrig :: classPaths,
-			   classPathOrig.context)
+    new MergedClassPath[AbstractFile](classPathOrig :: classPaths,
+         classPathOrig.context)
 
-	}*/
+  }*/
 
-	/*override def rootLoader: LazyType = {
-		new loaders.JavaPackageLoader(classPath)
-	}*/
+  /*override def rootLoader: LazyType = {
+    new loaders.JavaPackageLoader(classPath)
+  }*/
         }
 
 

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaInterpreter.scala
----------------------------------------------------------------------
diff --git a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaInterpreter.scala b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaInterpreter.scala
index f713e30..0f174ba 100644
--- a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaInterpreter.scala
+++ b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleContextScalaInterpreter.scala
@@ -29,18 +29,18 @@ import scala.tools.nsc.reporters.Reporter
 
 
 class BundleContextScalaInterpreter(bundleContext : BundleContext, out: PrintWriter)
-		extends IMain(new Settings, out) {
+    extends IMain(new Settings, out) {
 
-	def this(bundleContext : BundleContext) = {
-		this(bundleContext, new PrintWriter(System.out))
-	}
+  def this(bundleContext : BundleContext) = {
+    this(bundleContext, new PrintWriter(System.out))
+  }
 
-	override lazy val classLoader: AbstractFileClassLoader = {
-		new AbstractFileClassLoader(virtualDirectory, this.getClass.getClassLoader())
-	}
-	override protected def newCompiler(settings: Settings, reporter: Reporter) = {
-		settings.outputDirs setSingleOutput virtualDirectory
-		new BundleContextScalaCompiler(bundleContext, settings, reporter)
-	}
+  override lazy val classLoader: AbstractFileClassLoader = {
+    new AbstractFileClassLoader(virtualDirectory, this.getClass.getClassLoader())
+  }
+  override protected def newCompiler(settings: Settings, reporter: Reporter) = {
+    settings.outputDirs setSingleOutput virtualDirectory
+    new BundleContextScalaCompiler(bundleContext, settings, reporter)
+  }
 }
 

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleFS.scala
----------------------------------------------------------------------
diff --git a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleFS.scala b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleFS.scala
index c66a9e3..32de7a6 100644
--- a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleFS.scala
+++ b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/BundleFS.scala
@@ -27,161 +27,161 @@ package org.apache.clerezza.scala.scripting {
 
 
 
-	/**
-	 * Implementation of {@link AbstractFile} on top of a {@link org.osgi.framework.Bundle}
-	 */
-	object BundleFS {
-
-		/**
-		 * Create a new {@link AbstractFile} instance representing an
-		 * {@link org.osgi.framework.Bundle}
-		 * @param bundle
-		 */
-		def create(bundle: Bundle): AbstractFile = {
-			require(bundle != null, "bundle must not be null")
-
-			/**
-			 * The superclass of FileEntry and DirEntry
-			 */
-			abstract class BundleEntry(url: URL, parent: DirEntry) extends AbstractFile {
-				require(url != null, "url must not be null")
-				lazy val (path: String, name: String) = getPathAndName(url)
-				lazy val fullName: String = (path::name::Nil).filter(!_.isEmpty).mkString("/")
-
-				/**
-				 * @return null
-				 */
-				def file: File = null
-
-				//what if this is not a relative file?
-				def absolute = null
-
-				/**
-				 * @return last modification time or 0 if not known
-				 */
-				def lastModified: Long =
-					try { url.openConnection.getLastModified }
-				catch { case _: Exception => 0 }
-
-				@throws(classOf[IOException])
-				def container: AbstractFile =
-					valueOrElse(parent) {
-						throw new IOException("No container")
-					}
-
-				@throws(classOf[IOException])
-				def input: InputStream = url.openStream()
-
-				/**
-				 * Not supported. Always throws an IOException.
-				 * @throws IOException
-				 */
-				@throws(classOf[IOException])
-				def output = throw new IOException("not supported: output")
-
-				def delete = throw new IOException("not supported: delete")
-				def create = throw new IOException("not supported: create")
-
-				private def getPathAndName(url: URL): (String, String) = {
-					val u = url.getPath
-					var k = u.length
-					while( (k > 0) && (u(k - 1) == '/') )
-						k = k - 1
-
-					var j = k
-					while( (j > 0) && (u(j - 1) != '/') )
-						j = j - 1
-
-					(u.substring(if (j > 0) 1 else 0, if (j > 1) j - 1 else j), u.substring(j, k))
-				}
-
-				override def toString = fullName
-			}
-
-			class DirEntry(url: URL, parent: DirEntry) extends BundleEntry(url, parent) {
-
-				/**
-				 * @return true
-				 */
-				def isDirectory: Boolean = true
-
-				override def iterator: Iterator[AbstractFile] = {
-					new Iterator[AbstractFile]() {
-						val dirs = bundle.getEntryPaths(fullName)
-						def hasNext = if (dirs != null) { dirs.hasMoreElements} else {false}
-						def next = {
-							val entry = dirs.nextElement.asInstanceOf[String]
-							var entryUrl = bundle.getResource("/" + entry)
-
-							// Bundle.getResource seems to be inconsistent with respect to requiring
-							// a trailing slash
-							if (entryUrl == null)
-								entryUrl = bundle.getResource("/" + removeTralingSlash(entry))
-
-							if (entryUrl == null) {
-								entryUrl = new URL(bundle.getResource("/"), entry)
-								if (entryUrl == null) {
-									throw new RuntimeException("Could not locate entry: "+entry+" in bundle: "+bundle)
-								}
-							}
+  /**
+   * Implementation of {@link AbstractFile} on top of a {@link org.osgi.framework.Bundle}
+   */
+  object BundleFS {
+
+    /**
+     * Create a new {@link AbstractFile} instance representing an
+     * {@link org.osgi.framework.Bundle}
+     * @param bundle
+     */
+    def create(bundle: Bundle): AbstractFile = {
+      require(bundle != null, "bundle must not be null")
+
+      /**
+       * The superclass of FileEntry and DirEntry
+       */
+      abstract class BundleEntry(url: URL, parent: DirEntry) extends AbstractFile {
+        require(url != null, "url must not be null")
+        lazy val (path: String, name: String) = getPathAndName(url)
+        lazy val fullName: String = (path::name::Nil).filter(!_.isEmpty).mkString("/")
+
+        /**
+         * @return null
+         */
+        def file: File = null
+
+        //what if this is not a relative file?
+        def absolute = null
+
+        /**
+         * @return last modification time or 0 if not known
+         */
+        def lastModified: Long =
+          try { url.openConnection.getLastModified }
+        catch { case _: Exception => 0 }
+
+        @throws(classOf[IOException])
+        def container: AbstractFile =
+          valueOrElse(parent) {
+            throw new IOException("No container")
+          }
+
+        @throws(classOf[IOException])
+        def input: InputStream = url.openStream()
+
+        /**
+         * Not supported. Always throws an IOException.
+         * @throws IOException
+         */
+        @throws(classOf[IOException])
+        def output = throw new IOException("not supported: output")
+
+        def delete = throw new IOException("not supported: delete")
+        def create = throw new IOException("not supported: create")
+
+        private def getPathAndName(url: URL): (String, String) = {
+          val u = url.getPath
+          var k = u.length
+          while( (k > 0) && (u(k - 1) == '/') )
+            k = k - 1
+
+          var j = k
+          while( (j > 0) && (u(j - 1) != '/') )
+            j = j - 1
+
+          (u.substring(if (j > 0) 1 else 0, if (j > 1) j - 1 else j), u.substring(j, k))
+        }
+
+        override def toString = fullName
+      }
+
+      class DirEntry(url: URL, parent: DirEntry) extends BundleEntry(url, parent) {
+
+        /**
+         * @return true
+         */
+        def isDirectory: Boolean = true
+
+        override def iterator: Iterator[AbstractFile] = {
+          new Iterator[AbstractFile]() {
+            val dirs = bundle.getEntryPaths(fullName)
+            def hasNext = if (dirs != null) { dirs.hasMoreElements} else {false}
+            def next = {
+              val entry = dirs.nextElement.asInstanceOf[String]
+              var entryUrl = bundle.getResource("/" + entry)
+
+              // Bundle.getResource seems to be inconsistent with respect to requiring
+              // a trailing slash
+              if (entryUrl == null)
+                entryUrl = bundle.getResource("/" + removeTralingSlash(entry))
+
+              if (entryUrl == null) {
+                entryUrl = new URL(bundle.getResource("/"), entry)
+                if (entryUrl == null) {
+                  throw new RuntimeException("Could not locate entry: "+entry+" in bundle: "+bundle)
+                }
+              }
             
-							if (entry.endsWith(".class"))
-								new FileEntry(entryUrl, DirEntry.this)
-							else
-								new DirEntry(entryUrl, DirEntry.this)
-						}
+              if (entry.endsWith(".class"))
+                new FileEntry(entryUrl, DirEntry.this)
+              else
+                new DirEntry(entryUrl, DirEntry.this)
+            }
           
-						private def removeTralingSlash(s: String): String = {
-							if (s == null || s.length == 0) {
-								s
-							}else if (s.last == '/') {
-								removeTralingSlash(s.substring(0, s.length - 1))
-							} else {
-								s
-							}
-						}
-					}
-				}
-
-				def lookupName(name: String, directory: Boolean): AbstractFile = {
-					val entry = bundle.getEntry(fullName + "/" + name)
-					nullOrElse(entry) { entry =>
-						if (directory)
-							new DirEntry(entry, DirEntry.this)
-						else
-							new FileEntry(entry, DirEntry.this)
-					}
-				}
-
-				def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile = {
-					val entry = bundle.getEntry(fullName + "/" + name)
-					if (entry == null) {
-						throw new RuntimeException("Not yet implemented: inexistendt file")
-					} else {
-						if (directory)
-							new DirEntry(entry, DirEntry.this)
-						else
-							new FileEntry(entry, DirEntry.this)
-					}
-				}
-
-			}
-
-			class FileEntry(url: URL, parent: DirEntry) extends BundleEntry(url, parent) {
-
-				/**
-				 * @return false
-				 */
-				def isDirectory: Boolean = false
-				override def sizeOption: Option[Int] = Some(bundle.getEntry(fullName).openConnection().getContentLength())
-				override def iterator: Iterator[AbstractFile] = Iterator.empty
-				def lookupName(name: String, directory: Boolean): AbstractFile = null
-				def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile = null
-			}
-
-			new DirEntry(bundle.getResource("/"), null)
-		}
-
-	}
+            private def removeTralingSlash(s: String): String = {
+              if (s == null || s.length == 0) {
+                s
+              }else if (s.last == '/') {
+                removeTralingSlash(s.substring(0, s.length - 1))
+              } else {
+                s
+              }
+            }
+          }
+        }
+
+        def lookupName(name: String, directory: Boolean): AbstractFile = {
+          val entry = bundle.getEntry(fullName + "/" + name)
+          nullOrElse(entry) { entry =>
+            if (directory)
+              new DirEntry(entry, DirEntry.this)
+            else
+              new FileEntry(entry, DirEntry.this)
+          }
+        }
+
+        def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile = {
+          val entry = bundle.getEntry(fullName + "/" + name)
+          if (entry == null) {
+            throw new RuntimeException("Not yet implemented: inexistendt file")
+          } else {
+            if (directory)
+              new DirEntry(entry, DirEntry.this)
+            else
+              new FileEntry(entry, DirEntry.this)
+          }
+        }
+
+      }
+
+      class FileEntry(url: URL, parent: DirEntry) extends BundleEntry(url, parent) {
+
+        /**
+         * @return false
+         */
+        def isDirectory: Boolean = false
+        override def sizeOption: Option[Int] = Some(bundle.getEntry(fullName).openConnection().getContentLength())
+        override def iterator: Iterator[AbstractFile] = Iterator.empty
+        def lookupName(name: String, directory: Boolean): AbstractFile = null
+        def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile = null
+      }
+
+      new DirEntry(bundle.getResource("/"), null)
+    }
+
+  }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
----------------------------------------------------------------------
diff --git a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
index d21f7ec..56205b1 100644
--- a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
+++ b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
@@ -184,5 +184,5 @@ class CompilerService() extends BundleListener  {
     }
   }
 
-	
+  
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/InterpreterFactory.scala
----------------------------------------------------------------------
diff --git a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/InterpreterFactory.scala b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/InterpreterFactory.scala
index dda2595..fa1f5ba 100644
--- a/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/InterpreterFactory.scala
+++ b/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/InterpreterFactory.scala
@@ -30,22 +30,22 @@ import java.net._
 
 
 class InterpreterFactory() {
-	
-	protected var bundles: Array[Bundle] = null
-	protected var bundleContext : BundleContext = null;
+  
+  protected var bundles: Array[Bundle] = null
+  protected var bundleContext : BundleContext = null;
 
-	def activate(componentContext: ComponentContext)= {
-		bundleContext = componentContext.getBundleContext
-	}
+  def activate(componentContext: ComponentContext)= {
+    bundleContext = componentContext.getBundleContext
+  }
 
-	def deactivate(componentContext: ComponentContext) = {
-		bundleContext = null
-	}
+  def deactivate(componentContext: ComponentContext) = {
+    bundleContext = null
+  }
 
-	def createInterpreter(out: PrintWriter) : IMain = {
-		val i = new BundleContextScalaInterpreter(bundleContext, out)
-		i
-	}
+  def createInterpreter(out: PrintWriter) : IMain = {
+    val i = new BundleContextScalaInterpreter(bundleContext, out)
+    i
+  }
 
-	
+  
 }