package net.rrm.ehour.ui.manage.user; import net.rrm.ehour.exception.ObjectNotFoundException; import net.rrm.ehour.ui.common.component.AddEditTabbedPanel; import net.rrm.ehour.ui.common.event.AjaxEvent; import net.rrm.ehour.ui.common.event.AjaxEventType; import net.rrm.ehour.ui.common.event.PayloadAjaxEvent; import net.rrm.ehour.ui.common.model.AdminBackingBean; import net.rrm.ehour.ui.common.panel.entryselector.EntryListUpdatedEvent; import net.rrm.ehour.ui.common.panel.entryselector.EntrySelectedEvent; import net.rrm.ehour.ui.common.panel.entryselector.InactiveFilterChangedEvent; import net.rrm.ehour.ui.manage.AbstractTabbedManagePage; import net.rrm.ehour.ui.manage.assignment.AssignmentManagePage; import net.rrm.ehour.user.service.UserService; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.event.Broadcast; import org.apache.wicket.event.IEvent; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import scala.Option; public abstract class AbstractUserManagePageTemplate<T extends UserManageBackingBean> extends AbstractTabbedManagePage<T> { @SpringBean private UserService userService; private static final long serialVersionUID = 1883278850247747252L; public AbstractUserManagePageTemplate() { super(new ResourceModel("admin.user.title"), new ResourceModel("admin.user.addUser"), new ResourceModel("admin.user.editUser"), new ResourceModel("admin.user.noEditEntrySelected")); add(new UserSelectionPanel("userSelection", Option.apply("admin.user.title"))); } @Override public void onEvent(IEvent<?> event) { Object payload = event.getPayload(); if (payload instanceof EntrySelectedEvent) { EntrySelectedEvent entrySelectedEvent = (EntrySelectedEvent) payload; Integer userId = entrySelectedEvent.userId(); try { getTabbedPanel().setEditBackingBean(createEditBean(userId)); getTabbedPanel().switchTabOnAjaxTarget(entrySelectedEvent.target(), AddEditTabbedPanel.TABPOS_EDIT); } catch (ObjectNotFoundException e) { throw new RuntimeException(e); } } } protected abstract T createEditBean(Integer userId) throws ObjectNotFoundException; @Override @SuppressWarnings("unchecked") public Boolean ajaxEventReceived(AjaxEvent ajaxEvent) { AjaxEventType type = ajaxEvent.getEventType(); AjaxRequestTarget target = ajaxEvent.getTarget(); if (type == UserManageAjaxEventType.USER_CREATED) { PayloadAjaxEvent<AdminBackingBean> payloadAjaxEvent = (PayloadAjaxEvent<AdminBackingBean>) ajaxEvent; UserManageBackingBean bean = (UserManageBackingBean) payloadAjaxEvent.getPayload(); if (bean.isShowAssignments()) { setResponsePage(new AssignmentManagePage(bean.getUser())); return false; } else { updateEntryList(target); succesfulSave(target); return false; } } else if (type == UserManageAjaxEventType.USER_UPDATED || type == UserManageAjaxEventType.USER_DELETED) { updateEntryList(target); succesfulSave(target); return updateUserList(target); } else if (type == UserManageAjaxEventType.PASSWORD_CHANGED) { succesfulSave(target); return false; } return true; } private boolean updateUserList(AjaxRequestTarget target) { updateEntryList(target); succesfulSave(target); return false; } private void updateEntryList(AjaxRequestTarget target) { send(this, Broadcast.DEPTH, new EntryListUpdatedEvent(target)); } private void succesfulSave(AjaxRequestTarget target) { getTabbedPanel().succesfulSave(target); } @Override protected void onFilterChanged(InactiveFilterChangedEvent inactiveFilterChangedEvent, AjaxRequestTarget target) { send(this, Broadcast.DEPTH, inactiveFilterChangedEvent); } protected UserService getUserService() { return userService; } }