]> source.dussan.org Git - poi.git/commitdiff
#58206 - provide a mechanism to find slide layouts by name
authorAndreas Beeker <kiwiwings@apache.org>
Wed, 5 Aug 2015 22:46:42 +0000 (22:46 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Wed, 5 Aug 2015 22:46:42 +0000 (22:46 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1694340 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlideShow.java

index 453c1b1e28ee48edba10a1c3318a40c40ba41e2d..c024626d43df51813fb6a939a97b4f46949bd02f 100644 (file)
@@ -476,6 +476,24 @@ public class XMLSlideShow extends POIXMLDocument implements SlideShow {
         return null;
     }
 
+
+    /**
+     * Scan the master slides for the first slide layout with the given name.
+     *
+     * @param name  The layout name (case-insensitive). Cannot be null.
+     * @return the first layout found or null on failure
+     */
+    public XSLFSlideLayout findLayout(String name) {
+        for (XSLFSlideMaster master : getSlideMasters()) {
+            XSLFSlideLayout layout = master.getLayout(name);
+            if (layout != null) {
+                return layout;
+            }
+        }
+        return null;
+    }
+
+
     public XSLFTableStyles getTableStyles(){
         return _tableStyles;
     }
index 26b5dc0a03e57b90b2df339cf617855577995749..c1ed1bf0d9f4b39dc5440601dd677e234a9a9e54 100644 (file)
@@ -108,6 +108,13 @@ import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument;
         return getLayouts().values().toArray(new XSLFSlideLayout[_layouts.size()]);
     }
 
+    /**
+     * Get the slide layout by type.
+     *
+     * @param  type     The layout type. Cannot be null.
+     *
+     * @return the layout found or null on failure
+     */
     public XSLFSlideLayout getLayout(SlideLayout type){
         for(XSLFSlideLayout layout : getLayouts().values()){
             if(layout.getType() == type) {
@@ -117,6 +124,18 @@ import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument;
         return null;
     }
 
+    /**
+     * Get the slide layout by name.
+     *
+     * @param name  The layout name (case-insensitive). Cannot be null.
+     *
+     * @return the layout found or null on failure
+     */
+    public XSLFSlideLayout getLayout(String name) {
+        return getLayouts().get(name.toLowerCase());
+    }
+
+
     @Override
     public XSLFTheme getTheme(){
         if(_theme == null){
index 3d20be87eab208b816242237010a8034c1943669..0f0f0bc2274e63f2cb77c6d1f1ee189846b03a17 100644 (file)
 ==================================================================== */\r
 package org.apache.poi.xslf.usermodel;\r
 \r
-import static org.junit.Assert.*;\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertSame;\r
 \r
 import java.awt.Dimension;\r
+import java.io.IOException;\r
 import java.util.List;\r
 \r
 import org.apache.poi.POIXMLDocumentPart;\r
@@ -30,7 +33,7 @@ import org.junit.Test;
  */\r
 public class TestXSLFSlideShow {\r
     @Test\r
-    public void testCreateSlide(){\r
+    public void testCreateSlide() throws IOException {\r
         XMLSlideShow  ppt = new XMLSlideShow();\r
         assertEquals(0, ppt.getSlides().size());\r
 \r
@@ -50,13 +53,16 @@ public class TestXSLFSlideShow {
         assertSame(slide2, ppt.getSlides().get(0));\r
         assertSame(slide1, ppt.getSlides().get(1));\r
 \r
-        ppt = XSLFTestDataSamples.writeOutAndReadBack(ppt);\r
-        assertEquals(2, ppt.getSlides().size());\r
-        rels =  ppt.getSlides().get(0).getRelations();\r
+        XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt);\r
+        assertEquals(2, ppt2.getSlides().size());\r
+        rels =  ppt2.getSlides().get(0).getRelations();\r
+        \r
+        ppt2.close();\r
+        ppt.close();\r
     }\r
 \r
     @Test\r
-    public void testRemoveSlide(){\r
+    public void testRemoveSlide() throws IOException {\r
         XMLSlideShow  ppt = new XMLSlideShow();\r
         assertEquals(0, ppt.getSlides().size());\r
 \r
@@ -73,12 +79,15 @@ public class TestXSLFSlideShow {
         assertEquals(1, ppt.getSlides().size());\r
         assertSame(slide2, ppt.getSlides().get(0));\r
 \r
-        ppt = XSLFTestDataSamples.writeOutAndReadBack(ppt);\r
-        assertEquals(1, ppt.getSlides().size());\r
+        XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt);\r
+        assertEquals(1, ppt2.getSlides().size());\r
+        \r
+        ppt2.close();\r
+        ppt.close();\r
     }\r
 \r
     @Test\r
-    public void testDimension(){\r
+    public void testDimension() throws IOException {\r
         XMLSlideShow  ppt = new XMLSlideShow();\r
         Dimension sz = ppt.getPageSize();\r
         assertEquals(720, sz.width);\r
@@ -87,20 +96,22 @@ public class TestXSLFSlideShow {
         sz = ppt.getPageSize();\r
         assertEquals(792, sz.width);\r
         assertEquals(612, sz.height);\r
+        ppt.close();\r
     }\r
 \r
     @Test\r
-    public void testSlideMasters(){\r
+    public void testSlideMasters() throws IOException {\r
         XMLSlideShow  ppt = new XMLSlideShow();\r
         List<XSLFSlideMaster> masters = ppt.getSlideMasters();\r
         assertEquals(1, masters.size());\r
 \r
         XSLFSlide slide = ppt.createSlide();\r
         assertSame(masters.get(0), slide.getSlideMaster());\r
+        ppt.close();\r
     }\r
 \r
     @Test\r
-    public void testSlideLayout(){\r
+    public void testSlideLayout() throws IOException {\r
         XMLSlideShow  ppt = new XMLSlideShow();\r
         List<XSLFSlideMaster> masters = ppt.getSlideMasters();\r
         assertEquals(1, masters.size());\r
@@ -110,5 +121,29 @@ public class TestXSLFSlideShow {
         assertNotNull(layout);\r
 \r
         assertSame(masters.get(0), layout.getSlideMaster());\r
+        ppt.close();\r
+    }\r
+\r
+    @Test\r
+    public void testSlideLayoutNames() throws IOException {\r
+        final String names[] = {\r
+              "Blank", "Title Only", "Section Header", "Picture with Caption", "Title and Content"\r
+            , "Title Slide", "Title and Vertical Text", "Vertical Title and Text", "Comparison"\r
+            , "Two Content", "Content with Caption"                \r
+        };\r
+        XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("layouts.pptx");\r
+        for (String name : names) {\r
+            assertNotNull(ppt.findLayout(name));\r
+        }\r
+        final SlideLayout layTypes[] = {\r
+              SlideLayout.BLANK, SlideLayout.TITLE_ONLY, SlideLayout.SECTION_HEADER\r
+            , SlideLayout.PIC_TX, SlideLayout.TITLE_AND_CONTENT, SlideLayout.TITLE\r
+            , SlideLayout.VERT_TX, SlideLayout.VERT_TITLE_AND_TX, SlideLayout.TWO_TX_TWO_OBJ\r
+            , SlideLayout.TWO_OBJ, SlideLayout.OBJ_TX                \r
+        };\r
+        for (SlideLayout sl : layTypes){\r
+            assertNotNull(ppt.getSlideMasters().get(0).getLayout(sl));\r
+        }\r
+        ppt.close();\r
     }\r
 }\r