blob: 9ebc9a308d42a05f4708b0bd1fbdc9956789606f [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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;
}
}