blob: 77d0bdd1ad2779f93a8f19992cdef63a971bd14e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2008 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.update.internal.ui.wizards;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.*;
import org.eclipse.update.core.IFeature;
import org.eclipse.update.internal.ui.UpdateUI;
import org.eclipse.update.internal.ui.UpdateUIImages;
import org.eclipse.update.internal.ui.UpdateUIMessages;
import org.eclipse.update.operations.IInstallFeatureOperation;
public class LicensePage extends WizardPage implements IDynamicPage {
private boolean multiLicenseMode = false;
private IInstallFeatureOperation[] jobs;
private IInstallFeatureOperation[] oldjJobs;
private Text text;
private Table table;
private Button acceptButton;
private Button declineButton;
/**
* Constructor for LicensePage2
*/
public LicensePage(boolean multiLicenseMode) {
super("License"); //$NON-NLS-1$
setTitle(UpdateUIMessages.InstallWizard_LicensePage_title);
setPageComplete(false);
this.multiLicenseMode = multiLicenseMode;
UpdateUI.getDefault().getLabelProvider().connect(this);
setDescription(multiLicenseMode ?UpdateUIMessages.InstallWizard_LicensePage_desc2 :
UpdateUIMessages.InstallWizard_LicensePage_desc);
}
public void dispose() {
UpdateUI.getDefault().getLabelProvider().disconnect(this);
super.dispose();
}
public void setJobs(IInstallFeatureOperation[] jobs) {
this.jobs = jobs;
}
public void createControl(Composite parent) {
Composite client = new Composite(parent, SWT.NULL);
client.setLayoutData(new GridData(GridData.FILL_BOTH));
GridLayout layout = new GridLayout();
client.setLayout(layout);
PlatformUI.getWorkbench().getHelpSystem().setHelp(client, "org.eclipse.update.ui.LicensePage2"); //$NON-NLS-1$
if (multiLicenseMode) {
layout.numColumns = 3;
layout.makeColumnsEqualWidth = true;
table = new Table(client, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (e.item != null) {
Object data = e.item.getData();
text.setText((data == null) ? "" : (String) data); //$NON-NLS-1$
}
}
});
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 200;
table.setLayoutData(gd);
}
text =
new Text(
client,
SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.WRAP | SWT.READ_ONLY);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 200;
if (multiLicenseMode)
gd.horizontalSpan = 2;
text.setLayoutData(gd);
text.setBackground(text.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
Composite buttonContainer = new Composite(client, SWT.NULL);
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
if (multiLicenseMode)
gd.horizontalSpan = 3;
buttonContainer.setLayout(new GridLayout());
buttonContainer.setLayoutData(gd);
acceptButton = new Button(buttonContainer, SWT.RADIO);
acceptButton.setText(multiLicenseMode?UpdateUIMessages.InstallWizard_LicensePage_accept2
: UpdateUIMessages.InstallWizard_LicensePage_accept);
acceptButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
setPageComplete(acceptButton.getSelection());
}
});
declineButton = new Button(buttonContainer, SWT.RADIO);
declineButton.setText(multiLicenseMode?UpdateUIMessages.InstallWizard_LicensePage_decline2
: UpdateUIMessages.InstallWizard_LicensePage_decline);
declineButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
setPageComplete(acceptButton.getSelection());
}
});
setControl(client);
Dialog.applyDialogFont(parent);
}
public void setVisible(boolean visible) { // TO DO: Optimize out the case where a feature does not have a license?
boolean jobsChanged = didJobsChange(jobs);
declineButton.setSelection(!jobsChanged && declineButton.getSelection());
acceptButton.setSelection(!jobsChanged && acceptButton.getSelection());
if (jobs.length == 1) {
acceptButton.setText(UpdateUIMessages.InstallWizard_LicensePage_accept);
declineButton.setText(UpdateUIMessages.InstallWizard_LicensePage_decline);
} else if (jobs.length > 1) {
acceptButton.setText(UpdateUIMessages.InstallWizard_LicensePage_accept2);
declineButton.setText(UpdateUIMessages.InstallWizard_LicensePage_decline2);
}
if (visible) {
if (multiLicenseMode) {
TableItem item;
for (int i = 0; i < jobs.length; i++) {
IFeature feature = jobs[i].getFeature();
item = new TableItem(table, SWT.NONE);
String label =
feature.getLabel()
+ " " //$NON-NLS-1$
+ feature.getVersionedIdentifier().getVersion().toString();
item.setText(label);
item.setImage(
UpdateUI.getDefault().getLabelProvider().get(
feature.isPatch()
? UpdateUIImages.DESC_EFIX_OBJ
: UpdateUIImages.DESC_FEATURE_OBJ));
String license = feature.getLicense().getAnnotation();
// Question: Can this ever be null? What is the runtime cost?
item.setData(license);
}
table.setSelection(0);
}
showLicenseText();
} else {
if (multiLicenseMode) {
TableItem items[] = table.getItems();
for (int i = items.length - 1; i >= 0; i--) {
table.getItem(i).dispose();
}
}
}
super.setVisible(visible);
oldjJobs = jobs;
}
private void showLicenseText() {
if (!multiLicenseMode) {
text.setText(jobs[0].getFeature().getLicense().getAnnotation());
return;
}
TableItem[] selectedItems = table.getSelection();
if (selectedItems.length == 0) {
text.setText(""); //$NON-NLS-1$
} else {
Object data = selectedItems[0].getData();
text.setText((data == null) ? "" : (String) data); //$NON-NLS-1$
}
}
private boolean didJobsChange(IInstallFeatureOperation[] jobs){
if ( (jobs == null) || (oldjJobs == null) || (jobs.length == 0) || (oldjJobs.length == 0) )
return true;
boolean foundIt = false;
for ( int i = 0; i < jobs.length; i++) {
foundIt = false;
for ( int j = 0; j < oldjJobs.length; j++) {
if (jobs[i].getFeature().getVersionedIdentifier().equals(oldjJobs[j].getFeature().getVersionedIdentifier()) ) {
foundIt = true;
break;
}
}
if (!foundIt) {
return true;
}
}
return false;
}
}