1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 package fvt.uno.sd.paragraph; 22 23 import junit.framework.Assert; 24 25 import org.junit.After; 26 import org.junit.Before; 27 import org.junit.Test; 28 import org.openoffice.test.common.FileUtil; 29 import org.openoffice.test.common.Testspace; 30 import org.openoffice.test.uno.UnoApp; 31 32 import testlib.uno.PageUtil; 33 import testlib.uno.ShapeUtil; 34 35 import com.sun.star.awt.Point; 36 import com.sun.star.awt.Size; 37 import com.sun.star.beans.PropertyValue; 38 import com.sun.star.beans.XPropertySet; 39 import com.sun.star.drawing.TextFitToSizeType; 40 import com.sun.star.drawing.XDrawPage; 41 import com.sun.star.drawing.XDrawPages; 42 import com.sun.star.drawing.XDrawPagesSupplier; 43 import com.sun.star.drawing.XShape; 44 import com.sun.star.drawing.XShapes; 45 import com.sun.star.frame.XStorable; 46 import com.sun.star.lang.XComponent; 47 import com.sun.star.lang.XMultiServiceFactory; 48 import com.sun.star.presentation.XPresentation; 49 import com.sun.star.presentation.XPresentationSupplier; 50 import com.sun.star.style.LineSpacing; 51 import com.sun.star.style.LineSpacingMode; 52 import com.sun.star.style.ParagraphAdjust; 53 import com.sun.star.text.ControlCharacter; 54 import com.sun.star.text.XText; 55 import com.sun.star.text.XTextCursor; 56 import com.sun.star.text.XTextRange; 57 import com.sun.star.uno.UnoRuntime; 58 59 public class ParagraphStyle { 60 XPresentationSupplier sdDocument = null; 61 XPresentation pre = null; 62 XComponent precomp = null; 63 XComponent impressDocument = null; 64 XComponent reLoadFile = null; 65 XDrawPagesSupplier drawsupplier = null; 66 XDrawPages drawpages = null; 67 XShapes xShapes = null; 68 XDrawPage xpage = null; 69 String filePath=null; 70 71 UnoApp unoApp = new UnoApp(); 72 73 /** 74 * @throws java.lang.Exception 75 */ 76 @Before setUp()77 public void setUp() throws Exception { 78 unoApp.start(); 79 createDocumentAndSlide(); 80 } 81 82 @After tearDown()83 public void tearDown() throws Exception { 84 unoApp.closeDocument(impressDocument); 85 unoApp.closeDocument(reLoadFile); 86 unoApp.close(); 87 } 88 89 @Test ParaStyle()90 public void ParaStyle() throws Exception { 91 Point po = new Point(5000, 5000); 92 xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage); 93 // create the shape 94 XShape xRectangle = ShapeUtil.createShape(impressDocument, po, new Size(21000, 12500), "com.sun.star.drawing.RectangleShape"); 95 xShapes.add(xRectangle); 96 XPropertySet xShapePropSet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xRectangle); 97 // TextFitToSize 98 xShapePropSet.setPropertyValue("TextFitToSize", TextFitToSizeType.PROPORTIONAL); 99 100 XPropertySet xTextPropSet1 = addPortion(xRectangle, "New text paragraph", true); 101 xTextPropSet1.setPropertyValue("ParaAdjust", ParagraphAdjust.CENTER); 102 103 //Line Spacing 104 LineSpacing xLineSpacing = new LineSpacing(LineSpacingMode.LEADING, (short)1); 105 xTextPropSet1.setPropertyValue("ParaLineSpacing", xLineSpacing); 106 107 //left, right, top and bottom margin 108 xTextPropSet1.setPropertyValue("ParaLeftMargin", 1000); 109 xTextPropSet1.setPropertyValue("ParaRightMargin", 1000); 110 xTextPropSet1.setPropertyValue("ParaTopMargin", 1000); 111 xTextPropSet1.setPropertyValue("ParaBottomMargin", 1000); 112 113 XPropertySet xTextPropSet2 = addPortion(xRectangle, "And another text paragraph", true); 114 xTextPropSet2.setPropertyValue("CharColor", new Integer(0xff0000)); 115 116 xRectangle = saveAndLoadShape(1, 0); 117 118 119 Assert.assertEquals("Paragraph Left Margin is 1000",1000, xTextPropSet1.getPropertyValue("ParaLeftMargin")); 120 Assert.assertEquals("Paragraph Right Margin is 1000", 1000,xTextPropSet1.getPropertyValue("ParaRightMargin")); 121 Assert.assertEquals("Paragraph Top Margin is 1000",1000, xTextPropSet1.getPropertyValue("ParaTopMargin") ); 122 Assert.assertEquals("Paragraph Bottom Margin is 1000 ",1000, xTextPropSet1.getPropertyValue("ParaBottomMargin")); 123 Assert.assertEquals("Text Color is red",0xff0000,xTextPropSet2.getPropertyValue("CharColor")); 124 125 } 126 127 createShape(XComponent xComponent, int x, int y, int width, int height, String sShapeType)128 public static XShape createShape(XComponent xComponent, int x, int y, 129 int width, int height, String sShapeType) 130 throws java.lang.Exception { 131 // query the document for the document-internal service factory 132 XMultiServiceFactory xFactory = (XMultiServiceFactory) UnoRuntime 133 .queryInterface(XMultiServiceFactory.class, xComponent); 134 135 // get the given Shape service from the factory 136 Object xObj = xFactory.createInstance(sShapeType); 137 Point aPos = new Point(x, y); 138 Size aSize = new Size(width, height); 139 140 // use its XShape interface to determine position and size before 141 // insertion 142 XShape xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xObj); 143 xShape.setPosition(aPos); 144 xShape.setSize(aSize); 145 return xShape; 146 } 147 addPortion(XShape xShape, String sText, boolean bNewParagraph)148 public static XPropertySet addPortion(XShape xShape, String sText, boolean bNewParagraph) 149 throws com.sun.star.lang.IllegalArgumentException { 150 XText xText = (XText)UnoRuntime.queryInterface(XText.class, xShape); 151 XTextCursor xTextCursor = xText.createTextCursor(); 152 xTextCursor.gotoEnd(false); 153 if (bNewParagraph) { 154 xText.insertControlCharacter(xTextCursor, ControlCharacter.PARAGRAPH_BREAK, false); 155 xTextCursor.gotoEnd(false); 156 } 157 XTextRange xTextRange = (XTextRange)UnoRuntime.queryInterface(XTextRange.class, xTextCursor); 158 xTextRange.setString(sText); 159 xTextCursor.gotoEnd(true); 160 XPropertySet xPropSet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xTextRange); 161 return xPropSet; 162 } 163 164 /** 165 * create a new presentation document and insert a new slide. 166 * 167 * @throws Exception 168 */ createDocumentAndSlide()169 public void createDocumentAndSlide() throws Exception { 170 impressDocument = (XComponent) UnoRuntime.queryInterface( 171 XComponent.class, unoApp.newDocument("simpress")); 172 drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( 173 XDrawPagesSupplier.class, impressDocument); 174 drawpages = drawsupplier.getDrawPages(); 175 drawpages.insertNewByIndex(1); 176 xpage = PageUtil.getDrawPageByIndex(impressDocument, 1); 177 } 178 179 /** 180 * Save presentation and reLoad the presentation and shape in it. 181 * 182 * @param po 183 * @param shapeType 184 * @return 185 * @throws Exception 186 */ saveAndLoadShape(int pageIndex, int shapeIndex)187 public XShape saveAndLoadShape(int pageIndex, int shapeIndex) throws Exception { 188 reLoadFile = saveAndReloadDoc(impressDocument, 189 "impress8", "odp"); 190 xShapes=ShapeUtil.getShapes(reLoadFile, pageIndex); 191 return (XShape) UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(shapeIndex)); 192 } 193 194 /** 195 * save and reload Presentation document. 196 * 197 * @param presentationDocument 198 * @param sFilter 199 * @param sExtension 200 * @return 201 * @throws Exception 202 */ saveAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)203 private XComponent saveAndReloadDoc(XComponent presentationDocument, 204 String sFilter, String sExtension) throws Exception { 205 filePath = Testspace.getPath("tmp/paragraphstyle." 206 + sExtension); 207 PropertyValue[] aStoreProperties = new PropertyValue[2]; 208 aStoreProperties[0] = new PropertyValue(); 209 aStoreProperties[1] = new PropertyValue(); 210 aStoreProperties[0].Name = "Override"; 211 aStoreProperties[0].Value = true; 212 aStoreProperties[1].Name = "FilterName"; 213 aStoreProperties[1].Value = sFilter; 214 XStorable xStorable = (XStorable) UnoRuntime.queryInterface( 215 XStorable.class, presentationDocument); 216 xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); 217 218 return (XComponent) UnoRuntime.queryInterface(XComponent.class, 219 unoApp.loadDocument(filePath)); 220 } 221 } 222