package org.nightlabs.jfire.entityuserset.ui;
import java.util.Map;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.editor.IFormPage;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.nightlabs.base.ui.editor.ToolBarSectionPart;
import org.nightlabs.base.ui.resource.SharedImages;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.jfire.entityuserset.ui.resource.Messages;
import org.nightlabs.jfire.security.AuthorizedObject;
/**
* @author Daniel Mazurek - Daniel.Mazurek [dot] nightlabs [dot] de
*
*/
public abstract class AbstractEntitySection<Entity>
extends ToolBarSectionPart
{
class SelectAllAction extends Action
{
public SelectAllAction() {
super();
setText(Messages.getString("org.nightlabs.jfire.entityuserset.ui.AbstractEntitySection.action.selectAll.text")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.entityuserset.ui.AbstractEntitySection.action.selectAll.tooltip")); //$NON-NLS-1$
setImageDescriptor(SharedImages.getSharedImageDescriptor(Activator.getDefault(), SelectAllAction.class));
}
@Override
public void run() {
if (entities != null) { //IMHO: I think this is better than initializing an empty map, Chairat
for (Map.Entry<Entity, Boolean> entry : entities.entrySet()) {
entry.setValue(true);
}
table.setEntityInput(entities);
markDirty();
}
}
}
class DeselectAllAction extends Action
{
public DeselectAllAction() {
super();
setText(Messages.getString("org.nightlabs.jfire.entityuserset.ui.AbstractEntitySection.action.deselectAll.text")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.entityuserset.ui.AbstractEntitySection.action.deselectAll.tooltip")); //$NON-NLS-1$
setImageDescriptor(SharedImages.getSharedImageDescriptor(Activator.getDefault(), DeselectAllAction.class));
}
@Override
public void run() {
if (entities != null) {
for (Map.Entry<Entity, Boolean> entry : entities.entrySet()) {
entry.setValue(false);
}
table.setEntityInput(entities);
markDirty();
}
}
}
private AbstractEntityTable<Entity> table;
private EntityUserSetPageControllerHelper<Entity> entityUserSetPageControllerHelper;
private Map<Entity, Boolean> entities;
/**
* @param page
* @param parent
* @param title
*/
public AbstractEntitySection(IFormPage page, Composite parent, String title) {
super(page, parent, ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED, title);
table = createTable(getContainer());
getToolBarManager().add(new SelectAllAction());
getToolBarManager().add(new DeselectAllAction());
updateToolBarManager();
}
/**
* Creates an implementation of {@link AbstractTableComposite} which shows the entities.
* @param parent the parent Composite
* @return the implementation of {@link AbstractTableComposite} which shows the entities.
*/
protected abstract AbstractEntityTable<Entity> createTable(Composite parent);
public void setEntityUserSetPageControllerHelper(EntityUserSetPageControllerHelper<Entity> entityUserSetPageControllerHelper) {
this.entityUserSetPageControllerHelper = entityUserSetPageControllerHelper;
}
public void setAuthorizedObject(AuthorizedObject authorizedObject)
{
if (entityUserSetPageControllerHelper != null) {
entities = entityUserSetPageControllerHelper.getEntities(authorizedObject);
table.setEntityInput(entities);
}
}
}