X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2FDefaultRepositoryRegister.java;h=bbe0f93cc875c7ccc32bf97a91c8623ffd7d6961;hb=2d4dd736ab07b1ef3aaec0a9e5d29f30c551de9c;hp=e2d9854246364feea7cfb0f7255ebf531551e1a2;hpb=fea161ce3d77b81ae6ee0a7895f7bd64b4cb618e;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryRegister.java b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryRegister.java index e2d985424..bbe0f93cc 100644 --- a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryRegister.java +++ b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryRegister.java @@ -3,7 +3,6 @@ package org.argeo.jcr; import java.util.Collections; import java.util.Map; import java.util.Observable; -import java.util.SortedMap; import java.util.TreeMap; import javax.jcr.Repository; @@ -13,60 +12,68 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class DefaultRepositoryRegister extends Observable implements - RepositoryRegister { + RepositoryRegister, ArgeoJcrConstants { private final static Log log = LogFactory .getLog(DefaultRepositoryRegister.class); - private SortedMap repositories = Collections - .synchronizedSortedMap(new TreeMap()); + /** Read only map which will be directly exposed. */ + private Map repositories = Collections + .unmodifiableMap(new TreeMap()); @SuppressWarnings("rawtypes") public synchronized Repository getRepository(Map parameters) throws RepositoryException { - if (!parameters.containsKey(JCR_REPOSITORY_NAME)) - throw new RepositoryException("Parameter " + JCR_REPOSITORY_NAME + if (!parameters.containsKey(JCR_REPOSITORY_ALIAS)) + throw new RepositoryException("Parameter " + JCR_REPOSITORY_ALIAS + " has to be defined."); - String name = parameters.get(JCR_REPOSITORY_NAME).toString(); - if (!repositories.containsKey(name)) - throw new RepositoryException("No repository registered with name " - + name); + String alias = parameters.get(JCR_REPOSITORY_ALIAS).toString(); + if (!repositories.containsKey(alias)) + throw new RepositoryException( + "No repository registered with alias " + alias); - return repositories.get(name); + return repositories.get(alias); } - public Map getRepositories() { - return new TreeMap(repositories); + /** Access to the read-only map */ + public synchronized Map getRepositories() { + return repositories; } /** Registers a service, typically called when OSGi services are bound. */ @SuppressWarnings("rawtypes") public synchronized void register(Repository repository, Map properties) { // TODO: also check bean name? - if (properties == null || !properties.containsKey(JCR_REPOSITORY_NAME)) { - log.warn("Cannot register a repository without property " - + JCR_REPOSITORY_NAME); + String alias; + if (properties == null || !properties.containsKey(JCR_REPOSITORY_ALIAS)) { + log.warn("Cannot register a repository if no " + + JCR_REPOSITORY_ALIAS + " property is speecified."); return; } - - String name = properties.get(JCR_REPOSITORY_NAME).toString(); - repositories.put(name, repository); + alias = properties.get(JCR_REPOSITORY_ALIAS).toString(); + Map map = new TreeMap( + repositories); + map.put(alias, repository); + repositories = Collections.unmodifiableMap(map); setChanged(); - notifyObservers(repository); + notifyObservers(alias); } /** Unregisters a service, typically called when OSGi services are unbound. */ @SuppressWarnings("rawtypes") public synchronized void unregister(Repository repository, Map properties) { // TODO: also check bean name? - if (properties == null || !properties.containsKey(JCR_REPOSITORY_NAME)) { + if (properties == null || !properties.containsKey(JCR_REPOSITORY_ALIAS)) { log.warn("Cannot unregister a repository without property " - + JCR_REPOSITORY_NAME); + + JCR_REPOSITORY_ALIAS); return; } - String name = properties.get(JCR_REPOSITORY_NAME).toString(); - repositories.remove(name); + String alias = properties.get(JCR_REPOSITORY_ALIAS).toString(); + Map map = new TreeMap( + repositories); + map.put(alias, repository); + repositories = Collections.unmodifiableMap(map); setChanged(); - notifyObservers(repository); + notifyObservers(alias); } }