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