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.
32 public class DefaultRepositoryFactory
extends DefaultRepositoryRegister
33 implements RepositoryFactory
, ArgeoJcrConstants
{
34 @SuppressWarnings("rawtypes")
35 public Repository
getRepository(Map parameters
) throws RepositoryException
{
36 if (parameters
.containsKey(JCR_REPOSITORY_ALIAS
)) {
37 String alias
= parameters
.get(JCR_REPOSITORY_ALIAS
).toString();
38 return getRepositoryByAlias(alias
);
39 } else if (parameters
.containsKey(JCR_REPOSITORY_URI
)) {
40 String uri
= parameters
.get(JCR_REPOSITORY_URI
).toString();
41 return getRepositoryByAlias(getAliasFromURI(uri
));
46 protected String
getAliasFromURI(String uri
) {
48 URI uriObj
= new URI(uri
);
49 String alias
= uriObj
.getPath();
50 if (alias
.charAt(0) == '/')
51 alias
= alias
.substring(1);
52 if (alias
.charAt(alias
.length() - 1) == '/')
53 alias
= alias
.substring(0, alias
.length() - 1);
55 } catch (URISyntaxException e
) {
56 throw new ArgeoException("Cannot interpret URI " + uri
, e
);
61 * Retrieve a repository by alias
63 * @return the repository registered with alias or null if none
65 protected Repository
getRepositoryByAlias(String alias
) {
66 if (getRepositories().containsKey(alias
))
67 return getRepositories().get(alias
);
72 protected void publish(String alias
, Repository repository
,
73 Properties properties
) {
74 register(repository
, properties
);