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;
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<ContentProvider> providersToAdd = new HashSet<>();
+
// utilities
/** Should be used only to copy source and results. */
private TransformerFactory identityTransformerFactory = TransformerFactory.newInstance();
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;
}
/*
*/
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) {
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 {
TypesManager getTypesManager() {
return typesManager;
}
-
}