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