X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FAbstractContentRepository.java;h=2e65e7e691dee045cdb4eb940624691a61a8f8a6;hb=eb4324be6ac9cdff15828a21ee7d3f6ca2f19fb9;hp=382c432b564f4fe1c46bd17fa49ed3166c756f31;hpb=eb4cc3db3bf141c229f0f7ff929daff108bee6d2;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 382c432b5..2e65e7e69 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; @@ -18,6 +19,7 @@ import javax.xml.transform.stream.StreamResult; import org.argeo.api.acr.Content; import org.argeo.api.acr.CrName; +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; @@ -35,11 +37,13 @@ import org.xml.sax.SAXException; public abstract class AbstractContentRepository implements ProvidedRepository { private final static CmsLog log = CmsLog.getLog(AbstractContentRepository.class); - private final MountManager mountManager; - private final TypesManager typesManager; + private MountManager mountManager; + private TypesManager typesManager; private CmsContentSession systemSession; + private Set providersToAdd = new HashSet<>(); + // utilities /** Should be used only to copy source and results. */ private TransformerFactory identityTransformerFactory = TransformerFactory.newInstance(); @@ -56,20 +60,19 @@ public abstract class AbstractContentRepository implements ProvidedRepository { log.trace(type + " - " + typesManager.getAttributeTypes(type)); } - systemSession = newSystemSession(); - - // mounts - mountManager = new MountManager(systemSession); - } protected abstract CmsContentSession newSystemSession(); public void start() { + systemSession = newSystemSession(); + // mounts + mountManager = new MountManager(systemSession); } public void stop() { - + systemSession.close(); + systemSession = null; } /* @@ -77,7 +80,10 @@ public abstract class AbstractContentRepository implements ProvidedRepository { */ public void addProvider(ContentProvider provider) { - mountManager.addStructuralContentProvider(provider); + if (mountManager == null) + providersToAdd.add(provider); + else + mountManager.addStructuralContentProvider(provider); } public void registerTypes(String prefix, String namespaceURI, String schemaSystemId) { @@ -106,10 +112,11 @@ public abstract class AbstractContentRepository implements ProvidedRepository { document = dBuilder.newDocument(); Element root = document.createElementNS(CrName.CR_NAMESPACE_URI, CrName.ROOT.get().toPrefixedString()); - 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); @@ -129,6 +136,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 { @@ -197,5 +208,4 @@ public abstract class AbstractContentRepository implements ProvidedRepository { TypesManager getTypesManager() { return typesManager; } - }