package testlib.uno; /************************************************************** * * 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. * *************************************************************/ // __________ Imports __________ import com.sun.star.uno.Exception; import com.sun.star.uno.UnoRuntime; import com.sun.star.lang.WrappedTargetException; import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.awt.Point; import com.sun.star.awt.Size; import com.sun.star.beans.XPropertySet; import com.sun.star.container.NoSuchElementException; import com.sun.star.container.XEnumeration; import com.sun.star.container.XEnumerationAccess; import com.sun.star.drawing.XDrawPage; import com.sun.star.drawing.XDrawPages; import com.sun.star.drawing.XDrawPagesSupplier; import com.sun.star.drawing.XShape; import com.sun.star.drawing.XShapes; import com.sun.star.text.ControlCharacter; import com.sun.star.text.XText; import com.sun.star.text.XTextCursor; import com.sun.star.text.XTextContent; import com.sun.star.text.XTextRange; public class ShapeUtil { // __________ static helper methods __________ // public static XPropertySet createAndInsertShape(XComponent xDrawDoc, XShapes xShapes, Point aPos, Size aSize, String sShapeType) throws java.lang.Exception { XShape xShape = createShape(xDrawDoc, aPos, aSize, sShapeType); xShapes.add(xShape); XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xShape); return xPropSet; } /** * create a Shape */ public static XShape createShape(XComponent xDrawDoc, Point aPos, Size aSize, String sShapeType) throws java.lang.Exception { XShape xShape = null; XMultiServiceFactory xFactory = (XMultiServiceFactory) UnoRuntime .queryInterface(XMultiServiceFactory.class, xDrawDoc); Object xObj = xFactory.createInstance(sShapeType); xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xObj); xShape.setPosition(aPos); xShape.setSize(aSize); return xShape; } /** * add text to a shape. the return value is the PropertySet of the text * range that has been added */ public static XPropertySet addPortion(XShape xShape, String sText, boolean bNewParagraph) throws com.sun.star.lang.IllegalArgumentException { XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape); XTextCursor xTextCursor = xText.createTextCursor(); xTextCursor.gotoEnd(false); if (bNewParagraph == true) { xText.insertControlCharacter(xTextCursor, ControlCharacter.PARAGRAPH_BREAK, false); xTextCursor.gotoEnd(false); } XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface( XTextRange.class, xTextCursor); xTextRange.setString(sText); xTextCursor.gotoEnd(true); XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xTextRange); return xPropSet; } /** * get a paragraph in a shape. the return value is the PropertySet of the text * range that specified by the index */ public static XPropertySet getPortion(XShape xShape, int index) throws NoSuchElementException, WrappedTargetException { XEnumerationAccess m_paraAccess = (XEnumerationAccess)UnoRuntime.queryInterface(XEnumerationAccess.class, xShape); XEnumeration xParaEnum = m_paraAccess.createEnumeration(); XPropertySet xPropSet = null; int i=0; while(xParaEnum.hasMoreElements()) { if(i == index) { Object aPortionObj = xParaEnum.nextElement(); XTextRange xTextRange = (XTextRange)UnoRuntime.queryInterface(XTextRange.class, aPortionObj); // System.out.println(xTextRange.getText().getString()); xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xTextRange); break; } else i++; } return xPropSet; } /** * try to get text of a shape * * @return */ public static String getPortion(XShape xShape) { String text = null; XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape); XTextCursor xTextCursor = xText.createTextCursor(); XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface( XTextRange.class, xTextCursor); text = xTextRange.getString(); return text; } public static void setPropertyForLastParagraph(XShape xText, String sPropName, Object aValue) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.beans.PropertyVetoException, com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException, com.sun.star.container.NoSuchElementException { XEnumerationAccess xEnumerationAccess = (XEnumerationAccess) UnoRuntime .queryInterface(XEnumerationAccess.class, xText); if (xEnumerationAccess.hasElements()) { XEnumeration xEnumeration = xEnumerationAccess.createEnumeration(); while (xEnumeration.hasMoreElements()) { Object xObj = xEnumeration.nextElement(); if (xEnumeration.hasMoreElements() == false) { XTextContent xTextContent = (XTextContent) UnoRuntime .queryInterface(XTextContent.class, xObj); XPropertySet xParaPropSet = (XPropertySet) UnoRuntime .queryInterface(XPropertySet.class, xTextContent); xParaPropSet.setPropertyValue(sPropName, aValue); } } } } /** * Get shapes in specific page * @param impressDocument * @param pageIndex * @return * @throws Exception */ public static XShapes getShapes(XComponent impressDocument, int pageIndex) throws Exception{ XDrawPagesSupplier drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( XDrawPagesSupplier.class, impressDocument); XDrawPages drawpages = drawsupplier.getDrawPages(); XDrawPage xpage=(XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, drawpages.getByIndex(pageIndex)); XShapes xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage); return xShapes; } /** * Remove the specific shape in specific page * @param impressDocument * @param pageIndex * @param shapeIndex * @throws Exception */ public static void removeOneShape(XComponent impressDocument, int pageIndex, int shapeIndex) throws Exception{ XDrawPagesSupplier drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( XDrawPagesSupplier.class, impressDocument); XDrawPages drawpages = drawsupplier.getDrawPages(); XDrawPage xpage=(XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, drawpages.getByIndex(pageIndex)); XShapes xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage); XShape xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(shapeIndex)); xShapes.remove(xShape); } }