summaryrefslogtreecommitdiffstats
path: root/scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java
diff options
context:
space:
mode:
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.java583
1 files changed, 583 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 000000000..078f63395
--- /dev/null
+++ b/scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog.java
@@ -0,0 +1,583 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+package com.sun.star.script.framework.security;
+
+import com.sun.star.awt.ActionEvent;
+import com.sun.star.awt.ItemEvent;
+import com.sun.star.awt.XButton;
+import com.sun.star.awt.XCheckBox;
+import com.sun.star.awt.XControl;
+import com.sun.star.awt.XControlContainer;
+import com.sun.star.awt.XControlModel;
+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.EventObject;
+import com.sun.star.lang.IllegalArgumentException;
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XInitialization;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XServiceInfo;
+import com.sun.star.lang.XSingleServiceFactory;
+
+import com.sun.star.lib.uno.helper.WeakBase;
+
+import com.sun.star.registry.XRegistryKey;
+
+import com.sun.star.script.framework.log.LogUtils;
+
+import com.sun.star.uno.AnyConverter;
+import com.sun.star.uno.RuntimeException;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+
+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 final 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(e);
+ }
+
+ 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) {
+ throw new RuntimeException(e);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ // 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) {
+ return serviceName.equals(__serviceName);
+ }
+
+ // XServiceInfo
+ public String[] getSupportedServiceNames() {
+ String[] retValue = new String[1];
+ 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 =
+ UnoRuntime.queryInterface(XPropertySet.class, dialogModel);
+
+ xPSetDialog.setPropertyValue("PositionX", Integer.valueOf(dialogX));
+ xPSetDialog.setPropertyValue("PositionY", Integer.valueOf(dialogY));
+ xPSetDialog.setPropertyValue("Width", Integer.valueOf(dialogW + cbIncrW));
+ xPSetDialog.setPropertyValue("Height", Integer.valueOf(dialogH + cbIncrH));
+ xPSetDialog.setPropertyValue("Title", _title);
+
+ // get the service manager from the dialog model
+ 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 =
+ 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", Integer.valueOf((((dialogW + cbIncrW) / 2) - runButtonW - 1)));
+
+ xPSetButton.setPropertyValue(
+ "PositionY", Integer.valueOf(dialogH + cbIncrH - runButtonH - 1));
+
+ xPSetButton.setPropertyValue("Width", Integer.valueOf(runButtonW));
+ xPSetButton.setPropertyValue("Height", Integer.valueOf(runButtonH));
+ xPSetButton.setPropertyValue("Name", _runButtonName);
+ xPSetButton.setPropertyValue("TabIndex", Short.valueOf((short)1));
+ xPSetButton.setPropertyValue("Label", _runMacro);
+
+ // create the Don't Run Macro button model and set the properties
+ Object doNotRunButtonModel =
+ xMultiServiceFactory.createInstance(
+ "com.sun.star.awt.UnoControlButtonModel");
+
+ xPSetButton =
+ UnoRuntime.queryInterface(XPropertySet.class, doNotRunButtonModel);
+
+ LogUtils.DEBUG("dontrun: x=" + (((dialogW + cbIncrW) / 2) - 1));
+ LogUtils.DEBUG("dontrun: y=" + (dialogH + cbIncrH - doNotRunButtonH - 1));
+
+ xPSetButton.setPropertyValue(
+ "PositionX", Integer.valueOf((((dialogW + cbIncrW) / 2) + 1)));
+
+ xPSetButton.setPropertyValue(
+ "PositionY", Integer.valueOf((dialogH + cbIncrH - doNotRunButtonH - 1)));
+
+ xPSetButton.setPropertyValue("Width", Integer.valueOf(doNotRunButtonW));
+ xPSetButton.setPropertyValue("Height", Integer.valueOf(doNotRunButtonH));
+ xPSetButton.setPropertyValue("Name", _doNotRunButtonName);
+ xPSetButton.setPropertyValue("TabIndex", Short.valueOf((short)0));
+ xPSetButton.setPropertyValue("Label", _doNotRunMacro);
+
+ // insert the control models into the dialog model
+ XNameContainer xNameCont =
+ 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 =
+ UnoRuntime.queryInterface(XPropertySet.class, label2Model);
+
+ xPSetLabel.setPropertyValue("PositionX", Integer.valueOf(label2X));
+ xPSetLabel.setPropertyValue("PositionY", Integer.valueOf(label2Y));
+ xPSetLabel.setPropertyValue("Width", Integer.valueOf(label2W));
+ xPSetLabel.setPropertyValue("Height", Integer.valueOf(label2H));
+ xPSetLabel.setPropertyValue("Name", _label2Name);
+ xPSetLabel.setPropertyValue("TabIndex", Short.valueOf((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 =
+ UnoRuntime.queryInterface(XPropertySet.class, label3Model);
+
+ xPSetLabel3.setPropertyValue("PositionX", Integer.valueOf(label3X));
+ xPSetLabel3.setPropertyValue("PositionY", Integer.valueOf(label3Y));
+ xPSetLabel3.setPropertyValue("Width", Integer.valueOf(label3W));
+ xPSetLabel3.setPropertyValue("Height", Integer.valueOf(label3H));
+ xPSetLabel3.setPropertyValue("Name", _label3Name);
+ xPSetLabel3.setPropertyValue("TabIndex", Short.valueOf((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 =
+ UnoRuntime.queryInterface(XPropertySet.class, label4Model);
+
+ xPSetLabel4.setPropertyValue("PositionX", Integer.valueOf(label4X));
+ xPSetLabel4.setPropertyValue("PositionY", Integer.valueOf(label4Y));
+ xPSetLabel4.setPropertyValue("Width", Integer.valueOf(label4W));
+ xPSetLabel4.setPropertyValue("Height", Integer.valueOf(label4H));
+ xPSetLabel4.setPropertyValue("Name", _label4Name);
+ xPSetLabel4.setPropertyValue("TabIndex", Short.valueOf((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 =
+ UnoRuntime.queryInterface(XPropertySet.class, checkBoxModel);
+
+ xPSetCheckBox.setPropertyValue("PositionX", Integer.valueOf(checkBoxX));
+ xPSetCheckBox.setPropertyValue("PositionY", Integer.valueOf(checkBoxY));
+ xPSetCheckBox.setPropertyValue("Width", Integer.valueOf(checkBoxW));
+ xPSetCheckBox.setPropertyValue("Height", Integer.valueOf(checkBoxH));
+ xPSetCheckBox.setPropertyValue("State", Short.valueOf((short)0));
+ xPSetCheckBox.setPropertyValue("Name", _checkBoxName);
+ xPSetCheckBox.setPropertyValue("TabIndex", Short.valueOf((short)1));
+ xPSetCheckBox.setPropertyValue("Label", _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) {
+
+ // create the label model and set the properties
+ Object label5Model =
+ xMultiServiceFactory.createInstance(
+ "com.sun.star.awt.UnoControlFixedTextModel");
+
+ XPropertySet xPSetLabel5 =
+ UnoRuntime.queryInterface(XPropertySet.class, label5Model);
+
+ xPSetLabel5.setPropertyValue("PositionX", Integer.valueOf(label5X));
+ xPSetLabel5.setPropertyValue("PositionY", Integer.valueOf(label5Y));
+ xPSetLabel5.setPropertyValue("Width", Integer.valueOf(label5W));
+ xPSetLabel5.setPropertyValue("Height", Integer.valueOf(label5H));
+ xPSetLabel5.setPropertyValue("Name", _label5Name);
+ xPSetLabel5.setPropertyValue("TabIndex", Short.valueOf((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 =
+ UnoRuntime.queryInterface(XPropertySet.class, labelModel);
+
+ xPSetLabel.setPropertyValue("PositionX", Integer.valueOf(label1X));
+ xPSetLabel.setPropertyValue("PositionY", Integer.valueOf(label1Y));
+ xPSetLabel.setPropertyValue("Width", Integer.valueOf(label1W));
+ xPSetLabel.setPropertyValue("Height", Integer.valueOf(label1H));
+ xPSetLabel.setPropertyValue("Name", _label1Name);
+ xPSetLabel.setPropertyValue("TabIndex", Short.valueOf((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 =
+ UnoRuntime.queryInterface(XControl.class, dialog);
+
+ XControlModel xControlModel =
+ UnoRuntime.queryInterface(XControlModel.class, dialogModel);
+
+ xControl.setModel(xControlModel);
+
+ // add an action listener to the button control
+ XControlContainer xControlCont =
+ UnoRuntime.queryInterface(XControlContainer.class, dialog);
+
+ // Add to yes button
+ Object objectButton = xControlCont.getControl(_runButtonName);
+
+ XButton xButton =
+ UnoRuntime.queryInterface(XButton.class, objectButton);
+
+ xButton.addActionListener(new ActionListenerImpl(_runButtonName));
+
+ // add to no button
+ objectButton = xControlCont.getControl(_doNotRunButtonName);
+
+ xButton =
+ UnoRuntime.queryInterface(XButton.class, objectButton);
+
+ xButton.addActionListener(new ActionListenerImpl(_doNotRunButtonName));
+
+ if (checkBoxDialog) {
+ // add to checkbox
+ Object objectCheckBox = xControlCont.getControl(_checkBoxName);
+
+ XCheckBox xCheckBox =
+ UnoRuntime.queryInterface(XCheckBox.class, objectCheckBox);
+
+ xCheckBox.addItemListener(new ItemListenerImpl(xControlCont));
+ }
+
+ // create a peer
+ Object toolkit =
+ xMultiComponentFactory.createInstanceWithContext(
+ "com.sun.star.awt.ExtToolkit", _xComponentContext);
+
+ XToolkit xToolkit = UnoRuntime.queryInterface(XToolkit.class, toolkit);
+ XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, xControl);
+ xWindow.setVisible(false);
+ xControl.createPeer(xToolkit, null);
+
+ // return the dialog
+ 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 =
+ UnoRuntime.queryInterface(XComponent.class, _xDialog);
+
+ xComponent.dispose();
+ }
+
+ public void addEventListener(com.sun.star.lang.XEventListener xListener) {
+
+ XComponent xComponent =
+ UnoRuntime.queryInterface(XComponent.class, _xDialog);
+
+ xComponent.addEventListener(xListener);
+ }
+
+ public void removeEventListener(com.sun.star.lang.XEventListener aListener) {
+
+ XComponent xComponent =
+ UnoRuntime.queryInterface(XComponent.class, _xDialog);
+
+ xComponent.removeEventListener(aListener);
+ }
+
+ private class ActionListenerImpl implements com.sun.star.awt.XActionListener {
+
+ private final String _buttonName;
+
+ private ActionListenerImpl(String buttonName) {
+ _buttonName = buttonName;
+ }
+
+ // XEventListener
+ public void disposing(EventObject eventObject) {
+ }
+
+ // XActionListener
+ public void actionPerformed(ActionEvent actionEvent) {
+ _pushed = _buttonName;
+ LogUtils.DEBUG("** Button pushed ->" + _pushed);
+ _xDialog.endExecute();
+ }
+ }
+
+ private class ItemListenerImpl implements com.sun.star.awt.XItemListener {
+
+ private XCheckBox _xCheckBox;
+
+ private ItemListenerImpl(XControlContainer xControlCont) {
+ Object objectCheckBox = xControlCont.getControl(_checkBoxName);
+
+ _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);
+ }
+ }
+}