]> source.dussan.org Git - poi.git/commitdiff
Annotation for unimplemented drawing handlers.
authorAndreas Beeker <kiwiwings@apache.org>
Sat, 25 Jul 2015 19:24:51 +0000 (19:24 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Sat, 25 Jul 2015 19:24:51 +0000 (19:24 +0000)
Ignore unsupported image types (e.g. wmf).

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1692640 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/sl/draw/DrawFactory.java
src/java/org/apache/poi/sl/draw/DrawNotImplemented.java [new file with mode: 0644]
src/java/org/apache/poi/sl/draw/DrawNothing.java [new file with mode: 0644]
src/java/org/apache/poi/sl/draw/ImageRenderer.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java

index 97b3f52147c678c8f92024596a6c3346c4e37495..9d2f05ca4fdeffbc2cb609719e5450b511ff3eed 100644 (file)
@@ -23,7 +23,23 @@ import java.awt.Graphics2D;
 import java.awt.font.TextLayout;\r
 import java.text.AttributedString;\r
 \r
-import org.apache.poi.sl.usermodel.*;\r
+import org.apache.poi.sl.usermodel.Background;\r
+import org.apache.poi.sl.usermodel.ConnectorShape;\r
+import org.apache.poi.sl.usermodel.FreeformShape;\r
+import org.apache.poi.sl.usermodel.GroupShape;\r
+import org.apache.poi.sl.usermodel.MasterSheet;\r
+import org.apache.poi.sl.usermodel.Notes;\r
+import org.apache.poi.sl.usermodel.PictureShape;\r
+import org.apache.poi.sl.usermodel.PlaceableShape;\r
+import org.apache.poi.sl.usermodel.Shape;\r
+import org.apache.poi.sl.usermodel.Sheet;\r
+import org.apache.poi.sl.usermodel.Slide;\r
+import org.apache.poi.sl.usermodel.SlideShow;\r
+import org.apache.poi.sl.usermodel.TableShape;\r
+import org.apache.poi.sl.usermodel.TextBox;\r
+import org.apache.poi.sl.usermodel.TextParagraph;\r
+import org.apache.poi.sl.usermodel.TextRun;\r
+import org.apache.poi.sl.usermodel.TextShape;\r
 \r
 public class DrawFactory {\r
     protected static ThreadLocal<DrawFactory> defaultFactory = new ThreadLocal<DrawFactory>();\r
@@ -85,8 +101,10 @@ public class DrawFactory {
             return getDrawable((MasterSheet<? extends Shape, ? extends SlideShow>)shape);\r
         } else if (shape instanceof Sheet) {\r
             return getDrawable((Sheet<? extends Shape, ? extends SlideShow>)shape);\r
+        } else if (shape.getClass().isAnnotationPresent(DrawNotImplemented.class)) {\r
+            return new DrawNothing<Shape>(shape);\r
         }\r
-\r
+        \r
         throw new IllegalArgumentException("Unsupported shape type: "+shape.getClass());\r
     }\r
 \r
diff --git a/src/java/org/apache/poi/sl/draw/DrawNotImplemented.java b/src/java/org/apache/poi/sl/draw/DrawNotImplemented.java
new file mode 100644 (file)
index 0000000..45b80ea
--- /dev/null
@@ -0,0 +1,35 @@
+/* ====================================================================\r
+   Licensed to the Apache Software Foundation (ASF) under one or more\r
+   contributor license agreements.  See the NOTICE file distributed with\r
+   this work for additional information regarding copyright ownership.\r
+   The ASF licenses this file to You under the Apache License, Version 2.0\r
+   (the "License"); you may not use this file except in compliance with\r
+   the License.  You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+==================================================================== */\r
+\r
+package org.apache.poi.sl.draw;\r
+\r
+import java.lang.annotation.Documented;\r
+import java.lang.annotation.Retention;\r
+import java.lang.annotation.RetentionPolicy;\r
+\r
+import org.apache.poi.util.Internal;\r
+\r
+\r
+/**\r
+ * This is a marker annotation for classes which don't have a defined\r
+ * draw implementation.\r
+ */\r
+@Documented\r
+@Retention(RetentionPolicy.RUNTIME)\r
+@Internal\r
+public @interface DrawNotImplemented {\r
+}\r
diff --git a/src/java/org/apache/poi/sl/draw/DrawNothing.java b/src/java/org/apache/poi/sl/draw/DrawNothing.java
new file mode 100644 (file)
index 0000000..eb32888
--- /dev/null
@@ -0,0 +1,47 @@
+/* ====================================================================\r
+   Licensed to the Apache Software Foundation (ASF) under one or more\r
+   contributor license agreements.  See the NOTICE file distributed with\r
+   this work for additional information regarding copyright ownership.\r
+   The ASF licenses this file to You under the Apache License, Version 2.0\r
+   (the "License"); you may not use this file except in compliance with\r
+   the License.  You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+==================================================================== */\r
+\r
+package org.apache.poi.sl.draw;\r
+\r
+import java.awt.Graphics2D;\r
+\r
+import org.apache.poi.sl.usermodel.Shape;\r
+\r
+\r
+public class DrawNothing<T extends Shape> implements Drawable {\r
+\r
+    protected final T shape;\r
+    \r
+    public DrawNothing(T shape) {\r
+        this.shape = shape;\r
+    }\r
+    \r
+    /**\r
+     * Apply 2-D transforms before drawing this shape. This includes rotation and flipping.\r
+     *\r
+     * @param graphics the graphics whos transform matrix will be modified\r
+     */\r
+    public void applyTransform(Graphics2D graphics) {\r
+    }\r
+\r
+\r
+    public void draw(Graphics2D graphics) {\r
+    }\r
+\r
+    public void drawContent(Graphics2D context) {\r
+    }\r
+}\r
index 87561aedd461149cbcda7eb55024132e88f8cbc9..ae8eccf98b27507e19d7f4df61b9d250ed90f8c6 100644 (file)
@@ -27,6 +27,9 @@ import java.io.*;
 \r
 import javax.imageio.ImageIO;\r
 \r
+import org.apache.poi.util.POILogFactory;\r
+import org.apache.poi.util.POILogger;\r
+\r
 /**\r
  * For now this class renders only images supported by the javax.imageio.ImageIO\r
  * framework. Subclasses can override this class to support other formats, for\r
@@ -77,6 +80,8 @@ import javax.imageio.ImageIO;
  * </pre>\r
  */\r
 public class ImageRenderer {\r
+    private final static POILogger LOG = POILogFactory.getLogger(ImageRenderer.class);\r
+    \r
     protected BufferedImage img;\r
 \r
     /**\r
@@ -86,7 +91,7 @@ public class ImageRenderer {
      * @param contentType the content type\r
      */\r
     public void loadImage(InputStream data, String contentType) throws IOException {\r
-        img = convertBufferedImage(ImageIO.read(data));\r
+        img = convertBufferedImage(ImageIO.read(data), contentType);\r
     }\r
 \r
     /**\r
@@ -96,10 +101,18 @@ public class ImageRenderer {
      * @param contentType the content type\r
      */\r
     public void loadImage(byte data[], String contentType) throws IOException {\r
-        img = convertBufferedImage(ImageIO.read(new ByteArrayInputStream(data)));\r
+        img = convertBufferedImage(ImageIO.read(new ByteArrayInputStream(data)), contentType);\r
     }\r
 \r
-    protected static BufferedImage convertBufferedImage(BufferedImage img) {\r
+    /**\r
+     * Add alpha channel to buffered image \r
+     */\r
+    private static BufferedImage convertBufferedImage(BufferedImage img, String contentType) {\r
+        if (img == null) {\r
+            LOG.log(POILogger.WARN, "Content-type: "+contentType+" is not support. Image ignored.");\r
+            return null;\r
+        }\r
+        \r
         BufferedImage bi = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);\r
         Graphics g = bi.getGraphics();\r
         g.drawImage(img, 0, 0, null);\r
index b17799a82f161840e834b18f25dc387fa1115ae5..82a3fe1f639575c214a738e482d6532081fc17b7 100644 (file)
@@ -27,6 +27,7 @@ import org.apache.poi.POIXMLException;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;\r
 import org.apache.poi.openxml4j.opc.PackagePart;\r
 import org.apache.poi.openxml4j.opc.PackageRelationship;\r
+import org.apache.poi.sl.draw.DrawNotImplemented;\r
 import org.apache.poi.sl.usermodel.ShapeType;\r
 import org.apache.poi.util.Beta;\r
 import org.apache.poi.util.Units;\r
@@ -42,6 +43,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFra
  * @author Yegor Kozlov\r
  */\r
 @Beta\r
+@DrawNotImplemented\r
 public class XSLFGraphicFrame extends XSLFShape {\r
     /*package*/ XSLFGraphicFrame(CTGraphicalObjectFrame shape, XSLFSheet sheet){\r
         super(shape,sheet);\r