X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FMountManager.java;h=75ca427c7e25bdee4d96e7bbd768c65c959b3e90;hb=117eaabc86f6c09eff9a4b971ac137d51f45e953;hp=69b76ddc641f859bafb0ca2083b7ab9ccc5b1805;hpb=f3ea14abccc33b1c3326417a87c91145be776c72;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/MountManager.java b/org.argeo.cms/src/org/argeo/cms/acr/MountManager.java index 69b76ddc6..75ca427c7 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/MountManager.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/MountManager.java @@ -47,15 +47,36 @@ class MountManager { return partitions.get(mountPath); } + /** The content provider for this path. */ synchronized ContentProvider findContentProvider(String path) { +// if (ContentUtils.EMPTY.equals(path)) +// return partitions.firstEntry().getValue(); Map.Entry entry = partitions.floorEntry(path); if (entry == null) - throw new IllegalArgumentException("No entry provider found for " + path); + throw new IllegalArgumentException("No entry provider found for path '" + path + "'"); String mountPath = entry.getKey(); - if (!path.startsWith(mountPath)) - throw new IllegalArgumentException("Path " + path + " doesn't have a content provider"); + if (!path.startsWith(mountPath)) { + // FIXME make it more robust and find when there is no content provider + String[] parent = ContentUtils.getParentPath(path); + return findContentProvider(parent[0]); + // throw new IllegalArgumentException("Path " + path + " doesn't have a content + // provider"); + } ContentProvider contentProvider = entry.getValue(); assert mountPath.equals(contentProvider.getMountPath()); return contentProvider; } + + /** All content provider under this path. */ + synchronized NavigableMap findContentProviders(String path) { + NavigableMap res = new TreeMap<>(); + tail: for (Map.Entry provider : partitions.tailMap(path).entrySet()) { + if (!provider.getKey().startsWith(path)) + break tail; + res.put(provider.getKey(), provider.getValue()); + } + return res; + + } + }