blob: fb88a93f56e65d2255ccd652fbbcede5105bccd9 [file] [log] [blame]
/*
* Copyright (c) 2014, 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.p2.internal.ui;
import org.eclipse.oomph.p2.internal.core.AgentAnalyzer.AnalyzedArtifact;
import org.eclipse.oomph.ui.OomphDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import java.net.URI;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
/**
* @author Eike Stepper
*/
public final class AdditionalURIPrompterDialog extends OomphDialog implements ICheckStateListener
{
private final Set<URI> checkedRepositories = new HashSet<URI>();
private boolean firstTime;
private List<AnalyzedArtifact> artifacts;
private Set<URI> repositories;
private CheckboxTableViewer repositoryViewer;
public AdditionalURIPrompterDialog(Shell parentShell, boolean firstTime, List<AnalyzedArtifact> artifacts, Set<URI> repositories)
{
super(parentShell, AgentAnalyzerDialog.TITLE, 600, 500, P2UIPlugin.INSTANCE, false);
setShellStyle(SWT.TITLE | SWT.MAX | SWT.RESIZE | SWT.BORDER | SWT.APPLICATION_MODAL);
this.firstTime = firstTime;
this.artifacts = artifacts;
this.repositories = repositories;
}
public Set<URI> getCheckedRepositories()
{
return checkedRepositories;
}
@Override
protected String getShellText()
{
return AgentAnalyzerDialog.TITLE;
}
@Override
protected String getDefaultMessage()
{
return "Some artifacts could not be downloaded from the " + (firstTime ? "repositories listed in the profiles" : "previously checked repositories") + ".\n"
+ "Please check additional repositories and try again.";
}
@Override
protected String getImagePath()
{
return "wizban/AgentAnalyzer.png";
}
@Override
protected void createUI(Composite parent)
{
Composite mainComposite = new Composite(parent, SWT.NONE);
mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
GridLayout mainLayout = new GridLayout();
mainLayout.marginWidth = 10;
mainLayout.marginHeight = 10;
mainComposite.setLayout(mainLayout);
SashForm sashForm = new SashForm(mainComposite, SWT.SMOOTH | SWT.VERTICAL);
sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite artifactComposite = new Composite(sashForm, SWT.NONE);
GridLayout artifactLayout = new GridLayout();
artifactLayout.marginWidth = 0;
artifactLayout.marginHeight = 0;
artifactComposite.setLayout(artifactLayout);
Label artifactLabel = new Label(artifactComposite, SWT.NONE);
artifactLabel.setText("Remaining Damaged Artifacts:");
TableViewer artifactViewer = new TableViewer(artifactComposite, SWT.BORDER | SWT.FULL_SELECTION);
artifactViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
artifactViewer.setSorter(new ViewerSorter());
artifactViewer.setLabelProvider(new AgentAnalyzerComposite.TableLabelProvider(parent.getDisplay(), true));
artifactViewer.setContentProvider(new ArrayContentProvider());
artifactViewer.setInput(artifacts);
Composite repositoryComposite = new Composite(sashForm, SWT.NONE);
GridLayout repositoryLayout = new GridLayout();
repositoryLayout.marginTop = 10;
repositoryLayout.marginWidth = 0;
repositoryLayout.marginHeight = 0;
repositoryComposite.setLayout(repositoryLayout);
Composite repositoryHeader = new Composite(repositoryComposite, SWT.NONE);
repositoryHeader.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
GridLayout repositoryHeaderLayout = new GridLayout(2, false);
repositoryHeaderLayout.marginWidth = 0;
repositoryHeaderLayout.marginHeight = 0;
repositoryHeader.setLayout(repositoryHeaderLayout);
Label repositoryLabel = new Label(repositoryHeader, SWT.NONE);
repositoryLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
repositoryLabel.setText("Additional Repositories:");
ToolBar toolBar = new ToolBar(repositoryHeader, SWT.FLAT | SWT.RIGHT);
toolBar.setBounds(0, 0, 89, 23);
ToolItem checkAll = new ToolItem(toolBar, SWT.NONE);
checkAll.setToolTipText("Check all repositories");
checkAll.setImage(getDefaultImage("tool16/checkAll"));
ToolItem uncheckAll = new ToolItem(toolBar, SWT.NONE);
uncheckAll.setToolTipText("Uncheck all repositories");
uncheckAll.setImage(getDefaultImage("tool16/uncheckAll"));
repositoryViewer = CheckboxTableViewer.newCheckList(repositoryComposite, SWT.BORDER | SWT.FULL_SELECTION);
repositoryViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
repositoryViewer.setSorter(new ViewerSorter());
repositoryViewer.setLabelProvider(new AgentAnalyzerComposite.TableLabelProvider(parent.getDisplay()));
repositoryViewer.setContentProvider(new ArrayContentProvider());
repositoryViewer.setInput(repositories);
repositoryViewer.addCheckStateListener(this);
checkAll.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
repositoryViewer.setAllChecked(true);
checkStateChanged(null);
}
});
uncheckAll.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
repositoryViewer.setAllChecked(false);
checkStateChanged(null);
}
});
Composite uriComposite = new Composite(repositoryComposite, SWT.NONE);
GridLayout uriLayout = new GridLayout(3, false);
uriLayout.marginWidth = 0;
uriLayout.marginHeight = 0;
uriComposite.setLayout(uriLayout);
uriComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
Label uriLabel = new Label(uriComposite, SWT.NONE);
uriLabel.setText("URI:");
final AtomicReference<URI> enteredURI = new AtomicReference<URI>();
final Text uriText = new Text(uriComposite, SWT.BORDER);
uriText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
final Button uriButton = new Button(uriComposite, SWT.NONE);
uriButton.setText("Add");
uriButton.setToolTipText("Add the entered URI to the repositories list");
uriButton.setEnabled(false);
uriButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
URI uri = enteredURI.get();
repositories.add(uri);
repositoryViewer.refresh();
repositoryViewer.setChecked(uri, true);
checkStateChanged(null);
uriText.setText("");
uriText.setFocus();
}
});
uriText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
URI uri;
try
{
String text = uriText.getText();
uri = text.length() == 0 ? null : new URI(text);
}
catch (Exception ex)
{
uri = null;
}
enteredURI.set(uri);
uriButton.setEnabled(uri != null);
}
});
sashForm.setWeights(new int[] { 1, 2 });
}
@Override
protected void createButtonsForButtonBar(Composite parent)
{
super.createButtonsForButtonBar(parent);
checkStateChanged(null);
}
public void checkStateChanged(CheckStateChangedEvent event)
{
checkedRepositories.clear();
for (Object object : repositoryViewer.getCheckedElements())
{
checkedRepositories.add((URI)object);
}
getButton(IDialogConstants.OK_ID).setEnabled(!checkedRepositories.isEmpty());
}
}