1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski package util;
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski import java.util.Hashtable;
26*b1cdbd2cSJim Jagielski // access the implementations via names
27*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface;
28*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
31*b1cdbd2cSJim Jagielski // staroffice interfaces to provide desktop and componentloader
32*b1cdbd2cSJim Jagielski // and components i.e. spreadsheets, writerdocs etc.
33*b1cdbd2cSJim Jagielski import com.sun.star.frame.XDesktop;
34*b1cdbd2cSJim Jagielski import com.sun.star.frame.XComponentLoader;
35*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent;
36*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski // name - value pair
39*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue;
40*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyState;
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski // additional classes required for testcase
43*b1cdbd2cSJim Jagielski import com.sun.star.sheet.*;
44*b1cdbd2cSJim Jagielski import com.sun.star.text.*;
45*b1cdbd2cSJim Jagielski import com.sun.star.container.*;
46*b1cdbd2cSJim Jagielski import com.sun.star.chart.*;
47*b1cdbd2cSJim Jagielski import com.sun.star.drawing.*;
48*b1cdbd2cSJim Jagielski import com.sun.star.awt.*;
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski public class SOfficeFactory {
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski     private static Hashtable lookup = new Hashtable(10);
53*b1cdbd2cSJim Jagielski     protected XComponentLoader oCLoader;
54*b1cdbd2cSJim Jagielski 
SOfficeFactory(XMultiServiceFactory xMSF)55*b1cdbd2cSJim Jagielski     private SOfficeFactory(XMultiServiceFactory xMSF) {
56*b1cdbd2cSJim Jagielski         // get XInterface of Desktop service
57*b1cdbd2cSJim Jagielski         Object oInterface;
58*b1cdbd2cSJim Jagielski         try {
59*b1cdbd2cSJim Jagielski             oInterface = xMSF.createInstance("com.sun.star.frame.Desktop");
60*b1cdbd2cSJim Jagielski         } catch (com.sun.star.uno.Exception e) {
61*b1cdbd2cSJim Jagielski             throw new IllegalArgumentException(
62*b1cdbd2cSJim Jagielski                 "Desktop Service not available");
63*b1cdbd2cSJim Jagielski         }
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski         // query the desktop interface and then it's componentloader
66*b1cdbd2cSJim Jagielski         XDesktop oDesktop = (XDesktop) UnoRuntime.queryInterface(
67*b1cdbd2cSJim Jagielski             XDesktop.class, oInterface);
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski         oCLoader = (XComponentLoader) UnoRuntime.queryInterface(
70*b1cdbd2cSJim Jagielski             XComponentLoader.class, oDesktop);
71*b1cdbd2cSJim Jagielski     }
72*b1cdbd2cSJim Jagielski 
getFactory(XMultiServiceFactory xMSF)73*b1cdbd2cSJim Jagielski     public static SOfficeFactory getFactory(XMultiServiceFactory xMSF) {
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski         SOfficeFactory soFactory = (SOfficeFactory) lookup.get(new Integer(xMSF.hashCode()).toString());
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski         if (soFactory == null) {
78*b1cdbd2cSJim Jagielski             soFactory = new SOfficeFactory(xMSF);
79*b1cdbd2cSJim Jagielski             lookup.put(new Integer(xMSF.hashCode()).toString(), soFactory);
80*b1cdbd2cSJim Jagielski         }
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski         return soFactory;
83*b1cdbd2cSJim Jagielski     }
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski     // *********************************************************
86*b1cdbd2cSJim Jagielski     // Document creation. The documents needed are created here.
87*b1cdbd2cSJim Jagielski     // *********************************************************
88*b1cdbd2cSJim Jagielski     /**
89*b1cdbd2cSJim Jagielski      * method which opens a new TextDocument
90*b1cdbd2cSJim Jagielski      *
91*b1cdbd2cSJim Jagielski      * @see XTextDocument
92*b1cdbd2cSJim Jagielski      */
createTextDoc(String frameName)93*b1cdbd2cSJim Jagielski     public XTextDocument createTextDoc(String frameName)
94*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski         XComponent oDoc = openDoc("swriter", frameName);
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski         if (oDoc != null) {
99*b1cdbd2cSJim Jagielski             DesktopTools.bringWindowToFront(oDoc);
100*b1cdbd2cSJim Jagielski             return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, oDoc);
101*b1cdbd2cSJim Jagielski         } else {
102*b1cdbd2cSJim Jagielski             return null;
103*b1cdbd2cSJim Jagielski         }
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski     } // finished createTextDoc
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     /**
108*b1cdbd2cSJim Jagielski      * method which opens a new TextDocument
109*b1cdbd2cSJim Jagielski      *
110*b1cdbd2cSJim Jagielski      * @see XTextDocument
111*b1cdbd2cSJim Jagielski      */
createTextDoc(String frameName, PropertyValue[] mediaDescriptor)112*b1cdbd2cSJim Jagielski     public XTextDocument createTextDoc(String frameName, PropertyValue[] mediaDescriptor)
113*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski         XComponent oDoc = openDoc("swriter", frameName, mediaDescriptor);
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski         if (oDoc != null) {
118*b1cdbd2cSJim Jagielski             DesktopTools.bringWindowToFront(oDoc);
119*b1cdbd2cSJim Jagielski             return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, oDoc);
120*b1cdbd2cSJim Jagielski         } else {
121*b1cdbd2cSJim Jagielski             return null;
122*b1cdbd2cSJim Jagielski         }
123*b1cdbd2cSJim Jagielski     } // finished createTextDoc
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     /**
126*b1cdbd2cSJim Jagielski      * method which opens a new SpreadsheetDocument
127*b1cdbd2cSJim Jagielski      *
128*b1cdbd2cSJim Jagielski      * @see XSpreadsheetDocument
129*b1cdbd2cSJim Jagielski      */
createCalcDoc(String frameName)130*b1cdbd2cSJim Jagielski     public XSpreadsheetDocument createCalcDoc(String frameName)
131*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski         XComponent oDoc = openDoc("scalc", frameName);
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski         if (oDoc != null) {
136*b1cdbd2cSJim Jagielski             DesktopTools.bringWindowToFront(oDoc);
137*b1cdbd2cSJim Jagielski             return (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, oDoc);
138*b1cdbd2cSJim Jagielski         } else {
139*b1cdbd2cSJim Jagielski             return null;
140*b1cdbd2cSJim Jagielski         }
141*b1cdbd2cSJim Jagielski     } // finished createCalcDoc
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski     /**
144*b1cdbd2cSJim Jagielski      * method which opens a new SpreadsheetDocument
145*b1cdbd2cSJim Jagielski      *
146*b1cdbd2cSJim Jagielski      * @see XSpreadsheetDocument
147*b1cdbd2cSJim Jagielski      */
createCalcDoc(String frameName, PropertyValue[] mediaDescriptor)148*b1cdbd2cSJim Jagielski     public XSpreadsheetDocument createCalcDoc(String frameName, PropertyValue[] mediaDescriptor)
149*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski         XComponent oDoc = openDoc("scalc", frameName, mediaDescriptor);
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski         if (oDoc != null) {
154*b1cdbd2cSJim Jagielski             DesktopTools.bringWindowToFront(oDoc);
155*b1cdbd2cSJim Jagielski             return (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, oDoc);
156*b1cdbd2cSJim Jagielski         } else {
157*b1cdbd2cSJim Jagielski             return null;
158*b1cdbd2cSJim Jagielski         }
159*b1cdbd2cSJim Jagielski     } // finished createCalcDoc
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski     /**
162*b1cdbd2cSJim Jagielski      * method which opens a new DrawDocument
163*b1cdbd2cSJim Jagielski      */
createDrawDoc(String frameName)164*b1cdbd2cSJim Jagielski     public XComponent createDrawDoc(String frameName)
165*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski         return openDoc("sdraw", frameName);
168*b1cdbd2cSJim Jagielski     } // finished createDrawDoc
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski     /**
171*b1cdbd2cSJim Jagielski      * method which opens a new ImpressDocument
172*b1cdbd2cSJim Jagielski      */
173*b1cdbd2cSJim Jagielski     /**
174*b1cdbd2cSJim Jagielski      * method which opens a new DrawDocument
175*b1cdbd2cSJim Jagielski      */
createDrawDoc(String frameName, PropertyValue[] mediaDescriptor)176*b1cdbd2cSJim Jagielski     public XComponent createDrawDoc(String frameName, PropertyValue[] mediaDescriptor)
177*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski         return openDoc("sdraw", frameName, mediaDescriptor);
180*b1cdbd2cSJim Jagielski     } // finished createDrawDoc
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski     /**
183*b1cdbd2cSJim Jagielski      * method which opens a new ImpressDocument
184*b1cdbd2cSJim Jagielski      */
createImpressDoc(String frameName)185*b1cdbd2cSJim Jagielski     public XComponent createImpressDoc(String frameName)
186*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski         return openDoc("simpress", frameName);
189*b1cdbd2cSJim Jagielski     } // finished createImpressDoc
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski     /**
192*b1cdbd2cSJim Jagielski      * method which opens a new ImpressDocument
193*b1cdbd2cSJim Jagielski      */
createImpressDoc(String frameName, PropertyValue[] mediaDescriptor)194*b1cdbd2cSJim Jagielski     public XComponent createImpressDoc(String frameName, PropertyValue[] mediaDescriptor)
195*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski         return openDoc("simpress", frameName, mediaDescriptor);
198*b1cdbd2cSJim Jagielski     } // finished createImpressDoc
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski     /**
201*b1cdbd2cSJim Jagielski      * method which opens a new MathDocument
202*b1cdbd2cSJim Jagielski      */
createMathDoc(String frameName)203*b1cdbd2cSJim Jagielski     public XComponent createMathDoc(String frameName)
204*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski         return openDoc("smath", frameName);
207*b1cdbd2cSJim Jagielski     } // finished createMathDoc
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski     /**
210*b1cdbd2cSJim Jagielski      * method which opens a new MathDocument
211*b1cdbd2cSJim Jagielski      */
createMathDoc(String frameName, PropertyValue[] mediaDescriptor)212*b1cdbd2cSJim Jagielski     public XComponent createMathDoc(String frameName, PropertyValue[] mediaDescriptor)
213*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski         return openDoc("smath", frameName, mediaDescriptor);
216*b1cdbd2cSJim Jagielski     } // finished createMathDoc
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski     /**
219*b1cdbd2cSJim Jagielski      * method which opens a new ChartDocument
220*b1cdbd2cSJim Jagielski      *
221*b1cdbd2cSJim Jagielski      * @see XChartDocument
222*b1cdbd2cSJim Jagielski      */
createChartDoc(String frameName)223*b1cdbd2cSJim Jagielski     public XChartDocument createChartDoc(String frameName)
224*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski //        XComponent oDoc = loadDocument(
227*b1cdbd2cSJim Jagielski //                            util.utils.getFullTestURL("emptyChart.sds"));
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski         XComponent oDoc = loadDocument("private:factory/schart");
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski         if (oDoc != null) {
232*b1cdbd2cSJim Jagielski             DesktopTools.bringWindowToFront(oDoc);
233*b1cdbd2cSJim Jagielski             return (XChartDocument) UnoRuntime.queryInterface(XChartDocument.class, oDoc);
234*b1cdbd2cSJim Jagielski         } else {
235*b1cdbd2cSJim Jagielski             return null;
236*b1cdbd2cSJim Jagielski         }
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski     } // finished createChartDoc
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski     /**
241*b1cdbd2cSJim Jagielski      * creates a simple TextTable defaultet to 2 rows and 2 columns
242*b1cdbd2cSJim Jagielski      */
createTextTable(XTextDocument xTextDoc)243*b1cdbd2cSJim Jagielski     public static XTextTable createTextTable(XTextDocument xTextDoc)
244*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski         TableDsc tDsc = new TableDsc();
247*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski         XTextTable oTable = (XTextTable) instCreate.getInstance();
250*b1cdbd2cSJim Jagielski         return oTable;
251*b1cdbd2cSJim Jagielski     }
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski     /**
254*b1cdbd2cSJim Jagielski      * creates a TextTable with a specified count of rows and columns
255*b1cdbd2cSJim Jagielski      */
createTextTable(XTextDocument xTextDoc, int rows, int columns)256*b1cdbd2cSJim Jagielski     public static XTextTable createTextTable(XTextDocument xTextDoc,
257*b1cdbd2cSJim Jagielski         int rows, int columns)
258*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski         TableDsc tDsc = new TableDsc(rows, columns);
261*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski         XTextTable oTable = (XTextTable) instCreate.getInstance();
264*b1cdbd2cSJim Jagielski         return oTable;
265*b1cdbd2cSJim Jagielski     }
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     /**
268*b1cdbd2cSJim Jagielski      * creates a simple TextFrame
269*b1cdbd2cSJim Jagielski      * ... to be continued
270*b1cdbd2cSJim Jagielski      */
createTextFrame(XTextDocument xTextDoc)271*b1cdbd2cSJim Jagielski     public static XTextFrame createTextFrame(XTextDocument xTextDoc)
272*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski         FrameDsc tDsc = new FrameDsc();
275*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski         XTextFrame oFrame = (XTextFrame) instCreate.getInstance();
278*b1cdbd2cSJim Jagielski         return oFrame;
279*b1cdbd2cSJim Jagielski     }
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski     /**
282*b1cdbd2cSJim Jagielski      * creates a simple TextFrame
283*b1cdbd2cSJim Jagielski      * ... to be continued
284*b1cdbd2cSJim Jagielski      */
createTextFrame(XTextDocument xTextDoc, int height, int width)285*b1cdbd2cSJim Jagielski     public static XTextFrame createTextFrame(XTextDocument xTextDoc,
286*b1cdbd2cSJim Jagielski         int height, int width) {
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski         FrameDsc tDsc = new FrameDsc(height, width);
289*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski         XTextFrame oFrame = (XTextFrame) instCreate.getInstance();
292*b1cdbd2cSJim Jagielski         return oFrame;
293*b1cdbd2cSJim Jagielski     }
294*b1cdbd2cSJim Jagielski 
insertString(XTextDocument xTextDoc, String cString)295*b1cdbd2cSJim Jagielski     public static void insertString(XTextDocument xTextDoc, String cString)
296*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
297*b1cdbd2cSJim Jagielski         XText xText = xTextDoc.getText();
298*b1cdbd2cSJim Jagielski         XText oText = (XText) UnoRuntime.queryInterface(
299*b1cdbd2cSJim Jagielski             XText.class, xText);
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski         XTextCursor oCursor = oText.createTextCursor();
302*b1cdbd2cSJim Jagielski         oText.insertString(oCursor, cString, false);
303*b1cdbd2cSJim Jagielski     }
304*b1cdbd2cSJim Jagielski 
insertTextContent(XTextDocument xTextDoc, XTextContent xCont)305*b1cdbd2cSJim Jagielski     public static void insertTextContent(XTextDocument xTextDoc,
306*b1cdbd2cSJim Jagielski         XTextContent xCont)
307*b1cdbd2cSJim Jagielski         throws com.sun.star.lang.IllegalArgumentException {
308*b1cdbd2cSJim Jagielski         XText xText = xTextDoc.getText();
309*b1cdbd2cSJim Jagielski         XText oText = (XText) UnoRuntime.queryInterface(
310*b1cdbd2cSJim Jagielski             XText.class, xText);
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski         XTextCursor oCursor = oText.createTextCursor();
313*b1cdbd2cSJim Jagielski         oText.insertTextContent(oCursor, xCont, false);
314*b1cdbd2cSJim Jagielski     }
315*b1cdbd2cSJim Jagielski 
getFirstTableCell( XTextContent oTable)316*b1cdbd2cSJim Jagielski     public static com.sun.star.table.XCell getFirstTableCell(
317*b1cdbd2cSJim Jagielski         XTextContent oTable) {
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski         String CellNames[] = ((XTextTable) oTable).getCellNames();
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski         com.sun.star.table.XCell oCell = ((XTextTable) oTable).getCellByName(
322*b1cdbd2cSJim Jagielski             CellNames[0]);
323*b1cdbd2cSJim Jagielski         return oCell;
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski     }
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski     /**
328*b1cdbd2cSJim Jagielski      * the method createBookmark
329*b1cdbd2cSJim Jagielski      */
createBookmark(XTextDocument xTextDoc)330*b1cdbd2cSJim Jagielski     public static XTextContent createBookmark(XTextDocument xTextDoc)
331*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski         BookmarkDsc tDsc = new BookmarkDsc();
334*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski         XTextContent oBookmark = (XTextContent) instCreate.getInstance();
337*b1cdbd2cSJim Jagielski         return oBookmark;
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski     } /// finish createBookmark
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski     /**
342*b1cdbd2cSJim Jagielski      * the method createReferenceMark
343*b1cdbd2cSJim Jagielski      */
createReferenceMark(XTextDocument xTextDoc)344*b1cdbd2cSJim Jagielski     public static XTextContent createReferenceMark(XTextDocument xTextDoc)
345*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski         ReferenceMarkDsc tDsc = new ReferenceMarkDsc();
348*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski         XTextContent oReferenceMark = (XTextContent) instCreate.getInstance();
351*b1cdbd2cSJim Jagielski         return oReferenceMark;
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski     } /// finish createReferenceMark
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski     /**
356*b1cdbd2cSJim Jagielski      * the method createFootnote
357*b1cdbd2cSJim Jagielski      */
createFootnote(XTextDocument xTextDoc)358*b1cdbd2cSJim Jagielski     public static XTextContent createFootnote(XTextDocument xTextDoc)
359*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski         FootnoteDsc tDsc = new FootnoteDsc();
362*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski         XTextContent oFootnote = (XTextContent) instCreate.getInstance();
365*b1cdbd2cSJim Jagielski         return oFootnote;
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski     } /// finish createFootnote
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski     /**
370*b1cdbd2cSJim Jagielski      * the method create Index
371*b1cdbd2cSJim Jagielski      */
createIndex(XTextDocument xTextDoc, String kind)372*b1cdbd2cSJim Jagielski     public static XTextContent createIndex(XTextDocument xTextDoc, String kind)
373*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski         XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class,
376*b1cdbd2cSJim Jagielski             xTextDoc);
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski         Object oInt = oDocMSF.createInstance(kind);
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski         XTextContent xTC = (XTextContent) UnoRuntime.queryInterface(XDocumentIndex.class, oInt);
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski         return xTC;
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski     }
385*b1cdbd2cSJim Jagielski 
createSpreadsheet(XSpreadsheetDocument oDoc)386*b1cdbd2cSJim Jagielski     public static XSpreadsheet createSpreadsheet(XSpreadsheetDocument oDoc)
387*b1cdbd2cSJim Jagielski         throws com.sun.star.uno.Exception {
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski         XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski         Object oInt = oDocMSF.createInstance(
392*b1cdbd2cSJim Jagielski             "com.sun.star.sheet.Spreadsheet");
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski         XSpreadsheet oSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, oInt);
395*b1cdbd2cSJim Jagielski 
396*b1cdbd2cSJim Jagielski         return oSpreadsheet;
397*b1cdbd2cSJim Jagielski     }
398*b1cdbd2cSJim Jagielski 
getTableCollection(XTextDocument oDoc)399*b1cdbd2cSJim Jagielski     public static XIndexAccess getTableCollection(XTextDocument oDoc) {
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski         XTextTablesSupplier oTTS = (XTextTablesSupplier) UnoRuntime.queryInterface(XTextTablesSupplier.class, oDoc);
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski         XNameAccess oNA = oTTS.getTextTables();
404*b1cdbd2cSJim Jagielski         XIndexAccess oIA = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, oNA);
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski         return oIA;
407*b1cdbd2cSJim Jagielski     }
408*b1cdbd2cSJim Jagielski 
getUniqueName(XInterface oInterface, String prefix)409*b1cdbd2cSJim Jagielski     public static String getUniqueName(XInterface oInterface, String prefix) {
410*b1cdbd2cSJim Jagielski         XNameAccess oNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oInterface);
411*b1cdbd2cSJim Jagielski         if (oNameAccess == null) {
412*b1cdbd2cSJim Jagielski             return null;
413*b1cdbd2cSJim Jagielski         }
414*b1cdbd2cSJim Jagielski         int i;
415*b1cdbd2cSJim Jagielski         for (i = 0; oNameAccess.hasByName(prefix + i); i++) {
416*b1cdbd2cSJim Jagielski         }
417*b1cdbd2cSJim Jagielski         return prefix + i;
418*b1cdbd2cSJim Jagielski     }
419*b1cdbd2cSJim Jagielski 
createShape(XComponent oDoc, int height, int width, int x, int y, String kind)420*b1cdbd2cSJim Jagielski     public XShape createShape(XComponent oDoc, int height, int width, int x, int y, String kind) {
421*b1cdbd2cSJim Jagielski         //possible values for kind are 'Ellipse', 'Line' and 'Rectangle'
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski         ShapeDsc sDsc = new ShapeDsc(height, width, x, y, kind);
424*b1cdbd2cSJim Jagielski         InstCreator instCreate = new InstCreator(oDoc, sDsc);
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski         XShape oShape = (XShape) instCreate.getInstance();
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski         return oShape;
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski     }
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski     /**
433*b1cdbd2cSJim Jagielski      * creates a Diagram wich specified in kind(String)
434*b1cdbd2cSJim Jagielski      */
createDiagram(XComponent oDoc, String kind)435*b1cdbd2cSJim Jagielski     public XDiagram createDiagram(XComponent oDoc, String kind) {
436*b1cdbd2cSJim Jagielski         XInterface oInterface = null;
437*b1cdbd2cSJim Jagielski         XDiagram oDiagram = null;
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski         //get LineDiagram
440*b1cdbd2cSJim Jagielski         XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski         try {
443*b1cdbd2cSJim Jagielski             oInterface = (XInterface) oDocMSF.createInstance("com.sun.star.chart." + kind);
444*b1cdbd2cSJim Jagielski             oDiagram = (XDiagram) UnoRuntime.queryInterface(XDiagram.class, oInterface);
445*b1cdbd2cSJim Jagielski         } catch (Exception e) {
446*b1cdbd2cSJim Jagielski             // Some exception occures.FAILED
447*b1cdbd2cSJim Jagielski             System.out.println("Couldn't create " + kind + "-Diagram " + e);
448*b1cdbd2cSJim Jagielski         }
449*b1cdbd2cSJim Jagielski         return oDiagram;
450*b1cdbd2cSJim Jagielski     }
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski     /*
453*b1cdbd2cSJim Jagielski     // create a Control-Instance which specified in kind(String)
454*b1cdbd2cSJim Jagielski      */
createControl(XComponent oDoc, String kind)455*b1cdbd2cSJim Jagielski     public XInterface createControl(XComponent oDoc, String kind) {
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski         XInterface oControl = null;
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski         XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski         try {
462*b1cdbd2cSJim Jagielski             oControl = (XInterface) oDocMSF.createInstance("com.sun.star.form.component." + kind);
463*b1cdbd2cSJim Jagielski         } catch (Exception e) {
464*b1cdbd2cSJim Jagielski             // Some exception occures.FAILED
465*b1cdbd2cSJim Jagielski             System.out.println("Couldn't create instance " + kind + ": " + e);
466*b1cdbd2cSJim Jagielski         }
467*b1cdbd2cSJim Jagielski         return oControl;
468*b1cdbd2cSJim Jagielski     }
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski     /*
471*b1cdbd2cSJim Jagielski     // create an Instance which is specified in kind(String)
472*b1cdbd2cSJim Jagielski      */
createInstance(XComponent oDoc, String kind)473*b1cdbd2cSJim Jagielski     public Object createInstance(XComponent oDoc, String kind) {
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski         Object oInstance = null;
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski         XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski         try {
480*b1cdbd2cSJim Jagielski             oInstance = (Object) oDocMSF.createInstance(kind);
481*b1cdbd2cSJim Jagielski         } catch (Exception e) {
482*b1cdbd2cSJim Jagielski             // Some exception occures.FAILED
483*b1cdbd2cSJim Jagielski             System.out.println("Couldn't create instance " + kind + ": " + e);
484*b1cdbd2cSJim Jagielski         }
485*b1cdbd2cSJim Jagielski         return oInstance;
486*b1cdbd2cSJim Jagielski     }
487*b1cdbd2cSJim Jagielski 
createControlShape(XComponent oDoc, int height, int width, int x, int y, String kind)488*b1cdbd2cSJim Jagielski     public XControlShape createControlShape(XComponent oDoc, int height, int width, int x, int y, String kind) {
489*b1cdbd2cSJim Jagielski 
490*b1cdbd2cSJim Jagielski         Size size = new Size();
491*b1cdbd2cSJim Jagielski         Point position = new Point();
492*b1cdbd2cSJim Jagielski         XControlShape oCShape = null;
493*b1cdbd2cSJim Jagielski         XControlModel aControl = null;
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski         //get MSF
496*b1cdbd2cSJim Jagielski         XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski         try {
499*b1cdbd2cSJim Jagielski             Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape");
500*b1cdbd2cSJim Jagielski             Object aCon = oDocMSF.createInstance("com.sun.star.form.component." + kind);
501*b1cdbd2cSJim Jagielski             aControl = (XControlModel) UnoRuntime.queryInterface(XControlModel.class, aCon);
502*b1cdbd2cSJim Jagielski             oCShape = (XControlShape) UnoRuntime.queryInterface(XControlShape.class, oInt);
503*b1cdbd2cSJim Jagielski             size.Height = height;
504*b1cdbd2cSJim Jagielski             size.Width = width;
505*b1cdbd2cSJim Jagielski             position.X = x;
506*b1cdbd2cSJim Jagielski             position.Y = y;
507*b1cdbd2cSJim Jagielski             oCShape.setSize(size);
508*b1cdbd2cSJim Jagielski             oCShape.setPosition(position);
509*b1cdbd2cSJim Jagielski 
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski         } catch (Exception e) {
512*b1cdbd2cSJim Jagielski             // Some exception occures.FAILED
513*b1cdbd2cSJim Jagielski             System.out.println("Couldn't create instance " + e);
514*b1cdbd2cSJim Jagielski         }
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski         try {
517*b1cdbd2cSJim Jagielski             oCShape.setControl(aControl);
518*b1cdbd2cSJim Jagielski         } catch (Exception e) {
519*b1cdbd2cSJim Jagielski             // Some exception occures.FAILED
520*b1cdbd2cSJim Jagielski             System.out.println("Couldn't get Control " + e);
521*b1cdbd2cSJim Jagielski         }
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski         return oCShape;
525*b1cdbd2cSJim Jagielski 
526*b1cdbd2cSJim Jagielski     }
527*b1cdbd2cSJim Jagielski 
loadDocument(String fileName)528*b1cdbd2cSJim Jagielski     public XComponent loadDocument(String fileName)
529*b1cdbd2cSJim Jagielski         throws com.sun.star.lang.IllegalArgumentException,
530*b1cdbd2cSJim Jagielski         com.sun.star.io.IOException,
531*b1cdbd2cSJim Jagielski         com.sun.star.uno.Exception {
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski         // that noargs thing for load attributes
534*b1cdbd2cSJim Jagielski         PropertyValue[] szEmptyArgs = new PropertyValue[0];
535*b1cdbd2cSJim Jagielski         String frameName = "_blank";
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski         XComponent oDoc = oCLoader.loadComponentFromURL(
538*b1cdbd2cSJim Jagielski             fileName, frameName, 0, szEmptyArgs);
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski         if (oDoc == null) {
541*b1cdbd2cSJim Jagielski             return null;
542*b1cdbd2cSJim Jagielski         }
543*b1cdbd2cSJim Jagielski         DesktopTools.bringWindowToFront(oDoc);
544*b1cdbd2cSJim Jagielski         return oDoc;
545*b1cdbd2cSJim Jagielski     }
546*b1cdbd2cSJim Jagielski 
loadDocument(String fileName, PropertyValue[] Args)547*b1cdbd2cSJim Jagielski     public XComponent loadDocument(String fileName, PropertyValue[] Args)
548*b1cdbd2cSJim Jagielski         throws com.sun.star.lang.IllegalArgumentException,
549*b1cdbd2cSJim Jagielski         com.sun.star.io.IOException,
550*b1cdbd2cSJim Jagielski         com.sun.star.uno.Exception {
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski         // that noargs thing for load attributes
553*b1cdbd2cSJim Jagielski         String frameName = "_blank";
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski         XComponent oDoc = oCLoader.loadComponentFromURL(
556*b1cdbd2cSJim Jagielski             fileName, frameName, 0, Args);
557*b1cdbd2cSJim Jagielski 
558*b1cdbd2cSJim Jagielski         if (oDoc == null) {
559*b1cdbd2cSJim Jagielski             return null;
560*b1cdbd2cSJim Jagielski         }
561*b1cdbd2cSJim Jagielski         DesktopTools.bringWindowToFront(oDoc);
562*b1cdbd2cSJim Jagielski 
563*b1cdbd2cSJim Jagielski         return oDoc;
564*b1cdbd2cSJim Jagielski     }
565*b1cdbd2cSJim Jagielski 
openDoc(String kind, String frameName)566*b1cdbd2cSJim Jagielski     public XComponent openDoc(String kind, String frameName)
567*b1cdbd2cSJim Jagielski         throws com.sun.star.lang.IllegalArgumentException,
568*b1cdbd2cSJim Jagielski         com.sun.star.io.IOException,
569*b1cdbd2cSJim Jagielski         com.sun.star.uno.Exception {
570*b1cdbd2cSJim Jagielski 
571*b1cdbd2cSJim Jagielski         // that noargs thing for load attributes
572*b1cdbd2cSJim Jagielski         PropertyValue[] Args = null;
573*b1cdbd2cSJim Jagielski         if (kind.equals("simpress")) {
574*b1cdbd2cSJim Jagielski             Args = new PropertyValue[1];
575*b1cdbd2cSJim Jagielski             PropertyValue Arg = new PropertyValue();
576*b1cdbd2cSJim Jagielski             Arg.Name = "OpenFlags";
577*b1cdbd2cSJim Jagielski             Arg.Value = "S";
578*b1cdbd2cSJim Jagielski             Arg.Handle = -1;
579*b1cdbd2cSJim Jagielski             Arg.State = PropertyState.DEFAULT_VALUE;
580*b1cdbd2cSJim Jagielski             Args[0] = Arg;
581*b1cdbd2cSJim Jagielski         } else {
582*b1cdbd2cSJim Jagielski             Args = new PropertyValue[0];
583*b1cdbd2cSJim Jagielski         }
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski         if (frameName == null) {
586*b1cdbd2cSJim Jagielski             frameName = "_blank";
587*b1cdbd2cSJim Jagielski         }
588*b1cdbd2cSJim Jagielski         // load a blank a doc
589*b1cdbd2cSJim Jagielski         XComponent oDoc = oCLoader.loadComponentFromURL("private:factory/" + kind, frameName, 40, Args);
590*b1cdbd2cSJim Jagielski         DesktopTools.bringWindowToFront(oDoc);
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski         return oDoc;
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski     } // finished openDoc
595*b1cdbd2cSJim Jagielski 
openDoc(String kind, String frameName, PropertyValue[] mediaDescriptor)596*b1cdbd2cSJim Jagielski     public XComponent openDoc(String kind, String frameName, PropertyValue[] mediaDescriptor)
597*b1cdbd2cSJim Jagielski         throws com.sun.star.lang.IllegalArgumentException,
598*b1cdbd2cSJim Jagielski         com.sun.star.io.IOException,
599*b1cdbd2cSJim Jagielski         com.sun.star.uno.Exception {
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski         if (frameName == null) {
602*b1cdbd2cSJim Jagielski             frameName = "_blank";
603*b1cdbd2cSJim Jagielski         }
604*b1cdbd2cSJim Jagielski         // load a blank a doc
605*b1cdbd2cSJim Jagielski         XComponent oDoc = oCLoader.loadComponentFromURL(
606*b1cdbd2cSJim Jagielski             "private:factory/" + kind, frameName, 40, mediaDescriptor);
607*b1cdbd2cSJim Jagielski         DesktopTools.bringWindowToFront(oDoc);
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski         return oDoc;
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski     } // finished openDoc
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski     // query for XServiceInfo
queryXServiceInfo(Object oObj)614*b1cdbd2cSJim Jagielski     public Object queryXServiceInfo(Object oObj) {
615*b1cdbd2cSJim Jagielski         if (oObj != null) {
616*b1cdbd2cSJim Jagielski             XServiceInfo oInfo = (XServiceInfo) UnoRuntime.queryInterface(
617*b1cdbd2cSJim Jagielski                 XServiceInfo.class, oObj);
618*b1cdbd2cSJim Jagielski             System.out.println("!!!! XServiceInfo n.a. !!!! ");
619*b1cdbd2cSJim Jagielski         } else {
620*b1cdbd2cSJim Jagielski             System.out.println("Object is empty!!!! ");
621*b1cdbd2cSJim Jagielski         }
622*b1cdbd2cSJim Jagielski         return null;
623*b1cdbd2cSJim Jagielski     } // finish queryXServiceInfo
624*b1cdbd2cSJim Jagielski }
625