import java.util.TreeMap;
import java.util.stream.Collectors;
+import org.argeo.api.acr.ArgeoNamespace;
import org.argeo.api.acr.ContentResourceException;
-import org.argeo.api.acr.CrName;
import org.argeo.api.acr.NamespaceUtils;
+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.ProvidedSession;
public class FsContentProvider implements ContentProvider {
final static String XMLNS_ = "xmlns:";
- private final String mountPath;
- private final Path rootPath;
-// private final boolean isRoot;
+ protected String mountPath;
+ protected Path rootPath;
private NavigableMap<String, String> prefixes = new TreeMap<>();
initNamespaces();
}
-// @Deprecated
-// public FsContentProvider(String mountPath, Path rootPath, boolean isRoot) {
-// this.mountPath = mountPath;
-// this.rootPath = rootPath;
-//// this.isRoot = isRoot;
-//// initNamespaces();
-// }
+ protected FsContentProvider() {
- private void initNamespaces() {
+ }
+
+ protected void initNamespaces() {
try {
UserDefinedFileAttributeView udfav = Files.getFileAttributeView(rootPath,
UserDefinedFileAttributeView.class);
}
// defaults
- addDefaultNamespace(udfav, CrName.CR_DEFAULT_PREFIX, CrName.CR_NAMESPACE_URI);
- addDefaultNamespace(udfav, "basic", CrName.CR_NAMESPACE_URI);
- addDefaultNamespace(udfav, "owner", CrName.CR_NAMESPACE_URI);
- addDefaultNamespace(udfav, "posix", CrName.CR_NAMESPACE_URI);
+ addDefaultNamespace(udfav, ArgeoNamespace.CR_DEFAULT_PREFIX, ArgeoNamespace.CR_NAMESPACE_URI);
+ addDefaultNamespace(udfav, "basic", ArgeoNamespace.CR_NAMESPACE_URI);
+ addDefaultNamespace(udfav, "owner", ArgeoNamespace.CR_NAMESPACE_URI);
+ addDefaultNamespace(udfav, "posix", ArgeoNamespace.CR_NAMESPACE_URI);
} catch (IOException e) {
throw new RuntimeException("Cannot read namespaces from " + rootPath, e);
}
return mountPath;
}
- boolean isMountRoot(Path path) {
+ boolean isMountBase(Path path) {
try {
return Files.isSameFile(rootPath, path);
} catch (IOException e) {
return new FsContent(session, this, rootPath.resolve(relativePath));
}
- /*
- * NAMESPACE CONTEXT
- */
-
@Override
public boolean exists(ProvidedSession session, String relativePath) {
return Files.exists(rootPath.resolve(relativePath));
}
+ /*
+ * NAMESPACE CONTEXT
+ */
+
@Override
public String getNamespaceURI(String prefix) {
return NamespaceUtils.getNamespaceURI((p) -> prefixes.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);
+ Iterator<String> res = NamespaceUtils.getPrefixes((ns) -> prefixes.entrySet().stream()
+ .filter(e -> e.getValue().equals(ns)).map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()),
+ namespaceURI);
+ if (!res.hasNext()) {
+ String prefix = RuntimeNamespaceContext.getNamespaceContext().getPrefix(namespaceURI);
+ if (prefix != null) {
+ registerPrefix(prefix, namespaceURI);
+ return getPrefixes(namespaceURI);
+ } else {
+ throw new IllegalArgumentException("Unknown namespace " + namespaceURI);
+ }
+ }
+ return res;
}
}