Author: mir
Date: Tue Aug 24 15:39:53 2010
New Revision: 988601

URL: http://svn.apache.org/viewvc?rev=988601&view=rev
Log:
CLEREZZA-285: added synchronized block when iterating over 
Collection.synchronized[Set/Map/Collection/List]()

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/DiscobitsTypeHandler.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.enrichment/src/main/java/org/apache/clerezza/platform/rdf/enrichment/EnrichmentTcProvider.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/GenericGraphNodeMBW.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/AbstractTripleCollection.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleTripleCollection.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.enrichment/src/main/java/org/apache/clerezza/rdf/enrichment/EnrichmentTriples.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=988601&r1=988600&r2=988601&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
 Tue Aug 24 15:39:53 2010
@@ -77,11 +77,14 @@ public abstract class AbstractDiscobitsH
                TypedLiteral mediaTypeLiteral = 
LiteralFactory.getInstance().createTypedLiteral(mediaType.toString());
                infoDiscoBitNode.deleteProperties(DISCOBITS.mediaType);
                
infoDiscoBitNode.addProperty(DISCOBITS.mediaType,mediaTypeLiteral);
-               for(MetaDataGenerator generator : getMetaDataGenerators()) {
-                       try {
-                               generator.generate(infoDiscoBitNode, data, 
mediaType);
-                       } catch (RuntimeException ex) {
-                               logger.error("Exception in MetaDataGenerator ", 
ex);
+               Set<MetaDataGenerator> metaDataGenerators = 
getMetaDataGenerators();
+               synchronized(metaDataGenerators) {
+                       for(MetaDataGenerator generator : metaDataGenerators) {
+                               try {
+                                       generator.generate(infoDiscoBitNode, 
data, mediaType);
+                               } catch (RuntimeException ex) {
+                                       logger.error("Exception in 
MetaDataGenerator ", ex);
+                               }
                        }
                }
        }

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=988601&r1=988600&r2=988601&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
 Tue Aug 24 15:39:53 2010
@@ -110,7 +110,7 @@ public class DiscobitsTypeHandler extend
        
        private static final Logger logger = 
LoggerFactory.getLogger(DiscobitsTypeHandler.class);
 
-       private Set<MetaDataGenerator> metaDataGenerators =
+       private final Set<MetaDataGenerator> metaDataGenerators =
                        Collections.synchronizedSet(new 
HashSet<MetaDataGenerator>());
 
        /**

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.enrichment/src/main/java/org/apache/clerezza/platform/rdf/enrichment/EnrichmentTcProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.enrichment/src/main/java/org/apache/clerezza/platform/rdf/enrichment/EnrichmentTcProvider.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.enrichment/src/main/java/org/apache/clerezza/platform/rdf/enrichment/EnrichmentTcProvider.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.enrichment/src/main/java/org/apache/clerezza/platform/rdf/enrichment/EnrichmentTcProvider.java
 Tue Aug 24 15:39:53 2010
@@ -75,7 +75,7 @@ public class EnrichmentTcProvider implem
        public static final String SYSTEM_GRAPH_FILTER =
                        "(name="+ Constants.SYSTEM_GRAPH_URI_STRING +")";
        private LockableMGraph contentGraph;
-       private Collection<Enricher> enrichers = 
Collections.synchronizedCollection(new HashSet<Enricher>());
+       private final Collection<Enricher> enrichers = 
Collections.synchronizedCollection(new HashSet<Enricher>());
 
        @Reference
        private ContentGraphProvider cgProvider;

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typehandlerspace/src/main/java/org/apache/clerezza/platform/typehandlerspace/TypeHandlerDiscoveryImpl.java
 Tue Aug 24 15:39:53 2010
@@ -66,7 +66,7 @@ public class TypeHandlerDiscoveryImpl im
        private Set<Object> typeHandlerStore = new HashSet<Object>();
 
        private List<Resource> typePriorityList;
-       private Map<UriRef, Object> typeHandlerMap = 
Collections.synchronizedMap(
+       private final Map<UriRef, Object> typeHandlerMap = 
Collections.synchronizedMap(
                        new HashMap<UriRef, Object>());
        
        
@@ -144,10 +144,12 @@ public class TypeHandlerDiscoveryImpl im
        private void unregisterTypeHandler(Object component) {
                Iterator<UriRef> keys = typeHandlerMap.keySet().iterator();
                Set<UriRef> toRemove = new 
HashSet<UriRef>(typeHandlerMap.size());
-               while (keys.hasNext()) {
-                       UriRef uriRef = keys.next();
-                       if(typeHandlerMap.get(uriRef)==component) {
-                               toRemove.add(uriRef);
+               synchronized(typeHandlerMap) {
+                       while (keys.hasNext()) {
+                               UriRef uriRef = keys.next();
+                               if(typeHandlerMap.get(uriRef)==component) {
+                                       toRemove.add(uriRef);
+                               }
                        }
                }
                keys = toRemove.iterator();

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/GenericGraphNodeMBW.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/GenericGraphNodeMBW.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/GenericGraphNodeMBW.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/GenericGraphNodeMBW.java
 Tue Aug 24 15:39:53 2010
@@ -37,7 +37,6 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Request;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.MessageBodyWriter;
@@ -90,7 +89,7 @@ public class GenericGraphNodeMBW impleme
        private static final Logger logger = 
LoggerFactory.getLogger(GenericGraphNodeMBW.class);
        private UriInfo uriInfo = null;
        private HttpHeaders headers = null;
-       private Set<UserContextProvider> contextProviders =
+       private final Set<UserContextProvider> contextProviders =
                        Collections.synchronizedSet(new 
HashSet<UserContextProvider>());
        private DocumentBuilder documentBuilder;
        private TransformerFactory transformerFactory = 
TransformerFactory.newInstance();
@@ -208,10 +207,12 @@ public class GenericGraphNodeMBW impleme
 
        private GraphNode getUserContext() {
                GraphNode contextNode = new GraphNode(new BNode(), new 
SimpleMGraph());
-               Iterator<UserContextProvider> providersIter = 
contextProviders.iterator();
-               while (providersIter.hasNext()) {
-                       UserContextProvider userContextProvider = 
providersIter.next();
-                       contextNode = 
userContextProvider.addUserContext(contextNode);
+               synchronized(contextProviders) {
+                       Iterator<UserContextProvider> providersIter = 
contextProviders.iterator();
+                       while (providersIter.hasNext()) {
+                               UserContextProvider userContextProvider = 
providersIter.next();
+                               contextNode = 
userContextProvider.addUserContext(contextNode);
+                       }
                }
                return contextNode;
        }

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.typerendering/org.apache.clerezza.platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/RenderletRendererFactoryImpl.java
 Tue Aug 24 15:39:53 2010
@@ -46,7 +46,6 @@ import org.osgi.service.component.Compon
 import org.apache.clerezza.platform.typerendering.ontologies.TYPERENDERING;
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.LiteralFactory;
-import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.Resource;
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.TypedLiteral;
@@ -93,7 +92,7 @@ public class RenderletRendererFactoryImp
        private Map<String, Renderlet> renderletMap = new HashMap<String, 
Renderlet>();
        private ComponentContext componentContext;
        private ReentrantReadWriteLock configLock = new 
ReentrantReadWriteLock();
-       private Set<ServiceReference> renderletRefStore =
+       private final Set<ServiceReference> renderletRefStore =
                        Collections.synchronizedSet(new 
HashSet<ServiceReference>());
        List<Resource> rdfTypePrioList;
 
@@ -324,8 +323,10 @@ public class RenderletRendererFactoryImp
        }
 
        private void registerRenderletsFromStore() {
-               for (ServiceReference renderletRef : renderletRefStore) {
-                       registerRenderletService(renderletRef);
+               synchronized(renderletRefStore) {
+                       for (ServiceReference renderletRef : renderletRefStore) 
{
+                               registerRenderletService(renderletRef);
+                       }
                }
                renderletRefStore.clear();
        }

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
 Tue Aug 24 15:39:53 2010
@@ -43,7 +43,6 @@ import org.apache.clerezza.rdf.core.MGra
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.access.security.TcAccessController;
-import org.apache.clerezza.rdf.core.access.security.TcAccessController;
 import org.apache.clerezza.rdf.core.sparql.query.AskQuery;
 import org.apache.clerezza.rdf.core.sparql.query.ConstructQuery;
 import org.apache.clerezza.rdf.core.sparql.query.DescribeQuery;
@@ -114,7 +113,7 @@ public class TcManager implements TcProv
         * A store that keeps <code>WeightedTcProvider</code>S in case the
         * componentContext is null. Used in activate().
         */
-       private Set<WeightedTcProvider> providerStore =
+       private final Set<WeightedTcProvider> providerStore =
                        Collections.synchronizedSet(new 
HashSet<WeightedTcProvider>());
 
        /**
@@ -163,10 +162,12 @@ public class TcManager implements TcProv
 
        protected void activate(final ComponentContext componentContext) {
                this.componentContext = componentContext;
-               Iterator<WeightedTcProvider> it = providerStore.iterator();
-               while (it.hasNext()) {
-                       WeightedTcProvider provider = it.next();
-                       updateLockableMGraphCache(provider, true);              
        
+               synchronized(providerStore) {
+                       Iterator<WeightedTcProvider> it = 
providerStore.iterator();
+                       while (it.hasNext()) {
+                               WeightedTcProvider provider = it.next();
+                               updateLockableMGraphCache(provider, true);
+                       }
                }
                providerStore.clear();
        }

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/AbstractTripleCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/AbstractTripleCollection.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/AbstractTripleCollection.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/AbstractTripleCollection.java
 Tue Aug 24 15:39:53 2010
@@ -46,7 +46,7 @@ public abstract class AbstractTripleColl
                implements TripleCollection {
 
        //all listeners
-       private Set<ListenerConfiguration> listenerConfigs = 
Collections.synchronizedSet(
+       private final Set<ListenerConfiguration> listenerConfigs = 
Collections.synchronizedSet(
                        new HashSet<ListenerConfiguration>());
        private DelayedNotificator delayedNotificator = new 
DelayedNotificator();
 
@@ -177,9 +177,11 @@ public abstract class AbstractTripleColl
         * @param type The type of modification
         */
        protected void dispatchEvent(GraphEvent event) {
-               for (ListenerConfiguration config : listenerConfigs) {
-                       if (config.getFilter().match(event.getTriple())) {
-                               
delayedNotificator.sendEventToListener(config.getListener(), event);
+               synchronized(listenerConfigs) {
+                       for (ListenerConfiguration config : listenerConfigs) {
+                               if 
(config.getFilter().match(event.getTriple())) {
+                                       
delayedNotificator.sendEventToListener(config.getListener(), event);
+                               }
                        }
                }
        }
@@ -200,11 +202,13 @@ public abstract class AbstractTripleColl
 
        @Override
        public void removeGraphListener(GraphListener listener) {
-               Iterator<ListenerConfiguration> iter = 
listenerConfigs.iterator();
-               while (iter.hasNext()) {
-                       ListenerConfiguration listenerConfig = iter.next();
-                       if (listenerConfig.getListener().equals(listener)) {
-                               iter.remove();
+               synchronized(listenerConfigs) {
+                       Iterator<ListenerConfiguration> iter = 
listenerConfigs.iterator();
+                       while (iter.hasNext()) {
+                               ListenerConfiguration listenerConfig = 
iter.next();
+                               if 
(listenerConfig.getListener().equals(listener)) {
+                                       iter.remove();
+                               }
                        }
                }
                delayedNotificator.removeDelayedListener(listener);

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleTripleCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleTripleCollection.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleTripleCollection.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleTripleCollection.java
 Tue Aug 24 15:39:53 2010
@@ -90,7 +90,7 @@ class SimpleTripleCollection extends Abs
                }
        }       
        
-       private Set<SoftReference<SimpleIterator>> iterators = 
+       private final Set<SoftReference<SimpleIterator>> iterators =
                        Collections.synchronizedSet(new 
HashSet<SoftReference<SimpleIterator>>());
        
        /**
@@ -185,15 +185,17 @@ class SimpleTripleCollection extends Abs
                        return;
                }
                Set<SoftReference> oldReferences = new HashSet<SoftReference>();
-               for (SoftReference<SimpleTripleCollection.SimpleIterator> 
softReference : iterators) {
-                       SimpleIterator simpleIterator = softReference.get();
-                       if (simpleIterator == null) {
-                               oldReferences.add(softReference);
-                               continue;
+               synchronized(iterators) {
+                       for 
(SoftReference<SimpleTripleCollection.SimpleIterator> softReference : 
iterators) {
+                               SimpleIterator simpleIterator = 
softReference.get();
+                               if (simpleIterator == null) {
+                                       oldReferences.add(softReference);
+                                       continue;
+                               }
+                               if (simpleIterator != caller) {
+                                       simpleIterator.invalidate();
+                               }
                        }
-                       if (simpleIterator != caller) {
-                               simpleIterator.invalidate();
-                       }                       
                }
                iterators.removeAll(oldReferences);
        }

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.enrichment/src/main/java/org/apache/clerezza/rdf/enrichment/EnrichmentTriples.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.enrichment/src/main/java/org/apache/clerezza/rdf/enrichment/EnrichmentTriples.java?rev=988601&r1=988600&r2=988601&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.enrichment/src/main/java/org/apache/clerezza/rdf/enrichment/EnrichmentTriples.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.enrichment/src/main/java/org/apache/clerezza/rdf/enrichment/EnrichmentTriples.java
 Tue Aug 24 15:39:53 2010
@@ -40,7 +40,7 @@ import org.apache.clerezza.utils.Iterato
 public class EnrichmentTriples extends AbstractMGraph {
 
        private TripleCollection base;
-       private Collection<Enricher> enrichers;
+       private final Collection<Enricher> enrichers;
        
        public EnrichmentTriples(TripleCollection base, Collection<Enricher> 
enrichers) {
                this.base = base;
@@ -52,13 +52,14 @@ public class EnrichmentTriples extends A
                        UriRef predicate, Resource object) {
                Collection<Iterator<Triple>> iteratorCollection =
                                new 
ArrayList<Iterator<Triple>>(enrichers.size());
+               synchronized(enrichers) {
+                       for (Enricher enricher : enrichers) {
+                               if (((subject == null) || 
enricher.getSubjectFilter().accept(subject, base)) &&
+                                       ((predicate == null) || 
enricher.getPredicateFilter().accept(predicate, base)) &&
+                                       ((object == null) || 
enricher.getObjectFilter().accept(object, base))) {
+                                       
iteratorCollection.add(enricher.filter(subject, predicate, object, base));
 
-               for (Enricher enricher : enrichers) {
-                       if (((subject == null) || 
enricher.getSubjectFilter().accept(subject, base)) &&
-                               ((predicate == null) || 
enricher.getPredicateFilter().accept(predicate, base)) &&
-                               ((object == null) || 
enricher.getObjectFilter().accept(object, base))) {
-                               iteratorCollection.add(enricher.filter(subject, 
predicate, object, base));
-
+                               }
                        }
                }
                return new 
IteratorMerger<Triple>(iteratorCollection.iterator());
@@ -67,8 +68,10 @@ public class EnrichmentTriples extends A
        @Override
        public int size() {
                int totalSize = 0;
-               for (Enricher enricher : enrichers) {
-                       totalSize += enricher.providedTriplesCount(base);
+               synchronized(enrichers) {
+                       for (Enricher enricher : enrichers) {
+                               totalSize += 
enricher.providedTriplesCount(base);
+                       }
                }
                return totalSize;
        }


Reply via email to