Java tutorial
/******************************************************************************* * Copyright (c) 2005, 2009 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 com.siteview.mde.internal.ui.wizards.exports; import java.util.ArrayList; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.dialogs.*; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.*; import org.eclipse.jface.window.Window; import com.siteview.mde.core.IModel; import com.siteview.mde.internal.ui.MDEPlugin; import com.siteview.mde.internal.ui.MDEUIMessages; import com.siteview.mde.internal.ui.elements.DefaultContentProvider; import com.siteview.mde.internal.ui.parts.WizardCheckboxTablePart; import com.siteview.mde.internal.ui.wizards.ListUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.*; import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog; public abstract class BaseExportWizardPage extends AbstractExportWizardPage { protected ExportPart fExportPart; private IStructuredSelection fSelection; protected ExportDestinationTab fDestinationTab; protected ExportOptionsTab fOptionsTab; protected JARSigningTab fJARSiginingTab; protected TabFolder fTabFolder; class ExportListProvider extends DefaultContentProvider implements IStructuredContentProvider { public Object[] getElements(Object parent) { return getListElements(); } } class ExportPart extends WizardCheckboxTablePart { public ExportPart(String label, String[] buttonLabels) { super(label, buttonLabels); } public void updateCounter(int count) { super.updateCounter(count); pageChanged(); } protected void buttonSelected(Button button, int index) { switch (index) { case 0: handleSelectAll(true); break; case 1: handleSelectAll(false); break; case 2: handleWorkingSets(); } } } public BaseExportWizardPage(IStructuredSelection selection, String name, String choiceLabel) { super(name); fSelection = selection; fExportPart = new ExportPart(choiceLabel, new String[] { MDEUIMessages.WizardCheckboxTablePart_selectAll, MDEUIMessages.WizardCheckboxTablePart_deselectAll, MDEUIMessages.ExportWizard_workingSet }); setDescription(MDEUIMessages.ExportWizard_Plugin_description); } public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.verticalSpacing = 10; container.setLayout(layout); createViewer(container); fTabFolder = new TabFolder(container, SWT.NONE); fTabFolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); createTabs(fTabFolder, getDialogSettings()); initializeViewer(); if (getErrorMessage() != null) { setMessage(getErrorMessage()); setErrorMessage(null); } setControl(container); hookHelpContext(container); Dialog.applyDialogFont(container); } protected void createTabs(TabFolder folder, IDialogSettings settings) { createDestinationTab(folder); createOptionsTab(folder); fDestinationTab.initialize(settings); fOptionsTab.initialize(settings); if (fOptionsTab.useJARFormat()) { createJARSigningTab(folder); fJARSiginingTab.initialize(settings); } } protected void createDestinationTab(TabFolder folder) { fDestinationTab = new ExportDestinationTab(this); TabItem item = new TabItem(folder, SWT.NONE); item.setControl(fDestinationTab.createControl(folder)); item.setText(MDEUIMessages.ExportWizard_destination); } protected void createOptionsTab(TabFolder folder) { fOptionsTab = new ExportOptionsTab(this); TabItem item = new TabItem(folder, SWT.NONE); item.setControl(fOptionsTab.createControl(folder)); item.setText(MDEUIMessages.ExportWizard_options); } protected void createJARSigningTab(TabFolder folder) { fJARSiginingTab = new JARSigningTab(this); TabItem item = new TabItem(folder, SWT.NONE); item.setControl(fJARSiginingTab.createControl(folder)); item.setText(MDEUIMessages.AdvancedPluginExportPage_signJar); } protected void createViewer(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); fExportPart.createControl(composite); GridData gd = (GridData) fExportPart.getControl().getLayoutData(); gd.heightHint = 125; gd.widthHint = 150; gd.horizontalSpan = 2; TableViewer viewer = fExportPart.getTableViewer(); viewer.setContentProvider(new ExportListProvider()); viewer.setLabelProvider(MDEPlugin.getDefault().getLabelProvider()); viewer.setComparator(ListUtil.PLUGIN_COMPARATOR); viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (event.getSource() instanceof CheckboxTableViewer) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); ((CheckboxTableViewer) event.getSource()).setChecked(selection.getFirstElement(), !((CheckboxTableViewer) event.getSource()).getChecked(selection.getFirstElement())); fExportPart .updateCounter(((CheckboxTableViewer) event.getSource()).getCheckedElements().length); } } }); fExportPart.getTableViewer().setInput(getInput()); } protected abstract Object getInput(); protected void initializeViewer() { Object[] elems = fSelection.toArray(); ArrayList checked = new ArrayList(elems.length); for (int i = 0; i < elems.length; i++) { Object elem = elems[i]; IProject project = null; if (elem instanceof IFile) { IFile file = (IFile) elem; project = file.getProject(); } else if (elem instanceof IProject) { project = (IProject) elem; } else if (elem instanceof IJavaProject) { project = ((IJavaProject) elem).getProject(); } if (project != null) { IModel model = findModelFor(project); if (model != null && !checked.contains(model)) { checked.add(model); } } } fExportPart.setSelection(checked.toArray()); if (checked.size() > 0) fExportPart.getTableViewer().reveal(checked.get(0)); } private void handleWorkingSets() { IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager(); IWorkingSetSelectionDialog dialog = manager.createWorkingSetSelectionDialog(getShell(), true); if (dialog.open() == Window.OK) { ArrayList models = new ArrayList(); IWorkingSet[] workingSets = dialog.getSelection(); for (int i = 0; i < workingSets.length; i++) { IAdaptable[] elements = workingSets[i].getElements(); for (int j = 0; j < elements.length; j++) { IModel model = findModelFor(elements[j]); if (isValidModel(model)) { models.add(model); } } } fExportPart.setSelection(models.toArray()); } } public Object[] getSelectedItems() { return fExportPart.getSelection(); } protected void pageChanged() { if (getMessage() != null) setMessage(null); if (fOptionsTab != null) { String path = fOptionsTab.getAntBuildFileName(); String warningMessage = null; if (path != null && path.length() > 0 && "build.xml".equals(new Path(path).lastSegment())) //$NON-NLS-1$ warningMessage = MDEUIMessages.ExportOptionsTab_antReservedMessage; setMessage(warningMessage, IMessageProvider.WARNING); } String error = fExportPart.getSelectionCount() > 0 ? null : MDEUIMessages.ExportWizard_status_noselection; if (error == null) error = validateTabs(); setErrorMessage(error); setPageComplete(error == null); } protected String validateTabs() { String message = fDestinationTab.validate(); if (message == null) message = fOptionsTab.validate(); if (message == null && fTabFolder.getItemCount() > 2) message = fJARSiginingTab.validate(); return message; } protected abstract void hookHelpContext(Control control); protected abstract boolean isValidModel(IModel model); public abstract Object[] getListElements(); protected abstract IModel findModelFor(IAdaptable object); protected void saveSettings(IDialogSettings settings) { fDestinationTab.saveSettings(settings); fOptionsTab.saveSettings(settings); if (fJARSiginingTab != null) fJARSiginingTab.saveSettings(settings); } protected boolean doExportToDirectory() { return fDestinationTab.doExportToDirectory(); } protected String getFileName() { return fDestinationTab.getFileName(); } protected String getDestination() { return fDestinationTab.getDestination(); } protected boolean doInstall() { return fDestinationTab.doInstall(); } protected boolean doExportSource() { return fOptionsTab.doExportSource(); } protected boolean doExportSourceBundles() { return fOptionsTab.doExportSourceBundles(); } protected boolean useJARFormat() { return fOptionsTab.useJARFormat(); } protected boolean allowBinaryCycles() { return fOptionsTab.doBinaryCycles(); } protected boolean useWorkspaceCompiledClasses() { return fOptionsTab.useWorkspaceCompiledClasses(); } protected boolean doGenerateAntFile() { return fOptionsTab.doGenerateAntFile(); } protected String getAntBuildFileName() { return fOptionsTab.getAntBuildFileName(); } protected String getQualifier() { return fOptionsTab.getQualifier(); } protected String[] getSigningInfo() { if (fJARSiginingTab == null || fTabFolder.getItemCount() < 3) return null; return fJARSiginingTab.getSigningInfo(); } protected abstract void adjustAdvancedTabsVisibility(); protected void adjustJARSigningTabVisibility() { IDialogSettings settings = getDialogSettings(); if (useJARFormat()) { if (fTabFolder.getItemCount() < 3) { createJARSigningTab(fTabFolder); fJARSiginingTab.initialize(settings); } } else { if (fTabFolder.getItemCount() >= 3) { fJARSiginingTab.saveSettings(settings); fTabFolder.getItem(2).dispose(); } } } }