You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by sf...@apache.org on 2010/12/12 16:02:37 UTC

svn commit: r1044829 [1/12] - in /incubator/stanbol/trunk/rick/generic: core/src/main/java/eu/iksproject/rick/core/impl/ core/src/main/java/eu/iksproject/rick/core/mapping/ core/src/main/java/eu/iksproject/rick/core/model/ core/src/main/java/eu/iksproj...

Author: sfermigier
Date: Sun Dec 12 15:02:34 2010
New Revision: 1044829

URL: http://svn.apache.org/viewvc?rev=1044829&view=rev
Log:
Expand tabs. Clean up.


Modified:
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/ReferenceManagerImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/ReferencedSiteImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/RickConfigurationImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/RickImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/YardManagerImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/mapping/DefaultFieldMapperImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/mapping/FieldMappingUtils.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/mapping/ValueConverterFactory.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/model/DefaultEntityMappingImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/model/DefaultSignImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/model/DefaultSymbolImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/model/InMemoryRepresentation.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/model/InMemoryValueFactory.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/query/DefaultQueryFactory.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/query/FieldQueryImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/query/QueryResultListImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/query/QueryUtils.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/site/AbstractEntityDereferencer.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/site/AbstractEntitySearcher.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/site/CacheImpl.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/site/CacheUtils.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/AdaptingIterator.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/EnumIterator.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/ModelUtils.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/OsgiUtils.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/TextIterator.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/TimeUtils.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/ToStringIterator.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/utils/TypeSaveIterator.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/yard/AbstractYard.java
    incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/yard/DefaultYardConfig.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/Rick.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/RickConfiguration.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/EntityMapping.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/Reference.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/Representation.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/Symbol.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/Text.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/UnsupportedTypeException.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/ValueFactory.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/rdf/NamespaceEnum.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/model/rdf/RdfResourceEnum.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/site/ConfiguredSite.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/site/EntityDereferencer.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/site/ReferencedSite.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/site/ReferencedSiteManager.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/yard/CacheStrategy.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/yard/Yard.java
    incubator/stanbol/trunk/rick/generic/query/src/main/java/eu/iksproject/rick/servicesapi/yard/YardManager.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/Rick.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/RickConfiguration.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/RickException.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/defaults/DataTypeEnum.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/defaults/NamespaceEnum.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/mapping/FieldMapper.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/mapping/FieldMapperConfig.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/mapping/FieldMapping.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/EntityMapping.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/Reference.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/Representation.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/Sign.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/Symbol.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/Text.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/UnsupportedTypeException.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/ValueFactory.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/model/rdf/RdfResourceEnum.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/Constraint.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/EntityQuery.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/FieldQuery.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/FieldQueryFactory.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/Query.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/QueryResultList.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/QueryService.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/RangeConstraint.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/ReferenceConstraint.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/TextConstraint.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/UnsupportedQueryTypeException.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/query/ValueConstraint.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/site/ConfiguredSite.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/site/EntityDereferencer.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/site/EntitySearcher.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/site/ReferencedSite.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/site/ReferencedSiteException.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/site/ReferencedSiteManager.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/util/PatternUtils.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/Cache.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/CacheInitialisationException.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/CacheStrategy.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/CacheingLevel.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/Yard.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/YardException.java
    incubator/stanbol/trunk/rick/generic/servicesapi/src/main/java/eu/iksproject/rick/servicesapi/yard/YardManager.java
    incubator/stanbol/trunk/rick/generic/test/src/main/java/eu/iksproject/rick/test/model/RepresentationTest.java

Modified: incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/ReferenceManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/ReferenceManagerImpl.java?rev=1044829&r1=1044828&r2=1044829&view=diff
==============================================================================
--- incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/ReferenceManagerImpl.java (original)
+++ incubator/stanbol/trunk/rick/generic/core/src/main/java/eu/iksproject/rick/core/impl/ReferenceManagerImpl.java Sun Dec 12 15:02:34 2010
@@ -42,276 +42,276 @@ import eu.iksproject.rick.servicesapi.si
 })
 public class ReferenceManagerImpl implements ReferencedSiteManager {
 
-	protected final Logger log;
-	
-	protected ComponentContext context;
-	public ReferenceManagerImpl(){
-		super();
-		log = LoggerFactory.getLogger(ReferenceManagerImpl.class);
-		log.info(" create instance of "+ReferenceManagerImpl.class);
-	}
-	@Reference(
-			cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,
-			referenceInterface=ReferencedSite.class,
-			strategy=ReferenceStrategy.EVENT,
-			policy=ReferencePolicy.DYNAMIC,
-			bind="bindReferencedSites",
-			unbind="unbindReferencedSites")
-	List<ReferencedSite> referencedSites = new CopyOnWriteArrayList<ReferencedSite>();
-	/**
-	 * Map holding the mapping of the site ID to the referencedSite Object
-	 * TODO: in principle it could be possible that two instances of 
-	 * {@link ReferencedSite} could be configured to use the same ID
-	 */
-	private final Map<String,ReferencedSite> idMap = 
-		Collections.synchronizedMap(new HashMap<String,ReferencedSite>());
-	/**
-	 * Map holding the mappings between entityPrefixes and referenced sites
-	 */
-	private final Map<String,Collection<ReferencedSite>> prefixMap = 
-		Collections.synchronizedMap(new TreeMap<String, Collection<ReferencedSite>>());
-	/**
-	 * This List is used for binary searches within the prefixes to find the
-	 * {@link ReferencedSite} to search for a {@link #getSign(String)}
-	 * request.<b>
-	 * NOTE: Every access to this list MUST BE synchronised to {@link #prefixMap}
-	 * TODO: I am quite sure, that there is some ioUtils class that provides
-	 * both a Map and an sorted List over the keys!
-	 */
-	private final List<String> prefixList = new ArrayList<String>();
-	
-	@Activate
-	protected void activate(ComponentContext context) {
+    protected final Logger log;
+
+    protected ComponentContext context;
+    public ReferenceManagerImpl(){
+        super();
+        log = LoggerFactory.getLogger(ReferenceManagerImpl.class);
+        log.info(" create instance of "+ReferenceManagerImpl.class);
+    }
+    @Reference(
+            cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,
+            referenceInterface=ReferencedSite.class,
+            strategy=ReferenceStrategy.EVENT,
+            policy=ReferencePolicy.DYNAMIC,
+            bind="bindReferencedSites",
+            unbind="unbindReferencedSites")
+    List<ReferencedSite> referencedSites = new CopyOnWriteArrayList<ReferencedSite>();
+    /**
+     * Map holding the mapping of the site ID to the referencedSite Object
+     * TODO: in principle it could be possible that two instances of
+     * {@link ReferencedSite} could be configured to use the same ID
+     */
+    private final Map<String,ReferencedSite> idMap =
+        Collections.synchronizedMap(new HashMap<String,ReferencedSite>());
+    /**
+     * Map holding the mappings between entityPrefixes and referenced sites
+     */
+    private final Map<String,Collection<ReferencedSite>> prefixMap =
+        Collections.synchronizedMap(new TreeMap<String, Collection<ReferencedSite>>());
+    /**
+     * This List is used for binary searches within the prefixes to find the
+     * {@link ReferencedSite} to search for a {@link #getSign(String)}
+     * request.<b>
+     * NOTE: Every access to this list MUST BE synchronised to {@link #prefixMap}
+     * TODO: I am quite sure, that there is some ioUtils class that provides
+     * both a Map and an sorted List over the keys!
+     */
+    private final List<String> prefixList = new ArrayList<String>();
+
+    @Activate
+    protected void activate(ComponentContext context) {
         this.context = context;
         log.info("Activate ReferenceManager with context" + context);
     }
-	@Deactivate
+    @Deactivate
     protected void deactivate(ComponentContext context) {
         log.info("Deactivate ReferenceManager with context" + context);
         this.context = null;
         synchronized (prefixMap) {
             this.prefixList.clear();
             this.prefixMap.clear();
-		}
+        }
         this.idMap.clear();
     }
-	@Override
-	public void addReferredSite(String baseUri, Dictionary<String,?> properties) {
-		//TODO: implement
-		throw new UnsupportedOperationException();
-		
-	}
-	
-	protected void bindReferencedSites(ReferencedSite referencedSite){
-		log.info(" ... binding ReferencedSite "+referencedSite.getId());
-		referencedSites.add(referencedSite);
-		idMap.put(referencedSite.getId(), referencedSite);
-		addEntityPrefixes(referencedSite);
-	}
-	protected void unbindReferencedSites(ReferencedSite referencedSite){
-		log.info(" ... unbinding ReferencedSite "+referencedSite.getId());
-		referencedSites.remove(referencedSite);
-		idMap.remove(referencedSite.getId());
-		removeEntityPrefixes(referencedSite);
-	}
-	/**
-	 * Adds the prefixes of the parsed Site to the Map holding the according mappings
-	 * @param referencedSite
-	 */
-	private void addEntityPrefixes(ReferencedSite referencedSite) {
-		for(String prefix : referencedSite.getEntityPrefixes()){
-			synchronized (prefixMap) {
-				Collection<ReferencedSite> sites = prefixMap.get(prefix);
-				if(sites == null){
-					sites = new CopyOnWriteArrayList<ReferencedSite>();
-					prefixMap.put(prefix, sites);
-					//this also means that the prefix is not part of the prefixList
-					int pos = Collections.binarySearch(prefixList, prefix);
-					if(pos<0){
-						prefixList.add(Math.abs(pos)-1,prefix);
-					}
-					prefixList.add(Collections.binarySearch(prefixList, prefix)+1,prefix);
-				}
-				//TODO: Sort the referencedSites based on the ServiceRanking!
-				sites.add(referencedSite);
-			}
-		}
-	}
-	/**
-	 * Removes the prefixes of the parsed Site to the Map holding the according mappings
-	 * @param referencedSite
-	 */
-	private void removeEntityPrefixes(ReferencedSite referencedSite) {
-		for(String prefix : referencedSite.getEntityPrefixes()){
-			synchronized (prefixMap) {
-				Collection<ReferencedSite> sites = prefixMap.get(prefix);
-				if(sites != null){
-					sites.remove(referencedSite);
-				}
-				if(sites.isEmpty()){
-					//remove key from the Map
-					prefixMap.remove(prefix);
-					//remove also the prefix from the List
-					prefixList.remove(prefix);
-				}
-			}
-			
-		}
-	}
-	@Override
-	public ReferencedSite getReferencedSite(String id) {
-		return idMap.get(id);
-	}
-	@Override
-	public Collection<String> getReferencedSiteIds() {
-		return Collections.unmodifiableCollection(idMap.keySet());
-	}
-
-	@Override
-	public boolean isReferred(String id) {
-		return idMap.containsKey(id);
-	}
-	@Override
-	public Collection<ReferencedSite> getReferencedSitesByEntityPrefix(String entityUri) {
-		if(entityUri == null){ 
-			log.warn("NULL value parsed for Parameter entityUri -> return emptyList!");
-			return Collections.emptyList();
-		}
-		synchronized (prefixMap) { //sync is done via the Map (for both the list and the map)!
-			int pos = Collections.binarySearch(prefixList, entityUri);
-			final int prefixPos;
-			if(pos < 0){
-				/**
-				 * Example:
-				 * ["a","b"] <- "bc"
-				 * binary search returns -3 (because insert point would be +2)
-				 * to find the prefix we need the insert point-1 -> pos 1
-				 * 
-				 * Example2:
-				 * [] <- "bc"
-				 * binary search returns -1 (because insert point would be 0)
-				 * to find the prefix we need the insert point-1 -> pos -1
-				 * therefore we need to check for negative prefixPos and return
-				 * an empty list!
-				 */
-				prefixPos = Math.abs(pos)-2;
-			} else {
-				prefixPos = pos; //entityUri found in list
-			}
-			if(prefixPos<0){
-				return Collections.emptySet();
-			} else {
-				String prefix = prefixList.get(prefixPos);
-				if(entityUri.startsWith(prefix)){
-					log.debug("Found prefix "+prefix+" for Entity "+entityUri);
-					return prefixMap.get(prefix);
-				} //else the parsed entityPrefix does not start with the found prefix
-				// this may only happen, when the prefixPos == prefixList.size()
-			}
-		}
-		log.info("No registered prefix for entity "+entityUri);
-		return Collections.emptySet();
-	}
-	@Override
-	public QueryResultList<String> findIds(FieldQuery query) {
-		// We need to search all referenced Sites
-		Set<String> entityIds = new HashSet<String>();
-		for(ReferencedSite site : referencedSites){
-			try {
-				for(String entityId : site.findReferences(query)){
-					entityIds.add(entityId);
-				}
-			} catch (ReferencedSiteException e) {
-				log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
-			}
-		}
-		return new QueryResultListImpl<String>(query, entityIds.iterator(),String.class);
-	}
-	@Override
-	public QueryResultList<Representation> find(FieldQuery query) {
-		Set<Representation> representations = new HashSet<Representation>();
-		for(ReferencedSite site : referencedSites){
-			try {
-				for(Representation rep : site.find(query)){
-					if(!representations.contains(rep)){ //do not override
-						representations.add(rep);
-					} else {
-						log.info("Entity "+rep.getId()+" found on more than one Referenced Site -> Representation of Site "+site.getName()+" is ignored");
-					}
-				}
-			} catch (ReferencedSiteException e) {
-				log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
-			}
-		}
-		return new QueryResultListImpl<Representation>(query, representations,Representation.class);
-	}
-	@Override
-	public QueryResultList<Sign> findEntities(FieldQuery query) {
-		Set<Sign> entities = new HashSet<Sign>();
-		for(ReferencedSite site : referencedSites){
-			try {
-				for(Sign rep : site.findSigns(query)){
-					if(!entities.contains(rep)){ //do not override
-						entities.add(rep);
-					} else {
-						log.info("Entity "+rep.getId()+" found on more than one Referenced Site -> Representation of Site "+site.getName()+" is ignored");
-					}
-				}
-			} catch (ReferencedSiteException e) {
-				log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
-			}
-		}
-		return new QueryResultListImpl<Sign>(query, entities,Sign.class);
-	}
-	@Override
-	public InputStream getContent(String entityId, String contentType) {
-		Collection<ReferencedSite> sites = getReferencedSitesByEntityPrefix(entityId);
-		if(sites.isEmpty()){
-			log.info("No Referenced Site registered for Entity "+entityId+"");
-			log.debug("Registered Prefixes "+prefixList);
-			return null;
-		}
-		for(ReferencedSite site : sites){
-			InputStream content;
-			try {
-				content = site.getContent(entityId, contentType);
-				if(content != null){
-					log.debug("Return Content of type "+contentType+" for Entity "+entityId+" from referenced site "+site.getName());
-					return content;
-				}
-			} catch (ReferencedSiteException e) {
-				log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
-			}
-			
-		}
-		log.debug("Entity "+entityId+" not found on any of the following Sites "+sites);
-		return null;
-	}
-	@Override
-	public Sign getSign(String entityId) {
-		Collection<ReferencedSite> sites = getReferencedSitesByEntityPrefix(entityId);
-		if(sites.isEmpty()){
-			log.info("No Referenced Site registered for Entity "+entityId+"");
-			log.debug("Registered Prefixes "+prefixList);
-			return null;
-		}
-		for(ReferencedSite site : sites){
-			Sign entity;
-			try {
-				entity = site.getSign(entityId);
-				if(entity != null){
-					log.debug("Return Representation of Site "+site.getName()+" for Entity "+entityId);
-					return entity;
-				}
-			} catch (ReferencedSiteException e) {
-				log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
-			}
-			
-		}
-		log.debug("Entity "+entityId+" not found on any of the following Sites "+sites);
-		return null;
-	}
+    @Override
+    public void addReferredSite(String baseUri, Dictionary<String,?> properties) {
+        //TODO: implement
+        throw new UnsupportedOperationException();
+
+    }
+
+    protected void bindReferencedSites(ReferencedSite referencedSite){
+        log.info(" ... binding ReferencedSite "+referencedSite.getId());
+        referencedSites.add(referencedSite);
+        idMap.put(referencedSite.getId(), referencedSite);
+        addEntityPrefixes(referencedSite);
+    }
+    protected void unbindReferencedSites(ReferencedSite referencedSite){
+        log.info(" ... unbinding ReferencedSite "+referencedSite.getId());
+        referencedSites.remove(referencedSite);
+        idMap.remove(referencedSite.getId());
+        removeEntityPrefixes(referencedSite);
+    }
+    /**
+     * Adds the prefixes of the parsed Site to the Map holding the according mappings
+     * @param referencedSite
+     */
+    private void addEntityPrefixes(ReferencedSite referencedSite) {
+        for(String prefix : referencedSite.getEntityPrefixes()){
+            synchronized (prefixMap) {
+                Collection<ReferencedSite> sites = prefixMap.get(prefix);
+                if(sites == null){
+                    sites = new CopyOnWriteArrayList<ReferencedSite>();
+                    prefixMap.put(prefix, sites);
+                    //this also means that the prefix is not part of the prefixList
+                    int pos = Collections.binarySearch(prefixList, prefix);
+                    if(pos<0){
+                        prefixList.add(Math.abs(pos)-1,prefix);
+                    }
+                    prefixList.add(Collections.binarySearch(prefixList, prefix)+1,prefix);
+                }
+                //TODO: Sort the referencedSites based on the ServiceRanking!
+                sites.add(referencedSite);
+            }
+        }
+    }
+    /**
+     * Removes the prefixes of the parsed Site to the Map holding the according mappings
+     * @param referencedSite
+     */
+    private void removeEntityPrefixes(ReferencedSite referencedSite) {
+        for(String prefix : referencedSite.getEntityPrefixes()){
+            synchronized (prefixMap) {
+                Collection<ReferencedSite> sites = prefixMap.get(prefix);
+                if(sites != null){
+                    sites.remove(referencedSite);
+                }
+                if(sites.isEmpty()){
+                    //remove key from the Map
+                    prefixMap.remove(prefix);
+                    //remove also the prefix from the List
+                    prefixList.remove(prefix);
+                }
+            }
+
+        }
+    }
+    @Override
+    public ReferencedSite getReferencedSite(String id) {
+        return idMap.get(id);
+    }
+    @Override
+    public Collection<String> getReferencedSiteIds() {
+        return Collections.unmodifiableCollection(idMap.keySet());
+    }
+
+    @Override
+    public boolean isReferred(String id) {
+        return idMap.containsKey(id);
+    }
+    @Override
+    public Collection<ReferencedSite> getReferencedSitesByEntityPrefix(String entityUri) {
+        if(entityUri == null){
+            log.warn("NULL value parsed for Parameter entityUri -> return emptyList!");
+            return Collections.emptyList();
+        }
+        synchronized (prefixMap) { //sync is done via the Map (for both the list and the map)!
+            int pos = Collections.binarySearch(prefixList, entityUri);
+            final int prefixPos;
+            if(pos < 0){
+                /**
+                 * Example:
+                 * ["a","b"] <- "bc"
+                 * binary search returns -3 (because insert point would be +2)
+                 * to find the prefix we need the insert point-1 -> pos 1
+                 *
+                 * Example2:
+                 * [] <- "bc"
+                 * binary search returns -1 (because insert point would be 0)
+                 * to find the prefix we need the insert point-1 -> pos -1
+                 * therefore we need to check for negative prefixPos and return
+                 * an empty list!
+                 */
+                prefixPos = Math.abs(pos)-2;
+            } else {
+                prefixPos = pos; //entityUri found in list
+            }
+            if(prefixPos<0){
+                return Collections.emptySet();
+            } else {
+                String prefix = prefixList.get(prefixPos);
+                if(entityUri.startsWith(prefix)){
+                    log.debug("Found prefix "+prefix+" for Entity "+entityUri);
+                    return prefixMap.get(prefix);
+                } //else the parsed entityPrefix does not start with the found prefix
+                // this may only happen, when the prefixPos == prefixList.size()
+            }
+        }
+        log.info("No registered prefix for entity "+entityUri);
+        return Collections.emptySet();
+    }
+    @Override
+    public QueryResultList<String> findIds(FieldQuery query) {
+        // We need to search all referenced Sites
+        Set<String> entityIds = new HashSet<String>();
+        for(ReferencedSite site : referencedSites){
+            try {
+                for(String entityId : site.findReferences(query)){
+                    entityIds.add(entityId);
+                }
+            } catch (ReferencedSiteException e) {
+                log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
+            }
+        }
+        return new QueryResultListImpl<String>(query, entityIds.iterator(),String.class);
+    }
+    @Override
+    public QueryResultList<Representation> find(FieldQuery query) {
+        Set<Representation> representations = new HashSet<Representation>();
+        for(ReferencedSite site : referencedSites){
+            try {
+                for(Representation rep : site.find(query)){
+                    if(!representations.contains(rep)){ //do not override
+                        representations.add(rep);
+                    } else {
+                        log.info("Entity "+rep.getId()+" found on more than one Referenced Site -> Representation of Site "+site.getName()+" is ignored");
+                    }
+                }
+            } catch (ReferencedSiteException e) {
+                log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
+            }
+        }
+        return new QueryResultListImpl<Representation>(query, representations,Representation.class);
+    }
+    @Override
+    public QueryResultList<Sign> findEntities(FieldQuery query) {
+        Set<Sign> entities = new HashSet<Sign>();
+        for(ReferencedSite site : referencedSites){
+            try {
+                for(Sign rep : site.findSigns(query)){
+                    if(!entities.contains(rep)){ //do not override
+                        entities.add(rep);
+                    } else {
+                        log.info("Entity "+rep.getId()+" found on more than one Referenced Site -> Representation of Site "+site.getName()+" is ignored");
+                    }
+                }
+            } catch (ReferencedSiteException e) {
+                log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
+            }
+        }
+        return new QueryResultListImpl<Sign>(query, entities,Sign.class);
+    }
+    @Override
+    public InputStream getContent(String entityId, String contentType) {
+        Collection<ReferencedSite> sites = getReferencedSitesByEntityPrefix(entityId);
+        if(sites.isEmpty()){
+            log.info("No Referenced Site registered for Entity "+entityId+"");
+            log.debug("Registered Prefixes "+prefixList);
+            return null;
+        }
+        for(ReferencedSite site : sites){
+            InputStream content;
+            try {
+                content = site.getContent(entityId, contentType);
+                if(content != null){
+                    log.debug("Return Content of type "+contentType+" for Entity "+entityId+" from referenced site "+site.getName());
+                    return content;
+                }
+            } catch (ReferencedSiteException e) {
+                log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
+            }
+
+        }
+        log.debug("Entity "+entityId+" not found on any of the following Sites "+sites);
+        return null;
+    }
+    @Override
+    public Sign getSign(String entityId) {
+        Collection<ReferencedSite> sites = getReferencedSitesByEntityPrefix(entityId);
+        if(sites.isEmpty()){
+            log.info("No Referenced Site registered for Entity "+entityId+"");
+            log.debug("Registered Prefixes "+prefixList);
+            return null;
+        }
+        for(ReferencedSite site : sites){
+            Sign entity;
+            try {
+                entity = site.getSign(entityId);
+                if(entity != null){
+                    log.debug("Return Representation of Site "+site.getName()+" for Entity "+entityId);
+                    return entity;
+                }
+            } catch (ReferencedSiteException e) {
+                log.warn("Unable to access Site "+site.getName()+" (url = "+site.getAccessUri()+")",e);
+            }
+
+        }
+        log.debug("Entity "+entityId+" not found on any of the following Sites "+sites);
+        return null;
+    }
+
 
-	
 
 }