]> source.dussan.org Git - poi.git/commitdiff
Bug 60059 - Deprecate xslf.usermodel.Drawing* - was: Can't change text of DrawingPara...
authorAndreas Beeker <kiwiwings@apache.org>
Wed, 26 Oct 2016 22:32:46 +0000 (22:32 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Wed, 26 Oct 2016 22:32:46 +0000 (22:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1766746 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/extractor/XSLFPowerPointExtractor.java
src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingParagraph.java
src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTable.java
src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTableCell.java
src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTableRow.java
src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTextBody.java
src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTextPlaceholder.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommonSlideData.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java
src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java

index ddcbfff2c9d60ad2964c8dd3218b38c08051ffc2..5f757d0c59214cd72076f28e9a8bd4b3650f4281 100644 (file)
 package org.apache.poi.xslf.extractor;
 
 import java.io.IOException;
-import java.util.List;
 
 import org.apache.poi.POIXMLTextExtractor;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
-import org.apache.poi.xslf.usermodel.DrawingParagraph;
-import org.apache.poi.xslf.usermodel.DrawingTextBody;
-import org.apache.poi.xslf.usermodel.DrawingTextPlaceholder;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 import org.apache.poi.xslf.usermodel.XSLFCommentAuthors;
 import org.apache.poi.xslf.usermodel.XSLFComments;
-import org.apache.poi.xslf.usermodel.XSLFCommonSlideData;
 import org.apache.poi.xslf.usermodel.XSLFNotes;
 import org.apache.poi.xslf.usermodel.XSLFRelation;
+import org.apache.poi.xslf.usermodel.XSLFShape;
+import org.apache.poi.xslf.usermodel.XSLFShapeContainer;
 import org.apache.poi.xslf.usermodel.XSLFSlide;
 import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
 import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
 import org.apache.poi.xslf.usermodel.XSLFSlideShow;
+import org.apache.poi.xslf.usermodel.XSLFTable;
+import org.apache.poi.xslf.usermodel.XSLFTableCell;
+import org.apache.poi.xslf.usermodel.XSLFTableRow;
+import org.apache.poi.xslf.usermodel.XSLFTextShape;
 import org.apache.xmlbeans.XmlException;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTComment;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentAuthor;
@@ -115,84 +116,108 @@ public class XSLFPowerPointExtractor extends POIXMLTextExtractor {
    
    /**
     * Gets the requested text from the file
+    * 
     * @param slideText Should we retrieve text from slides?
     * @param notesText Should we retrieve text from notes?
     * @param masterText Should we retrieve text from master slides?
+    * 
+    * @return the extracted text
     */
    public String getText(boolean slideText, boolean notesText, boolean masterText) {
-      StringBuffer text = new StringBuffer();
-
-      List<XSLFSlide> slides = slideshow.getSlides();
-      XSLFCommentAuthors commentAuthors = slideshow.getCommentAuthors();
-
-      for (XSLFSlide slide : slides) {
-         try {
-            XSLFNotes notes = slide.getNotes();
-            XSLFComments comments = slide.getComments();
-            XSLFSlideLayout layout = slide.getSlideLayout();
-            XSLFSlideMaster master = layout.getSlideMaster();
-
-            // TODO Do the slide's name
-            // (Stored in docProps/app.xml)
-
-            // Do the slide's text if requested
-            if (slideText) {
-               extractText(slide.getCommonSlideData(), false, text);
-               
-               // If requested, get text from the master and it's layout 
-               if(masterText) {
-                  if(layout != null) {
-                     extractText(layout.getCommonSlideData(), true, text);
-                  }
-                  if(master != null) {
-                     extractText(master.getCommonSlideData(), true, text);
-                  }
-               }
+      StringBuilder text = new StringBuilder();
 
-               // If the slide has comments, do those too
-               if (comments != null) {
-                  for (CTComment comment : comments.getCTCommentsList().getCmArray()) {
-                     // Do the author if we can
-                     if (commentAuthors != null) {
-                        CTCommentAuthor author = commentAuthors.getAuthorById(comment.getAuthorId());
-                        if(author != null) {
-                           text.append(author.getName() + ": ");
-                        }
-                     }
-                     
-                     // Then the comment text, with a new line afterwards
-                     text.append(comment.getText());
-                     text.append("\n");
-                  }
-               }
-            }
-
-            // Do the notes if requested
-            if (notesText && notes != null) {
-               extractText(notes.getCommonSlideData(), false, text);
-            }
-         } catch (Exception e) {
-            throw new RuntimeException(e);
-         }
+      for (XSLFSlide slide : slideshow.getSlides()) {
+          text.append(getText(slide, slideText, notesText, masterText));
       }
 
       return text.toString();
    }
-       
-       private void extractText(XSLFCommonSlideData data, boolean skipPlaceholders, StringBuffer text) {
-          for(DrawingTextBody textBody : data.getDrawingText()) {
-             if(skipPlaceholders && textBody instanceof DrawingTextPlaceholder) {
-                DrawingTextPlaceholder ph = (DrawingTextPlaceholder)textBody;
-                if(! ph.isPlaceholderCustom()) {
-                   // Skip non-customised placeholder text
-                   continue;
-                }
-             }
-             
-             for (DrawingParagraph p : textBody.getParagraphs()) {
-            text.append(p.getText());
-            text.append("\n");
-             }
-          }
+
+   /**
+    * Gets the requested text from the slide
+    * 
+    * @param slide the slide to retrieve the text from
+    * @param slideText Should we retrieve text from slides?
+    * @param notesText Should we retrieve text from notes?
+    * @param masterText Should we retrieve text from master slides?
+    * 
+    * @return the extracted text
+    */
+   public static String getText(XSLFSlide slide, boolean slideText, boolean notesText, boolean masterText) {
+       StringBuilder text = new StringBuilder();
+
+       XSLFCommentAuthors commentAuthors = slide.getSlideShow().getCommentAuthors();
+
+       XSLFNotes notes = slide.getNotes();
+       XSLFComments comments = slide.getComments();
+       XSLFSlideLayout layout = slide.getSlideLayout();
+       XSLFSlideMaster master = layout.getSlideMaster();
+
+       // TODO Do the slide's name
+       // (Stored in docProps/app.xml)
+
+       // Do the slide's text if requested
+       if (slideText) {
+          extractText(slide, false, text);
+          
+          // If requested, get text from the master and it's layout 
+          if(masterText) {
+             if(layout != null) {
+                extractText(layout, true, text);
+             }
+             if(master != null) {
+                extractText(master, true, text);
+             }
+          }
+
+          // If the slide has comments, do those too
+          if (comments != null) {
+             for (CTComment comment : comments.getCTCommentsList().getCmArray()) {
+                // Do the author if we can
+                if (commentAuthors != null) {
+                   CTCommentAuthor author = commentAuthors.getAuthorById(comment.getAuthorId());
+                   if(author != null) {
+                      text.append(author.getName() + ": ");
+                   }
+                }
+                
+                // Then the comment text, with a new line afterwards
+                text.append(comment.getText());
+                text.append("\n");
+             }
+          }
+       }
+
+       // Do the notes if requested
+       if (notesText && notes != null) {
+          extractText(notes, false, text);
+       }
+       
+       return text.toString();
+   }
+   
+    private static void extractText(XSLFShapeContainer data, boolean skipPlaceholders, StringBuilder text) {
+       for (XSLFShape s : data) {
+           if (s instanceof XSLFShapeContainer) {
+               extractText((XSLFShapeContainer)s, skipPlaceholders, text);
+           } else if (s instanceof XSLFTextShape) {
+               XSLFTextShape ts = (XSLFTextShape)s;
+               // Skip non-customised placeholder text
+               if (!(skipPlaceholders && ts.isPlaceholder())) {
+                   text.append(ts.getText());
+                   text.append("\n");
+               }
+           } else if (s instanceof XSLFTable) {
+               XSLFTable ts = (XSLFTable)s;
+               // Skip non-customised placeholder text
+               for (XSLFTableRow r : ts) {
+                   for (XSLFTableCell c : r) {
+                       text.append(c.getText());
+                       text.append("\t");
+                   }
+                   text.append("\n");
+               }
+           }
+       }
        }
 }
index 2e755583bb9dd329dd550c0144b60e17e0b0fd1b..6a6ee38074a77568decfa4d2e0d4f165d2d04312 100644 (file)
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.util.Removal;
 import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlObject;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextLineBreak;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
 
+/*
+ * @deprecated POI 3.16 beta 1. Instead iterate over the shapes/notes of the slides
+ */
+@Removal(version="3.18")
 public class DrawingParagraph {
     private final CTTextParagraph p;
 
index 037ae65d9216be4eb59824da4fad9bfd50a4b6fb..b59a5bb234cf39aa2cb810911523a2f48735c798 100644 (file)
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.util.Removal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTable;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTableRow;
 
+/*
+ * @deprecated POI 3.16 beta 1. use {@link XSLFTable} instead
+ */
+@Removal(version="3.18")
 public class DrawingTable {
     private final CTTable table;
 
index 492c2f5e1b8ec6c8742e4408e9982f1b18dc433d..2924fbc746148cc5665b6c40dd0180a167dcfb7a 100644 (file)
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.util.Removal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTableCell;
 
+/*
+ * @deprecated POI 3.16 beta 1. use {@link XSLFTable} instead
+ */
+@Removal(version="3.18")
 public class DrawingTableCell {
     private final CTTableCell cell;
     private final DrawingTextBody drawingTextBody;
index 70aa159a93b04e8037dbf3ac07fdb3e767418b0a..08a693959d29cb6e6234b17437109d03062cd260 100644 (file)
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.util.Removal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTableCell;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTableRow;
 
+/*
+ * @deprecated POI 3.16 beta 1. use {@link XSLFTable} instead
+ */
+@Removal(version="3.18")
 public class DrawingTableRow {
     private final CTTableRow row;
 
index c3f7778b815273fa34c8ce3a33b9e54377f6a392..7f6aa4bab4ddad3b5738a4a5ff47805805ccbe7a 100644 (file)
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.util.Removal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
 
+/*
+ * @deprecated POI 3.16 beta 1. use {@link XSLFTable} instead
+ */
+@Removal(version="3.18")
 public class DrawingTextBody {
     private final CTTextBody textBody;
 
index ec95bd1d55d3ddaf2e14259d298e7782033993dc..841cc2d3203f5631a82dae98ed0a3441dc91e49c 100644 (file)
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.util.Removal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;
 import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;
@@ -26,6 +27,10 @@ import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;
  * @author nick
  *
  */
+/*
+ * @deprecated POI 3.16 beta 1. use ??? instead
+ */
+@Removal(version="3.18")
 public class DrawingTextPlaceholder extends DrawingTextBody {
     private final CTPlaceholder placeholder;
 
index 15a62a833de6593ec6a995c04f4f40e022b67c85..2fd336543136f55da3a69bd6ebe919170f49969e 100644 (file)
@@ -25,6 +25,7 @@ import java.util.List;
 
 import org.apache.poi.POIXMLException;
 import org.apache.poi.util.Beta;
+import org.apache.poi.util.Removal;
 import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
@@ -38,6 +39,10 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFra
 import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
 
+/*
+ * @deprecated POI 3.16 beta 1. - iterate over the shapes of a slide instead
+ */
+@Removal(version="3.18")
 @Beta
 public class XSLFCommonSlideData {
     private final CTCommonSlideData data;
index 70ee99ccd34aa8f80a67895479998afbd44bd071..1edfff7ccb250ad6600fa5229fd5af3286194cad 100644 (file)
@@ -47,6 +47,7 @@ import org.apache.poi.sl.usermodel.Sheet;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData;
@@ -128,11 +129,19 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> {
      */
     public abstract XmlObject getXmlObject();
 
+    /*
+     * @deprecated POI 3.16 beta 1. use {@link XSLFTable} instead
+     */
+    @Removal(version="3.18")
     @Internal
     public XSLFCommonSlideData getCommonSlideData() {
        return _commonSlideData;
     }
 
+    /*
+     * @deprecated POI 3.16 beta 1. use {@link XSLFTable} instead
+     */
+    @Removal(version="3.18")
     protected void setCommonSlideData(CTCommonSlideData data) {
        if(data == null) {
           _commonSlideData = null;
@@ -550,7 +559,6 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> {
      * @param packagePart   package part containing the data to import
      * @return ID of the created relationship
      */
-    @SuppressWarnings("resource")
     String importBlip(String blipId, PackagePart packagePart) {
         PackageRelationship blipRel = packagePart.getRelationship(blipId);
         PackagePart blipPart;
@@ -573,7 +581,6 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> {
     /**
      * Import a package part into this sheet.
      */
-    @SuppressWarnings("resource")
     PackagePart importPart(PackageRelationship srcRel, PackagePart srcPafrt) {
         PackagePart destPP = getPackagePart();
         PackagePartName srcPPName = srcPafrt.getPartName();
index dcf8c1cb80b35666ffea400533627a08c76cdf9b..cd475fccedfe9b7e5be19f9905cff211a1db6b04 100644 (file)
@@ -51,6 +51,7 @@ import org.apache.poi.sl.usermodel.PictureData;
 import org.apache.poi.sl.usermodel.PictureData.PictureType;
 import org.apache.poi.sl.usermodel.ShapeType;
 import org.apache.poi.sl.usermodel.VerticalAlignment;
+import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
 import org.apache.poi.xslf.usermodel.DrawingParagraph;
 import org.apache.poi.xslf.usermodel.DrawingTextBody;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
@@ -252,14 +253,7 @@ public class TestXSLFBugs {
     }
     
     protected String getSlideText(XSLFSlide slide) {
-        StringBuffer text = new StringBuffer();
-        for(DrawingTextBody textBody : slide.getCommonSlideData().getDrawingText()) {
-            for (DrawingParagraph p : textBody.getParagraphs()) {
-                text.append(p.getText());
-                text.append("\n");
-            }
-        }
-        return text.toString();
+        return XSLFPowerPointExtractor.getText(slide, true, false, false);
     }
 
     @Test
index d3c7c97db74af27a36fd226152e9ac47482babe2..f76e084f976968dbbd08cecf79058fb88463b6ee 100644 (file)
@@ -97,21 +97,21 @@ public class TestXSLFPowerPointExtractor {
 
                // Just notes, no slides
                text = extractor.getText(false, true);
-               assertEquals("\n\n\n\n", text);
+               assertEquals("\n\n1\n\n\n2\n", text);
 
                // Both
                text = extractor.getText(true, true, false);
                String bothText =
                "Lorem ipsum dolor sit amet\n" +
             "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" +
-            "\n\n\n" +
+            "\n\n\n1\n" +
             "Lorem ipsum dolor sit amet\n" +
             "Lorem\n" +
             "ipsum\n" +
             "dolor\n" +
             "sit\n" +
             "amet\n" +
-            "\n\n\n";
+            "\n\n\n2\n";
         assertEquals(bothText, text);
 
                // With Slides and Master Text
@@ -134,22 +134,21 @@ public class TestXSLFPowerPointExtractor {
         String snmText =
             "Lorem ipsum dolor sit amet\n" +
             "Nunc at risus vel erat tempus posuere. Aenean non ante.\n" +
-            "\n" +
-            "\n\n" +
+            "\n\n\n1\n" +
             "Lorem ipsum dolor sit amet\n" +
             "Lorem\n" +
             "ipsum\n" +
             "dolor\n" +
             "sit\n" +
             "amet\n" +
-            "\n\n\n";
+            "\n\n\n2\n";
         assertEquals(snmText, text);
 
                // Via set defaults
                extractor.setSlidesByDefault(false);
                extractor.setNotesByDefault(true);
                text = extractor.getText();
-               assertEquals("\n\n\n\n", text);
+               assertEquals("\n\n1\n\n\n2\n", text);
 
                extractor.close();
                xmlA.close();