/******************************************************************************* * Copyright (c) 2011 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.equinox.internal.p2.ui.dialogs; import java.net.MalformedURLException; import org.eclipse.core.runtime.*; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.operations.Update; import org.eclipse.equinox.p2.operations.UpdateOperation; import org.eclipse.equinox.p2.ui.ProvisioningUI; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTError; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.*; import org.eclipse.ui.statushandlers.StatusManager; public class UpdateSingleIUPage extends ProvisioningWizardPage { UpdateOperation operation; protected UpdateSingleIUPage(UpdateOperation operation, ProvisioningUI ui) { super("UpdateSingleIUPage", ui, null); //$NON-NLS-1$ setTitle(ProvUIMessages.UpdateAction_UpdatesAvailableTitle); IProduct product = Platform.getProduct(); String productName = product != null && product.getName() != null ? product.getName() : ProvUIMessages.ApplicationInRestartDialog; setDescription(NLS.bind(ProvUIMessages.UpdateSingleIUPage_SingleUpdateDescription, productName)); Assert.isNotNull(operation); Assert.isTrue(operation.hasResolved()); Assert.isTrue(operation.getSelectedUpdates().length == 1); Assert.isTrue(operation.getResolutionResult().isOK()); this.operation = operation; } public void createControl(Composite parent) { IInstallableUnit updateIU = getUpdate().replacement; String url = null; if (updateIU.getUpdateDescriptor().getLocation() != null) try { url = URIUtil.toURL(updateIU.getUpdateDescriptor().getLocation()).toExternalForm(); } catch (MalformedURLException e) { // ignore and null URL will be ignored below } if (url != null) { Browser browser = null; try { browser = new Browser(parent, SWT.NONE); browser.setUrl(url); browser.setBackground(parent.getBackground()); Point size = getProvisioningUI().getPolicy().getUpdateDetailsPreferredSize(); if (size != null) { browser.setSize(size); } setControl(browser); return; } catch (SWTError e) { // Fall through to backup plan. } } // Create a text description of the update. Text text = new Text(parent, SWT.MULTI | SWT.V_SCROLL | SWT.READ_ONLY); text.setBackground(parent.getBackground()); text.setText(getUpdateText(updateIU)); setControl(text); } private String getUpdateText(IInstallableUnit iu) { StringBuffer buffer = new StringBuffer(); buffer.append(new IUDetailsLabelProvider().getClipboardText(getUpdate().replacement, CopyUtils.DELIMITER)); buffer.append(CopyUtils.NEWLINE); buffer.append(CopyUtils.NEWLINE); String text = iu.getUpdateDescriptor().getDescription(); if (text != null) buffer.append(text); else { text = iu.getProperty(IInstallableUnit.PROP_DESCRIPTION); if (text != null) buffer.append(text); } return buffer.toString(); } public boolean performFinish() { if (operation.getResolutionResult().getSeverity() != IStatus.ERROR) { getProvisioningUI().schedule(operation.getProvisioningJob(null), StatusManager.SHOW | StatusManager.LOG); return true; } return false; } @Override protected String getClipboardText(Control control) { return getUpdate().toString(); } private Update getUpdate() { return operation.getSelectedUpdates()[0]; } }