blob: 182e20035ec0b3ab2563d612c4ceccd25dc2f693 [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.apache.uima.pear.generate;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import org.apache.uima.pear.PearException;
import org.apache.uima.pear.PearPlugin;
import org.apache.uima.pear.insd.edit.INSDComponentPage;
import org.apache.uima.pear.insd.edit.INSDEnvironmentPage;
import org.apache.uima.pear.insd.edit.InsdConstants;
import org.apache.uima.pear.insd.edit.PearInstallationDescriptor;
import org.apache.uima.pear.insd.edit.vars.VarVal;
import org.apache.uima.pear.nature.ProjectCustomizer;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.apache.uima.pear.tools.InstallationDescriptor;
import org.apache.uima.pear.tools.InstallationDescriptorHandler;
/**
* Wizard to generate a PEAR file.
*
*
*
*/
public class GeneratePearWizard extends Wizard implements IWizard, InsdConstants {
private IContainer currentContainer;
private InstallationDescriptor insd;
private Hashtable wizardData = new Hashtable();
// WIZARD PAGES
// private WizardNewProjectCreationPage projectPage;
private INSDComponentPage componentPage;
private INSDEnvironmentPage environmentPage;
private PearFileResourceExportPage pearExportPage;
/**
* Constructor
*/
public GeneratePearWizard(IContainer container) {
super();
try {
setWindowTitle("PEAR Generation Wizard");
setDefaultPageImageDescriptor(PearPlugin.getImageDescriptor("generatePearWiz.gif"));
setNeedsProgressMonitor(true);
currentContainer = container;
} catch (Throwable e) {
PearException subEx = new PearException(
"Operation failed because the wizard could not be initialized.\nPlease report this error.",
e);
subEx.openErrorDialog(getShell());
this.dispose();
}
try {
AbstractUIPlugin plugin = PearPlugin.getDefault();
IDialogSettings workbenchSettings = plugin.getDialogSettings();
IDialogSettings section = workbenchSettings.getSection("PearFileExportWizard");//$NON-NLS-1$
if (section == null)
section = workbenchSettings.addNewSection("PearFileExportWizard");//$NON-NLS-1$
setDialogSettings(section);
} catch (Throwable e) {
e.printStackTrace();
}
try {
insd = PearInstallationDescriptor.getInstallationDescriptor(currentContainer);
} catch (Throwable e) {
e.printStackTrace();
insd = new InstallationDescriptor();
}
try {
ProjectCustomizer.customizeProject(currentContainer, insd);
} catch (Throwable e) {
PearException subEx = new PearException(
"Operation failed because the wizard could not customize your project as a UIMA project.",
e);
subEx.openErrorDialog(getShell());
this.dispose();
}
}
/**
* Adds the wizaed pages.
*
* @see org.eclipse.jface.wizard.IWizard#addPages()
*/
public void addPages() {
try {
componentPage = new INSDComponentPage(currentContainer, insd, wizardData);
addPage(componentPage);
environmentPage = new INSDEnvironmentPage(currentContainer, insd, wizardData);
addPage(environmentPage);
pearExportPage = new PearFileResourceExportPage(new StructuredSelection(currentContainer
.members()), currentContainer);
addPage(pearExportPage);
} catch (Throwable e) {
PearException subEx = new PearException(
"Operation failed because the wizard's pages could not be initialized properly.", e);
subEx.openErrorDialog(getShell());
this.dispose();
}
}
/**
* This method is called when 'Finish' button is pressed in the wizard.
*
* @see org.eclipse.jface.wizard.IWizard#performFinish()
*
*/
public boolean performFinish() {
try {
// currentContainer.refreshLocal(IResource.DEPTH_INFINITE,null);
editInstallationDescriptor();
final String file = pearExportPage.getDestinationValue();
if (new File(file).exists()
&& !MessageDialog.openConfirm(getShell(), "File exists", "The file " + file
+ " already exists. Do you want to overwrite it?")) {
return false;
}
getContainer().run(false, true, pearExportPage.getExportRunnable());
MessageDialog.openInformation(getShell(), "Done.", "The PEAR file export operation is done.");
return true;
} catch (Throwable e) {
PearException.openErrorDialog(e, getShell());
return false;
}
}
private void editInstallationDescriptor() throws CoreException, IOException {
handleComponentInformation();
addEnvOptions();
addEnvVars();
PearInstallationDescriptor.saveInstallationDescriptor(currentContainer, insd);
}
private void handleComponentInformation() {
insd.setMainComponent(componentPage.compID);
insd
.setMainComponentDesc(PearInstallationDescriptor
.addMacro(componentPage.compDescriptorPath));
}
private void addEnvOptions() {
insd.clearOSSpecs();
insd.clearToolkitsSpecs();
insd.clearFrameworkSpecs();
String os = environmentPage.osCombo.getText();
if (os != null && os.trim().length() > 0)
insd.addOSSpec(InstallationDescriptorHandler.NAME_TAG, os);
String jdkVersion = environmentPage.jdkVersionCombo.getText();
if (jdkVersion != null && jdkVersion.trim().length() > 0)
insd.addToolkitsSpec(InstallationDescriptorHandler.JDK_VERSION_TAG, jdkVersion);
}
private void addEnvVars() {
insd.deleteInstallationActions(InstallationDescriptor.ActionInfo.SET_ENV_VARIABLE_ACT);
Iterator envVarsItr = environmentPage.envVarList.tableRows.iterator();
while (envVarsItr.hasNext()) {
VarVal vv = (VarVal) envVarsItr.next();
String envVarName = vv.getVarName();
String envVarValue = vv.getVarValue();
if (envVarName != null && envVarValue != null && envVarName.trim().length() > 0
&& envVarValue.trim().length() > 0) {
InstallationDescriptor.ActionInfo actionInfo = new InstallationDescriptor.ActionInfo(
InstallationDescriptor.ActionInfo.SET_ENV_VARIABLE_ACT);
actionInfo.params.put("VAR_NAME", envVarName);
actionInfo.params.put("VAR_VALUE", envVarValue);
actionInfo.params.put("COMMENTS", "");
insd.addInstallationAction(actionInfo);
}
}
}
/*
* @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
* org.eclipse.jface.viewers.IStructuredSelection)
*/
public void init(IWorkbench workbench, IStructuredSelection selection) {
// nothing to do
}
}