/******************************************************************************* * Copyright (c) 2011 WindRiver 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: * WindRiver Corporation - initial API and implementation * Ericsson AB (Pascal Rapicault) - Bug 395210 *******************************************************************************/ package org.eclipse.equinox.internal.p2.importexport.internal.wizard; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.equinox.internal.p2.importexport.internal.Messages; import org.eclipse.equinox.internal.p2.ui.ProvUI; import org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard; import org.eclipse.equinox.p2.engine.IProfile; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.metadata.VersionRange; import org.eclipse.equinox.p2.query.IQueryResult; import org.eclipse.equinox.p2.query.QueryUtil; import org.eclipse.equinox.p2.ui.ProvisioningUI; import org.eclipse.jface.viewers.ICheckStateProvider; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.*; public abstract class AbstractImportPage extends AbstractPage { IProfile profile = null; private final ProvisioningOperationWizard wizard; private final ProvisioningUI ui; public AbstractImportPage(String pageName, ProvisioningUI ui, ProvisioningOperationWizard wizard) { super(pageName); this.wizard = wizard; this.ui = ui; profile = getSelfProfile(); } protected ProvisioningOperationWizard getProvisioningWizard() { return wizard; } protected ProvisioningUI getProvisioningUI() { return ui; } @Override protected void createInstallationTable(Composite parent) { super.createInstallationTable(parent); viewer.getTree().addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (event.detail == SWT.CHECK) { if (hasInstalled(ProvUI.getAdapter(event.item.getData(), IInstallableUnit.class))) { viewer.getTree().setRedraw(false); ((TreeItem) event.item).setChecked(false); viewer.getTree().setRedraw(true); } } updatePageCompletion(); } }); } public boolean hasInstalled(IInstallableUnit iu) { IQueryResult<IInstallableUnit> results = profile.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, false)), null); return !results.isEmpty(); } public String getIUNameWithDetail(IInstallableUnit iu) { IQueryResult<IInstallableUnit> results = profile.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, false)), null); String text = iu.getProperty(IProfile.PROP_NAME, null); text = (text != null) ? text : iu.getId(); if (!results.isEmpty()) { boolean hasHigherVersion = false; boolean hasEqualVersion = false; for (IInstallableUnit installedIU : results.toSet()) { int compareValue = installedIU.getVersion().compareTo(iu.getVersion()); if (compareValue > 0) { hasHigherVersion = true; break; } else if (compareValue == 0) hasEqualVersion = true; } if (hasHigherVersion) return NLS.bind(Messages.AbstractImportPage_HigherVersionInstalled, text); else if (hasEqualVersion) return NLS.bind(Messages.AbstractImportPage_SameVersionInstalled, text); } return text; } @Override protected ICheckStateProvider getViewerDefaultState() { return new ICheckStateProvider() { public boolean isGrayed(Object element) { return false; } public boolean isChecked(Object element) { if (profile != null) { IInstallableUnit iu = ProvUI.getAdapter(element, IInstallableUnit.class); IQueryResult<IInstallableUnit> collector = profile.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, false)), new NullProgressMonitor()); if (collector.isEmpty()) { return true; } } return false; } }; } @Override protected void doFinish() throws Exception { // do nothing } @Override public boolean canFlipToNextPage() { return isPageComplete(); } }