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;fp=publishing%2Forg.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fdocbook%2Fui%2FDbkImageManager.java;h=0000000000000000000000000000000000000000;hp=25a466ab7695c3153cde5e565a28afb86a22422d;hb=3440f51df3e4c015972c7b6a0efb3ce16188b89b;hpb=752a7b2614895002a3d184be166ef4162caf0d05 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 deleted file mode 100644 index 25a466a..0000000 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkImageManager.java +++ /dev/null @@ -1,154 +0,0 @@ -package org.argeo.docbook.ui; - -import static javax.jcr.Node.JCR_CONTENT; -import static javax.jcr.Property.JCR_DATA; -import static javax.jcr.nodetype.NodeType.NT_FILE; - -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -import javax.jcr.Binary; -import javax.jcr.Node; -import javax.jcr.RepositoryException; -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; -import org.argeo.jcr.JcrUtils; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.Point; - -/** Add DocBook images support to {@link CmsImageManager}. */ -public class DbkImageManager extends DefaultImageManager { - private Node baseFolder = null; - - public DbkImageManager(Node baseFolder) { - 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, DbkType.mediaobject)) { - Node imageDataNode = getImageDataNode(node); - fileNode = getFileNode(imageDataNode); - } - if (node.isNodeType(NT_FILE)) { - fileNode = node; - } - if (fileNode != null) { - return node.getNode(JCR_CONTENT).getProperty(JCR_DATA).getBinary(); - } else { - return null; - } - } - - public Point getImageSize(Node mediaObjectNode) throws RepositoryException { - Node imageDataNode = getImageDataNode(mediaObjectNode); - Node fileNode = getFileNode(imageDataNode); - if (fileNode == null) - return new Point(0, 0); - Point intrinsicSize; - if (fileNode.hasProperty(EntityNames.SVG_WIDTH) && fileNode.hasProperty(EntityNames.SVG_HEIGHT)) { - int width = (int) fileNode.getProperty(EntityNames.SVG_WIDTH).getLong(); - int height = (int) fileNode.getProperty(EntityNames.SVG_HEIGHT).getLong(); - intrinsicSize = new Point(width, height); - } else { - try (InputStream in = JcrUtils.getFileAsStream(fileNode)) { - ImageData id = new ImageData(in); - intrinsicSize = updateSize(fileNode, id); - } catch (IOException e) { - throw new RuntimeException("Cannot load file " + fileNode, e); - } - } - // TODO interpret image data infos - return intrinsicSize; - } - - protected Point updateSize(Node fileNode, ImageData id) throws RepositoryException { - fileNode.addMixin(EntityType.box.get()); - fileNode.setProperty(EntityNames.SVG_WIDTH, id.width); - fileNode.setProperty(EntityNames.SVG_HEIGHT, id.height); - return new Point(id.width, id.height); - } - - @Override - 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); - imageDataNode.setProperty(DbkAttr.fileref.name(), relPath); - } - - @Override - public String getImageUrl(Node mediaObjectNode) throws RepositoryException { - Node imageDataNode = getImageDataNode(mediaObjectNode); - // TODO factorise - String fileref = null; - 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); - } - if (fileUri.getScheme() != null) - return fileUri.toString(); - // local - Node fileNode = getFileNode(imageDataNode); - 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(DbkAttr.fileref.name())) - fileref = imageDataNode.getProperty(DbkAttr.fileref.name()).getString(); - if (fileref == null) - return null; - Node fileNode; - if (fileref.startsWith("/")) - fileNode = baseFolder.getSession().getNode(fileref); - else - fileNode = baseFolder.getNode(fileref); - return fileNode; - } - - protected Node getMediaFolder() { - try { - // TODO check edition status - Node mediaFolder = JcrUtils.getOrAdd(baseFolder, EntityNames.MEDIA, NodeType.NT_FOLDER); - return mediaFolder; - } catch (RepositoryException e) { - throw new JcrException("Cannot get media folder", e); - } - } -}