2 * Copyright (C) 2007-2012 Argeo GmbH
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.jcr
;
19 import java
.net
.URISyntaxException
;
21 import java
.util
.Properties
;
23 import javax
.jcr
.Repository
;
24 import javax
.jcr
.RepositoryException
;
25 import javax
.jcr
.RepositoryFactory
;
27 import org
.argeo
.ArgeoException
;
30 * Simple implementation of {@link RepositoryFactory}, supporting OSGi aliases.
33 public class DefaultRepositoryFactory
extends DefaultRepositoryRegister
34 implements RepositoryFactory
, ArgeoJcrConstants
{
35 @SuppressWarnings("rawtypes")
36 public Repository
getRepository(Map parameters
) throws RepositoryException
{
37 if (parameters
.containsKey(JCR_REPOSITORY_ALIAS
)) {
38 String alias
= parameters
.get(JCR_REPOSITORY_ALIAS
).toString();
39 return getRepositoryByAlias(alias
);
40 } else if (parameters
.containsKey(JCR_REPOSITORY_URI
)) {
41 String uri
= parameters
.get(JCR_REPOSITORY_URI
).toString();
42 return getRepositoryByAlias(getAliasFromURI(uri
));
47 protected String
getAliasFromURI(String uri
) {
49 URI uriObj
= new URI(uri
);
50 String alias
= uriObj
.getPath();
51 if (alias
.charAt(0) == '/')
52 alias
= alias
.substring(1);
53 if (alias
.charAt(alias
.length() - 1) == '/')
54 alias
= alias
.substring(0, alias
.length() - 1);
56 } catch (URISyntaxException e
) {
57 throw new ArgeoException("Cannot interpret URI " + uri
, e
);
62 * Retrieve a repository by alias
64 * @return the repository registered with alias or null if none
66 protected Repository
getRepositoryByAlias(String alias
) {
67 if (getRepositories().containsKey(alias
))
68 return getRepositories().get(alias
);
73 protected void publish(String alias
, Repository repository
,
74 Properties properties
) {
75 register(repository
, properties
);