add getPictureTypeEnum

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902905 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
index 7459f83..caae274 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
@@ -105,6 +105,7 @@
      * obtained from {@link #getAllPictures()} .
      * @throws InvalidFormatException If the format of the picture is not known.
      * @throws IOException            If reading the picture-data from the stream fails.
+     * @see #addPictureData(InputStream, PictureType)
      */
     public String addPictureData(InputStream is, int format) throws InvalidFormatException, IOException {
         byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
@@ -114,6 +115,22 @@
     /**
      * Adds a picture to the comments.
      *
+     * @param is     The stream to read image from
+     * @param pictureType The {@link PictureType} of the picture
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the pictureType of the picture is not known.
+     * @throws IOException            If reading the picture-data from the stream fails.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(InputStream is, PictureType pictureType) throws InvalidFormatException, IOException {
+        byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
+        return addPictureData(data, pictureType);
+    }
+
+    /**
+     * Adds a picture to the comments.
+     *
      * @param pictureData The picture data
      * @param format      The format of the picture.
      * @return the index to this picture (0 based), the added picture can be
@@ -121,12 +138,29 @@
      * @throws InvalidFormatException If the format of the picture is not known.
      */
     public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException {
-        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData, format);
-        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format];
+        return addPictureData(pictureData, PictureType.findById(format));
+    }
+
+    /**
+     * Adds a picture to the comments.
+     *
+     * @param pictureData The picture data
+     * @param pictureType The {@link PictureType} of the picture.
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the pictureType of the picture is not known.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
+        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData);
+        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()];
 
         if (xwpfPicData == null) {
             /* Part doesn't exist, create a new one */
-            int idx = getXWPFDocument().getNextPicNameNumber(format);
+            int idx = getXWPFDocument().getNextPicNameNumber(pictureType);
             xwpfPicData = (XWPFPictureData) createRelationship(relDesc, XWPFFactory.getInstance(), idx);
             /* write bytes to new part */
             PackagePart picDataPart = xwpfPicData.getPackagePart();
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
index 7814406..1d47c9f 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
@@ -1455,7 +1455,7 @@
         }
     }
 
-    XWPFPictureData findPackagePictureData(byte[] pictureData, int format) {
+    XWPFPictureData findPackagePictureData(byte[] pictureData) {
         long checksum = IOUtils.calculateChecksum(pictureData);
         XWPFPictureData xwpfPicData = null;
         /*
@@ -1475,13 +1475,40 @@
         return xwpfPicData;
     }
 
+    /**
+     * Adds a picture to the document.
+     *
+     * @param pictureData The picture data
+     * @param format the format of the picture, see constants in {@link Document}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the format is not known
+     * @see #addPictureData(byte[], PictureType)
+     */
     public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException {
-        XWPFPictureData xwpfPicData = findPackagePictureData(pictureData, format);
-        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format];
+        return addPictureData(pictureData, PictureType.findById(format));
+    }
+
+    /**
+     * Adds a picture to the document.
+     *
+     * @param pictureData The picture data
+     * @param pictureType the {@link PictureType}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the format is not known
+     * @since POI 5.2.3
+     */
+    public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
+        XWPFPictureData xwpfPicData = findPackagePictureData(pictureData);
+        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()];
 
         if (xwpfPicData == null) {
             /* Part doesn't exist, create a new one */
-            int idx = getNextPicNameNumber(format);
+            int idx = getNextPicNameNumber(pictureType);
             xwpfPicData = (XWPFPictureData) createRelationship(relDesc, XWPFFactory.getInstance(), idx);
             /* write bytes to new part */
             PackagePart picDataPart = xwpfPicData.getPackagePart();
@@ -1510,6 +1537,16 @@
         }
     }
 
+    /**
+     * Adds a picture to the document.
+     *
+     * @param is The picture data
+     * @param format the format of the picture, see constants in {@link Document}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the format is not known
+     * @see #addPictureData(InputStream, PictureType)
+     */
     public String addPictureData(InputStream is, int format) throws InvalidFormatException {
         try {
             byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
@@ -1520,18 +1557,54 @@
     }
 
     /**
+     * Adds a picture to the document.
+     *
+     * @param is The picture data
+     * @param pictureType the {@link PictureType}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the pictureType is not known
+     * @since POI 5.2.3
+     */
+    public String addPictureData(InputStream is, PictureType pictureType) throws InvalidFormatException {
+        try {
+            byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
+            return addPictureData(data, pictureType);
+        } catch (IOException e) {
+            throw new POIXMLException(e);
+        }
+    }
+
+    /**
      * get the next free ImageNumber
      *
+     * @param format the format of the picture, see constants in {@link Document}
      * @return the next free ImageNumber
      * @throws InvalidFormatException If the format of the picture is not known.
+     * @see #getNextPicNameNumber(PictureType)
      */
     public int getNextPicNameNumber(int format) throws InvalidFormatException {
+        return getNextPicNameNumber(PictureType.findById(format));
+    }
+
+    /**
+     * get the next free ImageNumber
+     *
+     * @param pictureType the {@link PictureType}
+     * @return the next free ImageNumber
+     * @throws InvalidFormatException If the pictureType of the picture is not known.
+     * @since POI 5.2.3
+     */
+    public int getNextPicNameNumber(PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
         int img = getAllPackagePictures().size() + 1;
-        String proposal = XWPFPictureData.RELATIONS[format].getFileName(img);
+        String proposal = XWPFPictureData.RELATIONS[pictureType.getId()].getFileName(img);
         PackagePartName createPartName = PackagingURIHelper.createPartName(proposal);
         while (this.getPackage().getPart(createPartName) != null) {
             img++;
-            proposal = XWPFPictureData.RELATIONS[format].getFileName(img);
+            proposal = XWPFPictureData.RELATIONS[pictureType.getId()].getFileName(img);
             createPartName = PackagingURIHelper.createPartName(proposal);
         }
         return img;
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
index 131c7d3..8c5dc99 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
@@ -233,14 +233,31 @@
      * @param format      The format of the picture.
      * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
      * @throws InvalidFormatException If the format of the picture is not known.
+     * @see #addPictureData(byte[], PictureType)
      */
     public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException {
-        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData, format);
-        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format];
+        return addPictureData(pictureData, PictureType.findById(format));
+    }
+
+    /**
+     * Adds a picture to the document.
+     *
+     * @param pictureData The picture data
+     * @param pictureType The {@link PictureType} of the picture.
+     * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the format of the picture is not known.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
+        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData);
+        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()];
 
         if (xwpfPicData == null) {
             /* Part doesn't exist, create a new one */
-            int idx = document.getNextPicNameNumber(format);
+            int idx = document.getNextPicNameNumber(pictureType);
             xwpfPicData = (XWPFPictureData) createRelationship(relDesc, XWPFFactory.getInstance(), idx);
             /* write bytes to new part */
             PackagePart picDataPart = xwpfPicData.getPackagePart();
@@ -277,6 +294,7 @@
      * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
      * @throws InvalidFormatException If the format of the picture is not known.
      * @throws IOException If reading the picture-data from the stream fails.
+     * @see #addPictureData(InputStream, PictureType)
      */
     public String addPictureData(InputStream is, int format) throws InvalidFormatException, IOException {
         byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
@@ -284,6 +302,21 @@
     }
 
     /**
+     * Adds a picture to the document.
+     *
+     * @param is     The stream to read image from
+     * @param pictureType The {@link PictureType} of the picture.
+     * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the format of the picture is not known.
+     * @throws IOException If reading the picture-data from the stream fails.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(InputStream is, PictureType pictureType) throws InvalidFormatException, IOException {
+        byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
+        return addPictureData(data, pictureType);
+    }
+
+    /**
      * returns the PictureData by blipID
      *
      * @return XWPFPictureData of a specificID
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
index abd499f..00d3479 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
@@ -1066,10 +1066,32 @@
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_PICT
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_JPEG
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_PNG
+     * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_GIF
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_DIB
+     * @see #addPicture(InputStream, PictureType, String, int, int)
      */
     public XWPFPicture addPicture(InputStream pictureData, int pictureType, String filename, int width, int height)
             throws InvalidFormatException, IOException {
+        return addPicture(pictureData, PictureType.findById(pictureType), filename, width, height);
+    }
+
+    /**
+     * Adds a picture to the run. This method handles
+     * attaching the picture data to the overall file.
+     *
+     * @param pictureData The raw picture data
+     * @param pictureType The {@link PictureType} of the picture
+     * @param width       width in EMUs. To convert to / from points use {@link org.apache.poi.util.Units}
+     * @param height      height in EMUs. To convert to / from points use {@link org.apache.poi.util.Units}
+     * @throws InvalidFormatException If the format of the picture is not known.
+     * @throws IOException            If reading the picture-data from the stream fails.
+     * @since POI 5.2.3
+     */
+    public XWPFPicture addPicture(InputStream pictureData, PictureType pictureType, String filename, int width, int height)
+            throws InvalidFormatException, IOException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
         String relationId;
         XWPFPictureData picData;
 
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
index 95b88ba..c8af9f5 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
@@ -22,7 +22,6 @@
 
 import com.microsoft.schemas.office.office.CTSignatureLine;
 import com.microsoft.schemas.vml.CTImageData;
-import org.apache.poi.common.usermodel.PictureType;
 import org.apache.poi.ooxml.util.XPathHelper;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.poifs.crypt.dsig.SignatureLine;
@@ -60,30 +59,30 @@
         imageData.setId2(relId);
     }
 
-    private static int mapType(PictureType type) throws InvalidFormatException {
+    private static PictureType mapType(org.apache.poi.common.usermodel.PictureType type) throws InvalidFormatException {
         switch (type) {
             case BMP:
-                return Document.PICTURE_TYPE_BMP;
+                return PictureType.BMP;
             case DIB:
-                return Document.PICTURE_TYPE_DIB;
+                return PictureType.DIB;
             case EMF:
-                return Document.PICTURE_TYPE_EMF;
+                return PictureType.EMF;
             case EPS:
-                return Document.PICTURE_TYPE_EPS;
+                return PictureType.EPS;
             case GIF:
-                return Document.PICTURE_TYPE_GIF;
+                return PictureType.GIF;
             case JPEG:
-                return Document.PICTURE_TYPE_JPEG;
+                return PictureType.JPEG;
             case PICT:
-                return Document.PICTURE_TYPE_PICT;
+                return PictureType.PICT;
             case PNG:
-                return Document.PICTURE_TYPE_PNG;
+                return PictureType.PNG;
             case TIFF:
-                return Document.PICTURE_TYPE_TIFF;
+                return PictureType.TIFF;
             case WMF:
-                return Document.PICTURE_TYPE_WMF;
+                return PictureType.WMF;
             case WPG:
-                return Document.PICTURE_TYPE_WPG;
+                return PictureType.WPG;
             default:
                 throw new InvalidFormatException("Unsupported picture format "+type);
         }
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
index 3f8e910..c23e53b 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
@@ -301,7 +301,7 @@
     void testFindPackagePictureData() throws IOException {
         try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) {
             byte[] nature1 = XWPFTestDataSamples.getImage("nature1.gif");
-            XWPFPictureData part = doc.findPackagePictureData(nature1, Document.PICTURE_TYPE_GIF);
+            XWPFPictureData part = doc.findPackagePictureData(nature1);
             assertNotNull(part);
             assertTrue(doc.getAllPictures().contains(part));
             assertTrue(doc.getAllPackagePictures().contains(part));
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
index dc61447..6a098cd 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
@@ -446,6 +446,8 @@
                 for (XWPFPicture pic : pictures) {
                     assertNotNull(pic.getPictureData());
                     assertEquals("DOZOR", pic.getDescription());
+                    assertEquals(5, pic.getPictureData().getPictureType());
+                    assertEquals(PictureType.JPEG, pic.getPictureData().getPictureTypeEnum());
                 }
 
                 count += pictures.size();