Improve media management in DocBook.
[gpl/argeo-suite.git] / publishing / org.argeo.publishing.ui / src / org / argeo / docbook / ui / DbkImageManager.java
index 2b57b4b9cf768883b8f53be7ac6f7843a9505dfc..008ac76538d6f658b075b42473d4ea2a540d98b9 100644 (file)
@@ -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,20 +94,22 @@ 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;
@@ -113,8 +129,8 @@ public class DbkImageManager extends DefaultImageManager {
        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;