2003-01-27 15:27:53 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* $RCSfile: DesktopTools.java,v $
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* $Revision: 1.4 $
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* last change: $Author: rt $ $Date: 2005-09-08 17:32:37 $
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* This library 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 for more details.
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
2005-09-08 16:32:37 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2003-01-27 15:27:53 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
package util;
|
|
|
|
|
2004-01-05 17:42:45 +00:00
|
|
|
import com.sun.star.beans.PropertyValue;
|
2005-02-02 12:59:31 +00:00
|
|
|
import com.sun.star.container.XEnumeration;
|
|
|
|
import com.sun.star.container.XEnumerationAccess;
|
2004-01-05 17:42:45 +00:00
|
|
|
import com.sun.star.frame.XComponentLoader;
|
|
|
|
import com.sun.star.frame.XDesktop;
|
|
|
|
import com.sun.star.lang.XComponent;
|
2003-01-27 15:27:53 +00:00
|
|
|
import com.sun.star.lang.XMultiServiceFactory;
|
2005-02-02 12:59:31 +00:00
|
|
|
import com.sun.star.lang.XServiceInfo;
|
2003-01-27 15:27:53 +00:00
|
|
|
import com.sun.star.uno.UnoRuntime;
|
|
|
|
|
2004-01-05 17:42:45 +00:00
|
|
|
// access the implementations via names
|
|
|
|
import com.sun.star.uno.XInterface;
|
|
|
|
import com.sun.star.util.XCloseable;
|
|
|
|
import com.sun.star.util.XModifiable;
|
2005-02-02 12:59:31 +00:00
|
|
|
import java.util.Vector;
|
2004-01-05 17:42:45 +00:00
|
|
|
|
2003-01-27 15:27:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* contains helper methods for the Desktop
|
|
|
|
*/
|
|
|
|
public class DesktopTools {
|
|
|
|
/**
|
|
|
|
* Queries the XComponentLoader
|
|
|
|
*
|
|
|
|
* @param xMSF the MultiServiceFactory
|
|
|
|
* @return the gained XComponentLoader
|
|
|
|
*/
|
2004-01-05 17:42:45 +00:00
|
|
|
public static XComponentLoader getCLoader(XMultiServiceFactory xMSF) {
|
|
|
|
XDesktop oDesktop = (XDesktop) UnoRuntime.queryInterface(
|
|
|
|
XDesktop.class, createDesktop(xMSF));
|
2003-01-27 15:27:53 +00:00
|
|
|
|
2004-01-05 17:42:45 +00:00
|
|
|
XComponentLoader oCLoader = (XComponentLoader) UnoRuntime.queryInterface(
|
|
|
|
XComponentLoader.class, oDesktop);
|
2003-01-27 15:27:53 +00:00
|
|
|
|
|
|
|
return oCLoader;
|
|
|
|
} // finish getCLoader
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an Instance of the Desktop service
|
|
|
|
*
|
|
|
|
* @param xMSF the MultiServiceFactory
|
|
|
|
* @return the gained Object
|
|
|
|
*/
|
2004-01-05 17:42:45 +00:00
|
|
|
public static Object createDesktop(XMultiServiceFactory xMSF) {
|
|
|
|
Object oInterface;
|
2003-01-27 15:27:53 +00:00
|
|
|
|
2004-01-05 17:42:45 +00:00
|
|
|
try {
|
|
|
|
oInterface = xMSF.createInstance("com.sun.star.frame.Desktop");
|
|
|
|
} catch (com.sun.star.uno.Exception e) {
|
|
|
|
throw new IllegalArgumentException("Desktop Service not available");
|
2003-01-27 15:27:53 +00:00
|
|
|
}
|
2004-01-05 17:42:45 +00:00
|
|
|
|
2003-01-27 15:27:53 +00:00
|
|
|
return oInterface;
|
|
|
|
} //finish createDesktop
|
|
|
|
|
2005-02-02 12:59:31 +00:00
|
|
|
/**
|
|
|
|
* returns a XEnumeration containing all components containing on the desktop
|
|
|
|
*/
|
|
|
|
public static XEnumeration getAllComponents(XMultiServiceFactory xMSF) {
|
|
|
|
XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(
|
|
|
|
XDesktop.class, createDesktop(xMSF));
|
|
|
|
return xDesktop.getComponents().createEnumeration();
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* returns an object arrary of all open documents
|
|
|
|
*/
|
|
|
|
public static Object[] getAllOpenDocuments(XMultiServiceFactory xMSF) {
|
|
|
|
Vector components = new Vector();
|
|
|
|
XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(
|
|
|
|
XDesktop.class, createDesktop(xMSF));
|
|
|
|
|
|
|
|
XEnumeration allComp = getAllComponents(xMSF);
|
|
|
|
|
|
|
|
while (allComp.hasMoreElements()){
|
|
|
|
try{
|
|
|
|
XComponent xComponent = (XComponent) UnoRuntime.queryInterface(
|
|
|
|
XComponent.class, allComp.nextElement());
|
|
|
|
|
|
|
|
if (getDocumentType(xComponent) != null) components.add(xComponent);
|
|
|
|
|
|
|
|
} catch (com.sun.star.container.NoSuchElementException e) {
|
|
|
|
} catch ( com.sun.star.lang.WrappedTargetException e) {}
|
|
|
|
}
|
|
|
|
return components.toArray();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String getDocumentType(XComponent xComponent) {
|
|
|
|
XServiceInfo sInfo = (XServiceInfo)UnoRuntime.queryInterface(
|
|
|
|
XServiceInfo.class, xComponent);
|
|
|
|
|
|
|
|
if (sInfo == null) {
|
|
|
|
return "";
|
|
|
|
} else if (sInfo.supportsService("com.sun.star.sheet.SpreadsheetDocument")) {
|
|
|
|
return "scalc";
|
|
|
|
} else if (sInfo.supportsService("com.sun.star.text.TextDocument")) {
|
|
|
|
return "swriter";
|
|
|
|
} else if (sInfo.supportsService("com.sun.star.drawing.DrawingDocument")) {
|
|
|
|
return "sdraw";
|
|
|
|
} else if (sInfo.supportsService("com.sun.star.formula.FormulaProperties")) {
|
|
|
|
return "smath";
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-01-27 15:27:53 +00:00
|
|
|
/**
|
|
|
|
* Opens a new document of a given kind
|
|
|
|
* with arguments
|
|
|
|
* @param xMSF the MultiServiceFactory
|
|
|
|
* @return the XComponent Interface of the document
|
|
|
|
*/
|
2004-01-05 17:42:45 +00:00
|
|
|
public static XComponent openNewDoc(XMultiServiceFactory xMSF, String kind,
|
|
|
|
PropertyValue[] Args) {
|
|
|
|
XComponent oDoc = null;
|
2003-01-27 15:27:53 +00:00
|
|
|
|
|
|
|
try {
|
2004-01-05 17:42:45 +00:00
|
|
|
oDoc = getCLoader(xMSF)
|
|
|
|
.loadComponentFromURL("private:factory/" + kind,
|
|
|
|
"_blank", 0, Args);
|
|
|
|
} catch (com.sun.star.uno.Exception e) {
|
|
|
|
throw new IllegalArgumentException("Document could not be opened");
|
2003-01-27 15:27:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return oDoc;
|
|
|
|
} //finish openNewDoc
|
|
|
|
|
|
|
|
/**
|
|
|
|
* loads a document of from a given url
|
|
|
|
* with arguments
|
|
|
|
* @param xMSF the MultiServiceFactory
|
|
|
|
* @return the XComponent Interface of the document
|
|
|
|
*/
|
2004-01-05 17:42:45 +00:00
|
|
|
public static XComponent loadDoc(XMultiServiceFactory xMSF, String url,
|
|
|
|
PropertyValue[] Args) {
|
|
|
|
XComponent oDoc = null;
|
2003-01-27 15:27:53 +00:00
|
|
|
|
|
|
|
try {
|
2004-01-05 17:42:45 +00:00
|
|
|
oDoc = getCLoader(xMSF)
|
|
|
|
.loadComponentFromURL(url, "_blank", 0, Args);
|
|
|
|
} catch (com.sun.star.uno.Exception e) {
|
|
|
|
throw new IllegalArgumentException("Document could not be loaded");
|
2003-01-27 15:27:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return oDoc;
|
|
|
|
} //finish openNewDoc
|
|
|
|
|
2004-01-05 17:42:45 +00:00
|
|
|
/**
|
|
|
|
* closes a given document
|
|
|
|
* @param DocumentToClose
|
|
|
|
*/
|
|
|
|
public static void closeDoc(XInterface DocumentToClose) {
|
|
|
|
String kd = System.getProperty("KeepDocument");
|
|
|
|
if (kd != null ) {
|
|
|
|
System.out.println("The property 'KeepDocument' is set and so the document won't be disposed");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
XModifiable modified = (XModifiable) UnoRuntime.queryInterface(
|
|
|
|
XModifiable.class, DocumentToClose);
|
|
|
|
XCloseable closer = (XCloseable) UnoRuntime.queryInterface(
|
|
|
|
XCloseable.class, DocumentToClose);
|
|
|
|
|
|
|
|
try {
|
|
|
|
modified.setModified(false);
|
|
|
|
closer.close(true);
|
|
|
|
} catch (com.sun.star.util.CloseVetoException e) {
|
|
|
|
System.out.println("Couldn't close document");
|
|
|
|
} catch (com.sun.star.lang.DisposedException e) {
|
|
|
|
System.out.println("Couldn't close document");
|
|
|
|
} catch (java.lang.NullPointerException e) {
|
|
|
|
System.out.println("Couldn't close document");
|
|
|
|
} catch (com.sun.star.beans.PropertyVetoException e) {
|
|
|
|
System.out.println("Couldn't close document");
|
|
|
|
}
|
|
|
|
}
|
2003-01-27 15:27:53 +00:00
|
|
|
}
|