Improve media management in DocBook.
[gpl/argeo-suite.git] / publishing / org.argeo.publishing.ui / src / org / argeo / docbook / ui / DbkImageManager.java
index 1e3b070364c587fbacf6a66d4cfd1e880cc06e32..008ac76538d6f658b075b42473d4ea2a540d98b9 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,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;
@@ -116,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;