summaryrefslogtreecommitdiff
path: root/scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java')
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java244
1 files changed, 244 insertions, 0 deletions
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java b/scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java
new file mode 100644
index 000000000000..f66922801a22
--- /dev/null
+++ b/scripting/java/org/openoffice/netbeans/modules/office/actions/DeployParcelAction.java
@@ -0,0 +1,244 @@
+/*************************************************************************
+ *
+ * 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 org.openoffice.netbeans.modules.office.actions;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Enumeration;
+
+import javax.swing.JMenuItem;
+import javax.swing.JFileChooser;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+import org.openide.TopManager;
+import org.openide.NotifyDescriptor;
+import org.openide.awt.Actions;
+import org.openide.nodes.Node;
+import org.openide.util.HelpCtx;
+import org.openide.util.NbBundle;
+import org.openide.util.RequestProcessor;
+import org.openide.util.actions.*;
+import org.openide.awt.JMenuPlus;
+
+import org.openoffice.idesupport.SVersionRCFile;
+import org.openoffice.idesupport.OfficeInstallation;
+import org.openoffice.idesupport.zip.ParcelZipper;
+import org.openoffice.idesupport.LocalOffice;
+
+import org.openoffice.netbeans.modules.office.utils.NagDialog;
+import org.openoffice.netbeans.modules.office.options.OfficeSettings;
+
+public class DeployParcelAction extends CookieAction implements Presenter.Popup {
+
+ private static final String BROWSE_LABEL = "Office Document...";
+ private static final String DEPLOY_LABEL = "Deploy To";
+
+ public String getName () {
+ return DEPLOY_LABEL;
+ }
+
+ public HelpCtx getHelpCtx () {
+ return HelpCtx.DEFAULT_HELP;
+ }
+
+ public JMenuItem getPopupPresenter() {
+ JMenuPlus menu = new JMenuPlus(DEPLOY_LABEL);
+ JMenuItem item, user, share;
+ final OfficeInstallation oi = OfficeSettings.getDefault().getOfficeDirectory();
+
+ ActionListener listener = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ JMenuItem choice = (JMenuItem)e.getSource();
+ String label = choice.getText();
+
+ Node[] nodes = getActivatedNodes();
+ final ParcelCookie parcelCookie =
+ (ParcelCookie)nodes[0].getCookie(ParcelCookie.class);
+
+ File target = new File(oi.getPath(File.separator + label +
+ File.separator + "Scripts"));
+
+ File langdir = new File(target, parcelCookie.getLanguage());
+
+ if (!langdir.exists()) {
+ boolean response = askIfCreateDirectory(langdir);
+ if (response == false) {
+ return;
+ }
+ }
+
+ deploy(target);
+ }
+ };
+
+ user = new JMenuItem("user");
+ user.addActionListener(listener);
+
+ share = new JMenuItem("share");
+ share.addActionListener(listener);
+
+ item = new JMenuPlus(oi.getName());
+ item.add(user);
+ item.add(share);
+ menu.add(item);
+
+ menu.addSeparator();
+ item = new JMenuItem(BROWSE_LABEL);
+ item.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ File target = getTargetFile();
+ if (target == null)
+ return;
+ deploy(target);
+ }
+ });
+ menu.add(item);
+
+ return menu;
+ }
+
+ protected int mode () {
+ return MODE_ONE;
+ }
+
+ protected Class[] cookieClasses () {
+ return new Class[] { ParcelCookie.class };
+ }
+
+ protected void performAction (Node[] activatedNodes) {
+ // do nothing, should not happen
+ }
+
+ private void deploy(final File target) {
+ Node[] nodes = getActivatedNodes();
+ final ParcelCookie parcelCookie =
+ (ParcelCookie)nodes[0].getCookie(ParcelCookie.class);
+
+ RequestProcessor.getDefault().post(new Runnable() {
+ public void run() {
+ boolean result = parcelCookie.deploy(target);
+
+ if (result == true && target.isDirectory()) {
+ showNagDialog();
+ // refreshOffice((String)versions.get(label));
+ }
+ }
+ });
+ }
+
+ private boolean askIfCreateDirectory(File directory) {
+ String message = directory.getAbsolutePath() + " does not exist. " +
+ "Do you want to create it now?";
+
+ NotifyDescriptor d = new NotifyDescriptor.Confirmation(
+ message, NotifyDescriptor.OK_CANCEL_OPTION);
+ TopManager.getDefault().notify(d);
+
+ if (d.getValue() == NotifyDescriptor.CANCEL_OPTION)
+ return false;
+
+ boolean result;
+ try {
+ result = directory.mkdirs();
+ }
+ catch (SecurityException se) {
+ result = false;
+ }
+
+ if (result == false) {
+ String tmp = "Error creating: " + directory.getAbsolutePath();
+ NotifyDescriptor d2 = new NotifyDescriptor.Message(
+ tmp, NotifyDescriptor.ERROR_MESSAGE);
+ TopManager.getDefault().notify(d2);
+ }
+ return result;
+ }
+
+ private void refreshOffice(String path) {
+ ClassLoader syscl = TopManager.getDefault().currentClassLoader();
+ LocalOffice office = LocalOffice.create(syscl, path, 8100);
+ office.refreshStorage("file://" + path + "/program/../user");
+ office.disconnect();
+ }
+
+ private void showNagDialog() {
+ String message = "If you currently have Office running you will " +
+ "need to click on the Tools/Scripting Add-on's/Refresh All Scripts " +
+ " menu item in Office so that the scripts in this parcel can be detected.";
+
+ OfficeSettings settings = OfficeSettings.getDefault();
+
+ if (settings.getWarnAfterDirDeploy() == true) {
+ NagDialog warning = NagDialog.createInformationDialog(
+ message, "Show this message in future", true);
+
+ warning.show();
+
+ if (warning.getState() == false)
+ settings.setWarnAfterDirDeploy(false);
+ }
+ }
+
+ private File getTargetFile() {
+ File target = null;
+
+ JFileChooser chooser = new JFileChooser();
+ chooser.setDialogTitle("Deploy Parcel To Office Document");
+ chooser.setApproveButtonText("Deploy");
+ chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+ chooser.setFileFilter(new FileFilter() {
+ public boolean accept(File file) {
+ if (file.isDirectory() ||
+ file.getName().endsWith(".sxw") ||
+ file.getName().endsWith(".sxc") ||
+ file.getName().endsWith(".sxd") ||
+ file.getName().endsWith(".sxi"))
+ return true;
+ return false;
+ }
+
+ public String getDescription() {
+ return "Office Documents";
+ }
+ });
+
+ int result = chooser.showDialog(null, null);
+
+ if (result == JFileChooser.APPROVE_OPTION) {
+ target = chooser.getSelectedFile();
+ }
+ return target;
+ }
+}