X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Ffs%2FFsContent.java;h=4b94abf1eb5143b1ee5074d5f1b1126ae1de001b;hb=117eaabc86f6c09eff9a4b971ac137d51f45e953;hp=43cae85721bf6b96c3f577f157f64b56845c11b2;hpb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java index 43cae8572..4b94abf1e 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java @@ -41,14 +41,13 @@ import org.argeo.api.acr.NamespaceUtils; import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedSession; -import org.argeo.api.cms.CmsLog; import org.argeo.cms.acr.AbstractContent; import org.argeo.cms.acr.ContentUtils; import org.argeo.cms.util.FsUtils; /** Content persisted as a filesystem {@link Path}. */ public class FsContent extends AbstractContent implements ProvidedContent { - private CmsLog log = CmsLog.getLog(FsContent.class); +// private CmsLog log = CmsLog.getLog(FsContent.class); final static String USER_ = "user:"; @@ -90,7 +89,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { } else { // TODO should we support prefixed name for known types? - QName providerName = NamespaceUtils.parsePrefixedName(provider, path.getFileName().toString()); + QName providerName = provider.fromFsPrefixedName(path.getFileName().toString()); // QName providerName = new QName(path.getFileName().toString()); // TODO remove extension if mounted? this.name = new ContentName(providerName, session); @@ -126,7 +125,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { } else { UserDefinedFileAttributeView udfav = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); - String prefixedName = NamespaceUtils.toPrefixedName(provider, key); + String prefixedName = provider.toFsPrefixedName(key); if (!udfav.list().contains(prefixedName)) return Optional.empty(); ByteBuffer buf = ByteBuffer.allocate(udfav.size(prefixedName)); @@ -160,11 +159,15 @@ public class FsContent extends AbstractContent implements ProvidedContent { String[] arr = str.split("\n"); if (arr.length == 1) { - if (clss.isAssignableFrom(String.class)) { - res = (A) arr[0]; - } else { - res = (A) CrAttributeType.parse(arr[0]); - } +// if (clss.isAssignableFrom(String.class)) { +// res = (A) arr[0]; +// } else { +// res = (A) CrAttributeType.parse(arr[0]); +// } +// if (isDefaultAttrTypeRequested(clss)) +// return Optional.of((A) CrAttributeType.parse(str)); + return CrAttributeType.cast(clss, str); + } else { List lst = new ArrayList<>(); for (String s : arr) { @@ -174,14 +177,15 @@ public class FsContent extends AbstractContent implements ProvidedContent { } } if (res == null) { - if (isDefaultAttrTypeRequested(clss)) - return Optional.of((A) CrAttributeType.parse(value.toString())); - if (clss.isAssignableFrom(value.getClass())) - return Optional.of((A) value); - if (clss.isAssignableFrom(String.class)) - return Optional.of((A) value.toString()); - log.warn("Cannot interpret " + key + " in " + this); - return Optional.empty(); +// if (isDefaultAttrTypeRequested(clss)) +// return Optional.of((A) CrAttributeType.parse(value.toString())); + return CrAttributeType.cast(clss, value); +// if (clss.isAssignableFrom(value.getClass())) +// return Optional.of((A) value); +// if (clss.isAssignableFrom(String.class)) +// return Optional.of((A) value.toString()); +// log.warn("Cannot interpret " + key + " in " + this); +// return Optional.empty(); // try { // res = (A) value; // } catch (ClassCastException e) { @@ -198,7 +202,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { if (udfav != null) { try { for (String name : udfav.list()) { - QName providerName = NamespaceUtils.parsePrefixedName(provider, name); + QName providerName = provider.fromFsPrefixedName(name); if (providerName.getNamespaceURI().equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) continue; // skip prefix mapping QName sessionName = new ContentName(providerName, getSession()); @@ -215,7 +219,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { protected void removeAttr(QName key) { UserDefinedFileAttributeView udfav = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); try { - udfav.delete(NamespaceUtils.toPrefixedName(provider, key)); + udfav.delete(provider.toFsPrefixedName(key)); } catch (IOException e) { throw new ContentResourceException("Cannot delete attribute " + key + " for " + path, e); } @@ -239,7 +243,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { UserDefinedFileAttributeView udfav = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); ByteBuffer bb = ByteBuffer.wrap(toWrite.getBytes(StandardCharsets.UTF_8)); try { - udfav.write(NamespaceUtils.toPrefixedName(provider, key), bb); + udfav.write(provider.toFsPrefixedName(key), bb); } catch (IOException e) { throw new ContentResourceException("Cannot delete attribute " + key + " for " + path, e); } @@ -250,7 +254,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { if (POSIX_KEYS.containsKey(key)) return POSIX_KEYS.get(key); else - return USER_ + NamespaceUtils.toPrefixedName(provider, key); + return USER_ + provider.toFsPrefixedName(key); } /* @@ -285,7 +289,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { public Content add(QName name, QName... classes) { FsContent fsContent; try { - Path newPath = path.resolve(NamespaceUtils.toPrefixedName(provider, name)); + Path newPath = path.resolve(provider.toFsPrefixedName(name)); if (ContentName.contains(classes, DName.collection.qName())) Files.createDirectory(newPath); else @@ -315,7 +319,11 @@ public class FsContent extends AbstractContent implements ProvidedContent { @Override public void remove() { - FsUtils.delete(path); + try { + FsUtils.delete(path); + } catch (IOException e) { + throw new RuntimeException("Cannot delete " + path, e); + } } @Override @@ -361,12 +369,13 @@ public class FsContent extends AbstractContent implements ProvidedContent { @Override public List getContentClasses() { - List res = new ArrayList<>(); - List value = getMultiple(DName.resourcetype.qName(), String.class); - for (String s : value) { - QName name = NamespaceUtils.parsePrefixedName(provider, s); - res.add(name); - } +// List res = new ArrayList<>(); +// List value = getMultiple(DName.resourcetype.qName(), String.class); +// for (String s : value) { +// QName name = NamespaceUtils.parsePrefixedName(provider, s); +// res.add(name); +// } + List res = getMultiple(DName.resourcetype.qName(), QName.class); if (Files.isDirectory(path)) res.add(DName.collection.qName()); return res;