Commit d3c77168 by Tuukka Kivilahti

Merge branch 'master' of tkfftk@dev.intra.insomnia.fi:/data/bortal

2 parents 6657389e bd99ab66
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
......@@ -13,6 +14,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.AccessRightFacade;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Role;
......@@ -30,6 +32,8 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
private UserFacade userfacade;
@EJB
private AccessRightFacade accessRightFacade;
@EJB
private RoleFacade roleFacade;
/**
* Default constructor.
......@@ -103,7 +107,18 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal {
return null;
}
/**
* Makes sure default user and public role exist and the user is member of
* the role.
*/
public User getDefaultUser() {
return userfacade.getDefaultUser();
Role publicRole = roleFacade.getOrCreatePublicRole();
User defaultUser = userfacade.getOrCreateDefaultUser();
if (!defaultUser.getRoles().contains(publicRole)) {
ArrayList<Role> userRoles = new ArrayList<Role>();
userRoles.add(publicRole);
defaultUser.setRoles(userRoles);
}
return defaultUser;
}
}
......@@ -4,12 +4,16 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
@Stateless
@LocalBean
public class RoleFacade extends GenericFacade<Role> {
private static final String PUBLIC_ROLE_NAME = "public";
@PersistenceContext
private EntityManager em;
......@@ -21,4 +25,26 @@ public class RoleFacade extends GenericFacade<Role> {
return em;
}
public Role findByName(String name) {
TypedQuery<Role> q = em.createNamedQuery("User.findByName", Role.class);
q.setParameter("name", name);
return q.getSingleResult();
}
public Role getOrCreatePublicRole() {
Role publicRole = findByName(PUBLIC_ROLE_NAME);
if (publicRole == null) {
publicRole = createPublicRole();
}
return publicRole;
}
private Role createPublicRole() {
Role publicRole = new Role();
publicRole.setName(PUBLIC_ROLE_NAME);
em.persist(publicRole);
return publicRole;
}
}
......@@ -31,7 +31,7 @@ public class UserFacade extends GenericFacade<User> {
return q.getSingleResult();
}
public User getDefaultUser() {
public User getOrCreateDefaultUser() {
User defaultUser = findByLogin(DEFAULT_USER_LOGIN);
// Create if doesn't exist yet
......
......@@ -20,14 +20,15 @@ import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;
/**
*
*/
@Entity
@Table(name = "roles")
@NamedQueries({
@Table(name = "roles", uniqueConstraints = { @UniqueConstraint(columnNames = { "events_pk_id", "role_name" }) })
@NamedQueries( {
@NamedQuery(name = "Role.findAll", query = "SELECT r FROM Role r"),
@NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name") })
public class Role implements EventChildInterface {
......@@ -41,11 +42,11 @@ public class Role implements EventChildInterface {
private String name;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "role_memberships", joinColumns = {@JoinColumn(name = "roles_id", referencedColumnName = "entity_id"),@JoinColumn(name = "roles_event_id", referencedColumnName = "events_pk_id")}, inverseJoinColumns = @JoinColumn(name = "users_id", referencedColumnName = "users_id"))
@JoinTable(name = "role_memberships", joinColumns = { @JoinColumn(name = "roles_id", referencedColumnName = "entity_id"), @JoinColumn(name = "roles_event_id", referencedColumnName = "events_pk_id") }, inverseJoinColumns = @JoinColumn(name = "users_id", referencedColumnName = "users_id"))
private List<User> users;
@ManyToMany
@JoinColumns({
@JoinColumns( {
@JoinColumn(name = "role_id", referencedColumnName = "entity_id", nullable = false, updatable = false, insertable = false),
@JoinColumn(name = "role_event_id", referencedColumnName = "events_pk_id", nullable = false, updatable = false, insertable = false) })
private List<Role> children = new ArrayList<Role>();
......@@ -56,7 +57,7 @@ public class Role implements EventChildInterface {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "role")
private List<RoleRight> roleRights;
@JoinColumns({
@JoinColumns( {
@JoinColumn(name = "card_template_id", referencedColumnName = "entity_id", nullable = false, updatable = false, insertable = false),
@JoinColumn(name = "card_template_event_id", referencedColumnName = "events_pk_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!