X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=publishing%2Forg.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fdocbook%2Fui%2FDbkImageManager.java;h=25a466ab7695c3153cde5e565a28afb86a22422d;hp=2b57b4b9cf768883b8f53be7ac6f7843a9505dfc;hb=ee37a5fd9993cf6cf86bda07d8ac5e854e244553;hpb=1f5f12ce52315e19fb0016527c31127b70dceb5d diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkImageManager.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkImageManager.java index 2b57b4b..25a466a 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkImageManager.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkImageManager.java @@ -20,6 +20,9 @@ import javax.jcr.nodetype.NodeType; import org.argeo.cms.ui.CmsImageManager; import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.cms.ui.util.DefaultImageManager; +import org.argeo.docbook.DbkUtils; +import org.argeo.docbook.DbkAttr; +import org.argeo.docbook.DbkType; import org.argeo.entity.EntityNames; import org.argeo.entity.EntityType; import org.argeo.jcr.JcrException; @@ -35,11 +38,21 @@ public class DbkImageManager extends DefaultImageManager { this.baseFolder = baseFolder; } + Node getImageDataNode(Node mediaObjectNode) throws RepositoryException { + if (mediaObjectNode.hasNode(DbkType.imageobject.get())) { + Node imageDataNode = mediaObjectNode.getNode(DbkType.imageobject.get()).getNode(DbkType.imagedata.get()); + return imageDataNode; + } else { + throw new IllegalStateException("No image data found for " + mediaObjectNode); + } + } + @Override public Binary getImageBinary(Node node) throws RepositoryException { Node fileNode = null; - if (node.getName().equals(DocBookTypes.IMAGEDATA)) { - fileNode = getFileNode(node); + if (DbkUtils.isDbk(node, DbkType.mediaobject)) { + Node imageDataNode = getImageDataNode(node); + fileNode = getFileNode(imageDataNode); } if (node.isNodeType(NT_FILE)) { fileNode = node; @@ -51,7 +64,8 @@ public class DbkImageManager extends DefaultImageManager { } } - public Point getImageSize(Node imageDataNode) throws RepositoryException { + public Point getImageSize(Node mediaObjectNode) throws RepositoryException { + Node imageDataNode = getImageDataNode(mediaObjectNode); Node fileNode = getFileNode(imageDataNode); if (fileNode == null) return new Point(0, 0); @@ -80,24 +94,27 @@ public class DbkImageManager extends DefaultImageManager { } @Override - protected void processNewImageFile(Node context, Node fileNode, ImageData id) + protected void processNewImageFile(Node mediaObjectNode, Node fileNode, ImageData id) throws RepositoryException, IOException { + Node imageDataNode = getImageDataNode(mediaObjectNode); updateSize(fileNode, id); String filePath = fileNode.getPath(); String relPath = filePath.substring(baseFolder.getPath().length() + 1); - context.setProperty(DocBookNames.DBK_FILEREF, relPath); + imageDataNode.setProperty(DbkAttr.fileref.name(), relPath); } @Override - public String getImageUrl(Node imageDataNode) throws RepositoryException { + public String getImageUrl(Node mediaObjectNode) throws RepositoryException { + Node imageDataNode = getImageDataNode(mediaObjectNode); // TODO factorise String fileref = null; - if (imageDataNode.hasProperty(DocBookNames.DBK_FILEREF)) - fileref = imageDataNode.getProperty(DocBookNames.DBK_FILEREF).getString(); + if (imageDataNode.hasProperty(DbkAttr.fileref.name())) + fileref = imageDataNode.getProperty(DbkAttr.fileref.name()).getString(); if (fileref == null) return null; URI fileUri; try { + // FIXME it messes up with the '/' fileUri = new URI(URLEncoder.encode(fileref, StandardCharsets.UTF_8.toString())); } catch (URISyntaxException | UnsupportedEncodingException e) { throw new IllegalArgumentException("File ref in " + imageDataNode + " is badly formatted", e); @@ -106,15 +123,15 @@ public class DbkImageManager extends DefaultImageManager { return fileUri.toString(); // local Node fileNode = getFileNode(imageDataNode); - String url = CmsUiUtils.getDataPath(fileNode); + String url = CmsUiUtils.getDataPathForUrl(fileNode); return url; } protected Node getFileNode(Node imageDataNode) throws RepositoryException { // FIXME make URL use case more robust String fileref = null; - if (imageDataNode.hasProperty(DocBookNames.DBK_FILEREF)) - fileref = imageDataNode.getProperty(DocBookNames.DBK_FILEREF).getString(); + if (imageDataNode.hasProperty(DbkAttr.fileref.name())) + fileref = imageDataNode.getProperty(DbkAttr.fileref.name()).getString(); if (fileref == null) return null; Node fileNode;