From 6bb4a56d34005bc1905772e3433766967d506ddd Mon Sep 17 00:00:00 2001 From: Mathieu Date: Wed, 16 Nov 2022 06:00:26 +0100 Subject: [PATCH] Clarify and refactor content namespaces --- org.argeo.cms.jcr/OSGI-INF/jcrDeployment.xml | 1 + .../cms/jcr/acr/JcrContentNamespace.java | 75 +++++++++++++++++++ .../cms/jcr/internal/CmsJcrDeployment.java | 16 +++- 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentNamespace.java diff --git a/org.argeo.cms.jcr/OSGI-INF/jcrDeployment.xml b/org.argeo.cms.jcr/OSGI-INF/jcrDeployment.xml index 033ddbd..a39a4dc 100644 --- a/org.argeo.cms.jcr/OSGI-INF/jcrDeployment.xml +++ b/org.argeo.cms.jcr/OSGI-INF/jcrDeployment.xml @@ -1,4 +1,5 @@ + diff --git a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentNamespace.java b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentNamespace.java new file mode 100644 index 0000000..8b721f7 --- /dev/null +++ b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentNamespace.java @@ -0,0 +1,75 @@ +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; + } + +} diff --git a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java index 35800f8..a871355 100644 --- a/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java +++ b/org.argeo.cms.jcr/src/org/argeo/cms/jcr/internal/CmsJcrDeployment.java @@ -26,10 +26,12 @@ import javax.servlet.Servlet; 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; @@ -62,17 +64,21 @@ public class CmsJcrDeployment { // 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); @@ -88,7 +94,6 @@ public class CmsJcrDeployment { // if (nodeHttp != null) // nodeHttp.destroy(); - try { for (ServiceReference sr : bc .getServiceReferences(JackrabbitLocalRepository.class, null)) { @@ -351,7 +356,8 @@ public class CmsJcrDeployment { 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) { @@ -432,6 +438,10 @@ public class CmsJcrDeployment { bc.registerService(Servlet.class, remotingServlet, ip); } + public void setContentRepository(ProvidedRepository contentRepository) { + this.contentRepository = contentRepository; + } + private class RepositoryContextStc extends ServiceTracker { public RepositoryContextStc() { -- 2.30.2