1*f331e23fSHerbert Dürr /**************************************************************
2*f331e23fSHerbert Dürr  *
3*f331e23fSHerbert Dürr  * Licensed to the Apache Software Foundation (ASF) under one
4*f331e23fSHerbert Dürr  * or more contributor license agreements.  See the NOTICE file
5*f331e23fSHerbert Dürr  * distributed with this work for additional information
6*f331e23fSHerbert Dürr  * regarding copyright ownership.  The ASF licenses this file
7*f331e23fSHerbert Dürr  * to you under the Apache License, Version 2.0 (the
8*f331e23fSHerbert Dürr  * "License"); you may not use this file except in compliance
9*f331e23fSHerbert Dürr  * with the License.  You may obtain a copy of the License at
10*f331e23fSHerbert Dürr  *
11*f331e23fSHerbert Dürr  *   http://www.apache.org/licenses/LICENSE-2.0
12*f331e23fSHerbert Dürr  *
13*f331e23fSHerbert Dürr  * Unless required by applicable law or agreed to in writing,
14*f331e23fSHerbert Dürr  * software distributed under the License is distributed on an
15*f331e23fSHerbert Dürr  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f331e23fSHerbert Dürr  * KIND, either express or implied.  See the License for the
17*f331e23fSHerbert Dürr  * specific language governing permissions and limitations
18*f331e23fSHerbert Dürr  * under the License.
19*f331e23fSHerbert Dürr  *
20*f331e23fSHerbert Dürr  *************************************************************/
21*f331e23fSHerbert Dürr /*
22*f331e23fSHerbert Dürr  * Select a external picture from a file as graphic bullet
23*f331e23fSHerbert Dürr  * */
24*f331e23fSHerbert Dürr package fvt.uno.sd.bullet;
25*f331e23fSHerbert Dürr import static org.junit.Assert.*;
26*f331e23fSHerbert Dürr import static org.openoffice.test.common.Testspace.prepareData;
27*f331e23fSHerbert Dürr import static testlib.uno.PageUtil.getDrawPageByIndex;
28*f331e23fSHerbert Dürr import static testlib.uno.ShapeUtil.addPortion;
29*f331e23fSHerbert Dürr import static testlib.uno.ShapeUtil.getPortion;
30*f331e23fSHerbert Dürr import static testlib.uno.GraphicUtil.getUniqueIDOfGraphicFile;
31*f331e23fSHerbert Dürr 
32*f331e23fSHerbert Dürr import java.io.File;
33*f331e23fSHerbert Dürr 
34*f331e23fSHerbert Dürr import org.junit.After;
35*f331e23fSHerbert Dürr import org.junit.AfterClass;
36*f331e23fSHerbert Dürr import org.junit.Before;
37*f331e23fSHerbert Dürr import org.junit.BeforeClass;
38*f331e23fSHerbert Dürr import org.junit.Test;
39*f331e23fSHerbert Dürr import org.openoffice.test.uno.UnoApp;
40*f331e23fSHerbert Dürr import org.openoffice.test.common.FileUtil;
41*f331e23fSHerbert Dürr import org.openoffice.test.common.Testspace;
42*f331e23fSHerbert Dürr 
43*f331e23fSHerbert Dürr import testlib.uno.SDUtil;
44*f331e23fSHerbert Dürr 
45*f331e23fSHerbert Dürr import com.sun.star.awt.Size;
46*f331e23fSHerbert Dürr import com.sun.star.beans.PropertyValue;
47*f331e23fSHerbert Dürr import com.sun.star.beans.XPropertySet;
48*f331e23fSHerbert Dürr import com.sun.star.container.XIndexReplace;
49*f331e23fSHerbert Dürr import com.sun.star.drawing.XDrawPage;
50*f331e23fSHerbert Dürr import com.sun.star.drawing.XShape;
51*f331e23fSHerbert Dürr import com.sun.star.lang.XComponent;
52*f331e23fSHerbert Dürr import com.sun.star.style.NumberingType;
53*f331e23fSHerbert Dürr import com.sun.star.uno.UnoRuntime;
54*f331e23fSHerbert Dürr 
55*f331e23fSHerbert Dürr public class GraphicBulletFromFile {
56*f331e23fSHerbert Dürr 
57*f331e23fSHerbert Dürr 	private static final UnoApp app = new UnoApp();
58*f331e23fSHerbert Dürr 
59*f331e23fSHerbert Dürr 	private XComponent m_xSDComponent = null;
60*f331e23fSHerbert Dürr 	private String m_filePath = null;
61*f331e23fSHerbert Dürr 	private XPropertySet m_xtextProps = null;
62*f331e23fSHerbert Dürr 	private String m_GraphicPath = null;
63*f331e23fSHerbert Dürr 
64*f331e23fSHerbert Dürr 	@Before
setUpDocument()65*f331e23fSHerbert Dürr 	public void setUpDocument() throws Exception {
66*f331e23fSHerbert Dürr 		m_filePath = Testspace.getPath("temp/GraphicBulletFromFile.odp");
67*f331e23fSHerbert Dürr 		String abslotePath = prepareData("uno/sd/36.gif");
68*f331e23fSHerbert Dürr 		m_GraphicPath = FileUtil.getUrl(new File(abslotePath));
69*f331e23fSHerbert Dürr //		m_GraphicPath = "file:///F:/work/36.gif";
70*f331e23fSHerbert Dürr 		if (FileUtil.fileExists(m_filePath)) {//load
71*f331e23fSHerbert Dürr 			m_xtextProps = load();
72*f331e23fSHerbert Dürr 		} else {//new
73*f331e23fSHerbert Dürr 			m_xSDComponent = (XComponent) UnoRuntime.queryInterface(
74*f331e23fSHerbert Dürr 					XComponent.class, app.newDocument("simpress"));
75*f331e23fSHerbert Dürr 			Object firstPage = getDrawPageByIndex(m_xSDComponent, 0);
76*f331e23fSHerbert Dürr 			Object firstTextBox = SDUtil.getShapeOfPageByIndex(firstPage, 0);
77*f331e23fSHerbert Dürr 			XShape xfirstTextBox = (XShape)UnoRuntime.queryInterface(XShape.class, firstTextBox);
78*f331e23fSHerbert Dürr 			m_xtextProps = addPortion(xfirstTextBox, "test Graphic Bullet From a File", false);
79*f331e23fSHerbert Dürr 		}
80*f331e23fSHerbert Dürr 	}
81*f331e23fSHerbert Dürr 
load()82*f331e23fSHerbert Dürr 	private XPropertySet load() throws Exception{
83*f331e23fSHerbert Dürr 		m_xSDComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class,
84*f331e23fSHerbert Dürr 				app.loadDocument(m_filePath));
85*f331e23fSHerbert Dürr 		Object firstPage = getDrawPageByIndex(m_xSDComponent, 0);
86*f331e23fSHerbert Dürr 		XDrawPage firstpage = getDrawPageByIndex(m_xSDComponent, 0);
87*f331e23fSHerbert Dürr 		Object firstTextBox = SDUtil.getShapeOfPageByIndex(firstPage, 0);
88*f331e23fSHerbert Dürr 		XShape xfirstTextBox = (XShape)UnoRuntime.queryInterface(XShape.class, firstTextBox);
89*f331e23fSHerbert Dürr 		return getPortion(xfirstTextBox, 0);
90*f331e23fSHerbert Dürr 	}
91*f331e23fSHerbert Dürr 
92*f331e23fSHerbert Dürr 	@After
tearDownDocument()93*f331e23fSHerbert Dürr 	public void tearDownDocument() {
94*f331e23fSHerbert Dürr 		app.closeDocument(m_xSDComponent);
95*f331e23fSHerbert Dürr 
96*f331e23fSHerbert Dürr 	}
97*f331e23fSHerbert Dürr 
98*f331e23fSHerbert Dürr 	@BeforeClass
setUpConnection()99*f331e23fSHerbert Dürr 	public static void setUpConnection() throws Exception {
100*f331e23fSHerbert Dürr 		app.start();
101*f331e23fSHerbert Dürr 	}
102*f331e23fSHerbert Dürr 
103*f331e23fSHerbert Dürr 	@AfterClass
tearDownConnection()104*f331e23fSHerbert Dürr 	public static void tearDownConnection() throws InterruptedException,
105*f331e23fSHerbert Dürr 			Exception {
106*f331e23fSHerbert Dürr 		app.close();
107*f331e23fSHerbert Dürr 		//remove the temp file
108*f331e23fSHerbert Dürr 		FileUtil.deleteFile(Testspace.getPath("temp"));
109*f331e23fSHerbert Dürr 	}
110*f331e23fSHerbert Dürr 
111*f331e23fSHerbert Dürr 	@Test
testGraphicBulletFromFile()112*f331e23fSHerbert Dürr 	public void testGraphicBulletFromFile() throws Exception {
113*f331e23fSHerbert Dürr 
114*f331e23fSHerbert Dürr 		Object numberingrules = m_xtextProps.getPropertyValue("NumberingRules");
115*f331e23fSHerbert Dürr 
116*f331e23fSHerbert Dürr 		XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
117*f331e23fSHerbert Dürr 	             XIndexReplace.class, numberingrules);
118*f331e23fSHerbert Dürr 
119*f331e23fSHerbert Dürr 		PropertyValue[] props = new PropertyValue[3];
120*f331e23fSHerbert Dürr 		props[0] = new PropertyValue();
121*f331e23fSHerbert Dürr 	    props[0].Name = "NumberingType";
122*f331e23fSHerbert Dürr 	    props[0].Value = new Short(NumberingType.BITMAP );
123*f331e23fSHerbert Dürr 
124*f331e23fSHerbert Dürr 	    props[1] = new PropertyValue();
125*f331e23fSHerbert Dürr 	    props[1].Name = "GraphicURL";
126*f331e23fSHerbert Dürr 	    props[1].Value = "vnd.sun.star.GraphicObject:"+getUniqueIDOfGraphicFile(app, m_GraphicPath);
127*f331e23fSHerbert Dürr 
128*f331e23fSHerbert Dürr 	    props[2] = new PropertyValue();
129*f331e23fSHerbert Dürr 	    props[2].Name = "GraphicSize";
130*f331e23fSHerbert Dürr 	    props[2].Value = new Size(1000,1000);
131*f331e23fSHerbert Dürr 
132*f331e23fSHerbert Dürr 	    xReplace.replaceByIndex(0, props);
133*f331e23fSHerbert Dürr 
134*f331e23fSHerbert Dürr 	    m_xtextProps.setPropertyValue("NumberingRules", numberingrules);
135*f331e23fSHerbert Dürr 		  //set numbering level to 0
136*f331e23fSHerbert Dürr 		m_xtextProps.setPropertyValue("NumberingLevel", new Short((short)0));
137*f331e23fSHerbert Dürr 
138*f331e23fSHerbert Dürr 
139*f331e23fSHerbert Dürr 		app.saveDocument(m_xSDComponent, m_filePath);
140*f331e23fSHerbert Dürr //			app.closeDocument(m_xSDComponent);
141*f331e23fSHerbert Dürr 		m_xSDComponent.dispose();
142*f331e23fSHerbert Dürr 			//reopen
143*f331e23fSHerbert Dürr 		m_xtextProps = load();
144*f331e23fSHerbert Dürr 
145*f331e23fSHerbert Dürr 		Object numberingrules2 = m_xtextProps.getPropertyValue("NumberingRules");
146*f331e23fSHerbert Dürr 
147*f331e23fSHerbert Dürr 		XIndexReplace xReplace2 = (XIndexReplace) UnoRuntime.queryInterface(
148*f331e23fSHerbert Dürr 		            XIndexReplace.class, numberingrules2);
149*f331e23fSHerbert Dürr 
150*f331e23fSHerbert Dürr 		PropertyValue[] proValues2 = (PropertyValue[])xReplace2.getByIndex(0);
151*f331e23fSHerbert Dürr 		int nNumTypeItemIndex = -1;
152*f331e23fSHerbert Dürr 		int nGraphObjItemIndex = -1;
153*f331e23fSHerbert Dürr 		for( int i = 0; i < proValues2.length; ++i) {
154*f331e23fSHerbert Dürr 				final String aPropName = proValues2[i].Name;
155*f331e23fSHerbert Dürr 				if( aPropName.equals( "GraphicURL"))
156*f331e23fSHerbert Dürr 						nGraphObjItemIndex = i;
157*f331e23fSHerbert Dürr 				else if( aPropName.equals( "NumberingType"))
158*f331e23fSHerbert Dürr 						nNumTypeItemIndex = i;
159*f331e23fSHerbert Dürr 		}
160*f331e23fSHerbert Dürr 		assertEquals("NumberingType should be BITMAP",
161*f331e23fSHerbert Dürr 				NumberingType.BITMAP, proValues2[ nNumTypeItemIndex].Value);
162*f331e23fSHerbert Dürr 		String uniqueID = getUniqueIDOfGraphicFile(app, m_GraphicPath);
163*f331e23fSHerbert Dürr 		assertEquals("Graphic should be the one with uniqueID"+uniqueID,
164*f331e23fSHerbert Dürr 				"vnd.sun.star.GraphicObject:"+uniqueID, proValues2[ nGraphObjItemIndex].Value);
165*f331e23fSHerbert Dürr 	}
166*f331e23fSHerbert Dürr }
167*f331e23fSHerbert Dürr 
168