/*******************************************************************************
* Copyright © 2000, 2013 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.edt.ide.ui.internal.eglarpackager;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.IExportWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
import org.eclipse.edt.ide.core.model.EGLCore;
import org.eclipse.edt.ide.core.model.IEGLElement;
import org.eclipse.edt.ide.core.model.IEGLProject;
import org.eclipse.edt.ide.ui.EDTUIPlugin;
public class EglarPackageWizard extends Wizard implements IExportWizard {
private static String DIALOG_SETTINGS_KEY= "EglarPackageWizard"; //$NON-NLS-1$
private boolean fHasNewDialogSettings;
private boolean fInitializeFromEglarPackage;
private EglarPackageData fEglarPackage;
private EglarPackageWizardPage fEglarPackageWizardPage;
private EglarOptionsPage fEglarOptionsWizardPage;
private IStructuredSelection fSelection;
public EglarPackageWizard() {
IDialogSettings workbenchSettings= EDTUIPlugin.getDefault().getDialogSettings();
IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY);
if (section == null) {
fHasNewDialogSettings= true;
} else {
fHasNewDialogSettings= false;
setDialogSettings(section);
}
}
@Override
public IWizardPage getNextPage(IWizardPage page) {
if(page == fEglarPackageWizardPage) {
return fEglarOptionsWizardPage;
} else if(page == fEglarOptionsWizardPage) {
return null;
}
return super.getNextPage(page);
}
/**
* {@inheritDoc}
*/
@Override
public void addPages() {
this.fEglarPackageWizardPage = new EglarPackageWizardPage(fEglarPackage, fSelection);
addPage(fEglarPackageWizardPage);
fEglarOptionsWizardPage = new EglarOptionsPage(fEglarPackage);
addPage(fEglarOptionsWizardPage);
super.addPages();
}
public void init(IWorkbench workbench, IStructuredSelection selection) {
fSelection= getValidSelection();
fEglarPackage= new EglarPackageData();
fEglarPackage.setExportEGLSrcFiles(false); //do not export egl source file
setInitializeFromEglarPackage(false);
setWindowTitle(EglarPackagerMessages.EglarPackageWizard_windowTitle);
setNeedsProgressMonitor(true);
}
void setInitializeFromEglarPackage(boolean state) {
fInitializeFromEglarPackage= state;
}
protected boolean executeExportOperation(IEglarExportRunnable op) {
try {
getContainer().run(true, true, op);
} catch (InterruptedException e) {
return false;
} catch (InvocationTargetException ex) {
if (ex.getTargetException() != null) {
ExceptionHandler.handle(ex, getShell(), EglarPackagerMessages.EglarPackageWizard_EglarExportError_title, EglarPackagerMessages.EglarPackageWizard_EglarExportError_message);
return false;
}
}
IStatus status= op.getStatus();
if (!status.isOK()) {
ErrorDialog.openError(getShell(), EglarPackagerMessages.EglarPackageWizard_EglarExport_title, null, status);
return !(status.matches(IStatus.ERROR));
}
return true;
}
protected IStructuredSelection getValidSelection() {
ISelection currentSelection= EDTUIPlugin.getActiveWorkbenchWindow().getSelectionService().getSelection();
if (currentSelection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection= (IStructuredSelection) currentSelection;
List<IEGLProject> selectedElements= getProjectsOfSelection(structuredSelection);
return new StructuredSelection(selectedElements);
} else
return StructuredSelection.EMPTY;
}
private ArrayList<IEGLProject> getProjectsOfSelection(IStructuredSelection structuredSelection) {
Iterator<?> iter= structuredSelection.iterator();
ArrayList<IEGLProject> selectedProjects = new ArrayList<IEGLProject>();
while (iter.hasNext()) {
Object selectedElement= iter.next();
IProject temp = null;
if(selectedElement instanceof IProject) {
temp = (IProject) selectedElement;
} else if(selectedElement instanceof IResource) {
temp = ((IResource)selectedElement).getProject();
} else if(selectedElement instanceof IEGLElement) {
temp = ((IEGLElement)selectedElement).getEGLProject().getProject();
} else if(selectedElement instanceof IPackageFragmentRoot) {
temp = ((IPackageFragmentRoot)selectedElement).getJavaProject().getProject();
}
if(temp != null && checkIfEGLProjectAndNotBin(temp)) {
selectedProjects.add(EGLCore.create(temp));
}
}
return selectedProjects;
}
private boolean checkIfEGLProjectAndNotBin(IProject project) {
try {
IEGLProject ieglProject = EGLCore.create(project);
if (project.hasNature(EGLCore.NATURE_ID) && (!ieglProject.isBinary()))
return true;
} catch (CoreException ex) {
}
return false;
}
boolean isInitializingFromEglarPackage() {
return fInitializeFromEglarPackage;
}
public boolean performFinish() {
fEglarPackage.setElements(fEglarPackageWizardPage.getSelectedElementsWithoutContainedChildren());
if (!executeExportOperation(fEglarPackage.createEglarExportRunnable(getShell())))
return false;
// Save the dialog settings
if (fHasNewDialogSettings) {
IDialogSettings workbenchSettings= EDTUIPlugin.getDefault().getDialogSettings();
IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY);
section= workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY);
setDialogSettings(section);
}
IWizardPage[] pages= getPages();
for (int i= 0; i < getPageCount(); i++) {
IWizardPage page= pages[i];
if (page instanceof IEglarPackageWizardPage)
((IEglarPackageWizardPage) page).finish();
}
return true;
}
}