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. */
InputStream in = null;
try {
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);
- }
+// 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");
private Properties getConfigurationProperties(JackrabbitType type, Dictionary<String, ?> properties) {
Properties props = new Properties();
- keys: for (Enumeration<String> keys = properties.keys(); keys.hasMoreElements();) {
+ for (Enumeration<String> 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)) {
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");