X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Ffs%2FFsContentProvider.java;h=9b1b9668303f066e2106de3aa4a296edcabbf55d;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=9d696b07f1cbcf6609f50c29017576250af228f0;hpb=da9d144b6b241e1526a3bd255dff905a7969a5bc;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContentProvider.java b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContentProvider.java index 9d696b07f..9b1b96683 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContentProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContentProvider.java @@ -13,9 +13,10 @@ import java.util.Objects; 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; @@ -24,9 +25,8 @@ 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 prefixes = new TreeMap<>(); @@ -40,15 +40,11 @@ public class FsContentProvider implements ContentProvider { 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); @@ -66,10 +62,10 @@ public class FsContentProvider implements ContentProvider { } // 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); } @@ -103,7 +99,7 @@ public class FsContentProvider implements ContentProvider { return mountPath; } - boolean isMountRoot(Path path) { + boolean isMountBase(Path path) { try { return Files.isSameFile(rootPath, path); } catch (IOException e) { @@ -116,15 +112,15 @@ public class FsContentProvider implements ContentProvider { 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); @@ -132,8 +128,19 @@ public class FsContentProvider implements ContentProvider { @Override public Iterator 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 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; } }