/**
* Copyright (c) 2009 Bestsolution.at and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Tom Schindl<tom.schindl@bestsolution.at> - Initial API and implementation
*/
package org.eclipse.emf.example.databinding.project.ui.rcp.dialogs;
import java.util.Comparator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
import org.eclipse.emf.example.databinding.project.ui.rcp.Activator;
import org.eclipse.emf.examples.databinding.project.core.IModelResource;
import org.eclipse.emf.examples.databinding.project.core.model.project.Person;
/**
* Dialog to find persons
*/
public class PersonFilterDialog extends FilteredItemsSelectionDialog
{
private final IModelResource resource;
/**
* Create a new dialog
* @param shell the parent shell
* @param resource the model resource
*/
public PersonFilterDialog(Shell shell, IModelResource resource)
{
super(shell);
this.resource = resource;
setListLabelProvider(new LabelProvider()
{
@Override
public String getText(Object element)
{
if (element == null)
{
return "";
}
return PersonFilterDialog.this.getText((Person)element);
}
});
setDetailsLabelProvider(new LabelProvider()
{
@Override
public String getText(Object element)
{
if (element == null)
{
return "";
}
return PersonFilterDialog.this.getText((Person)element);
}
});
}
private String getText(Person p)
{
return p.getLastname() + " " + p.getFirstname();
}
@Override
protected IStatus validateItem(Object item)
{
return Status.OK_STATUS;
}
@Override
protected Comparator< ? > getItemsComparator()
{
return new Comparator<Person>()
{
public int compare(Person o1, Person o2)
{
return getText(o1).compareTo(getText(o2));
}
};
}
@Override
public String getElementName(Object item)
{
Person p = (Person)item;
return getText(p);
}
@Override
protected IDialogSettings getDialogSettings()
{
IDialogSettings settings = Activator.getDefault().getDialogSettings().getSection("committerdialog");
if (settings == null)
{
settings = Activator.getDefault().getDialogSettings().addNewSection("committerdialog");
}
return settings;
}
@Override
protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException
{
for (Person p : resource.getFoundation().getPersons())
{
if (progressMonitor.isCanceled())
{
return;
}
contentProvider.add(p, itemsFilter);
}
}
@Override
protected ItemsFilter createFilter()
{
return new ItemsFilter()
{
@Override
public boolean isConsistentItem(Object item)
{
return true;
}
@Override
public boolean matchItem(Object item)
{
Person p = (Person)item;
return matches(p.getLastname() + " " + p.getFirstname());
}
};
}
@Override
protected Control createExtendedContentArea(Composite parent)
{
return null;
}
}