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;
}
/**