blob: 9df1a2e2cbe97e310ca500ebeaa9d97c65603b45 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package testlib.uno;
import static org.junit.Assert.*;
import static testlib.uno.GraphicUtil.getSizePixelOfGraphicFile;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.uno.UnoApp;
import org.openoffice.test.common.FileUtil;
import org.openoffice.test.common.Testspace;
import com.sun.star.beans.Property;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.UnknownPropertyException;
import com.sun.star.beans.XPropertySet;
import com.sun.star.beans.XPropertySetInfo;
import com.sun.star.drawing.XDrawPage;
import com.sun.star.drawing.XShape;
import com.sun.star.drawing.XShapes;
import com.sun.star.graphic.XGraphic;
import com.sun.star.graphic.XGraphicObject;
import com.sun.star.graphic.XGraphicProvider;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XServiceName;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.awt.Point;
import com.sun.star.awt.Size;
//import com.sun.star.uno.AnyConverter;
public class GraphicUtil {
public static String getUniqueIDbyXGraphic(UnoApp unoApp, XGraphic xgraphic) throws Exception{
Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicObject");
XGraphicObject xgraphicObj = (XGraphicObject)UnoRuntime.queryInterface(XGraphicObject.class, graphicObj);
xgraphicObj.setGraphic(xgraphic);
return xgraphicObj.getUniqueID();
}
// String sUrl = "file:///F:/work/36.gif";
public static String getUniqueIDOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception{
XGraphic xgraphic = getXGraphicOfGraphicFile(unoApp,sUrl);
String uniqueID = getUniqueIDbyXGraphic(unoApp, xgraphic);
return uniqueID;
}
public static XGraphic getXGraphicOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception
{
Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider");
XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj);
PropertyValue[] sourceProps = new PropertyValue[1];
sourceProps[0] = new PropertyValue();
sourceProps[0].Name = "URL";
sourceProps[0].Value = sUrl;
return xgraphicProvider.queryGraphic(sourceProps);
}
public static Size getSize100thMMOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception
{
Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider");
XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj);
PropertyValue[] sourceProps = new PropertyValue[1];
sourceProps[0] = new PropertyValue();
sourceProps[0].Name = "URL";
sourceProps[0].Value = sUrl;
XPropertySet xGraphicPro = xgraphicProvider.queryGraphicDescriptor(sourceProps);
Size size = (Size)xGraphicPro.getPropertyValue("Size100thMM");
return size;
}
public static Size getSizePixelOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception
{
Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider");
XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj);
PropertyValue[] sourceProps = new PropertyValue[1];
sourceProps[0] = new PropertyValue();
sourceProps[0].Name = "URL";
sourceProps[0].Value = sUrl;
XPropertySet xGraphicPro = xgraphicProvider.queryGraphicDescriptor(sourceProps);
Size size = (Size)xGraphicPro.getPropertyValue("SizePixel");
return size;
}
//GraphicObjectShape
public static Object[] getGraphicsOfPage(XDrawPage xDrawPage) throws Exception {
XShapes m_xdrawShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xDrawPage);
int count = m_xdrawShapes.getCount();
Object[] temp = new Object[count];
int graphicNum=0;
for(int i=0;i<count; i++)
{
Object shape = m_xdrawShapes.getByIndex(i);
XShape xshape = (XShape)UnoRuntime.queryInterface(XShape.class, shape);
String type = xshape.getShapeType();
if(type.equals("com.sun.star.drawing.GraphicObjectShape"))
{
temp[graphicNum] = shape;
graphicNum++;
}
}
Object[] graphics = new Object[graphicNum];
System.arraycopy(temp, 0, graphics, 0, graphicNum);
return graphics;
}
/*Insert a graphic into a Impress
* component: the Impress document
* toPage: the page that the graphic will be inserted to
* graphicURL: the file path of the graphic, e.g. file:///c:/test.png
* size: size of the graphic to be inserted
* position: position of the graphic to be inserted
* */
public static void insertGraphic(XComponent component, XDrawPage toPage, String graphicURL, Size size, Point position) throws Exception
{
XMultiServiceFactory xDrawFactory =
(XMultiServiceFactory)UnoRuntime.queryInterface(
XMultiServiceFactory.class, component);
Object oGraphic = xDrawFactory.createInstance("com.sun.star.drawing.GraphicObjectShape");
XPropertySet xGraphicPro = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, oGraphic);
xGraphicPro.setPropertyValue("GraphicURL", graphicURL);
XShape xDrawShape = (XShape)UnoRuntime.queryInterface(XShape.class, oGraphic);
xDrawShape.setSize(size);
xDrawShape.setPosition(position);
toPage.add(xDrawShape);
}
}