X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2FDefaultRepositoryFactory.java;fp=server%2Fruntime%2Forg.argeo.server.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2FDefaultRepositoryFactory.java;h=18cc8b80aff221b9de179aace739f79d6b21a847;hb=31b2f6761ec882c539b65b80fc95906bd12014ef;hp=095b62099d5c1e11b359d5e41ee06b9cd70f90ac;hpb=d911416648a69f8140e03aa7248c4eb38e96e90f;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryFactory.java b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryFactory.java index 095b62099..18cc8b80a 100644 --- a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryFactory.java +++ b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/DefaultRepositoryFactory.java @@ -15,6 +15,8 @@ */ package org.argeo.jcr; +import java.net.URI; +import java.net.URISyntaxException; import java.util.Map; import java.util.Properties; @@ -22,20 +24,39 @@ import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.RepositoryFactory; +import org.argeo.ArgeoException; + +/** + * Simple implementation of {@link RepositoryFactory}, supporting OSGi aliases. + */ public class DefaultRepositoryFactory extends DefaultRepositoryRegister implements RepositoryFactory, ArgeoJcrConstants { - // private final static Log log = LogFactory - // .getLog(DefaultRepositoryFactory.class); - @SuppressWarnings("rawtypes") public Repository getRepository(Map parameters) throws RepositoryException { if (parameters.containsKey(JCR_REPOSITORY_ALIAS)) { String alias = parameters.get(JCR_REPOSITORY_ALIAS).toString(); return getRepositoryByAlias(alias); + } else if (parameters.containsKey(JCR_REPOSITORY_URI)) { + String uri = parameters.get(JCR_REPOSITORY_URI).toString(); + return getRepositoryByAlias(getAliasFromURI(uri)); } return null; } + protected String getAliasFromURI(String uri) { + try { + URI uriObj = new URI(uri); + String alias = uriObj.getPath(); + if (alias.charAt(0) == '/') + alias = alias.substring(1); + if (alias.charAt(alias.length() - 1) == '/') + alias = alias.substring(0, alias.length() - 1); + return alias; + } catch (URISyntaxException e) { + throw new ArgeoException("Cannot interpret URI " + uri, e); + } + } + /** * Retrieve a repository by alias *