xref: /trunk/test/testuno/source/testlib/uno/GraphicUtil.java (revision 42a976b737d4e2b88cfbe2fe1cd610fe957bdc84)
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