| /************************************************************** |
| * |
| * 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 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.task.XInteractionHandler; |
| 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 = 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"; //PropertyNames.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 = UnoRuntime.queryInterface(XModifiable.class, xComponent); |
| 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 = PropertyNames.READ_ONLY; |
| 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 = UnoRuntime.queryInterface(XComponentLoader.class, frame); |
| /*if (frame.getName() == null || frame.getName().equals(PropertyNames.EMPTY_STRING)); |
| frame.setName("T" + System.currentTimeMillis());*/ |
| XComponent xComponent = xComponentLoader.loadComponentFromURL(sURL, "_self", 0, loadValues); |
| |
| if (sDocumentType.equals("swriter")) |
| { |
| oDocument = UnoRuntime.queryInterface(XTextDocument.class, xComponent); |
| } |
| else if (sDocumentType.equals("scalc")) |
| { |
| oDocument = 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 = UnoRuntime.queryInterface(XFrame.class, Desktop.getDesktop(xMSF)); |
| xFrame = xF.findFrame(FrameName, 0); |
| if (listener != null) |
| { |
| XFramesSupplier xFS = UnoRuntime.queryInterface(XFramesSupplier.class, xF); |
| XFrames xFF = xFS.getFrames(); |
| xFF.remove(xFrame); |
| 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 = 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 = UnoRuntime.queryInterface(XWindowPeer.class, xToolkit.createWindow(aDescriptor)); |
| } |
| catch (IllegalArgumentException e) |
| { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| 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 = 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 = UnoRuntime.queryInterface(XComponentLoader.class, xInterface); |
| com.sun.star.lang.XComponent xComponent = xComponentLoader.loadComponentFromURL(sURL, sFrame, 0, xValues); |
| |
| XServiceInfo xComponentService = UnoRuntime.queryInterface(XServiceInfo.class, xComponent); |
| if (xComponentService.supportsService("com.sun.star.text.TextDocument")) |
| { |
| oDocument = 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) |
| { |
| try |
| { |
| XStorable xStoreable = UnoRuntime.queryInterface(XStorable.class, xComponent); |
| PropertyValue[] oStoreProperties; |
| if (FilterName.length() > 0) |
| { |
| oStoreProperties = new PropertyValue[2]; |
| oStoreProperties[0] = new PropertyValue(); |
| oStoreProperties[0].Name = "FilterName"; |
| oStoreProperties[0].Value = FilterName; |
| oStoreProperties[1] = new PropertyValue(); |
| oStoreProperties[1].Name = "InteractionHandler"; |
| oStoreProperties[1].Value = UnoRuntime.queryInterface(XInteractionHandler.class, xMSF.createInstance("com.sun.star.comp.uui.UUIInteractionHandler")); |
| } |
| else |
| { |
| oStoreProperties = new PropertyValue[0]; |
| } |
| if (bStoreToUrl) |
| { |
| xStoreable.storeToURL(StorePath, oStoreProperties); |
| } |
| else |
| { |
| xStoreable.storeAsURL(StorePath, oStoreProperties); |
| } |
| return true; |
| } |
| catch (Exception exception) |
| { |
| |
| exception.printStackTrace(System.out); |
| return false; |
| } |
| } |
| |
| public static boolean close(XComponent xComponent) |
| { |
| boolean bState = false; |
| XModel xModel = UnoRuntime.queryInterface(XModel.class, xComponent); |
| |
| if (xModel != null) |
| { |
| 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 = 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 = UnoRuntime.queryInterface(XCellRange.class, oTable); |
| XCellRange xNewRange = xCellRange.getCellRangeByPosition(xpos, ypos, (colcount + xpos) - 1, (rowcount + ypos) - 1); |
| XCellRangeData xDataArray = 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 = PropertyNames.URL; |
| mediaDescr[0][0].Value = url; |
| |
| String type = UnoRuntime.queryInterface(XTypeDetection.class, typeDetect).queryTypeByDescriptor(mediaDescr, true); |
| |
| XNameAccess xNameAccess = UnoRuntime.queryInterface(XNameAccess.class, typeDetect); |
| if (type.equals(PropertyNames.EMPTY_STRING)) |
| { |
| 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 = 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 = UnoRuntime.queryInterface(XDrawPagesSupplier.class, model); |
| return xDrawPagesSupplier.getDrawPages().getCount(); |
| } |
| |
| public static XDocumentProperties getDocumentProperties(Object document) |
| { |
| 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; |
| } |
| } |