package org.nightlabs.jfire.entityuserset.ui;
import java.util.List;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.IFormPage;
import org.nightlabs.base.ui.entity.editor.EntityEditorPageControllerModifyEvent;
import org.nightlabs.base.ui.entity.editor.EntityEditorPageWithProgress;
import org.nightlabs.jfire.security.AuthorizedObject;
/**
* @author Daniel Mazurek - Daniel.Mazurek [dot] nightlabs [dot] de
*
*/
public abstract class AbstractEntityUserSetPage<Entity>
extends EntityEditorPageWithProgress
{
private EntityUserSetSection<Entity> entityUserSetSection;
private AuthorizedObjectSection<Entity> authorizedObjectSection;
private AbstractEntitySection<Entity> entitySection;
/**
* @param editor
* @param id
* @param name
*/
public AbstractEntityUserSetPage(FormEditor editor, String id, String name) {
super(editor, id, name);
}
/**
* Delegate to your page-controller and return the helper it uses. Usually, your implementation
* of this method simply looks like the following code:<br/><br/>
* <code>
* return ((EntityUserSetPageControllerHelper)getPageController()).getEntityUserSetPageControllerHelper();
* </code>
*
* @return the <code>EntityUserSetPageControllerHelper</code> used for managing your entityUserSet-page.
*/
protected abstract EntityUserSetPageControllerHelper<Entity> getEntityUserSetPageControllerHelper();
/**
* Creates the implementation of {@link AbstractEntitySection} which should be used for this page for
* showing the entities.
*
* @param formPage the IFormPage for the section
* @param parent the parent Composite for the section
* @return the implementation of {@link AbstractEntitySection} which should be used for this page.
*/
protected abstract AbstractEntitySection<Entity> createEntitySection(IFormPage formPage, Composite parent);
/* (non-Javadoc)
* @see org.nightlabs.base.ui.entity.editor.EntityEditorPageWithProgress#addSections(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void addSections(Composite parent)
{
entityUserSetSection = new EntityUserSetSection<Entity>(this, parent);
getManagedForm().addPart(entityUserSetSection);
authorizedObjectSection = new AuthorizedObjectSection<Entity>(this, parent);
getManagedForm().addPart(authorizedObjectSection);
entitySection = createEntitySection(this, parent);
getManagedForm().addPart(entitySection);
authorizedObjectSection.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
List<AuthorizedObject> selectedAuthorizedObjects = authorizedObjectSection.getSelectedAuthorizedObjects();
AuthorizedObject selectedAuthorizedObject = null;
if (!selectedAuthorizedObjects.isEmpty())
selectedAuthorizedObject = selectedAuthorizedObjects.get(0);
entitySection.setAuthorizedObject(selectedAuthorizedObject);
}
});
}
@Override
protected void handleControllerObjectModified(EntityEditorPageControllerModifyEvent modifyEvent)
{
EntityUserSetPageControllerHelper<Entity> controller = getEntityUserSetPageControllerHelper();
entityUserSetSection.setEntityUserSetPageControllerHelper(controller);
authorizedObjectSection.setEntityUserSetPageControllerHelper(controller);
entitySection.setEntityUserSetPageControllerHelper(controller);
switchToContent();
}
}