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