package org.nightlabs.jfire.auth.ui.editor; import javax.jdo.FetchPlan; import org.nightlabs.base.ui.editor.JDOObjectEditorInput; import org.nightlabs.base.ui.entity.editor.EntityEditor; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditorPageController; import org.nightlabs.jfire.security.dao.UserSecurityGroupDAO; import org.nightlabs.jfire.security.dao.UserSecurityGroupSyncConfigContainerDAO; import org.nightlabs.jfire.security.id.UserSecurityGroupID; import org.nightlabs.jfire.security.integration.UserManagementSystem; import org.nightlabs.jfire.security.integration.UserManagementSystemType; import org.nightlabs.jfire.security.integration.UserSecurityGroupSyncConfig; import org.nightlabs.jfire.security.integration.UserSecurityGroupSyncConfigContainer; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.progress.SubProgressMonitor; /** * Controller for {@link UserSecurityGroupEditorSyncConfigPage}. Retrieves and stores a {@link UserSecurityGroupSyncConfigContainer}. * If there's no {@link UserSecurityGroupSyncConfigContainer} for given {@link #userSecurityGroupID} it creates a new one here in * {@link #retrieveEntity(ProgressMonitor)}. This controller also performs a check that {@link UserSecurityGroupSyncConfigContainer} * being stored contains at least one {@link UserSecurityGroupSyncConfig}, otherwise this container is not stored on server not to * pollute datastore with such empty objects that have no value for the system. * * @author Denis Dudnik <deniska.dudnik[at]gmail{dot}com> */ public class UserSecurityGroupEditorSyncConfigPageController extends ActiveEntityEditorPageController<UserSecurityGroupSyncConfigContainer>{ private UserSecurityGroupID userSecurityGroupID; public UserSecurityGroupEditorSyncConfigPageController(EntityEditor editor){ super(editor, true); this.userSecurityGroupID = (UserSecurityGroupID) ((JDOObjectEditorInput<?>)editor.getEditorInput()).getJDOObjectID(); } private static final String[] FETCH_GROUPS_SYNC_CONFIG_CONTAINER = { FetchPlan.DEFAULT, UserSecurityGroupSyncConfigContainer.FETCH_GROUP_USER_SECURITY_GROUP, UserSecurityGroupSyncConfigContainer.FETCH_GROUP_USER_SECURITY_GROUP_SYNC_CONFIGS, UserSecurityGroupSyncConfig.FETCH_GROUP_USER_MANAGEMENT_SYSTEM, UserManagementSystem.FETCH_GROUP_NAME, UserManagementSystem.FETCH_GROUP_TYPE, UserManagementSystemType.FETCH_GROUP_NAME }; /** * {@inheritDoc} */ @Override protected UserSecurityGroupSyncConfigContainer retrieveEntity(ProgressMonitor monitor) { if (userSecurityGroupID != null){ try{ monitor.beginTask("Loading user security groups sync config container...", 2); UserSecurityGroupSyncConfigContainer container = UserSecurityGroupSyncConfigContainerDAO.sharedInstance().getSyncConfigsContainerByGroupID( userSecurityGroupID, FETCH_GROUPS_SYNC_CONFIG_CONTAINER, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 1)); monitor.worked(1); if (container == null){ container = new UserSecurityGroupSyncConfigContainer( UserSecurityGroupDAO.sharedInstance().getUserSecurityGroup( userSecurityGroupID, new String[]{FetchPlan.DEFAULT}, 1, new SubProgressMonitor(monitor, 1))); } monitor.worked(1); return container; }finally{ monitor.done(); } } return null; } /** * {@inheritDoc} */ @Override protected UserSecurityGroupSyncConfigContainer storeEntity(UserSecurityGroupSyncConfigContainer syncConfigs, ProgressMonitor monitor) { UserSecurityGroupSyncConfigContainer container = getControllerObject(); return UserSecurityGroupSyncConfigContainerDAO.sharedInstance().storeSyncConfigContainer( container, true, FETCH_GROUPS_SYNC_CONFIG_CONTAINER, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); } /** * {@inheritDoc} */ @Override protected String[] getEntityFetchGroups() { return FETCH_GROUPS_SYNC_CONFIG_CONTAINER; } }