3 import java
.util
.Collections
;
5 import java
.util
.Observable
;
6 import java
.util
.SortedMap
;
7 import java
.util
.TreeMap
;
9 import javax
.jcr
.Repository
;
10 import javax
.jcr
.RepositoryException
;
12 import org
.apache
.commons
.logging
.Log
;
13 import org
.apache
.commons
.logging
.LogFactory
;
15 public class DefaultRepositoryRegister
extends Observable
implements
17 private final static Log log
= LogFactory
18 .getLog(DefaultRepositoryRegister
.class);
20 private SortedMap
<String
, Repository
> repositories
= Collections
21 .synchronizedSortedMap(new TreeMap
<String
, Repository
>());
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 "
34 return repositories
.get(name
);
37 public Map
<String
, Repository
> getRepositories() {
38 return new TreeMap
<String
, Repository
>(repositories
);
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
);
51 String name
= properties
.get(JCR_REPOSITORY_NAME
).toString();
52 repositories
.put(name
, repository
);
54 notifyObservers(repository
);
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
);
67 String name
= properties
.get(JCR_REPOSITORY_NAME
).toString();
68 repositories
.remove(name
);
70 notifyObservers(repository
);