Author: mir
Date: Mon Oct  4 16:10:59 2010
New Revision: 1004304

URL: http://svn.apache.org/viewvc?rev=1004304&view=rev
Log:
CLEREZZA-313: added missing locks

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/AbstractDiscobitsHandler.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/ContentPostSupport.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/InfoDiscobit.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/WebDavUtils.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/AbstractDiscobitsHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/AbstractDiscobitsHandler.java?rev=1004304&r1=1004303&r2=1004304&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/AbstractDiscobitsHandler.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/AbstractDiscobitsHandler.java
 Mon Oct  4 16:10:59 2010
@@ -23,6 +23,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 
 import java.util.Set;
+import java.util.concurrent.locks.Lock;
 import javax.ws.rs.core.MediaType;
 import org.apache.clerezza.platform.content.collections.CollectionCreator;
 
@@ -32,6 +33,7 @@ import org.apache.clerezza.rdf.core.NonL
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.TypedLiteral;
 import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
 import org.apache.clerezza.rdf.ontologies.DISCOBITS;
 import org.apache.clerezza.rdf.ontologies.RDF;
 import org.apache.clerezza.rdf.utils.GraphNode;
@@ -66,17 +68,23 @@ public abstract class AbstractDiscobitsH
                        byte[] data) {
 
                GraphNode infoDiscoBitNode;
-               final MGraph mGraph = getMGraph();
+               final LockableMGraph mGraph = (LockableMGraph) getMGraph();
                infoDiscoBitNode = new GraphNode(infoDiscoBitUri, mGraph);
                CollectionCreator collectionCreator = new 
CollectionCreator(mGraph);
                collectionCreator.createContainingCollections(infoDiscoBitUri);
-               infoDiscoBitNode.addProperty(RDF.type, DISCOBITS.InfoDiscoBit);
-               TypedLiteral dataLiteral = 
LiteralFactory.getInstance().createTypedLiteral(data);
-               infoDiscoBitNode.deleteProperties(DISCOBITS.infoBit);
-               infoDiscoBitNode.addProperty(DISCOBITS.infoBit, dataLiteral);
-               TypedLiteral mediaTypeLiteral = 
LiteralFactory.getInstance().createTypedLiteral(mediaType.toString());
-               infoDiscoBitNode.deleteProperties(DISCOBITS.mediaType);
-               
infoDiscoBitNode.addProperty(DISCOBITS.mediaType,mediaTypeLiteral);
+               Lock writeLock = mGraph.getLock().writeLock();
+               writeLock.lock();
+               try {
+                       infoDiscoBitNode.addProperty(RDF.type, 
DISCOBITS.InfoDiscoBit);
+                       TypedLiteral dataLiteral = 
LiteralFactory.getInstance().createTypedLiteral(data);
+                       infoDiscoBitNode.deleteProperties(DISCOBITS.infoBit);
+                       infoDiscoBitNode.addProperty(DISCOBITS.infoBit, 
dataLiteral);
+                       TypedLiteral mediaTypeLiteral = 
LiteralFactory.getInstance().createTypedLiteral(mediaType.toString());
+                       infoDiscoBitNode.deleteProperties(DISCOBITS.mediaType);
+                       
infoDiscoBitNode.addProperty(DISCOBITS.mediaType,mediaTypeLiteral);
+               } finally {
+                       writeLock.unlock();
+               }
                Set<MetaDataGenerator> metaDataGenerators = 
getMetaDataGenerators();
                synchronized(metaDataGenerators) {
                        for(MetaDataGenerator generator : metaDataGenerators) {

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/ContentPostSupport.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/ContentPostSupport.java?rev=1004304&r1=1004303&r2=1004304&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/ContentPostSupport.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/ContentPostSupport.java
 Mon Oct  4 16:10:59 2010
@@ -20,6 +20,7 @@ package org.apache.clerezza.platform.con
 
 
 import java.net.URI;
+import java.util.concurrent.locks.Lock;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -30,6 +31,7 @@ import org.apache.clerezza.jaxrs.utils.f
 import org.apache.clerezza.jaxrs.utils.form.MultiPartBody;
 import org.apache.clerezza.platform.graphprovider.content.ContentGraphProvider;
 import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
 import org.apache.clerezza.rdf.ontologies.RDF;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
@@ -77,10 +79,17 @@ public class ContentPostSupport {
                        return Response.status(400).entity("Required form field 
is missing").
                                        type(MediaType.TEXT_PLAIN_TYPE).build();
                }
-               if (cgProvider.getContentGraph().filter(new UriRef(uri), 
RDF.type, null).hasNext()) {
-                       return Response.status(Response.Status.CONFLICT).
-                                       entity("A resource with the specified 
URI already exists").
-                                       type(MediaType.TEXT_PLAIN_TYPE).build();
+               LockableMGraph contentGraph = cgProvider.getContentGraph();
+               Lock readLock = contentGraph.getLock().readLock();
+               readLock.lock();
+               try {
+                       if (contentGraph.filter(new UriRef(uri), RDF.type, 
null).hasNext()) {
+                               return 
Response.status(Response.Status.CONFLICT).
+                                               entity("A resource with the 
specified URI already exists").
+                                               
type(MediaType.TEXT_PLAIN_TYPE).build();
+                       }
+               } finally {
+                       readLock.unlock();
                }
                handler.put(new UriRef(uri), formFile.getMediaType(), content);
                return Response.created(URI.create(uri)).build();

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java?rev=1004304&r1=1004303&r2=1004304&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
 Mon Oct  4 16:10:59 2010
@@ -142,7 +142,6 @@ public class DiscobitsTypeHandler extend
        @GET
        @Produces({"*/*"})
        public Object getResource(@Context UriInfo uriInfo) {
-               final MGraph mGraph = cgProvider.getContentGraph();
                final UriRef uri = new 
UriRef(uriInfo.getAbsolutePath().toString());
                final GraphNode graphNode = getResourceAsGraphNode(uriInfo);
                if (graphNode == null) {
@@ -418,7 +417,13 @@ public class DiscobitsTypeHandler extend
                                logger.error("more than one parent statement: 
"+oldParentTripleIter.next());
                                oldParentTripleIter.remove();
                        }
-                       node.replaceWith(targetUri);
+                       Lock writeLock = node.writeLock();
+                       writeLock.lock();
+                       try {
+                               node.replaceWith(targetUri);
+                       } finally {
+                               writeLock.unlock();
+                       }
                        new 
CollectionCreator(mGraph).createContainingCollections(targetUri);
                        try {
                                return Response.created(new 
java.net.URI(targetUri.getUnicodeString())).build();
@@ -492,7 +497,7 @@ public class DiscobitsTypeHandler extend
                                }
                                builder.header(HeaderName.ALLOW.toString(), 
buffer.toString());
                        }
-                       return builder.build();
+               return builder.build();
        }
 
        protected void bindMetaDataGenerator(MetaDataGenerator generator) {
@@ -516,9 +521,15 @@ public class DiscobitsTypeHandler extend
        
 
        private boolean nodeAtUriExists(UriRef nodeUri) {
-               MGraph mGraph = getMGraph();
-               return mGraph.filter(nodeUri, null, null).hasNext()
-                               || mGraph.filter(null, null, nodeUri).hasNext();
+               LockableMGraph mGraph = (LockableMGraph) getMGraph();
+               Lock readLock = mGraph.getLock().readLock();
+               readLock.lock();
+               try {
+                       return mGraph.filter(nodeUri, null, null).hasNext()
+                                       || mGraph.filter(null, null, 
nodeUri).hasNext();
+               } finally {
+                       readLock.unlock();
+               }
        }
 
        private Response resourceUnavailable(UriRef nodeUri,

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/InfoDiscobit.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/InfoDiscobit.java?rev=1004304&r1=1004303&r2=1004304&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/InfoDiscobit.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/InfoDiscobit.java
 Mon Oct  4 16:10:59 2010
@@ -65,24 +65,35 @@ public class InfoDiscobit {
        }
 
        public String getContentType() {
-               Iterator<Literal> mediaTypeLits = 
infoBit.getLiterals(DISCOBITS.mediaType);
-               if (mediaTypeLits.hasNext()) {
-                       return mediaTypeLits.next().getLexicalForm();
+               Lock readLock = infoBit.readLock();
+               readLock.lock();
+               try {
+                       Iterator<Literal> mediaTypeLits = 
infoBit.getLiterals(DISCOBITS.mediaType);
+                       if (mediaTypeLits.hasNext()) {
+                               return mediaTypeLits.next().getLexicalForm();
+                       }
+               } finally {
+                       readLock.unlock();
                }
                return null;
        }
        
        public byte[] getData() {
                byte[] result = null;
-               Iterator<Literal> mediaTypeLits = 
infoBit.getLiterals(DISCOBITS.infoBit);
-               if (mediaTypeLits.hasNext()) {
-                       final Literal literalValue = mediaTypeLits.next();
-                       if (literalValue instanceof TypedLiteral) {
-                               result = 
LiteralFactory.getInstance().createObject(
-                                               (new 
byte[0]).getClass(),(TypedLiteral)literalValue);
+               Lock readLock = infoBit.readLock();
+               readLock.lock();
+               try {
+                       Iterator<Literal> mediaTypeLits = 
infoBit.getLiterals(DISCOBITS.infoBit);
+                       if (mediaTypeLits.hasNext()) {
+                               final Literal literalValue = 
mediaTypeLits.next();
+                               if (literalValue instanceof TypedLiteral) {
+                                       result = 
LiteralFactory.getInstance().createObject(
+                                                       (new 
byte[0]).getClass(), (TypedLiteral) literalValue);
+                               }
                        }
-               }
-               
+               } finally {
+                       readLock.unlock();
+               }               
                return result;  
        };
 

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/WebDavUtils.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/WebDavUtils.java?rev=1004304&r1=1004303&r2=1004304&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/WebDavUtils.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/WebDavUtils.java
 Mon Oct  4 16:10:59 2010
@@ -29,6 +29,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.locks.Lock;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
@@ -43,6 +44,7 @@ import javax.xml.transform.dom.DOMResult
 import org.apache.clerezza.rdf.core.Literal;
 import org.apache.clerezza.rdf.core.LiteralFactory;
 import org.apache.clerezza.rdf.core.Resource;
+import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
@@ -370,7 +372,14 @@ class WebDavUtils {
 
        private static void addUserProps(GraphNode node, PropertyMap 
propertyMap,
                        List<Property> requestedProps) {
-               Iterator<UriRef> userPropsIter = node.getProperties();
+               Iterator<UriRef> userPropsIter;
+               Lock readLock = node.readLock();
+               readLock.lock(); 
+               try {
+                       userPropsIter = node.getProperties();
+               } finally {
+                       readLock.unlock();
+               }
                Set<UriRef> userProps = new HashSet<UriRef>();
                while (userPropsIter.hasNext()) {
                        userProps.add(userPropsIter.next());
@@ -380,11 +389,16 @@ class WebDavUtils {
                        for (Property requestedProp : requestedProps) {
                                UriRef predicate = new 
UriRef(requestedProp.value());
                                if (userProps.contains(predicate)) {
-                                       Iterator<Resource> value = 
node.getObjects(predicate);
-                                       if (value.hasNext()) {
-                                               propertyMap.put(requestedProp, 
getValue(value.next()));
-                                       } else {
-                                               propertyMap.put(requestedProp, 
"");
+                                       readLock.lock();
+                                       try {
+                                               Iterator<Resource> value = 
node.getObjects(predicate);
+                                               if (value.hasNext()) {
+                                                       
propertyMap.put(requestedProp, getValue(value.next()));
+                                               } else {
+                                                       
propertyMap.put(requestedProp, "");
+                                               }
+                                       } finally {
+                                               readLock.unlock();
                                        }
                                } else {
                                        propertyMap.put(requestedProp, null);
@@ -401,10 +415,15 @@ class WebDavUtils {
                                                userProp.substring(index + 1));
 
                                Iterator<Resource> value = node.getObjects(uri);
-                               if (value.hasNext()) {
-                                       propertyMap.put(property, 
getValue(value.next()));
-                               } else {
-                                       propertyMap.put(property, "");
+                               readLock.lock();
+                               try {
+                                       if (value.hasNext()) {
+                                               propertyMap.put(property, 
getValue(value.next()));
+                                       } else {
+                                               propertyMap.put(property, "");
+                                       }
+                               } finally {
+                                       readLock.unlock();
                                }
                        }
                }
@@ -412,7 +431,14 @@ class WebDavUtils {
 
        private static void addUserPropsWithoutValues(GraphNode node,
                        PropertyMap propertyMap) {
-               Iterator<UriRef> userPropsIter = node.getProperties();
+               Iterator<UriRef> userPropsIter;
+               Lock readLock = node.readLock();
+               readLock.lock();
+               try {
+                       userPropsIter = node.getProperties();
+               } finally {
+                       readLock.unlock();
+               }
                Set<UriRef> userProps = new HashSet<UriRef>();
                while (userPropsIter.hasNext()) {
                        userProps.add(userPropsIter.next());
@@ -465,28 +491,46 @@ class WebDavUtils {
                                                propertyMap.put(property, "");
                                        }
                                } else 
if(property.prop.equalsIgnoreCase(creationdate)){
-                                       Iterator<Resource> date = 
node.getObjects(DCTERMS.dateSubmitted);
-                                       if(date.hasNext()){
-                                               String st = 
getValue(date.next());
-                                               propertyMap.put(property, st);
-                                       }else{
-                                               propertyMap.put(property, "");
+                                       Lock readLock = node.readLock();
+                                       readLock.lock();
+                                       try {
+                                               Iterator<Resource> date = 
node.getObjects(DCTERMS.dateSubmitted);
+                                               if (date.hasNext()) {
+                                                       String st = 
getValue(date.next());
+                                                       
propertyMap.put(property, st);
+                                               } else {
+                                                       
propertyMap.put(property, "");
+                                               }
+                                       } finally {
+                                               readLock.unlock();
                                        }
                                } else 
if(property.prop.equalsIgnoreCase(getlastmodified)){
-                                       Iterator<Resource> date = 
node.getObjects(DCTERMS.modified);
-                                       if(date.hasNext()){
-                                               String st = 
getValue(date.next());
-                                               propertyMap.put(property, st);
-                                       }else{
-                                               propertyMap.put(property, "");
+                                       Lock readLock = node.readLock();
+                                       readLock.lock();
+                                       try {
+                                               Iterator<Resource> date = 
node.getObjects(DCTERMS.modified);
+                                               if (date.hasNext()) {
+                                                       String st = 
getValue(date.next());
+                                                       
propertyMap.put(property, st);
+                                               } else {
+                                                       
propertyMap.put(property, "");
+                                               }
+                                       } finally {
+                                               readLock.unlock();
                                        }
                                } else 
if(property.prop.equalsIgnoreCase(getcontenttype)){
-                                       Iterator<Resource> mediaType = 
node.getObjects(DCTERMS.MediaType);
-                                       if(mediaType.hasNext()){
-                                               String st = 
getValue(mediaType.next());
-                                               propertyMap.put(property, st);
-                                       }else{
-                                               propertyMap.put(property, "");
+                                       Lock readLock = node.readLock();
+                                       readLock.lock();
+                                       try {
+                                               Iterator<Resource> mediaType = 
node.getObjects(DCTERMS.MediaType);
+                                               if (mediaType.hasNext()) {
+                                                       String st = 
getValue(mediaType.next());
+                                                       
propertyMap.put(property, st);
+                                               } else {
+                                                       
propertyMap.put(property, "");
+                                               }
+                                       } finally {
+                                               readLock.unlock();
                                        }
                                } else {
                                        propertyMap.put(property, "");
@@ -534,15 +578,26 @@ class WebDavUtils {
                                                        
.createElementNS(davUri, property.prop));
                                } else {
                                        UriRef predicate = new 
UriRef(property.value());
-                                       Iterator<Resource> valIter = 
hierarchyNode.getObjects(predicate);
-                                       replaceProp(subject, predicate, 
valIter, contentGraph, entry);
+                                       Lock writeLock = 
hierarchyNode.writeLock();
+                                       writeLock.lock();
+                                       try {
+                                               Iterator<Resource> valIter = 
hierarchyNode.getObjects(predicate);
+                                               replaceProp(subject, predicate, 
valIter, contentGraph, entry);
+                                       } finally {
+                                               writeLock.unlock();
+                                       }
                                        
propOk.appendChild(responseDoc.createElementNS(davUri, property.prop));
                                }
-                       }else{
-                               
+                       } else {
                                UriRef predicate = new UriRef(property.value());
-                               Iterator<Resource> valIter = 
hierarchyNode.getObjects(predicate);
-                               replaceProp(subject, predicate, valIter, 
contentGraph, entry);
+                               Lock writeLock = hierarchyNode.writeLock();
+                               writeLock.lock();
+                               try {
+                                       Iterator<Resource> valIter = 
hierarchyNode.getObjects(predicate);
+                                       replaceProp(subject, predicate, 
valIter, contentGraph, entry);
+                               } finally {
+                                       writeLock.unlock();
+                               }
                                
propOk.appendChild(responseDoc.createElementNS(property.ns, "R:" + 
property.prop));
                        }
                }
@@ -554,9 +609,17 @@ class WebDavUtils {
                                                        
.createElementNS(davUri, property.prop));
                        } else {
                                UriRef predicate = new UriRef(property.value());
-                               Iterator<Resource> valIter = 
hierarchyNode.getObjects(predicate);
-                               while(valIter.hasNext()){
-                                       contentGraph.remove(new 
TripleImpl(subject, predicate, valIter.next()));
+                               Lock writeLock = hierarchyNode.writeLock();
+                               writeLock.lock();
+                               try {
+                                       Iterator<Resource> valIter = 
hierarchyNode.getObjects(predicate);
+                                       Set<Triple> triplesToBeRemoved = new 
HashSet<Triple>();
+                                       while (valIter.hasNext()) {
+                                               triplesToBeRemoved.add(new 
TripleImpl(subject, predicate, valIter.next()));
+                                       }
+                                       
contentGraph.removeAll(triplesToBeRemoved);
+                               } finally {
+                                       writeLock.unlock();
                                }
                                
propOk.appendChild(responseDoc.createElementNS(property.ns, property.prop));
 
@@ -603,9 +666,11 @@ class WebDavUtils {
                        Iterator<Resource> valIter, TripleCollection 
contentGraph,
                        Map.Entry<Property, String> entry) {
                LiteralFactory fac = LiteralFactory.getInstance();
+               Set<Triple> triplesToBeRemoved = new HashSet<Triple>();
                if (valIter.hasNext()) {
-                       contentGraph.remove(new TripleImpl(subject, predicate, 
valIter.next()));
+                       triplesToBeRemoved.add(new TripleImpl(subject, 
predicate, valIter.next()));
                }
+               contentGraph.removeAll(triplesToBeRemoved);
                contentGraph.add(new TripleImpl(subject, predicate,
                                fac.createTypedLiteral(entry.getValue())));
        }


Reply via email to