/*******************************************************************************
* Copyright (c) 2010 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.ui.widget.editor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
/**
* This editor allows to add to a list several items invoking by 'Add' button a selection dialog
* derived from FilteredItemsSelectionDialog.
* If ListFieldEditorProvider is not set, selection dialog will have nothing to pick up.
*
* @author Viacheslav Kabanovich
*/
public class ListFieldEditor extends BaseListFieldEditor {
public static interface ListFieldEditorProvider<T> {
public FilteredItemsSelectionDialog createSelectionDialog();
public T getSelected(Object selected);
public T[] getSelectableObjects();
public ILabelProvider createLabelProvider();
}
ListFieldEditorProvider<?> provider = null;
public ListFieldEditor(String name, String label, Object defaultValue) {
super(name, label, defaultValue);
}
public void setProvider(ListFieldEditorProvider<?> provider) {
this.provider = provider;
}
protected ILabelProvider createLabelProvider() {
if(provider != null) {
return provider.createLabelProvider();
}
return new LabelProvider();
}
protected List<Object> runAddAction() {
List<Object> added = new ArrayList<Object>();
if(provider != null) {
FilteredItemsSelectionDialog dialog = provider.createSelectionDialog();
int result = dialog.open();
if(result == FilteredItemsSelectionDialog.OK) {
Object[] os = dialog.getResult();
if(os != null) {
for (Object o: os) {
Object v = provider.getSelected(o);
if(v != null) {
added.add(v);
}
}
}
}
}
return added;
}
}