blob: a5893fdf9d8ded0366df5bad45fbc3149c5ceaa4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.wizards.exports;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.osgi.service.resolver.State;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.core.exports.FeatureExportInfo;
import org.eclipse.pde.internal.core.exports.ProductExportOperation;
import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
import org.eclipse.pde.internal.core.iproduct.IProductFeature;
import org.eclipse.pde.internal.core.iproduct.IProductPlugin;
import org.eclipse.pde.internal.core.product.WorkspaceProductModel;
import org.eclipse.pde.internal.ui.PDEPluginImages;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.wizards.product.SynchronizationOperation;
import org.eclipse.ui.progress.IProgressConstants;
public class ProductExportWizard extends BaseExportWizard {
private static final String STORE_SECTION = "ProductExportWizard"; //$NON-NLS-1$
private WorkspaceProductModel fProductModel;
private CrossPlatformExportPage fPage2;
private ProductExportWizardPage fPage;
private IProject fProject;
public ProductExportWizard() {
this(null);
}
public ProductExportWizard(IProject project) {
setDefaultPageImageDescriptor(PDEPluginImages.DESC_PRODUCT_EXPORT_WIZ);
fProject = project;
}
public void addPages() {
fPage = new ProductExportWizardPage(getSelection());
addPage(fPage);
IFeatureModel model = PDECore.getDefault().getFeatureModelManager().getDeltaPackFeature();
if (model != null) {
fPage2 = new CrossPlatformExportPage("environment", model); //$NON-NLS-1$
addPage(fPage2);
}
}
protected String getSettingsSectionName() {
return STORE_SECTION;
}
protected void scheduleExportJob() {
FeatureExportInfo info = new FeatureExportInfo();
info.toDirectory = fPage.doExportToDirectory();
info.exportSource = fPage.doExportSource();
info.allowBinaryCycles = fPage.doBinaryCycles();
info.exportMetadata = fPage.doExportMetadata();
info.destinationDirectory = fPage.getDestination();
info.zipFileName = fPage.getFileName();
if (fPage2 != null && fPage.doMultiPlatform())
info.targets = fPage2.getTargets();
if (fProductModel.getProduct().useFeatures())
info.items = getFeatureModels();
else
info.items = getPluginModels();
String rootDirectory = fPage.getRootDirectory();
if ("".equals(rootDirectory.trim())) //$NON-NLS-1$
rootDirectory = "."; //$NON-NLS-1$
ProductExportOperation job = new ProductExportOperation(info, PDEUIMessages.ProductExportJob_name, fProductModel.getProduct(), rootDirectory);
job.setUser(true);
job.setRule(ResourcesPlugin.getWorkspace().getRoot());
job.schedule();
job.setProperty(IProgressConstants.ICON_PROPERTY, PDEPluginImages.DESC_FEATURE_OBJ);
}
private IFeatureModel[] getFeatureModels() {
ArrayList list = new ArrayList();
FeatureModelManager manager = PDECore.getDefault().getFeatureModelManager();
IProductFeature[] features = fProductModel.getProduct().getFeatures();
for (int i = 0; i < features.length; i++) {
IFeatureModel model = manager.findFeatureModel(features[i].getId(), features[i].getVersion());
if (model != null)
list.add(model);
}
return (IFeatureModel[]) list.toArray(new IFeatureModel[list.size()]);
}
private BundleDescription[] getPluginModels() {
ArrayList list = new ArrayList();
State state = TargetPlatformHelper.getState();
IProductPlugin[] plugins = fProductModel.getProduct().getPlugins();
for (int i = 0; i < plugins.length; i++) {
BundleDescription bundle = state.getBundle(plugins[i].getId(), null);
if (bundle != null)
list.add(bundle);
}
// implicitly add the new launcher plug-in/fragment if we are to use the
// new launching story and the launcher plug-in/fragment are not already included in the .product file
IPluginModelBase launcherPlugin = PluginRegistry.findModel("org.eclipse.equinox.launcher"); //$NON-NLS-1$
if (launcherPlugin != null) {
BundleDescription bundle = launcherPlugin.getBundleDescription();
if (bundle != null && !list.contains(bundle)) {
list.add(bundle);
BundleDescription[] fragments = bundle.getFragments();
for (int i = 0; i < fragments.length; i++) {
if (!list.contains(fragments[i])) {
list.add(fragments[i]);
}
}
}
}
return (BundleDescription[]) list.toArray(new BundleDescription[list.size()]);
}
protected boolean performPreliminaryChecks() {
fProductModel = new WorkspaceProductModel(fPage.getProductFile(), false);
try {
fProductModel.load();
if (!fProductModel.isLoaded()) {
MessageDialog.openError(getContainer().getShell(), PDEUIMessages.ProductExportWizard_error, PDEUIMessages.ProductExportWizard_corrupt); //
return false;
}
} catch (CoreException e) {
MessageDialog.openError(getContainer().getShell(), PDEUIMessages.ProductExportWizard_error, PDEUIMessages.ProductExportWizard_corrupt); //
return false;
}
if (fPage.doSync()) {
try {
getContainer().run(false, false, new SynchronizationOperation(fProductModel.getProduct(), getContainer().getShell(), fProject));
} catch (InvocationTargetException e) {
MessageDialog.openError(getContainer().getShell(), PDEUIMessages.ProductExportWizard_syncTitle, e.getTargetException().getMessage());
return false;
} catch (InterruptedException e) {
return false;
}
}
return true;
}
protected boolean confirmDelete() {
if (!fPage.doExportToDirectory()) {
File zipFile = new File(fPage.getDestination(), fPage.getFileName());
if (zipFile.exists()) {
if (!MessageDialog.openQuestion(getContainer().getShell(), PDEUIMessages.BaseExportWizard_confirmReplace_title, NLS.bind(PDEUIMessages.BaseExportWizard_confirmReplace_desc, zipFile.getAbsolutePath())))
return false;
zipFile.delete();
}
}
return true;
}
public boolean canFinish() {
return (fPage.getNextPage() != null) ? super.canFinish() : fPage.isPageComplete();
}
}