<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="JCR Deployment">
<implementation class="org.argeo.cms.jcr.internal.CmsJcrDeployment"/>
+ <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.spi.ProvidedRepository" name="ContentRepository" policy="static"/>
</scr:component>
--- /dev/null
+package org.argeo.cms.jcr.acr;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Objects;
+
+import org.argeo.api.acr.spi.ContentNamespace;
+
+/** JCR-specific content namespaces. */
+public enum JcrContentNamespace implements ContentNamespace {
+ //
+ // ARGEO
+ //
+ JCRX("jcrx", "http://www.argeo.org/ns/jcrx", null, null),
+ //
+ // EXTERNAL
+ //
+ JCR("jcr", "http://www.jcp.org/jcr/1.0", null,
+ "https://jackrabbit.apache.org/archive/wiki/JCR/NamespaceRegistry_115513459.html"),
+ //
+ JCR_MIX("mix", "http://www.jcp.org/jcr/mix/1.0", null,
+ "https://jackrabbit.apache.org/archive/wiki/JCR/NamespaceRegistry_115513459.html"),
+ //
+ JCR_NT("nt", "http://www.jcp.org/jcr/nt/1.0", null,
+ "https://jackrabbit.apache.org/archive/wiki/JCR/NamespaceRegistry_115513459.html"),
+ //
+ JACKRABBIT("rep", "internal", null,
+ "https://jackrabbit.apache.org/archive/wiki/JCR/NamespaceRegistry_115513459.html"),
+ //
+ ;
+
+ private final static String RESOURCE_BASE = "/org/argeo/cms/jcr/acr/schemas/";
+
+ private String defaultPrefix;
+ private String namespace;
+ private URL resource;
+ private URL publicUrl;
+
+ JcrContentNamespace(String defaultPrefix, String namespace, String resourceFileName, String publicUrl) {
+ Objects.requireNonNull(namespace);
+ this.defaultPrefix = defaultPrefix;
+ Objects.requireNonNull(namespace);
+ this.namespace = namespace;
+ if (resourceFileName != null) {
+ resource = getClass().getResource(RESOURCE_BASE + resourceFileName);
+ Objects.requireNonNull(resource);
+ }
+ if (publicUrl != null)
+ try {
+ this.publicUrl = new URL(publicUrl);
+ } catch (MalformedURLException e) {
+ throw new IllegalArgumentException("Cannot interpret public URL", e);
+ }
+ }
+
+ @Override
+ public String getDefaultPrefix() {
+ return defaultPrefix;
+ }
+
+ @Override
+ public String getNamespaceURI() {
+ return namespace;
+ }
+
+ @Override
+ public URL getSchemaResource() {
+ return resource;
+ }
+
+ public URL getPublicUrl() {
+ return publicUrl;
+ }
+
+}
import org.apache.jackrabbit.commons.cnd.CndImporter;
import org.apache.jackrabbit.core.RepositoryContext;
import org.apache.jackrabbit.core.RepositoryImpl;
+import org.argeo.api.acr.spi.ProvidedRepository;
import org.argeo.api.cms.CmsConstants;
import org.argeo.api.cms.CmsLog;
import org.argeo.cms.ArgeoNames;
import org.argeo.cms.jcr.CmsJcrUtils;
+import org.argeo.cms.jcr.acr.JcrContentNamespace;
import org.argeo.cms.jcr.internal.servlet.CmsRemotingServlet;
import org.argeo.cms.jcr.internal.servlet.CmsWebDavServlet;
import org.argeo.cms.jcr.internal.servlet.JcrHttpUtils;
// Readiness
private boolean nodeAvailable = false;
+ private ProvidedRepository contentRepository;
+
// CmsDeployment cmsDeployment;
public void start() {
dataModels = new DataModels(bc);
+ contentRepository.registerTypes(JcrContentNamespace.values());
+
ServiceTracker<?, ?> repoContextSt = new RepositoryContextStc();
repoContextSt.open();
// KernelUtils.asyncOpen(repoContextSt);
// nodeDeployment = CmsJcrActivator.getService(NodeDeployment.class);
- //JcrInitUtils.addToDeployment(cmsDeployment);
+ // JcrInitUtils.addToDeployment(cmsDeployment);
// contentRepository.registerTypes(NamespaceRegistry.PREFIX_JCR, NamespaceRegistry.NAMESPACE_JCR, null);
// contentRepository.registerTypes(NamespaceRegistry.PREFIX_MIX, NamespaceRegistry.NAMESPACE_MIX, null);
// if (nodeHttp != null)
// nodeHttp.destroy();
-
try {
for (ServiceReference<JackrabbitLocalRepository> sr : bc
.getServiceReferences(JackrabbitLocalRepository.class, null)) {
boolean isStandalone(String dataModelName) {
return true;
- //return cmsDeployment.getProps(CmsConstants.NODE_REPOS_FACTORY_PID, dataModelName) != null;
+ // return cmsDeployment.getProps(CmsConstants.NODE_REPOS_FACTORY_PID,
+ // dataModelName) != null;
}
private void publishLocalRepo(String dataModelName, Repository repository) {
bc.registerService(Servlet.class, remotingServlet, ip);
}
+ public void setContentRepository(ProvidedRepository contentRepository) {
+ this.contentRepository = contentRepository;
+ }
+
private class RepositoryContextStc extends ServiceTracker<RepositoryContext, RepositoryContext> {
public RepositoryContextStc() {