package edu.ualberta.med.biobank.dialogs.user; import org.eclipse.jface.wizard.Wizard; import edu.ualberta.med.biobank.common.action.security.ManagerContext; import edu.ualberta.med.biobank.model.Membership; public class MembershipEditWizard extends Wizard { private final Membership originalMembership; private final Membership membership; private final ManagerContext context; private MembershipDomainPage domainPage; private MembershipPermissionsPage permsPage; public MembershipEditWizard(Membership membership, ManagerContext context) { this.originalMembership = membership; this.membership = new Membership(); copyMembership(originalMembership, this.membership); this.context = context; updateWindowTitle(); } @Override public void addPages() { domainPage = new MembershipDomainPage(membership, context); permsPage = new MembershipPermissionsPage(membership, context); addPage(domainPage); addPage(permsPage); } @Override public boolean canFinish() { boolean onLastPage = getContainer() != null && permsPage != null && permsPage.equals(getContainer().getCurrentPage()); boolean hasPerms = !membership.getAllPermissions().isEmpty(); return onLastPage && hasPerms; } @Override public boolean performFinish() { copyMembership(membership, originalMembership); return true; } /** * Copy the properties we plan to modify. * * @param src source {@link Membership} * @param dst destination {@link Membership} */ private void copyMembership(Membership src, Membership dst) { dst.setId(src.getId()); // necessary for isNew() dst.getDomain().setAllCenters(src.getDomain().isAllCenters()); dst.getDomain().getCenters().clear(); dst.getDomain().getCenters().addAll(src.getDomain().getCenters()); dst.getDomain().setAllStudies(src.getDomain().isAllStudies()); dst.getDomain().getStudies().clear(); dst.getDomain().getStudies().addAll(src.getDomain().getStudies()); dst.setUserManager(src.isUserManager()); dst.setEveryPermission(src.isEveryPermission()); dst.getPermissions().clear(); dst.getPermissions().addAll(src.getPermissions()); dst.getRoles().clear(); dst.getRoles().addAll(src.getRoles()); } private void updateWindowTitle() { String title = null; if (membership.isNew()) { title = "Add Membership"; } else { title = "Edit Membership"; } setWindowTitle(title); } }