package org.nightlabs.jfire.auth.ui.wizard; import java.util.List; import javax.jdo.FetchPlan; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.nightlabs.base.ui.job.Job; import org.nightlabs.base.ui.wizard.WizardHop; import org.nightlabs.jfire.auth.ui.resource.Messages; import org.nightlabs.jfire.security.dao.UserManagementSystemTypeDAO; import org.nightlabs.jfire.security.integration.UserManagementSystem; import org.nightlabs.jfire.security.integration.UserManagementSystemType; import org.nightlabs.progress.ProgressMonitor; /** * WizardHop containing {@link SelectUserManagementSystemTypePage} for selecting specific {@link UserManagementSystemType}. * Starts a {@link Job} for loading all existent {@link UserManagementSystemType} persistent instances when constructor is called. * * @author Denis Dudnik <deniska.dudnik[at]gmail{dot}com> * */ public class CreateUserManagementSystemWizardHop extends WizardHop{ private Job loadJob; private SelectUserManagementSystemTypePage selectTypePage; private final static String[] FETCH_GROUPS_USER_MANAGEMENT_SYSTEM_TYPES = new String[]{ UserManagementSystemType.FETCH_GROUP_NAME, UserManagementSystemType.FETCH_GROUP_DESCRIPTION, FetchPlan.DEFAULT }; private final static int FETCH_DEPTH_USER_MANAGEMENT_SYSTEM_TYPES = 3; private List<UserManagementSystemType<?>> allUserManagementSystemTypes; /** * Default constructor. Creates {@link SelectUserManagementSystemTypePage} and starts a {@link Job} for loading all * persistent {@link UserManagementSystemType} objects. */ public CreateUserManagementSystemWizardHop() { // create page with "loading usermanagement system types..." label selectTypePage = new SelectUserManagementSystemTypePage(); setEntryPage(selectTypePage); loadJob = new Job(Messages.getString("org.nightlabs.jfire.auth.ui.wizard.CreateUserManagementSystemWizardHop.loadUserManagementSystemTypesJobTitle")) { //$NON-NLS-1$ @Override protected IStatus run(ProgressMonitor monitor) throws Exception { allUserManagementSystemTypes = UserManagementSystemTypeDAO.sharedInstance().getAllUserManagementSystemTypes( FETCH_GROUPS_USER_MANAGEMENT_SYSTEM_TYPES, FETCH_DEPTH_USER_MANAGEMENT_SYSTEM_TYPES, monitor); return Status.OK_STATUS; } }; loadJob.addJobChangeListener(new JobChangeAdapter(){ @Override public void done(IJobChangeEvent event) { if (Status.OK_STATUS == event.getResult()){ getWizard().getContainer().getShell().getDisplay().asyncExec(new Runnable() { @Override public void run() { selectTypePage.setUserManagementSystemTypes(allUserManagementSystemTypes); } }); } super.done(event); } }); loadJob.schedule(); } /** * Delegates creation of specific {@link UserManagementSystem} to {@link IUserManagementSystemBuilderHop} implementation. * * @return created {@link UserManagementSystem} instance */ public UserManagementSystem createUserManagementSystem(){ return selectTypePage.getUserManagementSystemBuilderHop().buildUserManagementSystem(selectTypePage.getSelectedUserManagementSystemType()); } }