+ 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
+ }
+
+ /*
+ * FACTORIES
+ */
+ public void initRootContentProvider(Path path) {
+ try {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setXIncludeAware(true);
+ // factory.setSchema(schema);
+
+ factory.setSchema(contentTypesManager.getSchema());
+
+ DocumentBuilder dBuilder = factory.newDocumentBuilder();
+ dBuilder.setErrorHandler(new ErrorHandler() {
+
+ @Override
+ public void warning(SAXParseException exception) throws SAXException {
+ }
+
+ @Override
+ public void fatalError(SAXParseException exception) throws SAXException {
+ }
+
+ @Override
+ public void error(SAXParseException exception) throws SAXException {
+ log.error(exception);
+
+ }
+ });
+
+ Document document;
+// 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);
+ try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
+ StreamResult result = new StreamResult(writer);
+ transformer.transform(source, result);
+ }
+ }
+// }
+
+ DomContentProvider contentProvider = new DomContentProvider(document);
+ addProvider("/", contentProvider);
+ } catch (DOMException | ParserConfigurationException | IOException | TransformerFactoryConfigurationError
+ | TransformerException e) {
+ throw new IllegalStateException("Cannot init ACR root " + path, e);