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.textbox;
22 
23 import static org.junit.Assert.assertEquals;
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 import testlib.uno.TestUtil;
35 
36 import com.sun.star.awt.Gradient;
37 import com.sun.star.awt.GradientStyle;
38 import com.sun.star.awt.Point;
39 import com.sun.star.awt.Size;
40 import com.sun.star.beans.PropertyValue;
41 import com.sun.star.beans.XPropertySet;
42 import com.sun.star.drawing.FillStyle;
43 import com.sun.star.drawing.Hatch;
44 import com.sun.star.drawing.HatchStyle;
45 import com.sun.star.drawing.TextVerticalAdjust;
46 import com.sun.star.drawing.XDrawPage;
47 import com.sun.star.drawing.XDrawPages;
48 import com.sun.star.drawing.XDrawPagesSupplier;
49 import com.sun.star.drawing.XShape;
50 import com.sun.star.drawing.XShapes;
51 import com.sun.star.frame.XStorable;
52 import com.sun.star.lang.XComponent;
53 import com.sun.star.presentation.XPresentation;
54 import com.sun.star.presentation.XPresentationSupplier;
55 import com.sun.star.uno.UnoRuntime;
56 
57 public class FillProperties {
58 	UnoApp unoApp = new UnoApp();
59 	XPresentationSupplier sdDocument = null;
60 	XPresentation pre = null;
61 	XComponent precomp = null;
62 	XComponent impressDocument = null;
63 	XComponent reLoadFile = null;
64 	XDrawPagesSupplier drawsupplier = null;
65 	XDrawPages drawpages = null;
66 	XShapes xShapes = null;
67 	XDrawPage xpage = null;
68 	String filePath = null;
69 
70 	@Before
setUp()71 	public void setUp() throws Exception {
72 		unoApp.start();
73 		createDocumentAndSlide();
74 	}
75 
76 	@After
tearDown()77 	public void tearDown() throws Exception {
78 		unoApp.closeDocument(impressDocument);
79 		unoApp.closeDocument(reLoadFile);
80 		unoApp.close();
81 		 if (filePath != null)
82 		 FileUtil.deleteFile(filePath);
83 	}
84 
85 	/**
86 	 * test Insert text to an Textbox
87 	 *
88 	 * @throws Exception
89 	 */
90 	@Test
testInsertTextToTextbox()91 	public void testInsertTextToTextbox() throws Exception {
92 		Point po = new Point(1000, 8000);
93 		xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
94 		XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
95 				5000, 5000), "com.sun.star.drawing.TextShape");
96 		xShapes.add(xShape);
97 		xShape = saveAndLoadShape(1, 0);
98 		ShapeUtil.addPortion(xShape, "test", false);
99 		assertEquals("Not put text correctly", "test",
100 				ShapeUtil.getPortion(xShape));
101 	}
102 
103 	/**
104 	 * test textbox fill with Gradient
105 	 *
106 	 * @throws Exception
107 	 */
108 	@Test
testFillGradient()109 	public void testFillGradient() throws Exception {
110 		Point po = new Point(1000, 8000);
111 		xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
112 		XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
113 				5000, 5000), "com.sun.star.drawing.TextShape");
114 		xShapes.add(xShape);
115 		ShapeUtil.addPortion(xShape, "test", false);
116 		XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
117 				XPropertySet.class, xShape);
118 		xPropSet.setPropertyValue("FillStyle", FillStyle.GRADIENT);
119 		Gradient aGradient = new Gradient();
120 		aGradient.Style = GradientStyle.LINEAR;
121 		aGradient.StartColor = 0x00ff00;
122 		aGradient.EndColor = 0xffff00;
123 		aGradient.Angle = 450;
124 		aGradient.Border = 0;
125 		aGradient.XOffset = 0;
126 		aGradient.YOffset = 0;
127 		aGradient.StartIntensity = 100;
128 		aGradient.EndIntensity = 100;
129 		aGradient.StepCount = 10;
130 		xPropSet.setPropertyValue("FillGradient", aGradient);
131 		// --------------------------
132 		xShape = saveAndLoadShape(1, 0);
133 		xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
134 				xShape);
135 		// ----------------------------
136 		assertEquals("Not Gradient Fill Style", FillStyle.GRADIENT,
137 				xPropSet.getPropertyValue("FillStyle"));
138 		aGradient = (Gradient) xPropSet.getPropertyValue("FillGradient");
139 		assertEquals("Not Linear Gradient", GradientStyle.LINEAR,
140 				aGradient.Style);
141 	}
142 
143 	/**
144 	 * test textbox fill with yellow color
145 	 *
146 	 * @throws Exception
147 	 */
148 	@Test
testFillColor()149 	public void testFillColor() throws Exception {
150 		Point po = new Point(1000, 8000);
151 		xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
152 		XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
153 				5000, 5000), "com.sun.star.drawing.TextShape");
154 		xShapes.add(xShape);
155 		ShapeUtil.addPortion(xShape, "test", false);
156 		XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
157 				XPropertySet.class, xShape);
158 		xPropSet.setPropertyValue("FillStyle", FillStyle.SOLID);
159 		xPropSet.setPropertyValue("FillColor", 0xffff00);
160 		// --------------------------
161 		xShape = saveAndLoadShape(1, 0);
162 		xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
163 				xShape);
164 		// ----------------------------------------------------
165 		assertEquals("Not Color Fill Style", FillStyle.SOLID,
166 				xPropSet.getPropertyValue("FillStyle"));
167 		assertEquals("Not Yellow Color Fill", 0xffff00,
168 				xPropSet.getPropertyValue("FillColor"));
169 	}
170 
171 	/**
172 	 * test textbox fill with Hatch Style(Pattern in MS)
173 	 *
174 	 * @throws Exception
175 	 */
176 	@Test
testFillHatch()177 	public void testFillHatch() throws Exception {
178 		Point po = new Point(1000, 8000);
179 		xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
180 		XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
181 				5000, 5000), "com.sun.star.drawing.TextShape");
182 		xShapes.add(xShape);
183 		ShapeUtil.addPortion(xShape, "test", false);
184 		XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
185 				XPropertySet.class, xShape);
186 		xPropSet.setPropertyValue("FillStyle", FillStyle.HATCH);
187 		Hatch aHatch = new Hatch();
188 		aHatch.Style = HatchStyle.DOUBLE;
189 		aHatch.Color = 0x00ff00;
190 		aHatch.Distance = 100;
191 		aHatch.Angle = 450;
192 		xPropSet.setPropertyValue("FillHatch", aHatch);
193 
194 		// --------------------------
195 		xShape = saveAndLoadShape(1, 0);
196 		xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
197 				xShape);
198 		// ----------------------------
199 		assertEquals("Not Gradient Fill Style", FillStyle.HATCH,
200 				xPropSet.getPropertyValue("FillStyle"));
201 		aHatch = (Hatch) xPropSet.getPropertyValue("FillHatch");
202 		assertEquals("Not Double Hatch", HatchStyle.DOUBLE, aHatch.Style);
203 	}
204 
205 	/**
206 	 * create a new presentation document and insert a new slide.
207 	 *
208 	 * @throws Exception
209 	 */
createDocumentAndSlide()210 	public void createDocumentAndSlide() throws Exception {
211 		impressDocument = (XComponent) UnoRuntime.queryInterface(
212 				XComponent.class, unoApp.newDocument("simpress"));
213 		drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
214 				XDrawPagesSupplier.class, impressDocument);
215 		drawpages = drawsupplier.getDrawPages();
216 		drawpages.insertNewByIndex(1);
217 		xpage = PageUtil.getDrawPageByIndex(impressDocument, 1);
218 	}
219 
220 	/**
221 	 * Save presentation and reLoad the presentation and shape in it.
222 	 *
223 	 * @param po
224 	 * @param shapeType
225 	 * @return
226 	 * @throws Exception
227 	 */
saveAndLoadShape(int pageIndex, int shapeIndex)228 	public XShape saveAndLoadShape(int pageIndex, int shapeIndex)
229 			throws Exception {
230 		reLoadFile = saveAndReloadDoc(impressDocument, "impress8", "odp");
231 		xShapes = ShapeUtil.getShapes(reLoadFile, pageIndex);
232 		return (XShape) UnoRuntime.queryInterface(XShape.class,
233 				xShapes.getByIndex(shapeIndex));
234 	}
235 
236 	/**
237 	 * save and reload Presentation document.
238 	 *
239 	 * @param presentationDocument
240 	 * @param sFilter
241 	 * @param sExtension
242 	 * @return
243 	 * @throws Exception
244 	 */
saveAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)245 	private XComponent saveAndReloadDoc(XComponent presentationDocument,
246 			String sFilter, String sExtension) throws Exception {
247 		filePath = Testspace.getPath("tmp/textboxfill." + sExtension);
248 		PropertyValue[] aStoreProperties = new PropertyValue[2];
249 		aStoreProperties[0] = new PropertyValue();
250 		aStoreProperties[1] = new PropertyValue();
251 		aStoreProperties[0].Name = "Override";
252 		aStoreProperties[0].Value = true;
253 		aStoreProperties[1].Name = "FilterName";
254 		aStoreProperties[1].Value = sFilter;
255 		XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
256 				XStorable.class, presentationDocument);
257 		xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties);
258 
259 		return (XComponent) UnoRuntime.queryInterface(XComponent.class,
260 				unoApp.loadDocument(filePath));
261 	}
262 }
263