X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FRepositoryBuilder.java;h=f866c2b99a346c7884a72193d2eeaa5dd17db349;hb=18af628c072e386420f03261ab207a72341a0a1b;hp=94b8c051e726291e540adde5eca4cba6e477c119;hpb=b4c772a263e0f19f6c283dbbb87d04794072b284;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/RepositoryBuilder.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/RepositoryBuilder.java index 94b8c051e..f866c2b99 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/RepositoryBuilder.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/RepositoryBuilder.java @@ -24,11 +24,8 @@ import org.apache.jackrabbit.core.cache.CacheManager; import org.apache.jackrabbit.core.config.RepositoryConfig; import org.apache.jackrabbit.core.config.RepositoryConfigurationParser; import org.argeo.cms.CmsException; -import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.ArgeoJcrException; -import org.argeo.node.RepoConf; -import org.osgi.framework.Constants; -import org.osgi.service.cm.ConfigurationAdmin; +import org.argeo.node.NodeConstants; import org.xml.sax.InputSource; /** Can interpret properties in order to create an actual JCR repository. */ @@ -57,23 +54,27 @@ class RepositoryBuilder { ClassLoader cl = getClass().getClassLoader(); InputStream in = null; try { - final String base = "/org/argeo/jackrabbit"; - switch (type) { - case h2: - in = cl.getResourceAsStream(base + "/repository-h2.xml"); - break; - case postgresql: - in = cl.getResourceAsStream(base + "/repository-postgresql.xml"); - break; - case memory: - in = cl.getResourceAsStream(base + "/repository-memory.xml"); - break; - case localfs: - in = cl.getResourceAsStream(base + "/repository-localfs.xml"); - break; - default: - throw new ArgeoJcrException("Unsupported node type " + type); - } + final String base = "/org/argeo/cms/internal/kernel"; +// switch (type) { +// case h2: +// in = cl.getResourceAsStream(base + "/repository-h2.xml"); +// break; +// case postgresql: +// in = cl.getResourceAsStream(base + "/repository-postgresql.xml"); +// break; +// case postgresql_ds: +// in = cl.getResourceAsStream(base + "/repository-postgresql-ds.xml"); +// break; +// case memory: +// in = cl.getResourceAsStream(base + "/repository-memory.xml"); +// break; +// case localfs: +// in = cl.getResourceAsStream(base + "/repository-localfs.xml"); +// break; +// default: +// throw new ArgeoJcrException("Unsupported node type " + type); +// } + in = cl.getResourceAsStream(base + "/repository-"+type.name()+".xml"); if (in == null) throw new ArgeoJcrException("Repository configuration not found"); @@ -88,23 +89,35 @@ class RepositoryBuilder { private Properties getConfigurationProperties(JackrabbitType type, Dictionary properties) { Properties props = new Properties(); - keys: for (Enumeration keys = properties.keys(); keys.hasMoreElements();) { + for (Enumeration keys = properties.keys(); keys.hasMoreElements();) { String key = keys.nextElement(); - if (key.equals(ConfigurationAdmin.SERVICE_FACTORYPID) || key.equals(Constants.SERVICE_PID) - || key.equals(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS)) - continue keys; - String value = prop(properties, RepoConf.valueOf(key)); - if (value != null) - props.put(key, value); + // if (key.equals(ConfigurationAdmin.SERVICE_FACTORYPID) || + // key.equals(Constants.SERVICE_PID) + // || key.equals(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS)) + // continue keys; + // try { + // String value = prop(properties, RepoConf.valueOf(key)); + // if (value != null) + props.put(key, properties.get(key)); + // } catch (IllegalArgumentException e) { + // // ignore non RepoConf + // // FIXME make it more flexible/extensible + // } } // home String homeUri = props.getProperty(RepoConf.labeledUri.name()); Path homePath; - try { - homePath = Paths.get(new URI(homeUri)).toAbsolutePath(); - } catch (URISyntaxException e) { - throw new CmsException("Invalid repository home URI", e); + if (homeUri == null) { + String cn = props.getProperty(NodeConstants.CN); + assert cn != null; + homePath = KernelUtils.getOsgiInstancePath(KernelConstants.DIR_REPOS + '/' + cn); + } else { + try { + homePath = Paths.get(new URI(homeUri)).toAbsolutePath(); + } catch (URISyntaxException e) { + throw new CmsException("Invalid repository home URI", e); + } } Path rootUuidPath = homePath.resolve("repository/meta/rootUUID"); if (!Files.exists(rootUuidPath)) { @@ -140,6 +153,8 @@ class RepositoryBuilder { setProp(props, RepoConf.dbpassword, ""); break; case postgresql: + case postgresql_ds: + case postgresql_cluster: dburl = "jdbc:postgresql://localhost/demo"; setProp(props, RepoConf.dburl, dburl); setProp(props, RepoConf.dbuser, "argeo");