xref: /trunk/test/testuno/source/fvt/uno/sd/animation/CustomAnimation.java (revision de51bb974913f850f1fcb3f9223d11f8f1c098f2)
1 package fvt.uno.sd.animation;
2 
3 import junit.framework.Assert;
4 
5 import org.junit.After;
6 import org.junit.Before;
7 import org.junit.Test;
8 import org.openoffice.test.common.FileUtil;
9 import org.openoffice.test.common.Testspace;
10 import org.openoffice.test.uno.UnoApp;
11 
12 import testlib.uno.ShapeUtil;
13 
14 import com.sun.star.awt.Point;
15 import com.sun.star.awt.Size;
16 import com.sun.star.beans.PropertyValue;
17 import com.sun.star.beans.XPropertySet;
18 import com.sun.star.container.XIndexContainer;
19 import com.sun.star.container.XNameContainer;
20 import com.sun.star.container.XNamed;
21 import com.sun.star.drawing.XDrawPage;
22 import com.sun.star.drawing.XDrawPages;
23 import com.sun.star.drawing.XDrawPagesSupplier;
24 import com.sun.star.drawing.XShape;
25 import com.sun.star.drawing.XShapes;
26 import com.sun.star.frame.XStorable;
27 import com.sun.star.lang.XComponent;
28 import com.sun.star.lang.XSingleServiceFactory;
29 import com.sun.star.presentation.AnimationEffect;
30 import com.sun.star.presentation.XCustomPresentationSupplier;
31 import com.sun.star.presentation.XPresentation;
32 import com.sun.star.presentation.XPresentationSupplier;
33 import com.sun.star.table.XCell;
34 import com.sun.star.text.ControlCharacter;
35 import com.sun.star.text.XText;
36 import com.sun.star.text.XTextCursor;
37 import com.sun.star.text.XTextRange;
38 import com.sun.star.uno.UnoRuntime;
39 
40 public class CustomAnimation {
41     XPresentationSupplier sdDocument = null;
42     XPresentation pre = null;
43     XComponent precomp = null;
44     XComponent impressDocument = null;
45     XComponent reLoadFile = null;
46     XDrawPagesSupplier drawsupplier = null;
47     XDrawPages drawpages = null;
48 
49     String filePath = null;
50 
51     UnoApp unoApp = new UnoApp();
52 
53     /**
54      * @throws java.lang.Exception
55      */
56     @Before
57     public void setUp() throws Exception {
58         unoApp.start();
59         createDocumentAndSlide();
60     }
61 
62     @After
63     public void tearDown() throws Exception {
64         unoApp.closeDocument(impressDocument);
65         unoApp.closeDocument(reLoadFile);
66         unoApp.close();
67     }
68 
69     @Test
70     public void testShapeAnimation() throws Exception {
71 
72         XShapes xShapes = null;
73         XPropertySet xShapePropSet[] = new XPropertySet[23];
74 
75         drawpages.insertNewByIndex(0);
76 
77         String aNameArray[] = { "Page 1", "Page 2", "Page 3", "Page 4",
78                 "Page 5", "Page 6", "Page 7", "Page 8", "Page 9", "Page 10",
79                 "Page 11", "Page 12", "Page 13", "Page 14", "Page 15",
80                 "Page 16", "Page 17", "Page 18", "Page 19", "Page 20",
81                 "Page 21", "Page 22", "Page 23", };
82         AnimationEffect AnimationEffectArray[] = {
83                 AnimationEffect.NONE,
84                 AnimationEffect.FADE_FROM_LEFT,
85                 AnimationEffect.FADE_FROM_TOP,
86                 AnimationEffect.FADE_FROM_RIGHT,
87                 AnimationEffect.FADE_FROM_BOTTOM,
88                 AnimationEffect.FADE_TO_CENTER,
89                 AnimationEffect.FADE_FROM_CENTER,
90                 AnimationEffect.MOVE_FROM_LEFT,
91                 AnimationEffect.MOVE_FROM_TOP,
92                 AnimationEffect.MOVE_FROM_RIGHT,
93                 AnimationEffect.MOVE_FROM_BOTTOM,
94                 AnimationEffect.VERTICAL_STRIPES,
95                 AnimationEffect.HORIZONTAL_STRIPES,
96                 AnimationEffect.CLOCKWISE,
97                 AnimationEffect.COUNTERCLOCKWISE,
98                 AnimationEffect.FADE_FROM_UPPERLEFT,
99                 AnimationEffect.FADE_FROM_UPPERRIGHT,
100                 AnimationEffect.FADE_FROM_LOWERLEFT,
101                 AnimationEffect.FADE_FROM_LOWERRIGHT,
102                 AnimationEffect.CLOSE_VERTICAL,
103                 AnimationEffect.CLOSE_HORIZONTAL,
104                 AnimationEffect.OPEN_VERTICAL,
105                 AnimationEffect.OPEN_HORIZONTAL,
106                 AnimationEffect.PATH,
107 /*              AnimationEffect.MOVE_TO_LEFT,
108                 AnimationEffect.MOVE_TO_TOP,
109                 AnimationEffect.MOVE_TO_RIGHT,
110                 AnimationEffect.MOVE_TO_BOTTOM,
111                 AnimationEffect.SPIRALIN_LEFT,
112                 AnimationEffect.SPIRALIN_RIGHT,
113                 AnimationEffect.SPIRALOUT_LEFT,
114                 AnimationEffect.SPIRALOUT_RIGHT,
115                 AnimationEffect.DISSOLVE,
116                 AnimationEffect.WAVYLINE_FROM_LEFT,
117                 AnimationEffect.RANDOM,
118                 AnimationEffect.VERTICAL_LINES,
119                 AnimationEffect.LASER_FROM_LEFT,
120                 AnimationEffect.APPEAR,
121                 AnimationEffect.HIDE,
122                 AnimationEffect.MOVE_FROM_UPPERLEFT,
123                 AnimationEffect.VERTICAL_CHECKERBOARD,
124                 AnimationEffect.HORIZONTAL_ROTATE,
125                 AnimationEffect.VERTICAL_STRETCH,
126                 AnimationEffect.ZOOM_IN,
127                 AnimationEffect.ZOOM_OUT_FROM_LEFT, */
128                 };
129 
130         // insert  pages
131         while (drawpages.getCount() < aNameArray.length)
132             drawpages.insertNewByIndex(0);
133 
134         // add text shape to each page
135         for (int i = 0; i < aNameArray.length; i++) {
136             XDrawPage xDrawPage = (XDrawPage) UnoRuntime.queryInterface(
137                     XDrawPage.class, drawpages.getByIndex(i));
138             XNamed xPageName = (XNamed) UnoRuntime.queryInterface(XNamed.class,
139                     xDrawPage);
140             xPageName.setName(aNameArray[i]);
141 
142             xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class,
143                     drawpages.getByIndex(i));
144 
145             // create a rectangle that is placed on the top left of the page
146             xShapePropSet[i] = ShapeUtil.createAndInsertShape(impressDocument,
147                     xShapes, new Point(1000, 1000), new Size(5000, 5000),
148                     "com.sun.star.drawing.RectangleShape");
149         }
150 
151         for (int i = 0; i < aNameArray.length; i++) {
152             // set an object animation for each slide
153             xShapePropSet[i]
154                     .setPropertyValue("Effect", AnimationEffectArray[i]);
155         }
156 
157         // If this property and the property DimPrevious are both true, the shape is hidden on the next click after the AnimationEffect has finished.
158         xShapePropSet[1].setPropertyValue("DimHide", new Boolean(false));
159         // If true, this shape is painted using DimColor on the next click after finishing the AnimationEffect.
160         xShapePropSet[1].setPropertyValue("DimPrevious", new Boolean(true));
161         // his color is used to paint the shape on the next click after the animation effect has finished
162         xShapePropSet[1].setPropertyValue("DimColor", new Integer(0xff0000));
163         // the sound file specified in Sound is played while the animation effect is executed
164         xShapePropSet[1].setPropertyValue("SoundOn", new Boolean(false));
165         // the sound specified in the Sound property of this shape is played completely
166         xShapePropSet[1].setPropertyValue("PlayFull", new Boolean(false));
167 
168         saveAndLoadSlide();
169 
170         for (int i = 0; i < aNameArray.length; i++) {
171             // assert if Shape Animation is set
172             Assert.assertEquals(
173                     "Text Animation Effect is AnimationEffectArray[]",
174                     AnimationEffectArray[i],
175                     xShapePropSet[i].getPropertyValue("Effect"));
176         }
177         // assert if DimHide is false
178         Assert.assertEquals("Shape Animation DimHide is false", Boolean.FALSE,
179                 xShapePropSet[1].getPropertyValue("DimHide"));
180         // assert if DimPrevious is true
181         Assert.assertEquals("Shape Animation DimPrevious is true",
182                 Boolean.TRUE, xShapePropSet[1].getPropertyValue("DimPrevious"));
183         // assert if DimColor is red
184         Assert.assertEquals("Shape Animation DimColor is Red", 0xff0000,
185                 xShapePropSet[1].getPropertyValue("DimColor"));
186         // assert the sound file specified in Sound don't play while the
187         // animation effect is executed.
188         Assert.assertEquals("Shape SoundOn is false", Boolean.FALSE,
189                 xShapePropSet[1].getPropertyValue("SoundOn"));
190         // assert the sound specified in the Sound property of this shape is
191         // played completely
192         Assert.assertEquals("Shape PlayFull is false", Boolean.FALSE,
193                 xShapePropSet[1].getPropertyValue("PlayFull"));
194 
195     }
196 
197     public XPropertySet addPortion(XShape xShape, String sText,
198             boolean bNewParagraph)
199             throws com.sun.star.lang.IllegalArgumentException {
200         XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape);
201 
202         XTextCursor xTextCursor = xText.createTextCursor();
203         xTextCursor.gotoEnd(false);
204         if (bNewParagraph == true) {
205             xText.insertControlCharacter(xTextCursor,
206                     ControlCharacter.PARAGRAPH_BREAK, false);
207             xTextCursor.gotoEnd(false);
208         }
209         XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface(
210                 XTextRange.class, xTextCursor);
211         xTextRange.setString(sText);
212         xTextCursor.gotoEnd(true);
213         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
214                 XPropertySet.class, xText);
215         return xPropSet;
216     }
217 
218     /**
219      * create a new presentation document and insert a new slide.
220      *
221      * @throws Exception
222      */
223     public void createDocumentAndSlide() throws Exception {
224         impressDocument = (XComponent) UnoRuntime.queryInterface(
225                 XComponent.class, unoApp.newDocument("simpress"));
226         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
227                 XDrawPagesSupplier.class, impressDocument);
228         drawpages = drawsupplier.getDrawPages();
229 
230         sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface(
231                 XPresentationSupplier.class, impressDocument);
232         pre = sdDocument.getPresentation();
233     }
234 
235     /**
236      * Save presentation and reLoad the slide.
237      *
238      * @param no
239      * @return void
240      * @throws Exception
241      */
242     public void saveAndLoadSlide() throws Exception {
243         reLoadFile = saveAndReloadDoc(impressDocument,
244                 "StarOffice XML (Impress)", "odp");
245         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
246                 XDrawPagesSupplier.class, reLoadFile);
247         drawpages = drawsupplier.getDrawPages();
248 
249         sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface(
250                 XPresentationSupplier.class, reLoadFile);
251         pre = sdDocument.getPresentation();
252     }
253 
254     /**
255      * save and reload Presentation document.
256      *
257      * @param presentationDocument
258      * @param sFilter
259      * @param sExtension
260      * @return
261      * @throws Exception
262      */
263     private XComponent saveAndReloadDoc(XComponent presentationDocument,
264             String sFilter, String sExtension) throws Exception {
265         filePath = Testspace.getPath("tmp/shapeanimation." + sExtension);
266         PropertyValue[] aStoreProperties = new PropertyValue[2];
267         aStoreProperties[0] = new PropertyValue();
268         aStoreProperties[1] = new PropertyValue();
269         aStoreProperties[0].Name = "Override";
270         aStoreProperties[0].Value = true;
271         aStoreProperties[1].Name = "FilterName";
272         aStoreProperties[1].Value = sFilter;
273         XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
274                 XStorable.class, presentationDocument);
275         xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties);
276 
277         return (XComponent) UnoRuntime.queryInterface(XComponent.class,
278                 unoApp.loadDocument(filePath));
279     }
280 }
281