import java.util.Locale;
import java.util.Map;
import java.util.NavigableMap;
-import java.util.Set;
import java.util.TreeMap;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
+import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
-import javax.xml.validation.Schema;
import org.argeo.api.acr.Content;
import org.argeo.api.acr.ContentSession;
private NavigableMap<String, ContentProvider> partitions = new TreeMap<>();
// TODO synchronize ?
- private NavigableMap<String, String> prefixes = new TreeMap<>();
+// private NavigableMap<String, String> prefixes = new TreeMap<>();
- private Schema schema;
+// private Schema schema;
+ private ContentTypesManager contentTypesManager;
private CmsContentSession systemSession;
private Map<CmsSession, CmsContentSession> userSessions = Collections.synchronizedMap(new HashMap<>());
public CmsContentRepository() {
- prefixes.put(CrName.CR_DEFAULT_PREFIX, CrName.CR_NAMESPACE_URI);
- prefixes.put("basic", CrName.CR_NAMESPACE_URI);
- prefixes.put("owner", CrName.CR_NAMESPACE_URI);
- prefixes.put("posix", CrName.CR_NAMESPACE_URI);
-
+ contentTypesManager = new ContentTypesManager();
+ contentTypesManager.init();
+ contentTypesManager.listTypes();
+
systemSession = newSystemSession();
}
mount.put(CrName.MOUNT.get(), "true");
}
- public void registerPrefix(String prefix, String namespaceURI) {
- String registeredUri = prefixes.get(prefix);
- if (registeredUri == null) {
- prefixes.put(prefix, namespaceURI);
- return;
- }
- if (!registeredUri.equals(namespaceURI))
- throw new IllegalStateException("Prefix " + prefix + " is already registred for " + registeredUri);
- // do nothing if same namespace is already registered
+ public void registerTypes(String prefix, String namespaceURI, String schemaSystemId) {
+ contentTypesManager.registerTypes(prefix, namespaceURI, schemaSystemId);
+// String registeredUri = prefixes.get(prefix);
+// if (registeredUri == null) {
+// prefixes.put(prefix, namespaceURI);
+// return;
+// }
+// if (!registeredUri.equals(namespaceURI))
+// throw new IllegalStateException("Prefix " + prefix + " is already registred for " + registeredUri);
+// // do nothing if same namespace is already registered
}
/*
factory.setXIncludeAware(true);
// factory.setSchema(schema);
+ factory.setSchema(contentTypesManager.getSchema());
+
DocumentBuilder dBuilder = factory.newDocumentBuilder();
dBuilder.setErrorHandler(new ErrorHandler() {
});
Document document;
- if (Files.exists(path)) {
- InputSource inputSource = new InputSource(path.toAbsolutePath().toUri().toString());
- inputSource.setEncoding(StandardCharsets.UTF_8.name());
- // TODO public id as well?
- document = dBuilder.parse(inputSource);
- } else {
- document = dBuilder.newDocument();
-// Element root = document.createElementNS(CrName.ROOT.getNamespaceURI(),
-// CrName.ROOT.get().toPrefixedString());
- Element root = document.createElement(CrName.ROOT.get().toPrefixedString());
- // root.setAttribute("xmlns", "");
- root.setAttribute("xmlns:" + CrName.CR_DEFAULT_PREFIX, CrName.CR_NAMESPACE_URI);
- document.appendChild(root);
-
- // write it
+// if (path != null && Files.exists(path)) {
+// InputSource inputSource = new InputSource(path.toAbsolutePath().toUri().toString());
+// inputSource.setEncoding(StandardCharsets.UTF_8.name());
+// // TODO public id as well?
+// document = dBuilder.parse(inputSource);
+// } else {
+ document = dBuilder.newDocument();
+ Element root = document.createElementNS(CrName.CR_NAMESPACE_URI, CrName.ROOT.get().toPrefixedString());
+
+ for (String prefix : contentTypesManager.getPrefixes().keySet()) {
+ root.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE + ":" + prefix,
+ contentTypesManager.getPrefixes().get(prefix));
+ }
+
+ document.appendChild(root);
+
+ // write it
+ if (path != null) {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
transformer.transform(source, result);
}
}
+// }
DomContentProvider contentProvider = new DomContentProvider(document);
addProvider("/", contentProvider);
- } catch (DOMException | ParserConfigurationException | SAXException | IOException
- | TransformerFactoryConfigurationError | TransformerException e) {
+ } catch (DOMException | ParserConfigurationException | IOException | TransformerFactoryConfigurationError
+ | TransformerException e) {
throw new IllegalStateException("Cannot init ACR root " + path, e);
}
@Override
public Content get(String path) {
Map.Entry<String, ContentProvider> entry = partitions.floorEntry(path);
+ if (entry == null)
+ throw new IllegalArgumentException("No entry provider found for " + path);
String mountPath = entry.getKey();
ContentProvider provider = entry.getValue();
String relativePath = path.substring(mountPath.length());
@Override
public String getNamespaceURI(String prefix) {
- return NamespaceUtils.getNamespaceURI((p) -> prefixes.get(p), prefix);
+ return NamespaceUtils.getNamespaceURI((p) -> contentTypesManager.getPrefixes().get(p), prefix);
}
@Override
public Iterator<String> getPrefixes(String namespaceURI) {
- return NamespaceUtils.getPrefixes((ns) -> prefixes.entrySet().stream().filter(e -> e.getValue().equals(ns))
- .map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()), namespaceURI);
+ return NamespaceUtils.getPrefixes(
+ (ns) -> contentTypesManager.getPrefixes().entrySet().stream().filter(e -> e.getValue().equals(ns))
+ .map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()),
+ namespaceURI);
}
// @Override