]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryRegister.java
Work on JCR remoting
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jcr / src / main / java / org / argeo / jcr / DefaultRepositoryRegister.java
1 package org.argeo.jcr;
2
3 import java.util.Collections;
4 import java.util.Map;
5 import java.util.Observable;
6 import java.util.SortedMap;
7 import java.util.TreeMap;
8
9 import javax.jcr.Repository;
10 import javax.jcr.RepositoryException;
11
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14
15 public class DefaultRepositoryRegister extends Observable implements
16 RepositoryRegister {
17 private final static Log log = LogFactory
18 .getLog(DefaultRepositoryRegister.class);
19
20 private SortedMap<String, Repository> repositories = Collections
21 .synchronizedSortedMap(new TreeMap<String, Repository>());
22
23 @SuppressWarnings("rawtypes")
24 public synchronized Repository getRepository(Map parameters)
25 throws RepositoryException {
26 if (!parameters.containsKey(JCR_REPOSITORY_NAME))
27 throw new RepositoryException("Parameter " + JCR_REPOSITORY_NAME
28 + " has to be defined.");
29 String name = parameters.get(JCR_REPOSITORY_NAME).toString();
30 if (!repositories.containsKey(name))
31 throw new RepositoryException("No repository registered with name "
32 + name);
33
34 return repositories.get(name);
35 }
36
37 public Map<String, Repository> getRepositories() {
38 return new TreeMap<String, Repository>(repositories);
39 }
40
41 /** Registers a service, typically called when OSGi services are bound. */
42 @SuppressWarnings("rawtypes")
43 public synchronized void register(Repository repository, Map properties) {
44 // TODO: also check bean name?
45 if (properties == null || !properties.containsKey(JCR_REPOSITORY_NAME)) {
46 log.warn("Cannot register a repository without property "
47 + JCR_REPOSITORY_NAME);
48 return;
49 }
50
51 String name = properties.get(JCR_REPOSITORY_NAME).toString();
52 repositories.put(name, repository);
53 setChanged();
54 notifyObservers(repository);
55 }
56
57 /** Unregisters a service, typically called when OSGi services are unbound. */
58 @SuppressWarnings("rawtypes")
59 public synchronized void unregister(Repository repository, Map properties) {
60 // TODO: also check bean name?
61 if (properties == null || !properties.containsKey(JCR_REPOSITORY_NAME)) {
62 log.warn("Cannot unregister a repository without property "
63 + JCR_REPOSITORY_NAME);
64 return;
65 }
66
67 String name = properties.get(JCR_REPOSITORY_NAME).toString();
68 repositories.remove(name);
69 setChanged();
70 notifyObservers(repository);
71 }
72 }