package org.webpieces.plugins.hibernate.app; import static org.webpieces.plugins.hibernate.app.HibernateRouteId.ADD_USER_PAGE; import static org.webpieces.plugins.hibernate.app.HibernateRouteId.EDIT_USER_PAGE; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import javax.inject.Singleton; import javax.persistence.EntityManager; import javax.persistence.Query; import org.webpieces.ctx.api.Current; import org.webpieces.plugins.hibernate.Em; import org.webpieces.plugins.hibernate.app.dbo.LevelEducation; import org.webpieces.plugins.hibernate.app.dbo.Role; import org.webpieces.plugins.hibernate.app.dbo.UserRoleDbo; import org.webpieces.plugins.hibernate.app.dbo.UserTestDbo; import org.webpieces.router.api.actions.Actions; import org.webpieces.router.api.actions.FlashAndRedirect; import org.webpieces.router.api.actions.Redirect; import org.webpieces.router.api.actions.Render; import org.webpieces.util.logging.Logger; import org.webpieces.util.logging.LoggerFactory; @Singleton public class CrudTestController { private static final Logger log = LoggerFactory.getLogger(HibernateAsyncController.class); public Render userList() { EntityManager mgr = Em.get(); Query query = mgr.createNamedQuery("findAllUsers"); @SuppressWarnings("unchecked") List<UserTestDbo> users = query.getResultList(); return Actions.renderThis("users", users); } public Render userAddEdit(Integer id) { if(id == null) { return Actions.renderThis("entity", new UserTestDbo(), "levels", LevelEducation.values(), "roles", Role.values()); } UserTestDbo user = UserTestDbo.findWithJoin(Em.get(), id); return Actions.renderThis( "entity", user, "levels", LevelEducation.values(), "roles", Role.values()); } public Redirect postSaveUser(UserTestDbo entity, String password) { if(password == null) { Current.validation().addError("password", "password is required"); } else if(password.length() < 4) { Current.validation().addError("password", "Value is too short"); } if(Current.validation().hasErrors()) { log.info("page has errors"); FlashAndRedirect redirect = new FlashAndRedirect(Current.getContext(), "Errors in form below"); redirect.setSecureFields("password"); //make sure secure fields are not put in flash cookie!!! redirect.setIdFieldAndValue("id", entity.getId()); return Actions.redirectFlashAll(ADD_USER_PAGE, EDIT_USER_PAGE, redirect); } Current.flash().setMessage("User successfully saved"); Em.get().merge(entity); Em.get().flush(); return Actions.redirect(HibernateRouteId.LIST_USERS); } public Render multiSelect(Integer id) { if(id == null) { return Actions.renderThis("entity", new UserTestDbo(), "levels", LevelEducation.values(), "roles", Role.values(), "selectedRoles", new ArrayList<>()); } UserTestDbo user = UserTestDbo.findWithJoin(Em.get(), id); List<UserRoleDbo> roles = user.getRoles(); List<Role> selectedRoles = roles.stream().map(r -> r.getRole()).collect(Collectors.toList()); return Actions.renderThis( "entity", user, "levels", LevelEducation.values(), "roles", Role.values(), "selectedRoles", selectedRoles); } public Redirect postSaveUserForMultiSelect(UserTestDbo entity, List<Role> selectedRoles, String password) { if(password == null) { Current.validation().addError("password", "password is required"); } else if(password.length() < 4) { Current.validation().addError("password", "Value is too short"); } if(Current.validation().hasErrors()) { log.info("page has errors"); FlashAndRedirect redirect = new FlashAndRedirect(Current.getContext(), "Errors in form below"); redirect.setSecureFields("entity.password"); //make sure secure fields are not put in flash cookie!!! redirect.setIdFieldAndValue("id", entity.getId()); return Actions.redirectFlashAll(ADD_USER_PAGE, HibernateRouteId.MULTISELECT, redirect); } Current.flash().setMessage("User successfully saved"); Em.get().merge(entity); Em.get().flush(); return Actions.redirect(HibernateRouteId.LIST_USERS); } public Render confirmDeleteUser(Integer id) { UserTestDbo user = Em.get().find(UserTestDbo.class, id); return Actions.renderThis("user", user); } public Redirect postDeleteUser(Integer id) { UserTestDbo user = Em.get().getReference(UserTestDbo.class, id); Em.get().remove(user); Em.get().flush(); Current.flash().setMessage("User "+user.getFirstName()+" "+user.getLastName()+" was deleted"); return Actions.redirect(HibernateRouteId.LIST_USERS); } }