You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/03/04 09:42:40 UTC

svn commit: r1077849 - in /incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src: main/scala/org/apache/clerezza/rdf/cris/ test/scala/org/apache/clerezza/rdf/cris/

Author: reto
Date: Fri Mar  4 08:42:40 2011
New Revision: 1077849

URL: http://svn.apache.org/viewvc?rev=1077849&view=rev
Log:
Added JoinProperty api support and test

Modified:
    incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/GraphIndexer.scala
    incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexDefinitionManager.scala
    incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/GraphIndexerTest.scala

Modified: incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/GraphIndexer.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/GraphIndexer.scala?rev=1077849&r1=1077848&r2=1077849&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/GraphIndexer.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/GraphIndexer.scala Fri Mar  4 08:42:40 2011
@@ -56,8 +56,9 @@ import org.apache.lucene.analysis.Analyz
  */
 //while implemented in scala we don't expose any scala-library classes in the
 //public interface
-class GraphIndexer(definitions: TripleCollection, 
-				   baseGraph: TripleCollection, index: Directory, createNewIndex: Boolean) extends ResourceFinder {
+class GraphIndexer(definitionGraph: TripleCollection,
+						baseGraph: TripleCollection, index: Directory, createNewIndex: Boolean)
+						extends ResourceFinder {
 
   /**
    * Creates an in-memory index
@@ -70,25 +71,44 @@ class GraphIndexer(definitions: TripleCo
 	private[this] val logger = LoggerFactory.getLogger(classOf[GraphIndexer])
 
 	private[this] var type2IndexedProperties = Map[UriRef, Seq[VirtualProperty]]()
-	private[this] var property2TypeMap = Map[UriRef, mutable.Set[UriRef]]()
+	private[this] var property2TypeMap = Map[VirtualProperty, mutable.Set[UriRef]]()
 	//private[this] var indexedProperties: Seq[UriRef] = null
 
 	protected def processDefinitions() {
-		val definitionsPreamble = new Preamble(definitions)
+		val definitionsPreamble = new Preamble(definitionGraph)
 		import definitionsPreamble._
+		def asVirtualProperty(r:  RichGraphNode): VirtualProperty = {
+				lazy val propertyList = {
+					import collection.JavaConversions._
+					(for (childPropertyResource <- new RdfList(r/CRIS.propertyList)) yield {
+						asVirtualProperty(childPropertyResource)
+					}).toList
+				}
+			  if (r.hasProperty(RDF.`type`, CRIS.JoinVirtualProperty)) {
+					import collection.JavaConversions._
+					new JoinVirtualProperty(propertyList)
+				} else {
+					//TODO add other cases
+					if ((r!).isInstanceOf[UriRef]) {
+						new PropertyHolder((r!).asInstanceOf[UriRef])
+					} else {
+						throw new RuntimeException(r+" is not of a knows VirtualProperty type and its not a UriRef  (it's a "+(r!).getClass)
+					}
+				}
+		}
 		val indexDefinitionsResources = CRIS.IndexDefinition/-RDF.`type`
 		def type2IndexedPropertiesTuples: Seq[(UriRef, Seq[VirtualProperty])] =
 			for (d <- indexDefinitionsResources;
 					 tUri = (d / CRIS.indexedType !).asInstanceOf[UriRef])
 			yield (tUri,
 				for (p <- d / CRIS.indexedProperty) yield {
-					val pUri = (p !).asInstanceOf[UriRef]
-					if (property2TypeMap.contains(pUri)) {
-						property2TypeMap(pUri) += (tUri)
+					val vProp = asVirtualProperty(p)
+					if (property2TypeMap.contains(vProp)) {
+						property2TypeMap(vProp) += (tUri)
 					} else {
-						property2TypeMap += (pUri -> mutable.Set(tUri))
+						property2TypeMap += (vProp -> mutable.Set(tUri))
 					}
-					new PropertyHolder(pUri)
+					vProp
 				})
 		type2IndexedProperties = Map(type2IndexedPropertiesTuples: _*)
 	}
@@ -129,7 +149,8 @@ class GraphIndexer(definitions: TripleCo
 	}, new FilterTriple(null, null, null) {
 		override def `match`(triple: Triple) = {
 			val predicate = triple.getPredicate
-			property2TypeMap.contains(predicate)
+			//TODO check indirectly involved properties
+			property2TypeMap.contains(new PropertyHolder(predicate))
 		}
 	})
    
@@ -175,7 +196,7 @@ class GraphIndexer(definitions: TripleCo
 			for (vProperty <- type2IndexedProperties(resourceType)) {
 				logger.debug("indexing "+vProperty+" with values "+(vProperty.value(resource)).length)
 				for (propertyValue <- vProperty.value(resource)) {
-					logger.debug("indexing "+vProperty+" with value "+(propertyValue))
+					logger.info("indexing "+vProperty+" with value "+(propertyValue))
 					doc.add(new Field(vProperty.stringKey,
 									  propertyValue,
 									  Field.Store.YES,

Modified: incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexDefinitionManager.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexDefinitionManager.scala?rev=1077849&r1=1077848&r2=1077849&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexDefinitionManager.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexDefinitionManager.scala Fri Mar  4 08:42:40 2011
@@ -48,12 +48,16 @@ trait IndexDefinitionManager {
       vp match {
         case PropertyHolder(p) => p
         case JoinVirtualProperty(l) => {
+					if (l.size == 0) {
+						throw new RuntimeException("vp "+vp+" conatins an empty list")
+					}
           val virtualProperty = new BNode
           definitionGraph.add(new TripleImpl(virtualProperty, RDF.`type`, CRIS.JoinVirtualProperty))
           val listBNode = new BNode
-          definitionGraph.add(new TripleImpl(virtualProperty, CRIS.JoinVirtualProperty, listBNode))
+          definitionGraph.add(new TripleImpl(virtualProperty, CRIS.propertyList, listBNode))
           val rdfList = new RdfList(listBNode, definitionGraph)
           for (p <- l) {
+						println("adding "+p)
             rdfList.add(asResource(p))
           }
           virtualProperty

Modified: incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/GraphIndexerTest.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/GraphIndexerTest.scala?rev=1077849&r1=1077848&r2=1077849&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/GraphIndexerTest.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-388/rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/GraphIndexerTest.scala Fri Mar  4 08:42:40 2011
@@ -32,7 +32,6 @@ import org.apache.lucene.store._
 import org.apache.lucene.index.IndexWriter
 import org.apache.lucene.util.Version
 import org.wymiwyg.commons.util.Util
-import java.util.List
 import org.junit._
 
 class GraphIndexerTest {
@@ -168,4 +167,23 @@ class GraphIndexerTest {
 		val results2 = service.findResources(FOAF.firstName, "*Jane*")
 		Assert.assertEquals(2, results2.length)
 	}
+
+	@Test
+	def testJoinProperty {
+		import VirtualProperties._
+		val joinProperty = JoinVirtualProperty(List(FOAF.firstName, FOAF.lastName))
+		val indexDefinitionManager = new IndexDefinitionManager {
+      val definitionGraph = definitions
+    }
+		indexDefinitionManager.addDefinition(FOAF.Person, joinProperty)
+		service.reCreateIndex();
+		{
+			val results = service.findResources(joinProperty,"John")
+			Assert.assertEquals(2, results.size)
+		}
+		{
+			val results = service.findResources(joinProperty,"John Doe")
+			Assert.assertEquals(1, results.size)
+		}
+	}
 }