summaryrefslogtreecommitdiff
path: root/scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java')
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java257
1 files changed, 257 insertions, 0 deletions
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java b/scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java
new file mode 100644
index 000000000000..6644b0e66d44
--- /dev/null
+++ b/scripting/java/org/openoffice/netbeans/modules/office/actions/ParcelFolderSupport.java
@@ -0,0 +1,257 @@
+/*************************************************************************
+ *
+ * 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.util.Vector;
+import java.util.StringTokenizer;
+
+import java.io.*;
+import java.beans.PropertyVetoException;
+import java.awt.Dialog;
+
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import org.openide.TopManager;
+import org.openide.DialogDescriptor;
+import org.openide.ErrorManager;
+import org.openide.xml.XMLUtil;
+import org.openide.execution.NbClassPath;
+
+import org.openide.cookies.OpenCookie;
+import org.openide.loaders.DataObject;
+import org.openide.loaders.DataNode;
+
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileSystem;
+import org.openide.filesystems.JarFileSystem;
+import org.openide.filesystems.FileUtil;
+import org.openide.filesystems.Repository;
+
+import org.openide.nodes.*;
+import org.openide.windows.OutputWriter;
+
+import org.openoffice.netbeans.modules.office.loader.ParcelFolder;
+import org.openoffice.netbeans.modules.office.options.OfficeSettings;
+import org.openoffice.netbeans.modules.office.utils.ManifestParser;
+
+import com.sun.star.script.framework.container.ParcelDescriptor;
+
+import org.openoffice.idesupport.zip.ParcelZipper;
+import org.openoffice.idesupport.filter.FileFilter;
+import org.openoffice.idesupport.ui.ConfigurePanel;
+
+public class ParcelFolderSupport implements ParcelFolderCookie
+{
+ protected ParcelFolder parcelFolder;
+ private ConfigurePanel configuror = null;
+
+ public ParcelFolderSupport(ParcelFolder parcelFolder) {
+ this.parcelFolder = parcelFolder;
+ }
+
+ public String getLanguage() {
+ ParcelDescriptor descriptor = getParcelDescriptor();
+
+ if (descriptor == null) {
+ return "";
+ }
+ else {
+ return descriptor.getLanguage();
+ }
+ }
+
+ public String getClasspath() {
+ ParcelDescriptor descriptor = getParcelDescriptor();
+
+ if (descriptor == null) {
+ return "";
+ }
+ else {
+ return descriptor.getLanguageProperty("classpath");
+ }
+ }
+
+ public void setClasspath(String value) {
+ ParcelDescriptor descriptor = getParcelDescriptor();
+
+ if (descriptor != null) {
+ descriptor.setLanguageProperty("classpath", value);
+
+ try {
+ descriptor.write();
+ }
+ catch (IOException ioe) {
+ ErrorManager.getDefault().notify(ioe);
+ }
+ }
+ }
+
+ private ParcelDescriptor getParcelDescriptor() {
+ FileObject primary = parcelFolder.getPrimaryFile();
+
+ File contents = FileUtil.toFile(
+ primary.getFileObject(ParcelZipper.CONTENTS_DIRNAME));
+
+ return ParcelDescriptor.getParcelDescriptor(contents);
+ }
+
+ public void generate() {
+ ParcelFolder.ParcelFolderNode node =
+ (ParcelFolder.ParcelFolderNode)parcelFolder.getNodeDelegate();
+
+ FileObject parcelBase = parcelFolder.getPrimaryFile();
+ FileObject contentsBase =
+ parcelBase.getFileObject(ParcelZipper.CONTENTS_DIRNAME);
+
+ File parcelDir = FileUtil.toFile(parcelBase);
+ File contentsDir = FileUtil.toFile(contentsBase);
+
+ // The Location property is not displayed so just
+ // use the Parcel Recipe directory as the target directory
+ File targetDir = FileUtil.toFile(parcelFolder.getPrimaryFile());
+ File targetfile = new File(targetDir, File.separator +
+ parcelBase.getName() + "." + ParcelZipper.PARCEL_EXTENSION);
+
+ boolean proceed = configure();
+ if (proceed == false) {
+ return;
+ }
+
+ final OutputWriter out =
+ ParcelSupport.getOutputWindowWriter(parcelDir.getName() + " (generating)");
+ try {
+ out.println("Generating: " + parcelDir.getName(), null);
+ ParcelZipper.getParcelZipper().zipParcel(contentsDir, targetfile, node.getFileFilter());
+ out.println("\nGENERATION SUCCESSFUL.");
+ out.println("\nRight click on the generated parcel to deploy it");
+
+ if (targetDir.equals(parcelDir)) {
+ parcelBase.refresh(true);
+ }
+ }
+ catch (IOException ioe) {
+ out.println("GENERATION FAILED: reason: " + ioe.getClass().getName() + ": "+ ioe.getMessage());
+ }
+ finally
+ {
+ if( out != null)
+ {
+ out.close();
+ }
+ }
+ }
+
+ public boolean configure() {
+
+ FileObject primary = parcelFolder.getPrimaryFile();
+
+ File contents = FileUtil.toFile(
+ primary.getFileObject(ParcelZipper.CONTENTS_DIRNAME));
+
+ Vector classpath = getConfigureClasspath();
+ classpath.addElement(contents.getAbsolutePath());
+
+ try {
+ ParcelDescriptor descriptor = getParcelDescriptor();
+ if (descriptor == null) {
+ descriptor = ParcelDescriptor.createParcelDescriptor(contents);
+ }
+
+ if (configuror == null) {
+ configuror = new ConfigurePanel(contents.getAbsolutePath(),
+ classpath, descriptor);
+ }
+ else {
+ configuror.reload(contents.getAbsolutePath(), classpath,
+ descriptor);
+ }
+ }
+ catch (IOException ioe) {
+ ErrorManager.getDefault().notify(ioe);
+ return false;
+ }
+
+ DialogDescriptor dd = new DialogDescriptor(configuror,
+ ConfigurePanel.DIALOG_TITLE);
+
+ Dialog dialog = TopManager.getDefault().createDialog(dd);
+ dialog.show();
+
+ if (dd.getValue() == DialogDescriptor.OK_OPTION) {
+ try {
+ ParcelDescriptor descriptor = configuror.getConfiguration();
+ descriptor.write();
+ }
+ catch (Exception e) {
+ ErrorManager.getDefault().notify(e);
+ }
+ }
+ else {
+ return false;
+ }
+ return true;
+ }
+
+ private Vector getConfigureClasspath() {
+ Vector result = new Vector();
+
+ String classpath = NbClassPath.createRepositoryPath().getClassPath();
+ if ( System.getProperty( "os.name" ).startsWith( "Windows" ) )
+ {
+ // under windows path is enclosed by quotes
+ // e.g. C:\path1;d:\path2 would appear as
+ // "C:\path1;d:\path2" therefore for us
+ // we need to remove 1 character at either end of the
+ // classpath returned from "createRepositoryPath().getClassPath()"
+
+ if ( classpath.startsWith("\"") && classpath.endsWith("\"") )
+ {
+ StringBuffer buff = new StringBuffer(classpath);
+ buff.delete(0,1);
+ buff.delete( buff.length() - 1, buff.length() );
+ classpath = buff.toString();
+ }
+ }
+ StringTokenizer tokens = new StringTokenizer(classpath, File.pathSeparator);
+
+ while(tokens.hasMoreTokens())
+ result.addElement(tokens.nextToken());
+
+ OfficeSettings settings = OfficeSettings.getDefault();
+ File classesDir = new File(settings.getOfficeDirectory().getPath(
+ File.separator + "program" + File.separator + "classes"));
+ File[] jarfiles = classesDir.listFiles();
+
+ for (int i = 0; i < jarfiles.length; i++)
+ result.addElement(jarfiles[i].getAbsolutePath());
+
+ return result;
+ }
+}