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 2010/05/06 14:16:02 UTC

svn commit: r941688 - /incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/RdfList.java

Author: reto
Date: Thu May  6 12:16:02 2010
New Revision: 941688

URL: http://svn.apache.org/viewvc?rev=941688&view=rev
Log:
CLEREZZA-208: properly locking in rdf-list constructor

Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/RdfList.java

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/RdfList.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/RdfList.java?rev=941688&r1=941687&r2=941688&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/RdfList.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/RdfList.java Thu May  6 12:16:02 2010
@@ -24,11 +24,13 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.locks.Lock;
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.Resource;
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
 import org.apache.clerezza.rdf.ontologies.OWL;
 import org.apache.clerezza.rdf.ontologies.RDF;
@@ -74,12 +76,31 @@ public class RdfList extends AbstractLis
 	public RdfList(NonLiteral listResource, TripleCollection tc) {
 		firstList = listResource;
 		this.tc = tc;
+		boolean addNilStmt;
+		if (tc instanceof LockableMGraph) {
+			LockableMGraph lg = (LockableMGraph) tc;
+			final Lock readLock = lg.getLock().readLock();
+			readLock.lock();
+			try {
+				addNilStmt = listIncomplete(listResource);
+			} finally {
+				readLock.unlock();
+			}
+		} else {
+			addNilStmt = listIncomplete(listResource);
+		}
+		if (addNilStmt) {
+			tc.add(new TripleImpl(listResource, OWL.sameAs, RDF_NIL));
+		}
+	}
+
+	private boolean listIncomplete(NonLiteral listResource) {
 		if (!tc.filter(listResource, RDF.first, null).hasNext()) {
 			if (!tc.filter(listResource, OWL.sameAs, RDF_NIL).hasNext()) {
-				tc.add(new TripleImpl(listResource, OWL.sameAs, RDF_NIL));
+				return true;
 			}
 		}
-
+		return false;
 	}
 
 	/**