1*43a102b2SLi Feng Wang /**************************************************************
2*43a102b2SLi Feng Wang  *
3*43a102b2SLi Feng Wang  * Licensed to the Apache Software Foundation (ASF) under one
4*43a102b2SLi Feng Wang  * or more contributor license agreements.  See the NOTICE file
5*43a102b2SLi Feng Wang  * distributed with this work for additional information
6*43a102b2SLi Feng Wang  * regarding copyright ownership.  The ASF licenses this file
7*43a102b2SLi Feng Wang  * to you under the Apache License, Version 2.0 (the
8*43a102b2SLi Feng Wang  * "License"); you may not use this file except in compliance
9*43a102b2SLi Feng Wang  * with the License.  You may obtain a copy of the License at
10*43a102b2SLi Feng Wang  *
11*43a102b2SLi Feng Wang  *   http://www.apache.org/licenses/LICENSE-2.0
12*43a102b2SLi Feng Wang  *
13*43a102b2SLi Feng Wang  * Unless required by applicable law or agreed to in writing,
14*43a102b2SLi Feng Wang  * software distributed under the License is distributed on an
15*43a102b2SLi Feng Wang  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*43a102b2SLi Feng Wang  * KIND, either express or implied.  See the License for the
17*43a102b2SLi Feng Wang  * specific language governing permissions and limitations
18*43a102b2SLi Feng Wang  * under the License.
19*43a102b2SLi Feng Wang  *
20*43a102b2SLi Feng Wang  *************************************************************/
21*43a102b2SLi Feng Wang package testlib.uno;
22*43a102b2SLi Feng Wang import static org.junit.Assert.*;
23*43a102b2SLi Feng Wang import static testlib.uno.GraphicUtil.getSizePixelOfGraphicFile;
24*43a102b2SLi Feng Wang 
25*43a102b2SLi Feng Wang import org.junit.After;
26*43a102b2SLi Feng Wang import org.junit.AfterClass;
27*43a102b2SLi Feng Wang import org.junit.Before;
28*43a102b2SLi Feng Wang import org.junit.BeforeClass;
29*43a102b2SLi Feng Wang import org.junit.Test;
30*43a102b2SLi Feng Wang import org.openoffice.test.uno.UnoApp;
31*43a102b2SLi Feng Wang import org.openoffice.test.common.FileUtil;
32*43a102b2SLi Feng Wang import org.openoffice.test.common.Testspace;
33*43a102b2SLi Feng Wang 
34*43a102b2SLi Feng Wang import com.sun.star.beans.Property;
35*43a102b2SLi Feng Wang import com.sun.star.beans.PropertyValue;
36*43a102b2SLi Feng Wang import com.sun.star.beans.UnknownPropertyException;
37*43a102b2SLi Feng Wang import com.sun.star.beans.XPropertySet;
38*43a102b2SLi Feng Wang import com.sun.star.beans.XPropertySetInfo;
39*43a102b2SLi Feng Wang import com.sun.star.drawing.XDrawPage;
40*43a102b2SLi Feng Wang import com.sun.star.drawing.XShape;
41*43a102b2SLi Feng Wang import com.sun.star.drawing.XShapes;
42*43a102b2SLi Feng Wang import com.sun.star.graphic.XGraphic;
43*43a102b2SLi Feng Wang import com.sun.star.graphic.XGraphicObject;
44*43a102b2SLi Feng Wang import com.sun.star.graphic.XGraphicProvider;
45*43a102b2SLi Feng Wang import com.sun.star.lang.WrappedTargetException;
46*43a102b2SLi Feng Wang import com.sun.star.lang.XComponent;
47*43a102b2SLi Feng Wang import com.sun.star.lang.XMultiServiceFactory;
48*43a102b2SLi Feng Wang import com.sun.star.lang.XServiceName;
49*43a102b2SLi Feng Wang import com.sun.star.uno.Exception;
50*43a102b2SLi Feng Wang import com.sun.star.uno.UnoRuntime;
51*43a102b2SLi Feng Wang import com.sun.star.awt.Point;
52*43a102b2SLi Feng Wang import com.sun.star.awt.Size;
53*43a102b2SLi Feng Wang //import com.sun.star.uno.AnyConverter;
54*43a102b2SLi Feng Wang 
55*43a102b2SLi Feng Wang public class GraphicUtil {
56*43a102b2SLi Feng Wang 
getUniqueIDbyXGraphic(UnoApp unoApp, XGraphic xgraphic)57*43a102b2SLi Feng Wang 	public static String getUniqueIDbyXGraphic(UnoApp unoApp, XGraphic xgraphic) throws Exception{
58*43a102b2SLi Feng Wang 		Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicObject");
59*43a102b2SLi Feng Wang 		XGraphicObject xgraphicObj = (XGraphicObject)UnoRuntime.queryInterface(XGraphicObject.class, graphicObj);
60*43a102b2SLi Feng Wang 		xgraphicObj.setGraphic(xgraphic);
61*43a102b2SLi Feng Wang 
62*43a102b2SLi Feng Wang 		return xgraphicObj.getUniqueID();
63*43a102b2SLi Feng Wang 	}
64*43a102b2SLi Feng Wang 
65*43a102b2SLi Feng Wang //	String sUrl = "file:///F:/work/36.gif";
getUniqueIDOfGraphicFile(UnoApp unoApp, String sUrl)66*43a102b2SLi Feng Wang 	public static String getUniqueIDOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception{
67*43a102b2SLi Feng Wang 		XGraphic xgraphic = getXGraphicOfGraphicFile(unoApp,sUrl);
68*43a102b2SLi Feng Wang 		String uniqueID = getUniqueIDbyXGraphic(unoApp, xgraphic);
69*43a102b2SLi Feng Wang 
70*43a102b2SLi Feng Wang 		return uniqueID;
71*43a102b2SLi Feng Wang 	}
72*43a102b2SLi Feng Wang 
getXGraphicOfGraphicFile(UnoApp unoApp, String sUrl)73*43a102b2SLi Feng Wang 	public static XGraphic getXGraphicOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception
74*43a102b2SLi Feng Wang 	{
75*43a102b2SLi Feng Wang 		Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider");
76*43a102b2SLi Feng Wang 		XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj);
77*43a102b2SLi Feng Wang 		PropertyValue[] sourceProps = new PropertyValue[1];
78*43a102b2SLi Feng Wang 		sourceProps[0]       = new PropertyValue();
79*43a102b2SLi Feng Wang 		sourceProps[0].Name  = "URL";
80*43a102b2SLi Feng Wang 		sourceProps[0].Value = sUrl;
81*43a102b2SLi Feng Wang 		return xgraphicProvider.queryGraphic(sourceProps);
82*43a102b2SLi Feng Wang 	}
83*43a102b2SLi Feng Wang 
getSize100thMMOfGraphicFile(UnoApp unoApp, String sUrl)84*43a102b2SLi Feng Wang 	public static Size getSize100thMMOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception
85*43a102b2SLi Feng Wang 	{
86*43a102b2SLi Feng Wang 		Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider");
87*43a102b2SLi Feng Wang 		XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj);
88*43a102b2SLi Feng Wang 		PropertyValue[] sourceProps = new PropertyValue[1];
89*43a102b2SLi Feng Wang 		sourceProps[0]       = new PropertyValue();
90*43a102b2SLi Feng Wang 		sourceProps[0].Name  = "URL";
91*43a102b2SLi Feng Wang 		sourceProps[0].Value = sUrl;
92*43a102b2SLi Feng Wang 		XPropertySet xGraphicPro = xgraphicProvider.queryGraphicDescriptor(sourceProps);
93*43a102b2SLi Feng Wang 		Size size = (Size)xGraphicPro.getPropertyValue("Size100thMM");
94*43a102b2SLi Feng Wang 		return size;
95*43a102b2SLi Feng Wang 	}
96*43a102b2SLi Feng Wang 
getSizePixelOfGraphicFile(UnoApp unoApp, String sUrl)97*43a102b2SLi Feng Wang 	public static Size getSizePixelOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception
98*43a102b2SLi Feng Wang 	{
99*43a102b2SLi Feng Wang 		Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider");
100*43a102b2SLi Feng Wang 		XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj);
101*43a102b2SLi Feng Wang 		PropertyValue[] sourceProps = new PropertyValue[1];
102*43a102b2SLi Feng Wang 		sourceProps[0]       = new PropertyValue();
103*43a102b2SLi Feng Wang 		sourceProps[0].Name  = "URL";
104*43a102b2SLi Feng Wang 		sourceProps[0].Value = sUrl;
105*43a102b2SLi Feng Wang 		XPropertySet xGraphicPro = xgraphicProvider.queryGraphicDescriptor(sourceProps);
106*43a102b2SLi Feng Wang 		Size size = (Size)xGraphicPro.getPropertyValue("SizePixel");
107*43a102b2SLi Feng Wang 		return size;
108*43a102b2SLi Feng Wang 	}
109*43a102b2SLi Feng Wang 
110*43a102b2SLi Feng Wang 
111*43a102b2SLi Feng Wang 	//GraphicObjectShape
getGraphicsOfPage(XDrawPage xDrawPage)112*43a102b2SLi Feng Wang 	public static Object[] getGraphicsOfPage(XDrawPage xDrawPage) throws Exception {
113*43a102b2SLi Feng Wang 		XShapes m_xdrawShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xDrawPage);
114*43a102b2SLi Feng Wang 		int count = m_xdrawShapes.getCount();
115*43a102b2SLi Feng Wang 		Object[] temp = new Object[count];
116*43a102b2SLi Feng Wang 		int graphicNum=0;
117*43a102b2SLi Feng Wang 		for(int i=0;i<count; i++)
118*43a102b2SLi Feng Wang 		{
119*43a102b2SLi Feng Wang 			Object shape = m_xdrawShapes.getByIndex(i);
120*43a102b2SLi Feng Wang 			XShape xshape = (XShape)UnoRuntime.queryInterface(XShape.class, shape);
121*43a102b2SLi Feng Wang 			String type = xshape.getShapeType();
122*43a102b2SLi Feng Wang 			if(type.equals("com.sun.star.drawing.GraphicObjectShape"))
123*43a102b2SLi Feng Wang 			{
124*43a102b2SLi Feng Wang 				temp[graphicNum] = shape;
125*43a102b2SLi Feng Wang 				graphicNum++;
126*43a102b2SLi Feng Wang 			}
127*43a102b2SLi Feng Wang 		}
128*43a102b2SLi Feng Wang 
129*43a102b2SLi Feng Wang 		Object[] graphics = new Object[graphicNum];
130*43a102b2SLi Feng Wang 		System.arraycopy(temp, 0, graphics, 0, graphicNum);
131*43a102b2SLi Feng Wang 		return graphics;
132*43a102b2SLi Feng Wang 	}
133*43a102b2SLi Feng Wang 
134*43a102b2SLi Feng Wang 	/*Insert a graphic into a Impress
135*43a102b2SLi Feng Wang 	 * component: the Impress document
136*43a102b2SLi Feng Wang 	 * toPage: the page that the graphic will be inserted to
137*43a102b2SLi Feng Wang 	 * graphicURL: the file path of the graphic, e.g. file:///c:/test.png
138*43a102b2SLi Feng Wang 	 * size: size of the graphic to be inserted
139*43a102b2SLi Feng Wang 	 * position: position of the graphic to be inserted
140*43a102b2SLi Feng Wang 	 * */
insertGraphic(XComponent component, XDrawPage toPage, String graphicURL, Size size, Point position)141*43a102b2SLi Feng Wang 	public static void insertGraphic(XComponent component, XDrawPage toPage, String graphicURL, Size size, Point position) throws Exception
142*43a102b2SLi Feng Wang 	{
143*43a102b2SLi Feng Wang 		XMultiServiceFactory xDrawFactory =
144*43a102b2SLi Feng Wang 	            (XMultiServiceFactory)UnoRuntime.queryInterface(
145*43a102b2SLi Feng Wang 	                XMultiServiceFactory.class, component);
146*43a102b2SLi Feng Wang 
147*43a102b2SLi Feng Wang 	    Object oGraphic = xDrawFactory.createInstance("com.sun.star.drawing.GraphicObjectShape");
148*43a102b2SLi Feng Wang 	    XPropertySet xGraphicPro = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, oGraphic);
149*43a102b2SLi Feng Wang 	    xGraphicPro.setPropertyValue("GraphicURL", graphicURL);
150*43a102b2SLi Feng Wang 
151*43a102b2SLi Feng Wang 	    XShape xDrawShape = (XShape)UnoRuntime.queryInterface(XShape.class, oGraphic);
152*43a102b2SLi Feng Wang 
153*43a102b2SLi Feng Wang 	    xDrawShape.setSize(size);
154*43a102b2SLi Feng Wang 	    xDrawShape.setPosition(position);
155*43a102b2SLi Feng Wang 
156*43a102b2SLi Feng Wang 	    toPage.add(xDrawShape);
157*43a102b2SLi Feng Wang 	}
158*43a102b2SLi Feng Wang 
159*43a102b2SLi Feng Wang }
160