package org.nightlabs.jfire.auth.ui.editor;
import java.util.Collection;
import java.util.ResourceBundle;
import java.util.Set;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerSorter;
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.nightlabs.base.ui.resource.SharedImages;
import org.nightlabs.base.ui.resource.SharedImages.ImageFormat;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.eclipse.ui.dialog.ResizableTitleAreaDialog;
import org.nightlabs.jfire.auth.ui.JFireAuthUIPlugin;
import org.nightlabs.jfire.auth.ui.UserManagementSystemActiveJDOTable;
import org.nightlabs.jfire.security.integration.UserManagementSystem;
import org.nightlabs.util.CollectionUtil;
/**
* Dialog with a {@link UserManagementSystemActiveJDOTable} showing all available {@link UserManagementSystem} objects for selection.
*
* @author Denis Dudnik <deniska.dudnik[at]gmail{dot}com>
*
*/
public class SelectUserManagementSystemDialog extends ResizableTitleAreaDialog{
private UserManagementSystemActiveJDOTable userManagementSystemTable;
private Collection<UserManagementSystem> selectedElements;
/**
* Constructs a new {@link SelectUserManagementSystemDialog}.
*
* @param shell Parent {@link Shell}
* @param resourceBundle The resource bundle to use for initial size and location hints. May be <code>null</code>.
*/
public SelectUserManagementSystemDialog(Shell shell, ResourceBundle resourceBundle) {
super(shell, resourceBundle);
}
/**
* Get selected {@link UserManagementSystem}s.
*
* @return {@link Set} of selected {@link UserManagementSystem}s
*/
public Collection<UserManagementSystem> getSelectedElements() {
return selectedElements;
}
/**
* {@inheritDoc}
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite wrapper = (Composite) super.createDialogArea(parent);
wrapper.setLayout(new GridLayout(1, false));
wrapper.setLayoutData(new GridData(GridData.FILL_BOTH));
setTitle("Select User management system(s)");
setMessage("Select at least one User management system");
setTitleImage(
SharedImages.getSharedImage(JFireAuthUIPlugin.sharedInstance(), SelectUserManagementSystemDialog.class, "titleImage", "66x75", ImageFormat.png)); //$NON-NLS-1$ //$NON-NLS-2$
userManagementSystemTable = new UserManagementSystemActiveJDOTable(wrapper, AbstractTableComposite.DEFAULT_STYLE_SINGLE);
userManagementSystemTable.setLinesVisible(false);
userManagementSystemTable.setHeaderVisible(true);
userManagementSystemTable.getTableViewer().setSorter(new ViewerSorter());
userManagementSystemTable.setLayoutData(new GridData(GridData.FILL_BOTH));
userManagementSystemTable.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
Button okButton = getButton(OK);
if (okButton != null && !okButton.isDisposed()){
okButton.setEnabled(event.getSelection() != null && !event.getSelection().isEmpty());
}
}
});
userManagementSystemTable.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent doubleclickevent) {
ISelection selection = doubleclickevent.getSelection();
if (selection instanceof StructuredSelection
&& ((StructuredSelection) selection).getFirstElement() instanceof UserManagementSystem){
UserManagementSystem userManagementSystem = (UserManagementSystem) ((StructuredSelection) selection).getFirstElement();
selectedElements = CollectionUtil.createArrayList(userManagementSystem);
close();
}
}
});
userManagementSystemTable.load();
return wrapper;
}
/**
* {@inheritDoc}
*/
@Override
protected void okPressed() {
selectedElements = userManagementSystemTable.getSelectedElements();
super.okPressed();
}
}