/** * Copyright (c) 2002-2006 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 - Initial API and implementation */ package org.eclipse.emf.codegen.presentation; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.ide.IDE; import org.eclipse.emf.codegen.jet.JETAddNatureOperation; import org.eclipse.emf.codegen.jet.JETNature; public class ConvertToJETProjectWizard extends Wizard implements INewWizard { protected IWorkbench workbench; protected List<IProject> projectsToConvert = new ArrayList<IProject>(); protected ConversionPage conversionPage; public ConvertToJETProjectWizard() { setWindowTitle(CodeGenUIPlugin.getPlugin().getString("_UI_JETConvertProject_label")); setNeedsProgressMonitor(true); } public void init(IWorkbench workbench, IStructuredSelection selection) { this.workbench = workbench; for (Object object : selection.toList()) { if (object instanceof IProject) { IProject project = (IProject)object; if (project.isOpen() && JETNature.getRuntime(project) == null) { projectsToConvert.add(project); } } } } @Override public void addPages() { super.addPages(); conversionPage = new ConversionPage(); addPage(conversionPage); } @Override public boolean performFinish() { IRunnableWithProgress operation = new WorkspaceModifyOperation() { @Override public void execute(IProgressMonitor monitor) { try { JETAddNatureOperation addNature = new JETAddNatureOperation(projectsToConvert); addNature.run(monitor); } catch (CoreException e) { CodeGenUIPlugin.write(e); } } }; try { getContainer().run(false, true, operation); } catch (InterruptedException exception) { CodeGenUIPlugin.write(exception); } catch (InvocationTargetException exception) { CodeGenUIPlugin.write(exception); } return true; } public class ConversionPage extends WizardPage { public ConversionPage() { super("JETConversionPage"); setTitle(CodeGenUIPlugin.getPlugin().getString("_UI_JETConvertProject_label")); setDefaultPageImageDescriptor(CodeGenUIPlugin.getPlugin().getImage("full/wizban/ConvertToJETProjectWizard")); setDescription(CodeGenUIPlugin.getPlugin().getString("_UI_JETConvertProject_message")); } @Override public boolean isPageComplete() { return !projectsToConvert.isEmpty(); } public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); { FormLayout layout = new FormLayout(); layout.marginTop = 10; layout.marginLeft = 10; layout.marginRight = 10; layout.spacing = 10; composite.setLayout(layout); GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.grabExcessVerticalSpace = true; data.horizontalAlignment = GridData.FILL; composite.setLayoutData(data); } Label projectsLabel = new Label(composite, SWT.LEFT); projectsLabel.setText(CodeGenUIPlugin.getPlugin().getString("_UI_Projects_label")); { FormData data = new FormData(); data.left = new FormAttachment(0); projectsLabel.setLayoutData(data); } Table projectsTable = new Table(composite, SWT.CHECK | SWT.BORDER); { FormData data = new FormData(SWT.DEFAULT, 250); data.top = new FormAttachment(projectsLabel, 5); data.bottom = new FormAttachment(100); data.left = new FormAttachment(0); data.right = new FormAttachment(100); data.height = 90; projectsTable.setLayoutData(data); } Composite selectionComposite = new Composite(composite, SWT.NONE); { FormData data = new FormData(); data.top = new FormAttachment(projectsLabel, 0, SWT.CENTER); data.right = new FormAttachment(100); selectionComposite.setLayoutData(data); RowLayout layout = new RowLayout(); layout.justify = true; layout.pack = true; layout.spacing = 15; layout.marginBottom = layout.marginTop = 0; layout.marginLeft = layout.marginRight = 0; selectionComposite.setLayout(layout); } Button selectAllButton = new Button(selectionComposite, SWT.PUSH); selectAllButton.setText(CodeGenUIPlugin.getPlugin().getString("_UI_SelectAll_label")); Button deselectAllButton = new Button(selectionComposite, SWT.PUSH); deselectAllButton.setText(CodeGenUIPlugin.getPlugin().getString("_UI_DeselectAll_label")); final CheckboxTableViewer projectsCheckboxTableViewer = new CheckboxTableViewer(projectsTable); { TableLayout layout = new TableLayout(); TableColumn projectColumn = new TableColumn(projectsTable, SWT.NONE); layout.addColumnData(new ColumnWeightData(1, true)); projectColumn.setResizable(true); projectsTable.setLayout(layout); } projectsCheckboxTableViewer.setColumnProperties(new String [] {"a"}); projectsCheckboxTableViewer.setContentProvider(new ArrayContentProvider()); projectsCheckboxTableViewer.setLabelProvider (new LabelProvider() { @Override public Image getImage(Object o) { return workbench.getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT); } @Override public String getText(Object o) { return ((IProject)o).getName(); } }); projectsCheckboxTableViewer.addCheckStateListener (new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { projectsToConvert.clear(); @SuppressWarnings("unchecked") List<IProject> list = (List<IProject>)(List<?>)Arrays.asList(projectsCheckboxTableViewer.getCheckedElements()); projectsToConvert.addAll(list); setPageComplete(isPageComplete()); } }); final List<IProject> projects = new ArrayList<IProject>(Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects())); for (Iterator<IProject> i = projects.iterator(); i.hasNext(); ) { IProject project = i.next(); boolean isJavaProject = false; try { isJavaProject = project.getNature(JavaCore.NATURE_ID) != null; } catch (CoreException e) { // Ignore } if (!project.isOpen() || JETNature.getRuntime(project) != null || !isJavaProject) { i.remove(); } } projectsCheckboxTableViewer.setInput(projects.toArray()); projectsCheckboxTableViewer.setCheckedElements(projectsToConvert.toArray()); selectAllButton.addSelectionListener (new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { projectsToConvert.addAll(projects); projectsCheckboxTableViewer.setCheckedElements(projects.toArray()); setPageComplete(isPageComplete()); } }); deselectAllButton.addSelectionListener (new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { projectsCheckboxTableViewer.setCheckedElements(new Object [0]); projectsToConvert.clear(); setPageComplete(isPageComplete()); } }); setControl(composite); setPageComplete(isPageComplete()); } } }