]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/acr/AbstractContentRepository.java
Introduce directory content provider
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / AbstractContentRepository.java
index 6ca7b3591a8cae1d27f42755833dded275687ba3..1481b3a40ff4125c32f94eaa3adda8c7f08364d9 100644 (file)
@@ -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;
@@ -22,7 +23,6 @@ import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.acr.spi.ProvidedRepository;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.api.uuid.UuidFactory;
 import org.argeo.cms.acr.xml.DomContentProvider;
 import org.argeo.cms.acr.xml.DomUtils;
 import org.w3c.dom.DOMException;
@@ -36,13 +36,13 @@ import org.xml.sax.SAXException;
 public abstract class AbstractContentRepository implements ProvidedRepository {
        private final static CmsLog log = CmsLog.getLog(AbstractContentRepository.class);
 
-       private UuidFactory uuidFactory;
-
        private MountManager mountManager;
        private TypesManager typesManager;
 
        private CmsContentSession systemSession;
 
+       private Set<ContentProvider> providersToAdd = new HashSet<>();
+
        // utilities
        /** Should be used only to copy source and results. */
        private TransformerFactory identityTransformerFactory = TransformerFactory.newInstance();
@@ -79,7 +79,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) {
@@ -131,6 +134,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 {
@@ -199,9 +206,4 @@ public abstract class AbstractContentRepository implements ProvidedRepository {
        TypesManager getTypesManager() {
                return typesManager;
        }
-
-       public void setUuidFactory(UuidFactory uuidFactory) {
-               this.uuidFactory = uuidFactory;
-       }
-
 }