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.animation; 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 testlib.uno.ShapeUtil; 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski import com.sun.star.awt.Point; 35*b1cdbd2cSJim Jagielski import com.sun.star.awt.Size; 36*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 37*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 38*b1cdbd2cSJim Jagielski import com.sun.star.container.XIndexContainer; 39*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameContainer; 40*b1cdbd2cSJim Jagielski import com.sun.star.container.XNamed; 41*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPage; 42*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPages; 43*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPagesSupplier; 44*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShape; 45*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShapes; 46*b1cdbd2cSJim Jagielski import com.sun.star.frame.XStorable; 47*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 48*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory; 49*b1cdbd2cSJim Jagielski import com.sun.star.presentation.AnimationEffect; 50*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XCustomPresentationSupplier; 51*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentation; 52*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentationSupplier; 53*b1cdbd2cSJim Jagielski import com.sun.star.text.ControlCharacter; 54*b1cdbd2cSJim Jagielski import com.sun.star.text.XText; 55*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextCursor; 56*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextRange; 57*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski public class TextAnimation { 60*b1cdbd2cSJim Jagielski XPresentationSupplier sdDocument = null; 61*b1cdbd2cSJim Jagielski XPresentation pre = null; 62*b1cdbd2cSJim Jagielski XComponent precomp = null; 63*b1cdbd2cSJim Jagielski XComponent impressDocument = null; 64*b1cdbd2cSJim Jagielski XComponent reLoadFile = null; 65*b1cdbd2cSJim Jagielski XDrawPagesSupplier drawsupplier = null; 66*b1cdbd2cSJim Jagielski XDrawPages drawpages = null; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski String filePath = null; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski UnoApp unoApp = new UnoApp(); 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski /** 73*b1cdbd2cSJim Jagielski * @throws java.lang.Exception 74*b1cdbd2cSJim Jagielski */ 75*b1cdbd2cSJim Jagielski @Before setUp()76*b1cdbd2cSJim Jagielski public void setUp() throws Exception { 77*b1cdbd2cSJim Jagielski unoApp.start(); 78*b1cdbd2cSJim Jagielski createDocumentAndSlide(); 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski @After tearDown()82*b1cdbd2cSJim Jagielski public void tearDown() throws Exception { 83*b1cdbd2cSJim Jagielski unoApp.closeDocument(impressDocument); 84*b1cdbd2cSJim Jagielski unoApp.closeDocument(reLoadFile); 85*b1cdbd2cSJim Jagielski unoApp.close(); 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski @Test testTextAnimation()89*b1cdbd2cSJim Jagielski public void testTextAnimation() throws Exception { 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski XShapes xShapes; 92*b1cdbd2cSJim Jagielski XPropertySet xShapePropSet; 93*b1cdbd2cSJim Jagielski Point po = new Point(5000, 5000); 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski // create pages, so that three are available 96*b1cdbd2cSJim Jagielski drawpages.insertNewByIndex(0); 97*b1cdbd2cSJim Jagielski // get the shape container for page one 98*b1cdbd2cSJim Jagielski xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, 99*b1cdbd2cSJim Jagielski drawpages.getByIndex(0)); 100*b1cdbd2cSJim Jagielski // create a rectangle that is placed on the top left of the page 101*b1cdbd2cSJim Jagielski XShape xRectangle = ShapeUtil.createShape(impressDocument, po, 102*b1cdbd2cSJim Jagielski new Size(21000, 12500), "com.sun.star.drawing.RectangleShape"); 103*b1cdbd2cSJim Jagielski xShapes.add(xRectangle); 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski XPropertySet xTextPropSet = addPortion(xRectangle, "Text Animation", 106*b1cdbd2cSJim Jagielski false); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski xTextPropSet.setPropertyValue("TextEffect", 109*b1cdbd2cSJim Jagielski AnimationEffect.MOVE_FROM_RIGHT); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski saveAndLoadSlide(); 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski // assert if Text Animation is set 114*b1cdbd2cSJim Jagielski Assert.assertEquals("Text Animation Effect is MOVE_FROM_RIGHT", 115*b1cdbd2cSJim Jagielski AnimationEffect.MOVE_FROM_RIGHT, 116*b1cdbd2cSJim Jagielski xTextPropSet.getPropertyValue("TextEffect")); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski addPortion(XShape xShape, String sText, boolean bNewParagraph)120*b1cdbd2cSJim Jagielski public XPropertySet addPortion(XShape xShape, String sText, 121*b1cdbd2cSJim Jagielski boolean bNewParagraph) 122*b1cdbd2cSJim Jagielski throws com.sun.star.lang.IllegalArgumentException { 123*b1cdbd2cSJim Jagielski XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski XTextCursor xTextCursor = xText.createTextCursor(); 126*b1cdbd2cSJim Jagielski xTextCursor.gotoEnd(false); 127*b1cdbd2cSJim Jagielski if (bNewParagraph == true) { 128*b1cdbd2cSJim Jagielski xText.insertControlCharacter(xTextCursor, 129*b1cdbd2cSJim Jagielski ControlCharacter.PARAGRAPH_BREAK, false); 130*b1cdbd2cSJim Jagielski xTextCursor.gotoEnd(false); 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface( 133*b1cdbd2cSJim Jagielski XTextRange.class, xTextCursor); 134*b1cdbd2cSJim Jagielski xTextRange.setString(sText); 135*b1cdbd2cSJim Jagielski xTextCursor.gotoEnd(true); 136*b1cdbd2cSJim Jagielski XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( 137*b1cdbd2cSJim Jagielski XPropertySet.class, xText); 138*b1cdbd2cSJim Jagielski return xPropSet; 139*b1cdbd2cSJim Jagielski } 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski /** 142*b1cdbd2cSJim Jagielski * create a new presentation document and insert a new slide. 143*b1cdbd2cSJim Jagielski * 144*b1cdbd2cSJim Jagielski * @throws Exception 145*b1cdbd2cSJim Jagielski */ createDocumentAndSlide()146*b1cdbd2cSJim Jagielski public void createDocumentAndSlide() throws Exception { 147*b1cdbd2cSJim Jagielski impressDocument = (XComponent) UnoRuntime.queryInterface( 148*b1cdbd2cSJim Jagielski XComponent.class, unoApp.newDocument("simpress")); 149*b1cdbd2cSJim Jagielski drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( 150*b1cdbd2cSJim Jagielski XDrawPagesSupplier.class, impressDocument); 151*b1cdbd2cSJim Jagielski drawpages = drawsupplier.getDrawPages(); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface( 154*b1cdbd2cSJim Jagielski XPresentationSupplier.class, impressDocument); 155*b1cdbd2cSJim Jagielski pre = sdDocument.getPresentation(); 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski /** 159*b1cdbd2cSJim Jagielski * Save presentation and reLoad the slide. 160*b1cdbd2cSJim Jagielski * 161*b1cdbd2cSJim Jagielski * @param no 162*b1cdbd2cSJim Jagielski * @return void 163*b1cdbd2cSJim Jagielski * @throws Exception 164*b1cdbd2cSJim Jagielski */ saveAndLoadSlide()165*b1cdbd2cSJim Jagielski public void saveAndLoadSlide() throws Exception { 166*b1cdbd2cSJim Jagielski reLoadFile = saveAndReloadDoc(impressDocument, 167*b1cdbd2cSJim Jagielski "StarOffice XML (Impress)", "odp"); 168*b1cdbd2cSJim Jagielski drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( 169*b1cdbd2cSJim Jagielski XDrawPagesSupplier.class, reLoadFile); 170*b1cdbd2cSJim Jagielski drawpages = drawsupplier.getDrawPages(); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface( 173*b1cdbd2cSJim Jagielski XPresentationSupplier.class, reLoadFile); 174*b1cdbd2cSJim Jagielski pre = sdDocument.getPresentation(); 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski /** 178*b1cdbd2cSJim Jagielski * save and reload Presentation document. 179*b1cdbd2cSJim Jagielski * 180*b1cdbd2cSJim Jagielski * @param presentationDocument 181*b1cdbd2cSJim Jagielski * @param sFilter 182*b1cdbd2cSJim Jagielski * @param sExtension 183*b1cdbd2cSJim Jagielski * @return 184*b1cdbd2cSJim Jagielski * @throws Exception 185*b1cdbd2cSJim Jagielski */ saveAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)186*b1cdbd2cSJim Jagielski private XComponent saveAndReloadDoc(XComponent presentationDocument, 187*b1cdbd2cSJim Jagielski String sFilter, String sExtension) throws Exception { 188*b1cdbd2cSJim Jagielski filePath = Testspace.getPath("tmp/customshow." + sExtension); 189*b1cdbd2cSJim Jagielski PropertyValue[] aStoreProperties = new PropertyValue[2]; 190*b1cdbd2cSJim Jagielski aStoreProperties[0] = new PropertyValue(); 191*b1cdbd2cSJim Jagielski aStoreProperties[1] = new PropertyValue(); 192*b1cdbd2cSJim Jagielski aStoreProperties[0].Name = "Override"; 193*b1cdbd2cSJim Jagielski aStoreProperties[0].Value = true; 194*b1cdbd2cSJim Jagielski aStoreProperties[1].Name = "FilterName"; 195*b1cdbd2cSJim Jagielski aStoreProperties[1].Value = sFilter; 196*b1cdbd2cSJim Jagielski XStorable xStorable = (XStorable) UnoRuntime.queryInterface( 197*b1cdbd2cSJim Jagielski XStorable.class, presentationDocument); 198*b1cdbd2cSJim Jagielski xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski return (XComponent)UnoRuntime.queryInterface(XComponent.class, 201*b1cdbd2cSJim Jagielski unoApp.loadDocument(filePath)); 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski } 204