diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/document/OfficeDocument.java')
-rw-r--r-- | wizards/com/sun/star/wizards/document/OfficeDocument.java | 457 |
1 files changed, 457 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/document/OfficeDocument.java b/wizards/com/sun/star/wizards/document/OfficeDocument.java new file mode 100644 index 000000000000..4cb78cd967c3 --- /dev/null +++ b/wizards/com/sun/star/wizards/document/OfficeDocument.java @@ -0,0 +1,457 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +package com.sun.star.wizards.document; + +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.container.XNameAccess; +import com.sun.star.document.XDocumentProperties; +import com.sun.star.document.XDocumentPropertiesSupplier; +import com.sun.star.document.XEventsSupplier; +import com.sun.star.document.XTypeDetection; +import com.sun.star.drawing.XDrawPagesSupplier; +import com.sun.star.wizards.common.*; +import com.sun.star.awt.Rectangle; +import com.sun.star.awt.VclWindowPeerAttribute; +import com.sun.star.awt.WindowAttribute; +import com.sun.star.awt.WindowDescriptor; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XWindow; +import com.sun.star.awt.XWindowPeer; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.PropertyVetoException; +import com.sun.star.sheet.XCellRangeData; +import com.sun.star.sheet.XSpreadsheetDocument; +import com.sun.star.table.XCellRange; +import com.sun.star.text.XTextDocument; +import com.sun.star.uno.Exception; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XInterface; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.frame.XComponentLoader; +import com.sun.star.frame.XDesktop; +import com.sun.star.frame.XFrame; +import com.sun.star.frame.XFrames; +import com.sun.star.frame.XFramesSupplier; +import com.sun.star.frame.XModel; +import com.sun.star.frame.XStorable; +import com.sun.star.frame.XTerminateListener; +import com.sun.star.util.XCloseable; +import com.sun.star.util.XModifiable; + +public class OfficeDocument +{ + + private XWindowPeer xWindowPeer; + private XMultiServiceFactory xMSF; + + /** Creates a new instance of OfficeDocument */ + public OfficeDocument(XMultiServiceFactory _xMSF) + { + xMSF = _xMSF; + } + + public static void attachEventCall(XComponent xComponent, String EventName, String EventType, String EventURL) + { + try + { + XEventsSupplier xEventsSuppl = (XEventsSupplier) UnoRuntime.queryInterface(XEventsSupplier.class, xComponent); + PropertyValue[] oEventProperties = new PropertyValue[2]; + oEventProperties[0] = new PropertyValue(); + oEventProperties[0].Name = "EventType"; + oEventProperties[0].Value = EventType; // "Service", "StarBasic" + oEventProperties[1] = new PropertyValue(); + oEventProperties[1].Name = "Script"; //"URL"; + oEventProperties[1].Value = EventURL; + xEventsSuppl.getEvents().replaceByName(EventName, oEventProperties); + } + catch (Exception exception) + { + exception.printStackTrace(System.out); + } + } + + public static void dispose(XMultiServiceFactory xMSF, XComponent xComponent) + { + try + { + if (xComponent != null) + { + XModifiable xModified = (XModifiable) UnoRuntime.queryInterface(XModifiable.class, xComponent); + XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xComponent); + XFrame xFrame = xModel.getCurrentController().getFrame(); + if (xModified.isModified()) + { + xModified.setModified(false); + } + Desktop.dispatchURL(xMSF, ".uno:CloseDoc", xFrame); + } + } + catch (PropertyVetoException exception) + { + exception.printStackTrace(System.out); + } + } + + /** + * Create a new office document, attached to the given frame. + * @param desktop + * @param frame + * @param sDocumentType e.g. swriter, scalc, ( simpress, scalc : not tested) + * @return the document Component (implements XComponent) object ( XTextDocument, or XSpreadsheedDocument ) + */ + public static Object createNewDocument(XFrame frame, String sDocumentType, boolean preview, boolean readonly) + { + + PropertyValue[] loadValues = new PropertyValue[2]; + loadValues[0] = new PropertyValue(); + loadValues[0].Name = "ReadOnly"; + loadValues[0].Value = readonly ? Boolean.TRUE : Boolean.FALSE; + loadValues[1] = new PropertyValue(); + loadValues[1].Name = "Preview"; + loadValues[1].Value = preview ? Boolean.TRUE : Boolean.FALSE; + + Object oDocument = null; + com.sun.star.frame.XComponentLoader xComponentLoader = null; + XInterface xInterface = null; + String sURL = "private:factory/" + sDocumentType; + + try + { + xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, frame); + /*if (frame.getName() == null || frame.getName().equals("")); + frame.setName("T" + System.currentTimeMillis());*/ + XComponent xComponent = xComponentLoader.loadComponentFromURL(sURL, "_self", 0, loadValues); + + if (sDocumentType == "swriter") + { + oDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); + } + else if (sDocumentType == "scalc") + { + oDocument = (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, xComponent); + //TODO: + // else if (sDocumentType == "simpress") + // else if (sDocumentType == "sdraw") + } + } + catch (Exception exception) + { + exception.printStackTrace(System.out); + } + return oDocument; + } + + public static XFrame createNewFrame(XMultiServiceFactory xMSF, XTerminateListener listener) + { + return createNewFrame(xMSF, listener, "_blank"); + } + + public static XFrame createNewFrame(XMultiServiceFactory xMSF, XTerminateListener listener, String FrameName) + { + XFrame xFrame = null; + if (FrameName.equalsIgnoreCase("WIZARD_LIVE_PREVIEW")) + { + xFrame = createNewPreviewFrame(xMSF, listener); + } + else + { + XFrame xF = (XFrame) UnoRuntime.queryInterface(XFrame.class, Desktop.getDesktop(xMSF)); + xFrame = xF.findFrame(FrameName, 0); + if (listener != null) + { + XFramesSupplier xFS = (XFramesSupplier) UnoRuntime.queryInterface(XFramesSupplier.class, xF); + XFrames xFF = xFS.getFrames(); + xFF.remove(xFrame); + XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, xF); + xDesktop.addTerminateListener(listener); + } + } + return xFrame; + } + + public static XFrame createNewPreviewFrame(XMultiServiceFactory xMSF, XTerminateListener listener) + { + XToolkit xToolkit = null; + try + { + xToolkit = (XToolkit) UnoRuntime.queryInterface(XToolkit.class, xMSF.createInstance("com.sun.star.awt.Toolkit")); + } + catch (Exception e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //describe the window and its properties + WindowDescriptor aDescriptor = new WindowDescriptor(); + aDescriptor.Type = com.sun.star.awt.WindowClass.TOP; + aDescriptor.WindowServiceName = "window"; + aDescriptor.ParentIndex = -1; + aDescriptor.Parent = null; + aDescriptor.Bounds = new Rectangle(10, 10, 640, 480); + aDescriptor.WindowAttributes = WindowAttribute.BORDER | + WindowAttribute.MOVEABLE | + WindowAttribute.SIZEABLE | + //WindowAttribute.CLOSEABLE | + VclWindowPeerAttribute.CLIPCHILDREN; + + //create a new blank container window + XWindowPeer xPeer = null; + try + { + xPeer = (XWindowPeer) UnoRuntime.queryInterface(XWindowPeer.class, xToolkit.createWindow(aDescriptor)); + } + catch (IllegalArgumentException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, xPeer); + + //define some further properties of the frame window + //if it's needed .-) + //xPeer->setBackground(...); + + //create new empty frame and set window on it + XFrame xFrame = null; + try + { + xFrame = (XFrame) UnoRuntime.queryInterface(XFrame.class, xMSF.createInstance("com.sun.star.frame.Frame")); + } + catch (Exception e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + xFrame.initialize(xWindow); + + //from now this frame is useable ... + //and not part of the desktop tree. + //You are alone with him .-) + + if (listener != null) + { + Desktop.getDesktop(xMSF).addTerminateListener(listener); + } + + return xFrame; + + } + + public static Object load(XInterface xInterface, String sURL, String sFrame, PropertyValue[] xValues) + { + // XComponent xComponent = null; + Object oDocument = null; + com.sun.star.frame.XComponentLoader xComponentLoader = null; + //XInterface xInterface = null; + try + { + xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, xInterface); + com.sun.star.lang.XComponent xComponent = xComponentLoader.loadComponentFromURL(sURL, sFrame, 0, xValues); + + XServiceInfo xComponentService = (XServiceInfo) UnoRuntime.queryInterface(XServiceInfo.class, xComponent); + if (xComponentService.supportsService("com.sun.star.text.TextDocument")) + { + oDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); //TODO: write if clauses for Calc, Impress and Draw + } + } + catch (Exception exception) + { + exception.printStackTrace(System.out); + } + return oDocument; + } + + public static boolean store(XMultiServiceFactory xMSF, XComponent xComponent, String StorePath, String FilterName, boolean bStoreToUrl, String sMsgSavingImpossible) + { + try + { + XStorable xStoreable = (XStorable) UnoRuntime.queryInterface(XStorable.class, xComponent); + PropertyValue[] oStoreProperties; + if (FilterName.length() > 0) + { + oStoreProperties = new PropertyValue[1]; + oStoreProperties[0] = new PropertyValue(); + oStoreProperties[0].Name = "FilterName"; + oStoreProperties[0].Value = FilterName; + } + else + { + oStoreProperties = new PropertyValue[0]; + } + if (bStoreToUrl == true) + { + xStoreable.storeToURL(StorePath, oStoreProperties); + } + else + { + xStoreable.storeAsURL(StorePath, oStoreProperties); + } + return true; + } + catch (Exception exception) + { + + exception.printStackTrace(System.out); + //TODO make sure that the peer of the dialog is used when available + showMessageBox(xMSF, "ErrorBox", VclWindowPeerAttribute.OK, sMsgSavingImpossible); + return false; + } + } + + public static boolean close(XComponent xComponent) + { + boolean bState = false; + XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xComponent); + + if (xModel != null) + { + XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, xModel); + + if (xCloseable != null) + { + try + { + xCloseable.close(true); + bState = true; + } + catch (com.sun.star.util.CloseVetoException exCloseVeto) + { + System.out.println("could not close doc"); + bState = false; + } + } + else + { + XComponent xDisposeable = (XComponent) UnoRuntime.queryInterface(XComponent.class, xModel); + xDisposeable.dispose(); + bState = true; + } + } + return bState; + } + + public static void ArraytoCellRange(Object[][] datalist, Object oTable, int xpos, int ypos) + { + try + { + int rowcount = datalist.length; + if (rowcount > 0) + { + int colcount = datalist[0].length; + if (colcount > 0) + { + XCellRange xCellRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, oTable); + XCellRange xNewRange = xCellRange.getCellRangeByPosition(xpos, ypos, (colcount + xpos) - 1, (rowcount + ypos) - 1); + XCellRangeData xDataArray = (XCellRangeData) UnoRuntime.queryInterface(XCellRangeData.class, xNewRange); + xDataArray.setDataArray(datalist); + } + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + public static PropertyValue[] getFileMediaDecriptor(XMultiServiceFactory xmsf, String url) + throws Exception + { + Object typeDetect = xmsf.createInstance("com.sun.star.document.TypeDetection"); + + PropertyValue[][] mediaDescr = new PropertyValue[1][1]; + mediaDescr[0][0] = new PropertyValue(); + mediaDescr[0][0].Name = "URL"; + mediaDescr[0][0].Value = url; + + String type = ((XTypeDetection) UnoRuntime.queryInterface(XTypeDetection.class, typeDetect)).queryTypeByDescriptor(mediaDescr, true); + + XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, typeDetect); + if (type.equals("")) + { + return null; + } + else + { + return (PropertyValue[]) xNameAccess.getByName(type); + } + } + + public static PropertyValue[] getTypeMediaDescriptor(XMultiServiceFactory xmsf, String type) + throws Exception + { + Object typeDetect = xmsf.createInstance("com.sun.star.document.TypeDetection"); + XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, typeDetect); + return (PropertyValue[]) xNameAccess.getByName(type); + } + + /** + * returns the count of slides in a presentation, + * or the count of pages in a draw document. + * @param model a presentation or a draw document + * @return the number of slides/pages in the given document. + */ + public static int getSlideCount(Object model) + { + XDrawPagesSupplier xDrawPagesSupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(XDrawPagesSupplier.class, model); + return xDrawPagesSupplier.getDrawPages().getCount(); + } + + public static XDocumentProperties getDocumentProperties(Object document) + { + XDocumentPropertiesSupplier xDocumentPropertiesSupplier = (XDocumentPropertiesSupplier) UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, document); + return xDocumentPropertiesSupplier.getDocumentProperties(); + } + + public static int showMessageBox(XMultiServiceFactory xMSF, String windowServiceName, int windowAttribute, String MessageText) + { +// if (getWindowPeer() != null) + // return SystemDialog.showMessageBox(xMSF, xWindowPeer, windowServiceName, windowAttribute, MessageText); +// else + return SystemDialog.showMessageBox(xMSF, windowServiceName, windowAttribute, MessageText); + } + + /** + * @return Returns the xWindowPeer. + */ + public XWindowPeer getWindowPeer() + { + return xWindowPeer; + } + + /** + * @param windowPeer The xWindowPeer to set. + * Should be called as soon as a Windowpeer of a wizard dialog is available + * The windowpeer is needed to call a Messagebox + */ + public void setWindowPeer(XWindowPeer windowPeer) + { + xWindowPeer = windowPeer; + } +} |