summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2003-06-10 09:33:00 +0000
committerVladimir Glazounov <vg@openoffice.org>2003-06-10 09:33:00 +0000
commit558e97f91fe47a2ef5111ea272df5606208e5a07 (patch)
tree866962b2389dbb8c63ec410ef4a67b34d6dec4fb
parent03b23ffdd01d8dcd471547fc8b7917b65df55ebc (diff)
INTEGRATION: CWS sdk02 (1.1.2); FILE ADDED
2003/05/21 14:02:39 jsc 1.1.2.1: #109045# new
-rw-r--r--odk/examples/DevelopersGuide/OfficeDev/DisableCommands/DisableCommandsTest.java354
1 files changed, 354 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/OfficeDev/DisableCommands/DisableCommandsTest.java b/odk/examples/DevelopersGuide/OfficeDev/DisableCommands/DisableCommandsTest.java
new file mode 100644
index 000000000000..90cf09caabbd
--- /dev/null
+++ b/odk/examples/DevelopersGuide/OfficeDev/DisableCommands/DisableCommandsTest.java
@@ -0,0 +1,354 @@
+/*************************************************************************
+ *
+ * $RCSfile: DisableCommandsTest.java,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: vg $ $Date: 2003-06-10 10:33:00 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+import com.sun.star.bridge.XUnoUrlResolver;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.util.XURLTransformer;
+import com.sun.star.frame.XDesktop;
+
+import com.sun.star.beans.UnknownPropertyException;
+/*
+ * PathSettingsTest.java
+ *
+ * Created on 28. March 2003, 12:22
+ */
+
+/*
+ *
+ * @author Carsten Driesner
+ * Provides example code how to enable/disable
+ * commands.
+ */
+public class DisableCommandsTest extends java.lang.Object {
+
+ /*
+ * A list of command names
+ */
+ final static private String[] aCommandURLTestSet =
+ {
+ new String( "Open" ),
+ new String( "About" ),
+ new String( "SelectAll" ),
+ new String( "Quit" ),
+ };
+
+ private static XComponentContext xRemoteContext = null;
+ private static XMultiComponentFactory xRemoteServiceManager = null;
+ private static XURLTransformer xTransformer = null;
+ private static XMultiServiceFactory xConfigProvider = null;
+
+ /*
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+
+ try {
+ // connect
+ XComponentContext xLocalContext =
+ com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);
+ XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();
+ Object urlResolver = xLocalServiceManager.createInstanceWithContext(
+ "com.sun.star.bridge.UnoUrlResolver", xLocalContext );
+ XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface(
+ XUnoUrlResolver.class, urlResolver );
+ Object initialObject = xUnoUrlResolver.resolve(
+ "uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" );
+ XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, initialObject);
+ Object context = xPropertySet.getPropertyValue("DefaultContext");
+ xRemoteContext = (XComponentContext)UnoRuntime.queryInterface(
+ XComponentContext.class, context);
+ xRemoteServiceManager = xRemoteContext.getServiceManager();
+ Object transformer = xRemoteServiceManager.createInstanceWithContext(
+ "com.sun.star.util.URLTransformer", xRemoteContext );
+ xTransformer = (com.sun.star.util.XURLTransformer)UnoRuntime.queryInterface(
+ com.sun.star.util.XURLTransformer.class, transformer );
+ Object configProvider = xRemoteServiceManager.createInstanceWithContext(
+ "com.sun.star.configuration.ConfigurationProvider",
+ xRemoteContext );
+ xConfigProvider = (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface(
+ com.sun.star.lang.XMultiServiceFactory.class, configProvider );
+
+ // First we need a defined starting point. So we have to remove
+ // all commands from the disabled set!
+ enableCommands();
+
+ // Check if the commands are usable
+ testCommands( false );
+
+ // Disable the commands
+ disableCommands();
+
+ // Now the commands shouldn't be usable anymore
+ testCommands( true );
+
+ // Remove disable commands to make Office usable again
+ enableCommands();
+ }
+ catch (java.lang.Exception e){
+ e.printStackTrace();
+ }
+ finally {
+ System.exit(0);
+ }
+ }
+
+ /**
+ * Test the commands that we enabled/disabled
+ */
+ private static void testCommands( boolean bDisabledCmds ) throws com.sun.star.uno.Exception
+ {
+ // We need the desktop to get access to the current frame
+ Object desktop = xRemoteServiceManager.createInstanceWithContext(
+ "com.sun.star.frame.Desktop", xRemoteContext );
+ com.sun.star.frame.XDesktop xDesktop = (com.sun.star.frame.XDesktop)UnoRuntime.queryInterface(
+ com.sun.star.frame.XDesktop.class, desktop );
+ com.sun.star.frame.XFrame xFrame = xDesktop.getCurrentFrame();
+ com.sun.star.frame.XDispatchProvider xDispatchProvider = null;
+ if ( xFrame != null )
+ {
+ // We have a frame. Now we need access to the dispatch provider.
+ xDispatchProvider =
+ (com.sun.star.frame.XDispatchProvider)UnoRuntime.queryInterface(
+ com.sun.star.frame.XDispatchProvider.class, xFrame );
+ if ( xDispatchProvider != null )
+ {
+ // As we have the dispatch provider we can now check if we get a dispatch
+ // object or not.
+ for ( int n = 0; n < aCommandURLTestSet.length; n++ )
+ {
+ // Prepare the URL
+ com.sun.star.util.URL[] aURL = new com.sun.star.util.URL[1];
+ aURL[0] = new com.sun.star.util.URL();
+ com.sun.star.frame.XDispatch xDispatch = null;
+
+ aURL[0].Complete = ".uno:" + aCommandURLTestSet[n];
+ xTransformer.parseSmart( aURL, ".uno:" );
+
+ // Try to get a dispatch object for our URL
+ xDispatch = xDispatchProvider.queryDispatch( aURL[0], "", 0 );
+
+ if ( xDispatch != null )
+ {
+ if ( bDisabledCmds )
+ System.out.println( "Something is wrong, I got dispatch object for " + aURL[0].Complete );
+ else
+ System.out.println( "Ok, dispatch object for " + aURL[0].Complete );
+ }
+ else
+ {
+ if ( !bDisabledCmds )
+ System.out.println( "Something is wrong, I cannot get dispatch object for " + aURL[0].Complete );
+ else
+ System.out.println( "Ok, no dispatch object for " + aURL[0].Complete );
+ }
+ resetURL( aURL[0] );
+ }
+ }
+ else
+ System.out.println( "Couldn't get XDispatchProvider from Frame!" );
+ }
+ else
+ System.out.println( "Couldn't get current Frame from Desktop!" );
+ }
+
+ /**
+ * Ensure that there are no disabled commands in the user layer. The
+ * implementation removes all commands from the disabled set!
+ */
+ private static void enableCommands() {
+ // Set the root path for our configuration access
+ com.sun.star.beans.PropertyValue[] lParams = new com.sun.star.beans.PropertyValue[1];
+
+ lParams[0] = new com.sun.star.beans.PropertyValue();
+ lParams[0].Name = new String("nodepath");
+ lParams[0].Value = "/org.openoffice.Office.Commands/Execute/Disabled";
+
+ try {
+ // Create configuration update access to have write access to the configuration
+ Object xAccess = xConfigProvider.createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationUpdateAccess", lParams );
+
+ com.sun.star.container.XNameAccess xNameAccess = (com.sun.star.container.XNameAccess)UnoRuntime.queryInterface(
+ com.sun.star.container.XNameAccess.class,
+ xAccess );
+ if ( xNameAccess != null ) {
+ // We need the XNameContainer interface to remove the nodes by name
+ com.sun.star.container.XNameContainer xNameContainer = (com.sun.star.container.XNameContainer)UnoRuntime.queryInterface(
+ com.sun.star.container.XNameContainer.class,
+ xAccess );
+
+ // Retrieves the names of all Disabled nodes
+ String[] aCommandsSeq = xNameAccess.getElementNames();
+ for ( int n = 0; n < aCommandsSeq.length; n++ ) {
+ try {
+ // remove the node
+ xNameContainer.removeByName( aCommandsSeq[n] );
+ }
+ catch ( com.sun.star.lang.WrappedTargetException e ) {
+ }
+ catch ( com.sun.star.container.NoSuchElementException e ) {
+ }
+ }
+ }
+
+ // Commit our changes
+ com.sun.star.util.XChangesBatch xFlush = (com.sun.star.util.XChangesBatch)UnoRuntime.queryInterface(
+ com.sun.star.util.XChangesBatch.class,
+ xAccess);
+ xFlush.commitChanges();
+ }
+ catch ( com.sun.star.uno.Exception e ) {
+ System.out.println( "Exception detected!" );
+ System.out.println( e );
+ }
+ }
+
+ /**
+ * Disable all commands defined in the aCommandURLTestSet array
+ */
+ private static void disableCommands() {
+ // Set the root path for our configuration access
+ com.sun.star.beans.PropertyValue[] lParams = new com.sun.star.beans.PropertyValue[1];
+ lParams[0] = new com.sun.star.beans.PropertyValue();
+ lParams[0].Name = new String("nodepath");
+ lParams[0].Value = "/org.openoffice.Office.Commands/Execute/Disabled";
+
+ try {
+ // Create configuration update access to have write access to the configuration
+ Object xAccess = xConfigProvider.createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationUpdateAccess", lParams );
+
+ com.sun.star.lang.XSingleServiceFactory xSetElementFactory =
+ (com.sun.star.lang.XSingleServiceFactory)UnoRuntime.queryInterface(
+ com.sun.star.lang.XSingleServiceFactory.class,
+ xAccess );
+
+ com.sun.star.container.XNameContainer xNameContainer = (com.sun.star.container.XNameContainer)UnoRuntime.queryInterface(
+ com.sun.star.container.XNameContainer.class,
+ xAccess );
+
+ if ( xSetElementFactory != null && xNameContainer != null ) {
+ Object[] aArgs = new Object[0];
+
+ for ( int i = 0; i < aCommandURLTestSet.length; i++ ) {
+ // Create the nodes with the XSingleServiceFactory of the configuration
+ Object xNewElement = xSetElementFactory.createInstanceWithArguments( aArgs );
+ if ( xNewElement != null ) {
+ // We have a new node. To set the properties of the node we need
+ // the XPropertySet interface.
+ com.sun.star.beans.XPropertySet xPropertySet =
+ (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
+ com.sun.star.beans.XPropertySet.class,
+ xNewElement );
+
+ if ( xPropertySet != null ) {
+ // Create a unique node name.
+ String aCmdNodeName = new String( "Command-" );
+ aCmdNodeName += i;
+
+ // Insert the node into the Disabled set
+ xPropertySet.setPropertyValue( "Command", aCommandURLTestSet[i] );
+ xNameContainer.insertByName( aCmdNodeName, xNewElement );
+ }
+ }
+ }
+
+ // Commit our changes
+ com.sun.star.util.XChangesBatch xFlush = (com.sun.star.util.XChangesBatch)UnoRuntime.queryInterface(
+ com.sun.star.util.XChangesBatch.class,
+ xAccess);
+ xFlush.commitChanges();
+ }
+ }
+ catch ( com.sun.star.uno.Exception e )
+ {
+ System.out.println( "Exception detected!" );
+ System.out.println( e );
+ }
+ }
+
+ /**
+ * reset URL so it can be reused
+ *
+ * @param aURL
+ * the URL that should be reseted
+ */
+ private static void resetURL( com.sun.star.util.URL aURL )
+ {
+ aURL.Protocol = "";
+ aURL.User = "";
+ aURL.Password = "";
+ aURL.Server = "";
+ aURL.Port = 0;
+ aURL.Path = "";
+ aURL.Name = "";
+ aURL.Arguments = "";
+ aURL.Mark = "";
+ aURL.Main = "";
+ aURL.Complete = "";
+ }
+}