|
What this is
Other links
The source code/******************************************************************************* * Copyright (c) 2003, 2007 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.imports; import java.util.ArrayList; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.pde.core.IModelProviderEvent; import org.eclipse.pde.core.IModelProviderListener; import org.eclipse.pde.core.plugin.*; import org.eclipse.pde.internal.core.ClasspathUtilCore; import org.eclipse.pde.internal.core.PDECore; import org.eclipse.pde.internal.ui.PDEPlugin; import org.eclipse.pde.internal.ui.PDEUIMessages; import org.eclipse.pde.internal.ui.elements.DefaultContentProvider; import org.eclipse.pde.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.*; public abstract class BaseImportWizardSecondPage extends WizardPage implements IModelProviderListener { protected static final String SETTINGS_ADD_FRAGMENTS = "addFragments"; //$NON-NLS-1$ protected static final String SETTINGS_AUTOBUILD = "autobuild"; //$NON-NLS-1$ protected PluginImportWizardFirstPage fPage1; protected IPluginModelBase[] fModels = new IPluginModelBase[0]; private String fLocation; protected Button fAddFragmentsButton; private Button fAutoBuildButton; protected TableViewer fImportListViewer; private boolean fRefreshNeeded = true; class ContentProvider extends DefaultContentProvider implements IStructuredContentProvider { public Object[] getElements(Object element) { return new Object[0]; } } public BaseImportWizardSecondPage(String pageName, PluginImportWizardFirstPage page) { super(pageName); fPage1 = page; PDEPlugin.getDefault().getLabelProvider().connect(this); PDECore.getDefault().getModelManager().getExternalModelManager().addModelProviderListener(this); } protected Composite createImportList(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; container.setLayout(layout); container.setLayoutData(new GridData(GridData.FILL_BOTH)); Label label = new Label(container, SWT.NONE); label.setText(PDEUIMessages.ImportWizard_DetailedPage_importList); Table table = new Table(container, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); GridData gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 225; table.setLayoutData(gd); fImportListViewer = new TableViewer(table); fImportListViewer.setLabelProvider(PDEPlugin.getDefault().getLabelProvider()); fImportListViewer.setContentProvider(new ContentProvider()); fImportListViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager()); fImportListViewer.setComparator(ListUtil.PLUGIN_COMPARATOR); return container; } protected Composite createComputationsOption(Composite parent, int span) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(GridLayoutFactory.swtDefaults().margins(5, 0).create()); GridData gd = new GridData(); gd.horizontalSpan = span; composite.setLayoutData(gd); fAddFragmentsButton = new Button(composite, SWT.CHECK); fAddFragmentsButton.setText(PDEUIMessages.ImportWizard_SecondPage_addFragments); fAddFragmentsButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (getDialogSettings().get(SETTINGS_ADD_FRAGMENTS) != null) fAddFragmentsButton.setSelection(getDialogSettings().getBoolean(SETTINGS_ADD_FRAGMENTS)); else fAddFragmentsButton.setSelection(true); if (!PDEPlugin.getWorkspace().isAutoBuilding()) { fAutoBuildButton = new Button(composite, SWT.CHECK); fAutoBuildButton.setText(PDEUIMessages.BaseImportWizardSecondPage_autobuild); fAutoBuildButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fAutoBuildButton.setSelection(getDialogSettings().getBoolean(SETTINGS_AUTOBUILD)); } return composite; } public void dispose() { PDEPlugin.getDefault().getLabelProvider().disconnect(this); PDECore.getDefault().getModelManager().getExternalModelManager().removeModelProviderListener(this); } public void setVisible(boolean visible) { super.setVisible(visible); if (visible && isRefreshNeeded()) { fModels = fPage1.getModels(); refreshPage(); } } protected abstract void refreshPage(); protected boolean isRefreshNeeded() { if (fRefreshNeeded) { fRefreshNeeded = false; fLocation = fPage1.getDropLocation(); return true; } String currLocation = fPage1.getDropLocation(); if (fLocation == null || !fLocation.equals(currLocation)) { fLocation = fPage1.getDropLocation(); return true; } return fPage1.isRefreshNeeded(); } private IPluginModelBase findModel(String id) { for (int i = 0; i < fModels.length; i++) { String modelId = fModels[i].getPluginBase().getId(); if (modelId != null && modelId.equals(id)) return fModels[i]; } return null; } private IFragmentModel[] findFragments(IPlugin plugin) { ArrayList result = new ArrayList(); for (int i = 0; i < fModels.length; i++) { if (fModels[i] instanceof IFragmentModel) { IFragment fragment = ((IFragmentModel) fModels[i]).getFragment(); if (plugin.getId().equalsIgnoreCase(fragment.getPluginId())) { result.add(fModels[i]); } } } return (IFragmentModel[]) result.toArray(new IFragmentModel[result.size()]); } protected void addPluginAndDependencies(IPluginModelBase model, ArrayList selected, boolean addFragments) { boolean containsVariable = false; if (!selected.contains(model)) { selected.add(model); boolean hasextensibleAPI = ClasspathUtilCore.hasExtensibleAPI(model); if (!addFragments && !hasextensibleAPI && model instanceof IPluginModel) { IPluginLibrary[] libraries = model.getPluginBase().getLibraries(); for (int i = 0; i < libraries.length; i++) { if (ClasspathUtilCore.containsVariables(libraries[i].getName())) { containsVariable = true; break; } } } addDependencies(model, selected, addFragments || containsVariable || hasextensibleAPI); } } protected void addDependencies(IPluginModelBase model, ArrayList selected, boolean addFragments) { IPluginImport[] required = model.getPluginBase().getImports(); if (required.length > 0) { for (int i = 0; i < required.length; i++) { IPluginModelBase found = findModel(required[i].getId()); if (found != null) { addPluginAndDependencies(found, selected, addFragments); } } } if (addFragments) { if (model instanceof IPluginModel) { IFragmentModel[] fragments = findFragments(((IPluginModel) model).getPlugin()); for (int i = 0; i < fragments.length; i++) { addPluginAndDependencies(fragments[i], selected, addFragments); } } else { IFragment fragment = ((IFragmentModel) model).getFragment(); IPluginModelBase found = findModel(fragment.getPluginId()); if (found != null) { addPluginAndDependencies(found, selected, addFragments); } } } } public IPluginModelBase[] getModelsToImport() { TableItem[] items = fImportListViewer.getTable().getItems(); ArrayList result = new ArrayList(); for (int i = 0; i < items.length; i++) { result.add(items[i].getData()); } return (IPluginModelBase[]) result.toArray(new IPluginModelBase[result.size()]); } public void storeSettings() { IDialogSettings settings = getDialogSettings(); settings.put(SETTINGS_ADD_FRAGMENTS, fAddFragmentsButton.getSelection()); if (fAutoBuildButton != null) settings.put(SETTINGS_AUTOBUILD, fAutoBuildButton.getSelection()); } /* (non-Javadoc) * @see org.eclipse.pde.core.IModelProviderListener#modelsChanged(org.eclipse.pde.core.IModelProviderEvent) */ public void modelsChanged(IModelProviderEvent event) { fRefreshNeeded = true; } public boolean forceAutoBuild() { return fAutoBuildButton != null && getDialogSettings().getBoolean(SETTINGS_AUTOBUILD); } } |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.