1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski package fvt.uno.sd.slideshow; 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski import junit.framework.Assert; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import org.junit.After; 26*b1cdbd2cSJim Jagielski import org.junit.Before; 27*b1cdbd2cSJim Jagielski import org.junit.Test; 28*b1cdbd2cSJim Jagielski import org.openoffice.test.common.FileUtil; 29*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace; 30*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski import com.sun.star.awt.Point; 33*b1cdbd2cSJim Jagielski import com.sun.star.awt.Size; 34*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 35*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 36*b1cdbd2cSJim Jagielski import com.sun.star.container.XIndexContainer; 37*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameContainer; 38*b1cdbd2cSJim Jagielski import com.sun.star.container.XNamed; 39*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPage; 40*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPages; 41*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPagesSupplier; 42*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShape; 43*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShapes; 44*b1cdbd2cSJim Jagielski import com.sun.star.frame.XStorable; 45*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 46*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory; 47*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XCustomPresentationSupplier; 48*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentation; 49*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentationSupplier; 50*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski import testlib.uno.ShapeUtil; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski public class CustomShow { 55*b1cdbd2cSJim Jagielski XPresentationSupplier sdDocument = null; 56*b1cdbd2cSJim Jagielski XPresentation pre = null; 57*b1cdbd2cSJim Jagielski XComponent precomp = null; 58*b1cdbd2cSJim Jagielski XComponent impressDocument = null; 59*b1cdbd2cSJim Jagielski XComponent reLoadFile = null; 60*b1cdbd2cSJim Jagielski XDrawPagesSupplier drawsupplier = null; 61*b1cdbd2cSJim Jagielski XDrawPages drawpages = null; 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski String filePath = null; 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski UnoApp unoApp = new UnoApp(); 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski /** 68*b1cdbd2cSJim Jagielski * @throws java.lang.Exception 69*b1cdbd2cSJim Jagielski */ 70*b1cdbd2cSJim Jagielski @Before setUp()71*b1cdbd2cSJim Jagielski public void setUp() throws Exception { 72*b1cdbd2cSJim Jagielski unoApp.start(); 73*b1cdbd2cSJim Jagielski createDocumentAndSlide(); 74*b1cdbd2cSJim Jagielski } 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski @After tearDown()77*b1cdbd2cSJim Jagielski public void tearDown() throws Exception { 78*b1cdbd2cSJim Jagielski unoApp.closeDocument(impressDocument); 79*b1cdbd2cSJim Jagielski unoApp.closeDocument(reLoadFile); 80*b1cdbd2cSJim Jagielski unoApp.close(); 81*b1cdbd2cSJim Jagielski } 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski @Test testCustomShow()84*b1cdbd2cSJim Jagielski public void testCustomShow() throws Exception { 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski String aNameArray[] = { "Page 1", "Page 2", "Page 3", "Page 4", "Page 5"}; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski //insert five pages 89*b1cdbd2cSJim Jagielski while (drawpages.getCount() < aNameArray.length) 90*b1cdbd2cSJim Jagielski drawpages.insertNewByIndex(0); 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski //add text shape to each page 93*b1cdbd2cSJim Jagielski for (int i = 0; i < aNameArray.length; i++) { 94*b1cdbd2cSJim Jagielski XDrawPage xDrawPage = (XDrawPage) UnoRuntime.queryInterface( 95*b1cdbd2cSJim Jagielski XDrawPage.class, drawpages.getByIndex(i)); 96*b1cdbd2cSJim Jagielski XNamed xPageName = (XNamed) UnoRuntime.queryInterface(XNamed.class, 97*b1cdbd2cSJim Jagielski xDrawPage); 98*b1cdbd2cSJim Jagielski xPageName.setName(aNameArray[i]); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski XShape xTextObj = ShapeUtil.createShape(impressDocument, new Point( 101*b1cdbd2cSJim Jagielski 10000, 9000), new Size(10000, 5000), 102*b1cdbd2cSJim Jagielski "com.sun.star.drawing.TextShape"); 103*b1cdbd2cSJim Jagielski XShapes xShapes = (XShapes) UnoRuntime.queryInterface( 104*b1cdbd2cSJim Jagielski XShapes.class, xDrawPage); 105*b1cdbd2cSJim Jagielski xShapes.add(xTextObj); 106*b1cdbd2cSJim Jagielski ShapeUtil.addPortion(xTextObj, aNameArray[i], true); 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski //create two custom shows 111*b1cdbd2cSJim Jagielski //one will play slide 3 to 5 and is named "Part" 112*b1cdbd2cSJim Jagielski //the other one will play slide 1 t0 5 and is named "All" 113*b1cdbd2cSJim Jagielski XCustomPresentationSupplier xCustPresSupplier = (XCustomPresentationSupplier) UnoRuntime 114*b1cdbd2cSJim Jagielski .queryInterface(XCustomPresentationSupplier.class, impressDocument); 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski // the following container is a container for further container which 118*b1cdbd2cSJim Jagielski // includes the list of pages that are to play within a custom show 119*b1cdbd2cSJim Jagielski XNameContainer xNameContainer = xCustPresSupplier 120*b1cdbd2cSJim Jagielski .getCustomPresentations(); 121*b1cdbd2cSJim Jagielski XSingleServiceFactory xFactory = (XSingleServiceFactory) UnoRuntime 122*b1cdbd2cSJim Jagielski .queryInterface(XSingleServiceFactory.class, xNameContainer); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski Object xObj; 125*b1cdbd2cSJim Jagielski XIndexContainer xContainer; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski //instantiate an IndexContainer that will take a list of draw pages for 128*b1cdbd2cSJim Jagielski //the first custom show 129*b1cdbd2cSJim Jagielski xObj = xFactory.createInstance(); 130*b1cdbd2cSJim Jagielski xContainer = (XIndexContainer) UnoRuntime.queryInterface( 131*b1cdbd2cSJim Jagielski XIndexContainer.class, xObj); 132*b1cdbd2cSJim Jagielski for (int i = 3; i < 5; i++) 133*b1cdbd2cSJim Jagielski xContainer.insertByIndex(xContainer.getCount(), 134*b1cdbd2cSJim Jagielski drawpages.getByIndex(i)); 135*b1cdbd2cSJim Jagielski xNameContainer.insertByName("Part", xContainer); 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski //instantiate an IndexContainer that will take a list of draw page for 139*b1cdbd2cSJim Jagielski //the second custom show 140*b1cdbd2cSJim Jagielski xObj = xFactory.createInstance(); 141*b1cdbd2cSJim Jagielski xContainer = (XIndexContainer) UnoRuntime.queryInterface( 142*b1cdbd2cSJim Jagielski XIndexContainer.class, xObj); 143*b1cdbd2cSJim Jagielski for (int i = 1; i < 5; i++) 144*b1cdbd2cSJim Jagielski xContainer.insertByIndex(xContainer.getCount(), 145*b1cdbd2cSJim Jagielski drawpages.getByIndex(i)); 146*b1cdbd2cSJim Jagielski xNameContainer.insertByName("All", xContainer); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski //set which custom show is to used 150*b1cdbd2cSJim Jagielski XPresentationSupplier xPresSupplier = (XPresentationSupplier) UnoRuntime 151*b1cdbd2cSJim Jagielski .queryInterface(XPresentationSupplier.class, impressDocument); 152*b1cdbd2cSJim Jagielski XPresentation xPresentation = xPresSupplier.getPresentation(); 153*b1cdbd2cSJim Jagielski XPropertySet xPresPropSet = (XPropertySet) UnoRuntime.queryInterface( 154*b1cdbd2cSJim Jagielski XPropertySet.class, xPresentation); 155*b1cdbd2cSJim Jagielski xPresPropSet.setPropertyValue("CustomShow", "Part"); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski saveAndLoadSlide(); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski //assert if custom show is set 160*b1cdbd2cSJim Jagielski Assert.assertEquals("Set Part as CustomSHow", xPresPropSet.getPropertyValue("CustomShow"), "Part"); 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski /** 164*b1cdbd2cSJim Jagielski * create a new presentation document and insert a new slide. 165*b1cdbd2cSJim Jagielski * 166*b1cdbd2cSJim Jagielski * @throws Exception 167*b1cdbd2cSJim Jagielski */ createDocumentAndSlide()168*b1cdbd2cSJim Jagielski public void createDocumentAndSlide() throws Exception { 169*b1cdbd2cSJim Jagielski impressDocument = (XComponent) UnoRuntime.queryInterface( 170*b1cdbd2cSJim Jagielski XComponent.class, unoApp.newDocument("simpress")); 171*b1cdbd2cSJim Jagielski drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( 172*b1cdbd2cSJim Jagielski XDrawPagesSupplier.class, impressDocument); 173*b1cdbd2cSJim Jagielski drawpages = drawsupplier.getDrawPages(); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface( 176*b1cdbd2cSJim Jagielski XPresentationSupplier.class, impressDocument); 177*b1cdbd2cSJim Jagielski pre = sdDocument.getPresentation(); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski /** 181*b1cdbd2cSJim Jagielski * Save presentation and reLoad the slide. 182*b1cdbd2cSJim Jagielski * 183*b1cdbd2cSJim Jagielski * @param no 184*b1cdbd2cSJim Jagielski * @return void 185*b1cdbd2cSJim Jagielski * @throws Exception 186*b1cdbd2cSJim Jagielski */ saveAndLoadSlide()187*b1cdbd2cSJim Jagielski public void saveAndLoadSlide() throws Exception { 188*b1cdbd2cSJim Jagielski reLoadFile = saveAndReloadDoc(impressDocument, 189*b1cdbd2cSJim Jagielski "StarOffice XML (Impress)", "odp"); 190*b1cdbd2cSJim Jagielski drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( 191*b1cdbd2cSJim Jagielski XDrawPagesSupplier.class, reLoadFile); 192*b1cdbd2cSJim Jagielski drawpages = drawsupplier.getDrawPages(); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface( 195*b1cdbd2cSJim Jagielski XPresentationSupplier.class, reLoadFile); 196*b1cdbd2cSJim Jagielski pre = sdDocument.getPresentation(); 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski /** 200*b1cdbd2cSJim Jagielski * save and reload Presentation document. 201*b1cdbd2cSJim Jagielski * 202*b1cdbd2cSJim Jagielski * @param presentationDocument 203*b1cdbd2cSJim Jagielski * @param sFilter 204*b1cdbd2cSJim Jagielski * @param sExtension 205*b1cdbd2cSJim Jagielski * @return 206*b1cdbd2cSJim Jagielski * @throws Exception 207*b1cdbd2cSJim Jagielski */ saveAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)208*b1cdbd2cSJim Jagielski private XComponent saveAndReloadDoc(XComponent presentationDocument, 209*b1cdbd2cSJim Jagielski String sFilter, String sExtension) throws Exception { 210*b1cdbd2cSJim Jagielski filePath = Testspace.getPath("tmp/customshow." + sExtension); 211*b1cdbd2cSJim Jagielski PropertyValue[] aStoreProperties = new PropertyValue[2]; 212*b1cdbd2cSJim Jagielski aStoreProperties[0] = new PropertyValue(); 213*b1cdbd2cSJim Jagielski aStoreProperties[1] = new PropertyValue(); 214*b1cdbd2cSJim Jagielski aStoreProperties[0].Name = "Override"; 215*b1cdbd2cSJim Jagielski aStoreProperties[0].Value = true; 216*b1cdbd2cSJim Jagielski aStoreProperties[1].Name = "FilterName"; 217*b1cdbd2cSJim Jagielski aStoreProperties[1].Value = sFilter; 218*b1cdbd2cSJim Jagielski XStorable xStorable = (XStorable) UnoRuntime.queryInterface( 219*b1cdbd2cSJim Jagielski XStorable.class, presentationDocument); 220*b1cdbd2cSJim Jagielski xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski return (XComponent) UnoRuntime.queryInterface(XComponent.class, 223*b1cdbd2cSJim Jagielski unoApp.loadDocument(filePath)); 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski } 226