blob: 48ccf820f203e9cccf5a845c1befc96088241ea5 [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 util;
import java.util.Hashtable;
// access the implementations via names
import com.sun.star.uno.XInterface;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
// staroffice interfaces to provide desktop and componentloader
// and components i.e. spreadsheets, writerdocs etc.
import com.sun.star.frame.XDesktop;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XServiceInfo;
// name - value pair
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.PropertyState;
// additional classes required for testcase
import com.sun.star.sheet.*;
import com.sun.star.text.*;
import com.sun.star.container.*;
import com.sun.star.chart.*;
import com.sun.star.drawing.*;
import com.sun.star.awt.*;
public class SOfficeFactory {
private static Hashtable lookup = new Hashtable(10);
protected XComponentLoader oCLoader;
private SOfficeFactory(XMultiServiceFactory xMSF) {
// get XInterface of Desktop service
Object oInterface;
try {
oInterface = xMSF.createInstance("com.sun.star.frame.Desktop");
} catch (com.sun.star.uno.Exception e) {
throw new IllegalArgumentException(
"Desktop Service not available");
}
// query the desktop interface and then it's componentloader
XDesktop oDesktop = (XDesktop) UnoRuntime.queryInterface(
XDesktop.class, oInterface);
oCLoader = (XComponentLoader) UnoRuntime.queryInterface(
XComponentLoader.class, oDesktop);
}
public static SOfficeFactory getFactory(XMultiServiceFactory xMSF) {
SOfficeFactory soFactory = (SOfficeFactory) lookup.get(new Integer(xMSF.hashCode()).toString());
if (soFactory == null) {
soFactory = new SOfficeFactory(xMSF);
lookup.put(new Integer(xMSF.hashCode()).toString(), soFactory);
}
return soFactory;
}
// *********************************************************
// Document creation. The documents needed are created here.
// *********************************************************
/**
* method which opens a new TextDocument
*
* @see XTextDocument
*/
public XTextDocument createTextDoc(String frameName)
throws com.sun.star.uno.Exception {
XComponent oDoc = openDoc("swriter", frameName);
if (oDoc != null) {
DesktopTools.bringWindowToFront(oDoc);
return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, oDoc);
} else {
return null;
}
} // finished createTextDoc
/**
* method which opens a new TextDocument
*
* @see XTextDocument
*/
public XTextDocument createTextDoc(String frameName, PropertyValue[] mediaDescriptor)
throws com.sun.star.uno.Exception {
XComponent oDoc = openDoc("swriter", frameName, mediaDescriptor);
if (oDoc != null) {
DesktopTools.bringWindowToFront(oDoc);
return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, oDoc);
} else {
return null;
}
} // finished createTextDoc
/**
* method which opens a new SpreadsheetDocument
*
* @see XSpreadsheetDocument
*/
public XSpreadsheetDocument createCalcDoc(String frameName)
throws com.sun.star.uno.Exception {
XComponent oDoc = openDoc("scalc", frameName);
if (oDoc != null) {
DesktopTools.bringWindowToFront(oDoc);
return (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, oDoc);
} else {
return null;
}
} // finished createCalcDoc
/**
* method which opens a new SpreadsheetDocument
*
* @see XSpreadsheetDocument
*/
public XSpreadsheetDocument createCalcDoc(String frameName, PropertyValue[] mediaDescriptor)
throws com.sun.star.uno.Exception {
XComponent oDoc = openDoc("scalc", frameName, mediaDescriptor);
if (oDoc != null) {
DesktopTools.bringWindowToFront(oDoc);
return (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, oDoc);
} else {
return null;
}
} // finished createCalcDoc
/**
* method which opens a new DrawDocument
*/
public XComponent createDrawDoc(String frameName)
throws com.sun.star.uno.Exception {
return openDoc("sdraw", frameName);
} // finished createDrawDoc
/**
* method which opens a new ImpressDocument
*/
/**
* method which opens a new DrawDocument
*/
public XComponent createDrawDoc(String frameName, PropertyValue[] mediaDescriptor)
throws com.sun.star.uno.Exception {
return openDoc("sdraw", frameName, mediaDescriptor);
} // finished createDrawDoc
/**
* method which opens a new ImpressDocument
*/
public XComponent createImpressDoc(String frameName)
throws com.sun.star.uno.Exception {
return openDoc("simpress", frameName);
} // finished createImpressDoc
/**
* method which opens a new ImpressDocument
*/
public XComponent createImpressDoc(String frameName, PropertyValue[] mediaDescriptor)
throws com.sun.star.uno.Exception {
return openDoc("simpress", frameName, mediaDescriptor);
} // finished createImpressDoc
/**
* method which opens a new MathDocument
*/
public XComponent createMathDoc(String frameName)
throws com.sun.star.uno.Exception {
return openDoc("smath", frameName);
} // finished createMathDoc
/**
* method which opens a new MathDocument
*/
public XComponent createMathDoc(String frameName, PropertyValue[] mediaDescriptor)
throws com.sun.star.uno.Exception {
return openDoc("smath", frameName, mediaDescriptor);
} // finished createMathDoc
/**
* method which opens a new ChartDocument
*
* @see XChartDocument
*/
public XChartDocument createChartDoc(String frameName)
throws com.sun.star.uno.Exception {
// XComponent oDoc = loadDocument(
// util.utils.getFullTestURL("emptyChart.sds"));
XComponent oDoc = loadDocument("private:factory/schart");
if (oDoc != null) {
DesktopTools.bringWindowToFront(oDoc);
return (XChartDocument) UnoRuntime.queryInterface(XChartDocument.class, oDoc);
} else {
return null;
}
} // finished createChartDoc
/**
* creates a simple TextTable defaultet to 2 rows and 2 columns
*/
public static XTextTable createTextTable(XTextDocument xTextDoc)
throws com.sun.star.uno.Exception {
TableDsc tDsc = new TableDsc();
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextTable oTable = (XTextTable) instCreate.getInstance();
return oTable;
}
/**
* creates a TextTable with a specified count of rows and columns
*/
public static XTextTable createTextTable(XTextDocument xTextDoc,
int rows, int columns)
throws com.sun.star.uno.Exception {
TableDsc tDsc = new TableDsc(rows, columns);
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextTable oTable = (XTextTable) instCreate.getInstance();
return oTable;
}
/**
* creates a simple TextFrame
* ... to be continued
*/
public static XTextFrame createTextFrame(XTextDocument xTextDoc)
throws com.sun.star.uno.Exception {
FrameDsc tDsc = new FrameDsc();
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextFrame oFrame = (XTextFrame) instCreate.getInstance();
return oFrame;
}
/**
* creates a simple TextFrame
* ... to be continued
*/
public static XTextFrame createTextFrame(XTextDocument xTextDoc,
int height, int width) {
FrameDsc tDsc = new FrameDsc(height, width);
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextFrame oFrame = (XTextFrame) instCreate.getInstance();
return oFrame;
}
public static void insertString(XTextDocument xTextDoc, String cString)
throws com.sun.star.uno.Exception {
XText xText = xTextDoc.getText();
XText oText = (XText) UnoRuntime.queryInterface(
XText.class, xText);
XTextCursor oCursor = oText.createTextCursor();
oText.insertString(oCursor, cString, false);
}
public static void insertTextContent(XTextDocument xTextDoc,
XTextContent xCont)
throws com.sun.star.lang.IllegalArgumentException {
XText xText = xTextDoc.getText();
XText oText = (XText) UnoRuntime.queryInterface(
XText.class, xText);
XTextCursor oCursor = oText.createTextCursor();
oText.insertTextContent(oCursor, xCont, false);
}
public static com.sun.star.table.XCell getFirstTableCell(
XTextContent oTable) {
String CellNames[] = ((XTextTable) oTable).getCellNames();
com.sun.star.table.XCell oCell = ((XTextTable) oTable).getCellByName(
CellNames[0]);
return oCell;
}
/**
* the method createBookmark
*/
public static XTextContent createBookmark(XTextDocument xTextDoc)
throws com.sun.star.uno.Exception {
BookmarkDsc tDsc = new BookmarkDsc();
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextContent oBookmark = (XTextContent) instCreate.getInstance();
return oBookmark;
} /// finish createBookmark
/**
* the method createReferenceMark
*/
public static XTextContent createReferenceMark(XTextDocument xTextDoc)
throws com.sun.star.uno.Exception {
ReferenceMarkDsc tDsc = new ReferenceMarkDsc();
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextContent oReferenceMark = (XTextContent) instCreate.getInstance();
return oReferenceMark;
} /// finish createReferenceMark
/**
* the method createFootnote
*/
public static XTextContent createFootnote(XTextDocument xTextDoc)
throws com.sun.star.uno.Exception {
FootnoteDsc tDsc = new FootnoteDsc();
InstCreator instCreate = new InstCreator(xTextDoc, tDsc);
XTextContent oFootnote = (XTextContent) instCreate.getInstance();
return oFootnote;
} /// finish createFootnote
/**
* the method create Index
*/
public static XTextContent createIndex(XTextDocument xTextDoc, String kind)
throws com.sun.star.uno.Exception {
XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class,
xTextDoc);
Object oInt = oDocMSF.createInstance(kind);
XTextContent xTC = (XTextContent) UnoRuntime.queryInterface(XDocumentIndex.class, oInt);
return xTC;
}
public static XSpreadsheet createSpreadsheet(XSpreadsheetDocument oDoc)
throws com.sun.star.uno.Exception {
XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
Object oInt = oDocMSF.createInstance(
"com.sun.star.sheet.Spreadsheet");
XSpreadsheet oSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, oInt);
return oSpreadsheet;
}
public static XIndexAccess getTableCollection(XTextDocument oDoc) {
XTextTablesSupplier oTTS = (XTextTablesSupplier) UnoRuntime.queryInterface(XTextTablesSupplier.class, oDoc);
XNameAccess oNA = oTTS.getTextTables();
XIndexAccess oIA = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, oNA);
return oIA;
}
public static String getUniqueName(XInterface oInterface, String prefix) {
XNameAccess oNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oInterface);
if (oNameAccess == null) {
return null;
}
int i;
for (i = 0; oNameAccess.hasByName(prefix + i); i++) {
}
return prefix + i;
}
public XShape createShape(XComponent oDoc, int height, int width, int x, int y, String kind) {
//possible values for kind are 'Ellipse', 'Line' and 'Rectangle'
ShapeDsc sDsc = new ShapeDsc(height, width, x, y, kind);
InstCreator instCreate = new InstCreator(oDoc, sDsc);
XShape oShape = (XShape) instCreate.getInstance();
return oShape;
}
/**
* creates a Diagram wich specified in kind(String)
*/
public XDiagram createDiagram(XComponent oDoc, String kind) {
XInterface oInterface = null;
XDiagram oDiagram = null;
//get LineDiagram
XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
try {
oInterface = (XInterface) oDocMSF.createInstance("com.sun.star.chart." + kind);
oDiagram = (XDiagram) UnoRuntime.queryInterface(XDiagram.class, oInterface);
} catch (Exception e) {
// Some exception occures.FAILED
System.out.println("Couldn't create " + kind + "-Diagram " + e);
}
return oDiagram;
}
/*
// create a Control-Instance which specified in kind(String)
*/
public XInterface createControl(XComponent oDoc, String kind) {
XInterface oControl = null;
XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
try {
oControl = (XInterface) oDocMSF.createInstance("com.sun.star.form.component." + kind);
} catch (Exception e) {
// Some exception occures.FAILED
System.out.println("Couldn't create instance " + kind + ": " + e);
}
return oControl;
}
/*
// create an Instance which is specified in kind(String)
*/
public Object createInstance(XComponent oDoc, String kind) {
Object oInstance = null;
XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
try {
oInstance = (Object) oDocMSF.createInstance(kind);
} catch (Exception e) {
// Some exception occures.FAILED
System.out.println("Couldn't create instance " + kind + ": " + e);
}
return oInstance;
}
public XControlShape createControlShape(XComponent oDoc, int height, int width, int x, int y, String kind) {
Size size = new Size();
Point position = new Point();
XControlShape oCShape = null;
XControlModel aControl = null;
//get MSF
XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
try {
Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape");
Object aCon = oDocMSF.createInstance("com.sun.star.form.component." + kind);
aControl = (XControlModel) UnoRuntime.queryInterface(XControlModel.class, aCon);
oCShape = (XControlShape) UnoRuntime.queryInterface(XControlShape.class, oInt);
size.Height = height;
size.Width = width;
position.X = x;
position.Y = y;
oCShape.setSize(size);
oCShape.setPosition(position);
} catch (Exception e) {
// Some exception occures.FAILED
System.out.println("Couldn't create instance " + e);
}
try {
oCShape.setControl(aControl);
} catch (Exception e) {
// Some exception occures.FAILED
System.out.println("Couldn't get Control " + e);
}
return oCShape;
}
public XComponent loadDocument(String fileName)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.io.IOException,
com.sun.star.uno.Exception {
// that noargs thing for load attributes
PropertyValue[] szEmptyArgs = new PropertyValue[0];
String frameName = "_blank";
XComponent oDoc = oCLoader.loadComponentFromURL(
fileName, frameName, 0, szEmptyArgs);
if (oDoc == null) {
return null;
}
DesktopTools.bringWindowToFront(oDoc);
return oDoc;
}
public XComponent loadDocument(String fileName, PropertyValue[] Args)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.io.IOException,
com.sun.star.uno.Exception {
// that noargs thing for load attributes
String frameName = "_blank";
XComponent oDoc = oCLoader.loadComponentFromURL(
fileName, frameName, 0, Args);
if (oDoc == null) {
return null;
}
DesktopTools.bringWindowToFront(oDoc);
return oDoc;
}
public XComponent openDoc(String kind, String frameName)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.io.IOException,
com.sun.star.uno.Exception {
// that noargs thing for load attributes
PropertyValue[] Args = null;
if (kind.equals("simpress")) {
Args = new PropertyValue[1];
PropertyValue Arg = new PropertyValue();
Arg.Name = "OpenFlags";
Arg.Value = "S";
Arg.Handle = -1;
Arg.State = PropertyState.DEFAULT_VALUE;
Args[0] = Arg;
} else {
Args = new PropertyValue[0];
}
if (frameName == null) {
frameName = "_blank";
}
// load a blank a doc
XComponent oDoc = oCLoader.loadComponentFromURL("private:factory/" + kind, frameName, 40, Args);
DesktopTools.bringWindowToFront(oDoc);
return oDoc;
} // finished openDoc
public XComponent openDoc(String kind, String frameName, PropertyValue[] mediaDescriptor)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.io.IOException,
com.sun.star.uno.Exception {
if (frameName == null) {
frameName = "_blank";
}
// load a blank a doc
XComponent oDoc = oCLoader.loadComponentFromURL(
"private:factory/" + kind, frameName, 40, mediaDescriptor);
DesktopTools.bringWindowToFront(oDoc);
return oDoc;
} // finished openDoc
// query for XServiceInfo
public Object queryXServiceInfo(Object oObj) {
if (oObj != null) {
XServiceInfo oInfo = (XServiceInfo) UnoRuntime.queryInterface(
XServiceInfo.class, oObj);
System.out.println("!!!! XServiceInfo n.a. !!!! ");
} else {
System.out.println("Object is empty!!!! ");
}
return null;
} // finish queryXServiceInfo
}