X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FAbstractContentRepository.java;h=98a2fec9304699b6f09b8ac8242ae94dcc3137a9;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=cfffea027855b2fcd3a8e3301fa7f80bc6dfc267;hpb=da9d144b6b241e1526a3bd255dff905a7969a5bc;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContentRepository.java b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContentRepository.java index cfffea027..98a2fec93 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/AbstractContentRepository.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/AbstractContentRepository.java @@ -5,6 +5,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; +import java.util.HashSet; import java.util.Set; import javax.xml.namespace.QName; @@ -16,8 +17,11 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import org.argeo.api.acr.ArgeoNamespace; import org.argeo.api.acr.Content; import org.argeo.api.acr.CrName; +import org.argeo.api.acr.NamespaceUtils; +import org.argeo.api.acr.RuntimeNamespaceContext; import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedRepository; @@ -40,13 +44,16 @@ public abstract class AbstractContentRepository implements ProvidedRepository { private CmsContentSession systemSession; + private Set providersToAdd = new HashSet<>(); + // utilities /** Should be used only to copy source and results. */ private TransformerFactory identityTransformerFactory = TransformerFactory.newInstance(); - public final static String ACR_MOUNT_PATH_PROPERTY = "acr.mount.path"; +// public final static String ACR_MOUNT_PATH_PROPERTY = "acr.mount.path"; public AbstractContentRepository() { + long begin = System.currentTimeMillis(); // types typesManager = new TypesManager(); typesManager.init(); @@ -55,7 +62,8 @@ public abstract class AbstractContentRepository implements ProvidedRepository { for (QName type : types) { log.trace(type + " - " + typesManager.getAttributeTypes(type)); } - + long duration = System.currentTimeMillis() - begin; + log.debug(() -> "CMS content types available (initialisation took " + duration + " ms)"); } protected abstract CmsContentSession newSystemSession(); @@ -74,9 +82,16 @@ public abstract class AbstractContentRepository implements ProvidedRepository { /* * REPOSITORY */ - + @Override public void addProvider(ContentProvider provider) { - mountManager.addStructuralContentProvider(provider); + if (mountManager == null) { + providersToAdd.add(provider); + log.debug( + () -> "Will add provider " + provider.getMountPath() + " (" + provider.getClass().getName() + ")"); + } else { + mountManager.addStructuralContentProvider(provider); + log.debug(() -> "Added provider " + provider.getMountPath() + " (" + provider.getClass().getName() + ")"); + } } public void registerTypes(String prefix, String namespaceURI, String schemaSystemId) { @@ -103,12 +118,14 @@ public abstract class AbstractContentRepository implements ProvidedRepository { // document = dBuilder.parse(inputSource); // } else { document = dBuilder.newDocument(); - Element root = document.createElementNS(CrName.CR_NAMESPACE_URI, CrName.ROOT.get().toPrefixedString()); + Element root = document.createElementNS(ArgeoNamespace.CR_NAMESPACE_URI, + NamespaceUtils.toPrefixedName(CrName.root.qName())); - for (String prefix : typesManager.getPrefixes().keySet()) { + for (String prefix : RuntimeNamespaceContext.getPrefixes().keySet()) { // root.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE + ":" + prefix, // contentTypesManager.getPrefixes().get(prefix)); - DomUtils.addNamespace(root, prefix, typesManager.getPrefixes().get(prefix)); + DomUtils.addNamespace(root, prefix, + RuntimeNamespaceContext.getNamespaceContext().getNamespaceURI(prefix)); } document.appendChild(root); @@ -128,6 +145,10 @@ public abstract class AbstractContentRepository implements ProvidedRepository { throw new IllegalStateException("Cannot init ACR root " + path, e); } + // add content providers already notified + for (ContentProvider contentProvider : providersToAdd) + addProvider(contentProvider); + providersToAdd.clear(); } public void writeDom(Document document, OutputStream out) throws IOException { @@ -196,4 +217,10 @@ public abstract class AbstractContentRepository implements ProvidedRepository { TypesManager getTypesManager() { return typesManager; } + + CmsContentSession getSystemSession() { + return systemSession; + } + + }