xref: /AOO42X/test/testuno/source/testlib/uno/ShapeUtil.java (revision e6e6073ddaad3a04a985e8f05823629a884eb203)
1 package testlib.uno;
2 
3 /**************************************************************
4  *
5  * Licensed to the Apache Software Foundation (ASF) under one
6  * or more contributor license agreements.  See the NOTICE file
7  * distributed with this work for additional information
8  * regarding copyright ownership.  The ASF licenses this file
9  * to you under the Apache License, Version 2.0 (the
10  * "License"); you may not use this file except in compliance
11  * with the License.  You may obtain a copy of the License at
12  *
13  *   http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing,
16  * software distributed under the License is distributed on an
17  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18  * KIND, either express or implied.  See the License for the
19  * specific language governing permissions and limitations
20  * under the License.
21  *
22  *************************************************************/
23 
24 // __________ Imports __________
25 
26 import com.sun.star.uno.Exception;
27 import com.sun.star.uno.UnoRuntime;
28 import com.sun.star.lang.WrappedTargetException;
29 import com.sun.star.lang.XComponent;
30 import com.sun.star.lang.XMultiServiceFactory;
31 
32 import com.sun.star.awt.Point;
33 import com.sun.star.awt.Size;
34 
35 import com.sun.star.beans.XPropertySet;
36 
37 import com.sun.star.container.NoSuchElementException;
38 import com.sun.star.container.XEnumeration;
39 import com.sun.star.container.XEnumerationAccess;
40 
41 import com.sun.star.drawing.XShape;
42 import com.sun.star.drawing.XShapes;
43 
44 import com.sun.star.text.ControlCharacter;
45 import com.sun.star.text.XText;
46 import com.sun.star.text.XTextCursor;
47 import com.sun.star.text.XTextContent;
48 import com.sun.star.text.XTextRange;
49 
50 public class ShapeUtil {
51     // __________ static helper methods __________
52     //
53     public static XPropertySet createAndInsertShape(XComponent xDrawDoc,
54             XShapes xShapes, Point aPos, Size aSize, String sShapeType)
55             throws java.lang.Exception {
56         XShape xShape = createShape(xDrawDoc, aPos, aSize, sShapeType);
57         xShapes.add(xShape);
58         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
59                 XPropertySet.class, xShape);
60         return xPropSet;
61     }
62 
63     /**
64      * create a Shape
65      */
66     public static XShape createShape(XComponent xDrawDoc, Point aPos,
67             Size aSize, String sShapeType) throws java.lang.Exception {
68         XShape xShape = null;
69         XMultiServiceFactory xFactory = (XMultiServiceFactory) UnoRuntime
70                 .queryInterface(XMultiServiceFactory.class, xDrawDoc);
71         Object xObj = xFactory.createInstance(sShapeType);
72         xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xObj);
73         xShape.setPosition(aPos);
74         xShape.setSize(aSize);
75         return xShape;
76     }
77 
78     /**
79      * try to get shape according position
80      *
81      * @param aPos
82      * @return
83      */
84     public static XShape getShape(XComponent xDrawDoc, Point aPos,
85             String sShapeType) {
86         XShape xShape = null;
87         try {
88             XMultiServiceFactory xFactory = (XMultiServiceFactory) UnoRuntime
89                     .queryInterface(XMultiServiceFactory.class, xDrawDoc);
90             Object xObj = xFactory.createInstance(sShapeType);
91             xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xObj);
92         } catch (Exception e) {
93             // TODO Auto-generated catch block
94             e.printStackTrace();
95         }
96         return xShape;
97     }
98 
99     /**
100      * add text to a shape. the return value is the PropertySet of the text
101      * range that has been added
102      */
103     public static XPropertySet addPortion(XShape xShape, String sText,
104             boolean bNewParagraph)
105             throws com.sun.star.lang.IllegalArgumentException {
106         XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape);
107 
108         XTextCursor xTextCursor = xText.createTextCursor();
109         xTextCursor.gotoEnd(false);
110         if (bNewParagraph == true) {
111             xText.insertControlCharacter(xTextCursor,
112                     ControlCharacter.PARAGRAPH_BREAK, false);
113             xTextCursor.gotoEnd(false);
114         }
115         XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface(
116                 XTextRange.class, xTextCursor);
117         xTextRange.setString(sText);
118         xTextCursor.gotoEnd(true);
119         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
120                 XPropertySet.class, xTextRange);
121         return xPropSet;
122     }
123 
124     /**
125      * get a paragraph in a shape. the return value is the PropertySet of the text
126      * range that specified by the index
127      */
128     public static XPropertySet getPortion(XShape xShape, int index) throws NoSuchElementException, WrappedTargetException {
129         XEnumerationAccess m_paraAccess = (XEnumerationAccess)UnoRuntime.queryInterface(XEnumerationAccess.class, xShape);
130         XEnumeration xParaEnum = m_paraAccess.createEnumeration();
131         XPropertySet xPropSet = null;
132         int i=0;
133         while(xParaEnum.hasMoreElements())
134         {
135             if(i == index)
136             {
137                 Object aPortionObj = xParaEnum.nextElement();
138                 XTextRange xTextRange = (XTextRange)UnoRuntime.queryInterface(XTextRange.class, aPortionObj);
139 //              System.out.println(xTextRange.getText().getString());
140                 xPropSet = (XPropertySet) UnoRuntime.queryInterface(
141                         XPropertySet.class, xTextRange);
142                 break;
143             }
144             else i++;
145         }
146         return xPropSet;
147     }
148 
149 
150     /**
151      * try to get text of a shape
152      *
153      * @return
154      */
155     public static String getPortion(XShape xShape) {
156         String text = null;
157         XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape);
158 
159         XTextCursor xTextCursor = xText.createTextCursor();
160         XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface(
161                 XTextRange.class, xTextCursor);
162         text = xTextRange.getString();
163         return text;
164 
165     }
166 
167     public static void setPropertyForLastParagraph(XShape xText,
168             String sPropName, Object aValue)
169             throws com.sun.star.beans.UnknownPropertyException,
170             com.sun.star.beans.PropertyVetoException,
171             com.sun.star.lang.IllegalArgumentException,
172             com.sun.star.lang.WrappedTargetException,
173             com.sun.star.container.NoSuchElementException {
174         XEnumerationAccess xEnumerationAccess = (XEnumerationAccess) UnoRuntime
175                 .queryInterface(XEnumerationAccess.class, xText);
176         if (xEnumerationAccess.hasElements()) {
177             XEnumeration xEnumeration = xEnumerationAccess.createEnumeration();
178             while (xEnumeration.hasMoreElements()) {
179                 Object xObj = xEnumeration.nextElement();
180                 if (xEnumeration.hasMoreElements() == false) {
181                     XTextContent xTextContent = (XTextContent) UnoRuntime
182                             .queryInterface(XTextContent.class, xObj);
183                     XPropertySet xParaPropSet = (XPropertySet) UnoRuntime
184                             .queryInterface(XPropertySet.class, xTextContent);
185                     xParaPropSet.setPropertyValue(sPropName, aValue);
186                 }
187             }
188         }
189     }
190 }
191