blob: afc8bffa1210658a6cbfa0eb5446538ebd6e607c [file] [log] [blame]
/*******************************************************************************
* Licensed Materials - Property of IBM
* (c) Copyright IBM Corporation 2007,2009. All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* Use, duplication or disclosure restricted by GSA ADP Schedule
* Contract with IBM Corp.
*******************************************************************************/
package org.eclipse.epf.authoring.ui.dialogs;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.epf.authoring.ui.AuthoringUIResources;
import org.eclipse.epf.library.edit.TngAdapterFactory;
import org.eclipse.epf.library.edit.util.LibraryEditUtil;
import org.eclipse.epf.uma.MethodLibrary;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
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.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
/**
* @author achen
*
*/
public class PluginListDialog extends Dialog {
private Shell shell;
private boolean readOnly;
private List methodPlugins;
private List changedMethodPlugins = new ArrayList();
private TreeViewer viewer;
private ComposedAdapterFactory adapterFactory = TngAdapterFactory.INSTANCE.createLibraryComposedAdapterFactory();
private ITreeContentProvider pluginsContentProvider = new PluginListContentProvider();
private AdapterFactoryLabelProvider pluginsLabelProvider = new AdapterFactoryLabelProvider(adapterFactory);
private Button addBtn;
private Button removeBtn;
public PluginListDialog(Shell shell, boolean readOnly, List methodPlugins) {
super(shell);
this.shell = shell;
this.readOnly = readOnly;
this.methodPlugins = methodPlugins;
this.changedMethodPlugins.addAll(methodPlugins);
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(AuthoringUIResources.PluginListDialog_title);
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
GridLayout layout = (GridLayout) composite.getLayout();
layout.numColumns = 2;
Composite viewComp = new Composite(composite, SWT.NONE);
viewComp.setLayoutData(new GridData(GridData.FILL_BOTH));
viewComp.setLayout(new GridLayout());
viewer = new TreeViewer(viewComp, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setLabelProvider(pluginsLabelProvider);
viewer.setContentProvider(pluginsContentProvider);
GridData viewerGd = new GridData(GridData.FILL_BOTH);
viewerGd.heightHint = 250;
viewerGd.widthHint = 200;
viewer.getTree().setLayoutData(viewerGd);
Composite btnComp = new Composite(composite, SWT.NONE);
btnComp.setLayoutData(new GridData(GridData.FILL_BOTH));
btnComp.setLayout(new GridLayout());
addBtn = new Button(btnComp, SWT.PUSH);
addBtn.setText(AuthoringUIResources.PluginListDialog_button_add);
addBtn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
removeBtn = new Button(btnComp, SWT.PUSH);
removeBtn.setText(AuthoringUIResources.PluginListDialog_button_remove);
removeBtn.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
addListener();
updateControls();
return composite;
}
protected void updateControls() {
if (readOnly) {
addBtn.setEnabled(false);
removeBtn.setEnabled(false);
viewer.setInput(methodPlugins);
} else {
viewer.setInput(changedMethodPlugins);
}
viewer.refresh();
}
protected void addListener() {
addBtn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell, pluginsLabelProvider);
dialog.setElements(getInputToAddDialog().toArray());
dialog.setMultipleSelection(true);
dialog.setMessage(AuthoringUIResources.PluginListDialog_addDialogMsg);
dialog.setTitle(AuthoringUIResources.PluginListDialog_addDialogTitle);
dialog.setImage(null);
if (dialog.open() == Dialog.CANCEL) {
return;
}
Object[] objs = dialog.getResult();
for (Object obj : objs) {
changedMethodPlugins.add(obj);
}
updateControls();
}
});
removeBtn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
if (selection.size() > 0) {
changedMethodPlugins.removeAll(selection.toList());
}
updateControls();
}
});
}
protected List getInputToAddDialog() {
List elements = new ArrayList();
MethodLibrary lib = LibraryEditUtil.getInstance().getCurrentMethodLibrary();
if (lib != null) {
List allMethodPluginsInLibrary = lib.getMethodPlugins();
for (Object element: allMethodPluginsInLibrary) {
if (!changedMethodPlugins.contains(element)) {
elements.add(element);
}
}
}
return elements;
}
public List getResults() {
if (readOnly) {
return methodPlugins;
} else {
return changedMethodPlugins;
}
}
private class PluginListContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object parentElement) {
return null;
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
public Object[] getElements(Object inputElement) {
if (inputElement instanceof List) {
return ((List)inputElement).toArray();
}
return new Object[0];
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
}