diff options
Diffstat (limited to 'scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java')
-rw-r--r-- | scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java | 541 |
1 files changed, 541 insertions, 0 deletions
diff --git a/scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java b/scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java new file mode 100644 index 000000000000..242c800b48db --- /dev/null +++ b/scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java @@ -0,0 +1,541 @@ +/************************************************************************* + * + * 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.script.framework.security; + +import com.sun.star.awt.ActionEvent; +import com.sun.star.awt.ItemEvent; +import com.sun.star.awt.XItemListener; +import com.sun.star.awt.XButton; +import com.sun.star.awt.XCheckBox; +import com.sun.star.awt.XControl; +import com.sun.star.awt.XControlModel; +import com.sun.star.awt.XControlContainer; +import com.sun.star.awt.XDialog; +import com.sun.star.awt.XToolkit; +import com.sun.star.awt.XWindow; + +import com.sun.star.beans.XPropertySet; +import com.sun.star.comp.loader.FactoryHelper; +import com.sun.star.container.XNameContainer; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.EventObject; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XSingleServiceFactory; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.lang.XInitialization; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.registry.XRegistryKey; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.RuntimeException; +import com.sun.star.uno.XComponentContext; + +import com.sun.star.script.framework.log.LogUtils; + +public class SecurityDialog extends WeakBase implements XComponent, XServiceInfo, XDialog, +XInitialization { + + static final String __serviceName = "com.sun.star.script.framework.security.SecurityDialog"; + + private static final String _label1Name = "Label1"; + private static final String _label1String = "This document contains macros. Do you want to allow these macros to be run?"; + + private static final String _label2Name = "Label2"; + private static final String _label2String = "This document contains macros. According to the security settings, the"; + private static final String _label3Name = "Label3"; + private static final String _label3String = "macros in this document should not be run. Do you want to run them"; + private static final String _label4Name = "Label4"; + private static final String _label4String = "anyway?"; + + private static final String _checkBoxName = "CheckBox"; + private static final String _checkBoxString = "Add this directory to the list of secure paths: "; + private static final String _label5Name = "Label5"; + + private static final String _title = "Run Macro"; + private static final String _runMacro = "Run"; + private static final String _runButtonName = "Run"; + private static final String _doNotRunMacro = "Do Not Run"; + private static final String _doNotRunButtonName = "DoNotRun"; + + private static final int dialogX = 100; + private static final int dialogY = 100; + private static final int dialogW = 235; + private static final int dialogH = 47; + + private int cbIncrW = -20; + private int cbIncrH = 19; + + private static final int runButtonW = 40; + private static final int runButtonH = 13; + private static final int doNotRunButtonW = 40; + private static final int doNotRunButtonH = 13; + + // label for warning dialog + private static final int label1X = 20; + private static final int label1Y = 9; + private static final int label1W = 210; + private static final int label1H = 10; + + // labels for confirmation dialog + private static final int label2X = 22; + private static final int label2Y = 7; + private static final int label2W = 210; + private static final int label2H = 8; + private static final int label3X = 22; + private static final int label3Y = 15; + private static final int label3W = 210; + private static final int label3H = 8; + private static final int label4X = 22; + private static final int label4Y = 23; + private static final int label4W = 210; + private static final int label4H = 8; + + // checkbox for confirmation dialog + private static final int checkBoxX = 22; + private static final int checkBoxY = 40; + private static final int checkBoxW = 210; + private static final int checkBoxH = 9; + // extra label if path longer than 21 chars + private static final int label5X = 22; + private static final int label5Y = 48; + private static final int label5W = 210; + private static final int label5H = 9; + + private boolean checkBoxDialog; + private short _checkBoxState = 0; + private boolean extraPathLine=false; + private String checkBoxPath=""; + private String checkBoxPath2=""; + private static final int lineWrapLength = 21; + private static final int lineWrapH = 12; + private String _pushed = _doNotRunButtonName; + + private XComponentContext _xComponentContext; + private XDialog _xDialog; + + public SecurityDialog( XComponentContext xComponentContext ) + { + LogUtils.DEBUG( "SecurityDialog ctor" ); + _xComponentContext = xComponentContext; + } + + public void initialize( Object[] args ) throws RuntimeException + { + LogUtils.DEBUG( "SecurityDialog init" ); + // figure out if we need a checkbox + if ( args.length == 1 && AnyConverter.isString( args[0] ) ) + { + //check args is a path + // set checkBoxPath with the arg + LogUtils.DEBUG( "checkbox" ); + try + { + checkBoxPath = AnyConverter.toString( args[0] ); + } + catch ( IllegalArgumentException e ) + { + throw new RuntimeException( "SecurityDialog::initialize: " + e.getMessage() ); + } + LogUtils.DEBUG( "path: " + checkBoxPath ); + checkBoxDialog = true; + if( checkBoxPath.length() > lineWrapLength ) + { + extraPathLine = true; + cbIncrH += lineWrapH; + checkBoxPath2 = checkBoxPath.substring( lineWrapLength ); + checkBoxPath = checkBoxPath.substring( 0, lineWrapLength ); + } + + } + else + { + LogUtils.DEBUG( "no checkbox: # of args=" + + args.length ); + cbIncrW = 0; + cbIncrH = 0; + checkBoxDialog = false; + } + + // now try and create the dialog + try + { + _xDialog = createDialog(); + } + catch ( com.sun.star.uno.Exception e ) + { + LogUtils.DEBUG( "Couldn't create dialog" ); + LogUtils.DEBUG( "uno message: " + e.getMessage()); + throw new RuntimeException( e.getMessage() ); + } + catch ( Exception e ) + { + LogUtils.DEBUG( "Couldn't create dialog" ); + LogUtils.DEBUG( "message: " + e.getMessage()); + throw new RuntimeException( e.getMessage() ); + } + + } + + // static component operations + public static XSingleServiceFactory __getServiceFactory( String implName, + XMultiServiceFactory multiFactory, + XRegistryKey regKey ) { + XSingleServiceFactory xSingleServiceFactory = null; + if ( implName.equals( SecurityDialog.class.getName() ) ) { + xSingleServiceFactory = FactoryHelper.getServiceFactory( + SecurityDialog.class, SecurityDialog.__serviceName, multiFactory, regKey ); + } + return xSingleServiceFactory; + } + + // XServiceInfo + public String getImplementationName( ) { + return getClass().getName(); + } + + // XServiceInfo + public boolean supportsService( /*IN*/String serviceName ) { + if ( serviceName.equals( __serviceName)) + return true; + return false; + } + + // XServiceInfo + public String[] getSupportedServiceNames( ) { + String[] retValue= new String[0]; + retValue[0] = __serviceName; + return retValue; + } + + + /** method for creating a dialog at runtime + */ + private XDialog createDialog() throws com.sun.star.uno.Exception { + + // get the service manager from the component context + XMultiComponentFactory xMultiComponentFactory = _xComponentContext.getServiceManager(); + + // create the dialog model and set the properties + Object dialogModel = xMultiComponentFactory.createInstanceWithContext( + "com.sun.star.awt.UnoControlDialogModel", _xComponentContext ); + XPropertySet xPSetDialog = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, dialogModel ); + xPSetDialog.setPropertyValue( "PositionX", new Integer( dialogX) ); + xPSetDialog.setPropertyValue( "PositionY", new Integer( dialogY)); + xPSetDialog.setPropertyValue( "Width", new Integer( dialogW+cbIncrW )); + xPSetDialog.setPropertyValue( "Height", new Integer( dialogH+cbIncrH )); + xPSetDialog.setPropertyValue( "Title", _title ); + + // get the service manager from the dialog model + XMultiServiceFactory xMultiServiceFactory = ( XMultiServiceFactory )UnoRuntime.queryInterface( + XMultiServiceFactory.class, dialogModel ); + + // create the Run Macro button model and set the properties + Object runButtonModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlButtonModel" ); + XPropertySet xPSetButton = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, runButtonModel ); + LogUtils.DEBUG("run: x="+(((dialogW+cbIncrW)/2)-runButtonW -1) ); + LogUtils.DEBUG("run: y="+(dialogH+cbIncrH-runButtonH-1)); + xPSetButton.setPropertyValue( "PositionX", new Integer( (((dialogW+cbIncrW)/2)-runButtonW -1) )); + xPSetButton.setPropertyValue( "PositionY", new Integer( dialogH+cbIncrH-runButtonH-1)); + xPSetButton.setPropertyValue( "Width", new Integer( runButtonW )); + xPSetButton.setPropertyValue( "Height", new Integer( runButtonH )); + xPSetButton.setPropertyValue( "Name", _runButtonName ); + xPSetButton.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetButton.setPropertyValue( "Label", _runMacro ); + + // create the Dont Run Macro button model and set the properties + Object doNotRunButtonModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlButtonModel" ); + xPSetButton = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, doNotRunButtonModel ); + LogUtils.DEBUG("dontrun: x="+(((dialogW+cbIncrW)/2)-1) ); + LogUtils.DEBUG("dontrun: y="+(dialogH+cbIncrH-doNotRunButtonH-1 )); + xPSetButton.setPropertyValue( "PositionX", new Integer( (((dialogW+cbIncrW)/2) + 1) )); + xPSetButton.setPropertyValue( "PositionY", new Integer( (dialogH+cbIncrH-doNotRunButtonH-1 ) )); + xPSetButton.setPropertyValue( "Width", new Integer( doNotRunButtonW )); + xPSetButton.setPropertyValue( "Height", new Integer( doNotRunButtonH )); + xPSetButton.setPropertyValue( "Name", _doNotRunButtonName ); + xPSetButton.setPropertyValue( "TabIndex", new Short( (short)0 ) ); + xPSetButton.setPropertyValue( "Label", _doNotRunMacro ); + + // insert the control models into the dialog model + XNameContainer xNameCont = ( XNameContainer )UnoRuntime.queryInterface( + XNameContainer.class, dialogModel ); + xNameCont.insertByName( _runButtonName, runButtonModel ); + xNameCont.insertByName( _doNotRunButtonName, doNotRunButtonModel ); + + if ( checkBoxDialog ) + { + LogUtils.DEBUG("creating label & checkbox"); + // create the label model and set the properties + Object label2Model = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlFixedTextModel" ); + XPropertySet xPSetLabel = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, label2Model ); + xPSetLabel.setPropertyValue( "PositionX", new Integer( label2X )); + xPSetLabel.setPropertyValue( "PositionY", new Integer( label2Y )); + xPSetLabel.setPropertyValue( "Width", new Integer( label2W )); + xPSetLabel.setPropertyValue( "Height", new Integer( label2H )); + xPSetLabel.setPropertyValue( "Name", _label2Name ); + xPSetLabel.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetLabel.setPropertyValue( "Label", _label2String ); + + // create the label model and set the properties + Object label3Model = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlFixedTextModel" ); + XPropertySet xPSetLabel3 = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, label3Model ); + xPSetLabel3.setPropertyValue( "PositionX", new Integer( label3X )); + xPSetLabel3.setPropertyValue( "PositionY", new Integer( label3Y )); + xPSetLabel3.setPropertyValue( "Width", new Integer( label3W )); + xPSetLabel3.setPropertyValue( "Height", new Integer( label3H )); + xPSetLabel3.setPropertyValue( "Name", _label3Name ); + xPSetLabel3.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetLabel3.setPropertyValue( "Label", _label3String ); + + // create the label model and set the properties + Object label4Model = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlFixedTextModel" ); + XPropertySet xPSetLabel4 = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, label4Model ); + xPSetLabel4.setPropertyValue( "PositionX", new Integer( label4X )); + xPSetLabel4.setPropertyValue( "PositionY", new Integer( label4Y )); + xPSetLabel4.setPropertyValue( "Width", new Integer( label4W )); + xPSetLabel4.setPropertyValue( "Height", new Integer( label4H )); + xPSetLabel4.setPropertyValue( "Name", _label4Name ); + xPSetLabel4.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetLabel4.setPropertyValue( "Label", _label4String ); + + // create the checkbox model and set the properties + Object checkBoxModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlCheckBoxModel" ); + XPropertySet xPSetCheckBox = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, checkBoxModel ); + xPSetCheckBox.setPropertyValue( "PositionX", new Integer( checkBoxX )); + xPSetCheckBox.setPropertyValue( "PositionY", new Integer( checkBoxY )); + xPSetCheckBox.setPropertyValue( "Width", new Integer( checkBoxW )); + xPSetCheckBox.setPropertyValue( "Height", new Integer( checkBoxH )); + xPSetCheckBox.setPropertyValue( "State", new Short((short)0) ); + xPSetCheckBox.setPropertyValue( "Name", _checkBoxName ); + xPSetCheckBox.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetCheckBox.setPropertyValue( "Label", new String(_checkBoxString +checkBoxPath) ); + + // insert the control models into the dialog model + xNameCont.insertByName( _label2Name, label2Model ); + xNameCont.insertByName( _label3Name, label3Model ); + xNameCont.insertByName( _label4Name, label4Model ); + xNameCont.insertByName( _checkBoxName, checkBoxModel ); + + if ( extraPathLine == true ) + { + // create the label model and set the properties + Object label5Model = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlFixedTextModel" ); + XPropertySet xPSetLabel5 = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, label5Model ); + xPSetLabel5.setPropertyValue( "PositionX", new Integer( label5X )); + xPSetLabel5.setPropertyValue( "PositionY", new Integer( label5Y )); + xPSetLabel5.setPropertyValue( "Width", new Integer( label5W )); + xPSetLabel5.setPropertyValue( "Height", new Integer( label5H )); + xPSetLabel5.setPropertyValue( "Name", _label5Name ); + xPSetLabel5.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetLabel5.setPropertyValue( "Label", checkBoxPath2 ); + xNameCont.insertByName( _label5Name, label5Model ); + } + } + else + { + // create the label model and set the properties + Object labelModel = xMultiServiceFactory.createInstance( + "com.sun.star.awt.UnoControlFixedTextModel" ); + XPropertySet xPSetLabel = ( XPropertySet )UnoRuntime.queryInterface( + XPropertySet.class, labelModel ); + xPSetLabel.setPropertyValue( "PositionX", new Integer( label1X )); + xPSetLabel.setPropertyValue( "PositionY", new Integer( label1Y )); + xPSetLabel.setPropertyValue( "Width", new Integer( label1W )); + xPSetLabel.setPropertyValue( "Height", new Integer( label1H )); + xPSetLabel.setPropertyValue( "Name", _label1Name ); + xPSetLabel.setPropertyValue( "TabIndex", new Short( (short)1 ) ); + xPSetLabel.setPropertyValue( "Label", _label1String ); + + // insert the control models into the dialog model + xNameCont.insertByName( _label1Name, labelModel ); + } + + // create the dialog control and set the model + Object dialog = xMultiComponentFactory.createInstanceWithContext( + "com.sun.star.awt.UnoControlDialog", _xComponentContext ); + XControl xControl = ( XControl )UnoRuntime.queryInterface( + XControl.class, dialog ); + XControlModel xControlModel = ( XControlModel )UnoRuntime.queryInterface( + XControlModel.class, dialogModel ); + xControl.setModel( xControlModel ); + + // add an action listener to the button control + XControlContainer xControlCont = ( XControlContainer )UnoRuntime.queryInterface( + XControlContainer.class, dialog ); + + // Add to yes button + Object objectButton = xControlCont.getControl( _runButtonName ); + XButton xButton = ( XButton )UnoRuntime.queryInterface( + XButton.class, objectButton ); + xButton.addActionListener( new ActionListenerImpl( xControlCont, _runButtonName ) ); + + // add to no button + objectButton = xControlCont.getControl( _doNotRunButtonName ); + xButton = ( XButton )UnoRuntime.queryInterface( + XButton.class, objectButton ); + xButton.addActionListener( new ActionListenerImpl( xControlCont, _doNotRunButtonName ) ); + + if ( checkBoxDialog ) + { + // add to checkbox + Object objectCheckBox = xControlCont.getControl( _checkBoxName ); + XCheckBox xCheckBox = ( XCheckBox )UnoRuntime.queryInterface( + XCheckBox.class, objectCheckBox ); + xCheckBox.addItemListener((XItemListener) new ItemListenerImpl( xControlCont ) ); + } + + // create a peer + Object toolkit = xMultiComponentFactory.createInstanceWithContext( + "com.sun.star.awt.ExtToolkit", _xComponentContext ); + XToolkit xToolkit = ( XToolkit )UnoRuntime.queryInterface( + XToolkit.class, toolkit ); + XWindow xWindow = ( XWindow )UnoRuntime.queryInterface( + XWindow.class, xControl ); + xWindow.setVisible( false ); + xControl.createPeer( xToolkit, null ); + + // return the dialog + XDialog xDialog = ( XDialog )UnoRuntime.queryInterface( + XDialog.class, dialog ); + return xDialog; + } + public short execute() + { + + short result = 0; + _pushed = _doNotRunButtonName; + LogUtils.DEBUG("*DF* Before execute " ); + _xDialog.execute(); + LogUtils.DEBUG("*DF* After execute " ); + + if ( _pushed.equals( _runButtonName ) ) + { + result += 1; + } + if ( _checkBoxState == 1 ) + { + result +=2; + } + return result; + } + + public void endExecute() + { + _xDialog.endExecute(); + } + + public String getTitle() + { + return _xDialog.getTitle(); + } + + public void setTitle( String Title ) + { + _xDialog.setTitle( Title ); + } + + public void dispose () + { + XComponent xComponent = ( XComponent )UnoRuntime.queryInterface( + XComponent.class, _xDialog ); + xComponent.dispose(); + } + + public void addEventListener ( com.sun.star.lang.XEventListener xListener ) + { + XComponent xComponent = ( XComponent )UnoRuntime.queryInterface( + XComponent.class, _xDialog ); + xComponent.addEventListener( xListener ); + } + + + public void removeEventListener ( com.sun.star.lang.XEventListener aListener ) + { + XComponent xComponent = ( XComponent )UnoRuntime.queryInterface( + XComponent.class, _xDialog ); + xComponent.removeEventListener( aListener ); + } + + public class ActionListenerImpl implements com.sun.star.awt.XActionListener { + private XControlContainer _xControlCont; + private String _buttonName; + public ActionListenerImpl( XControlContainer xControlCont, String buttonName ) { + _xControlCont = xControlCont; + _buttonName = buttonName; + } + + // XEventListener + public void disposing( EventObject eventObject ) { + _xControlCont = null; + } + + // XActionListener + public void actionPerformed( ActionEvent actionEvent ) { + _pushed = _buttonName; + LogUtils.DEBUG("** Button pushed ->" + _pushed ); + + _xDialog.endExecute(); + } + } + + public class ItemListenerImpl implements com.sun.star.awt.XItemListener { + private XCheckBox _xCheckBox; + public ItemListenerImpl( XControlContainer xControlCont ) { + Object objectCheckBox = xControlCont.getControl( _checkBoxName ); + _xCheckBox = ( XCheckBox )UnoRuntime.queryInterface( + XCheckBox.class, objectCheckBox ); + } + + // XEventListener + public void disposing( EventObject eventObject ) { + _xCheckBox = null; + } + + // XAdjustmentListener + public void itemStateChanged( ItemEvent itemEvent ) { + _checkBoxState = _xCheckBox.getState(); + LogUtils.DEBUG("** checkbox state ->" + _checkBoxState ); + } + } +} |