Improve links.
[gpl/argeo-suite.git] / publishing / org.argeo.publishing.ui / src / org / argeo / docbook / ui / DbkImageManager.java
index 1e3b070364c587fbacf6a66d4cfd1e880cc06e32..25a466ab7695c3153cde5e565a28afb86a22422d 100644 (file)
@@ -21,8 +21,8 @@ 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.DocBookNames;
-import org.argeo.docbook.DocBookType;
+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;
@@ -38,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 (DbkUtils.isDbk(node, DocBookType.imagedata)) {
-                       fileNode = getFileNode(node);
+               if (DbkUtils.isDbk(node, DbkType.mediaobject)) {
+                       Node imageDataNode = getImageDataNode(node);
+                       fileNode = getFileNode(imageDataNode);
                }
                if (node.isNodeType(NT_FILE)) {
                        fileNode = node;
@@ -54,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);
@@ -83,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);
@@ -109,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;