/** * Copyright 2004-2016 Riccardo Solmi. All rights reserved. * This file is part of the Whole Platform. * * The Whole Platform is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Whole Platform is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>. */ package org.whole.lang.jdt.ui; import static org.whole.lang.jdt.PlatformLibraryContainerInitializer.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.runtime.Platform; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jdt.ui.wizards.IClasspathContainerPage; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.osgi.framework.Bundle; import org.whole.lang.jdt.PlatformLibraryClasspathContainer; /** * @author Enrico Persiani */ public class PlatformLibraryContainerPage extends WizardPage implements IClasspathContainerPage { protected Image jarImage; protected CheckboxTableViewer jarsViewer; protected IClasspathEntry containerEntry; public PlatformLibraryContainerPage() { super("wholePlatformLibraryContainerPage"); setTitle("Whole Platform Library"); setDescription("This read-only container provides Whole Platform Library Jar Files"); setImageDescriptor(ImageDescriptor.createFromURL(Platform.getBundle("org.whole.lang.ide").getEntry("icons/wizards/whole_classpath_container.png"))); jarImage = JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_EXTERNAL_ARCHIVE); } public boolean finish() { Set<String> bundles = new HashSet<String>(PlatformLibraryClasspathContainer.BUNDLE_IDS); Object[] checkedElements = jarsViewer.getCheckedElements(); for (Object checkedElement : checkedElements) bundles.remove(((Bundle) checkedElement).getSymbolicName()); containerEntry = JavaCore.newContainerEntry(calculatePath(bundles), false); return true; } public IClasspathEntry getSelection() { return containerEntry; } public void setSelection(IClasspathEntry containerEntry) { this.containerEntry = containerEntry == null ? JavaCore.newContainerEntry(PlatformLibraryClasspathContainer.getBasePath(), false) : containerEntry; } public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); Table table = new Table(container, SWT.CHECK | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); table.setHeaderVisible(true); table.setLinesVisible(true); TableColumn column = new TableColumn(table, SWT.NONE); column.setText("Bundle ID"); column = new TableColumn(table, SWT.NONE); column.setText("Version"); TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(60)); layout.addColumnData(new ColumnWeightData(40)); table.setLayout(layout); // PluginRegistry.findModel(bundleId) container.setLayout(new GridLayout()); Label label = new Label(container, SWT.NULL); label.setText("Included Jar Files:"); jarsViewer = new CheckboxTableViewer(table); jarsViewer.setContentProvider(new ArrayContentProvider()); jarsViewer.setLabelProvider(new ClasspathLabelProvider()); jarsViewer.setSorter(new ViewerSorter() { @Override public int compare(Viewer viewer, Object e1, Object e2) { return super.compare(viewer, ((Bundle) e1).getSymbolicName(), ((Bundle) e2).getSymbolicName()); } }); jarsViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); Set<String> excludedBundleIDs = getExclusions(containerEntry.getPath()); List<Bundle> bundles = new ArrayList<Bundle>(); List<Bundle> checkedElements = new ArrayList<Bundle>(); for (String bundleId : PlatformLibraryClasspathContainer.BUNDLE_IDS) { Bundle bundle = Platform.getBundle(bundleId); if (bundle == null) continue; bundles.add(bundle); if (!excludedBundleIDs.contains(bundleId)) checkedElements.add(bundle); } jarsViewer.setInput(bundles); jarsViewer.setCheckedElements(checkedElements.toArray()); setControl(container); Dialog.applyDialogFont(container); } private class ClasspathLabelProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return columnIndex == 0 ? jarImage : null; } public String getColumnText(Object element, int columnIndex) { Bundle pluginBase = (Bundle) element; return columnIndex == 0 ? pluginBase.getSymbolicName() : pluginBase.getVersion().toString(); } } }