Improve image management and ACR
[lgpl/argeo-commons.git] / swt / org.argeo.cms.swt / src / org / argeo / cms / swt / acr / AcrSwtImageManager.java
index 78a9930051657ed4669f4caf196113f6c2c44ee7..0984f57fb2786a5366f833ac9f551c3ba9e31348 100644 (file)
@@ -1,15 +1,19 @@
 package org.argeo.cms.swt.acr;
 
+import java.io.IOException;
 import java.io.InputStream;
+import java.util.Optional;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.ux.Cms2DSize;
+import org.argeo.cms.acr.SvgAttrs;
 import org.argeo.cms.swt.AbstractSwtImageManager;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ux.CmsUxUtils;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
 
+/** Implementation of {@link AbstractSwtImageManager} based on ACR. */
 public class AcrSwtImageManager extends AbstractSwtImageManager<Content> {
 
        @Override
@@ -24,8 +28,13 @@ public class AcrSwtImageManager extends AbstractSwtImageManager<Content> {
        }
 
        @Override
-       protected Image getSwtImage(Content node) {
-               throw new UnsupportedOperationException();
+       protected ImageData getSwtImageData(Content node) {
+               try (InputStream in = node.open(InputStream.class)) {
+                       ImageData imageData = new ImageData(in);
+                       return imageData;
+               } catch (IOException e) {
+                       throw new RuntimeException(e);
+               }
        }
 
        @Override
@@ -45,4 +54,15 @@ public class AcrSwtImageManager extends AbstractSwtImageManager<Content> {
                buf.append(node.getPath());
                return buf.toString();
        }
+
+       @Override
+       public Cms2DSize getImageSize(Content node) {
+               // TODO cache it?
+               Optional<Integer> width = node.get(SvgAttrs.width, Integer.class);
+               Optional<Integer> height = node.get(SvgAttrs.height, Integer.class);
+               if (!width.isEmpty() && !height.isEmpty())
+                       return new Cms2DSize(width.get(), height.get());
+               return super.getImageSize(node);
+       }
+
 }