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