Commit 452fe870 by Tuomas Riihimäki

Moved BortalLocalContextHolder to LanBortalBeansClient project

1 parent d59a8755
package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.ejb.EJB;
......@@ -13,14 +10,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pdfjet.A4;
import com.pdfjet.Box;
import com.pdfjet.CoreFont;
import com.pdfjet.Font;
import com.pdfjet.Image;
import com.pdfjet.ImageType;
import com.pdfjet.JPEGImage;
import com.pdfjet.PDF;
import com.pdfjet.PNGImage;
import com.pdfjet.Page;
import com.pdfjet.TextLine;
......@@ -30,8 +24,6 @@ import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
/**
......@@ -166,7 +158,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
@Override
public void releaseAndGenerateToken(GroupMembership gmem) {
if (!userbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) ||
!userbean.hasCurrentUserPermission(Permission.MAP, RolePermission.WRITE)) {
!userbean.hasPermission(Permission.MAP, RolePermission.WRITE)) {
throw new PermissionDeniedException(secubean, userbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
}
gmem.setUser(null);
......
......@@ -19,7 +19,6 @@ import javax.persistence.PersistenceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
......@@ -78,13 +77,6 @@ public class UserBean implements UserBeanLocal {
@EJB
private GroupMembershipFacade groupMembershipFacade;
/**
* Default constructor.
*/
public UserBean() {
// TODO Auto-generated constructor stub
}
@Override
public List<User> getUsers() {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
......@@ -239,11 +231,6 @@ public class UserBean implements UserBeanLocal {
}
@Override
public boolean hasCurrentUserPermission(Permission permission, RolePermission rolePermission) {
return this.hasPermission(permission, rolePermission);
}
@Override
public void fatalPermission(Permission target, RolePermission permission, Object... failmessage) {
boolean ret = hasPermission(target, permission);
if (!ret) {
......@@ -379,4 +366,8 @@ public class UserBean implements UserBeanLocal {
return userFacade.find(id);
}
@Override
public List<User> getUsers(int page, int pagesize, String sort) {
return userFacade.findAll(page, pagesize, sort);
}
}
......@@ -11,7 +11,6 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -25,7 +24,7 @@ public abstract class GenericFacade<PK, T extends ModelInterface> {
private static final Logger logger = LoggerFactory.getLogger(GenericFacade.class);
private Class<T> entClass;
private final Class<T> entClass;
public GenericFacade(Class<T> entityClass) {
this.entClass = entityClass;
......@@ -51,18 +50,20 @@ public abstract class GenericFacade<PK, T extends ModelInterface> {
}
public T find(PK id) {
if (id == null) {
return null;
}
T ret = getEm().find(getEntityClass(), id);
return ret;
}
public List<T> findAll() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(getEntityClass());
Root<T> root = cq.from(getEntityClass());
cq.orderBy(cb.asc(root.get("id")));
return findAll(null);
cq.select(root);
return getEm().createQuery(cq).getResultList();
}
public List<T> findAll(String sort) {
return findAll(0, 0, sort);
}
public List<T> findRange(int[] range) {
......@@ -99,54 +100,73 @@ public abstract class GenericFacade<PK, T extends ModelInterface> {
}
protected List<T> search(String query, String[] fields, String orderfield) {
return search(0, 0, query, fields, orderfield);
}
protected List<T> search(int page, int pagesize, String query, String[] fields, String orderfield) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(getEntityClass());
Root<T> root = cq.from(getEntityClass());
List<Predicate> preds = new ArrayList<Predicate>();
for (String field : fields) {
Path<String> rootfield = root.get(field);
preds.add(cb.like(rootfield, query));
}
cq.where(cb.or(preds.toArray(new Predicate[preds.size()])));
addPredicates(cb, cq, root, query, fields);
if (orderfield != null) {
cq.orderBy(cb.asc(root.get(orderfield)));
}
cq.select(root);
TypedQuery<T> q = getEm().createQuery(cq);
logger.debug("Creating search query from fields {} query: {}", fields, cq);
if (pagesize > 0) {
q.setFirstResult(page * pagesize);
q.setMaxResults(pagesize);
}
List<T> ret = q.getResultList();
logger.debug("resultlist size {}", ret.size());
return ret;
}
//
// @SuppressWarnings("unchecked")
// public List<T> search(String query, String[] fields) {
// CompassSession sess =
// EclipseLinkHelper.getCurrentCompassSession(getEm());
// CompassQueryBuilder qb = sess.queryBuilder();
// CompassMultiPropertyQueryStringBuilder properties =
// qb.multiPropertyQueryString(query);
//
// for (String field : fields) {
// properties.add(field);
// }
// String alias = getClass().getSimpleName().toLowerCase();
//
// logger.debug("searching class {}", alias);
// CompassHits hits =
// qb.bool().addMust(qb.alias(alias)).addMust(properties.toQuery()).toQuery().hits();
//
// Iterator<CompassHit> iter = hits.iterator();
// ArrayList<T> ret = new ArrayList<T>();
// while (iter.hasNext()) {
//
// Object data = iter.next().getData();
// logger.debug("Found user {}", data);
// ret.add((T) data);
//
// }
// return ret;
//
// }
protected long searchCount(String query, String[] fields) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<T> root = cq.from(getEntityClass());
addPredicates(cb, cq, root, query, fields);
cq.select(getEm().getCriteriaBuilder().count(root));
TypedQuery<Long> q = getEm().createQuery(cq);
return q.getSingleResult();
}
private void addPredicates(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, String query, String[] fields) {
List<Predicate> preds = new ArrayList<Predicate>();
for (String field : fields) {
Path<String> rootfield = root.get(field);
preds.add(cb.like(cb.lower(rootfield), query));
}
cq.where(cb.or(preds.toArray(new Predicate[preds.size()])));
}
public List<T> findAll(int page, int pagesize, String sort) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(getEntityClass());
Root<T> root = cq.from(getEntityClass());
if (sort != null) {
cq.orderBy(cb.asc(root.get(sort)));
}
cq.select(cq.from(getEntityClass()));
TypedQuery<T> q = getEm().createQuery(cq);
if (pagesize > 0) {
q.setFirstResult(page * pagesize);
q.setMaxResults(pagesize);
}
return q.getResultList();
}
}
......@@ -6,8 +6,6 @@ import javax.ejb.Local;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
......@@ -17,6 +15,8 @@ public interface UserBeanLocal {
List<User> getUsers();
List<User> getUsers(int page, int pagesize, String sort);
User getUser(String nick);
User mergeChanges(User currentUser);
......@@ -29,7 +29,8 @@ public interface UserBeanLocal {
boolean isCurrentUser(User thisuser);
boolean hasCurrentUserPermission(Permission userManagement, RolePermission execute);
// boolean hasCurrentUserPermission(Permission userManagement,
// RolePermission execute);
boolean isLoggedIn();
......@@ -55,6 +56,4 @@ public interface UserBeanLocal {
User findById(Integer integer);
}
package fi.insomnia.bortal.clientutils;
import java.util.HashMap;
import java.util.Map;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.RoleRight;
public class BortalLocalContextHolder {
private static final ThreadLocal<BortalLocalContextHolder> THREAD_WITH_CONTEXT = new ThreadLocal<BortalLocalContextHolder>();
private String hostname;
private final Map<Permission, Map<RolePermission, Boolean>> rightcache = new HashMap<Permission, Map<RolePermission, Boolean>>();
public BortalLocalContextHolder() {
}
public static void setHostname(String hostname) {
getThread().hostname = hostname;
}
public static String getHostname() {
return getThread().getHolderHostname();
}
public static void cleanupThread() {
if (THREAD_WITH_CONTEXT != null) {
THREAD_WITH_CONTEXT.remove();
}
}
public String getHolderHostname() {
return hostname;
}
public static Boolean hasPermission(Permission target, RolePermission permission) {
return getThread().hasHolderPermission(target, permission);
}
private static BortalLocalContextHolder getThread() {
if (THREAD_WITH_CONTEXT.get() == null) {
THREAD_WITH_CONTEXT.set(new BortalLocalContextHolder());
}
return THREAD_WITH_CONTEXT.get();
}
private Boolean hasHolderPermission(Permission target, RolePermission permission) {
Map<RolePermission, Boolean> permmap = rightcache.get(target);
if (permmap == null) {
permmap = new HashMap<RolePermission, Boolean>();
rightcache.put(target, permmap);
}
return permmap.get(permission);
}
public static void setPermission(Permission target, RolePermission permission, Boolean ret) {
getThread().setHolderPermission(target, permission, ret);
}
private void setHolderPermission(Permission target, RolePermission permission, Boolean ret) {
Map<RolePermission, Boolean> permmap = rightcache.get(target);
if (permmap == null) {
permmap = new HashMap<RolePermission, Boolean>();
rightcache.put(target, permmap);
}
permmap.put(permission, ret);
}
public static void setPermission(RoleRight rr) {
if (rr.isExecute()) {
setPermission(rr.getPermission(), RolePermission.EXECUTE, true);
}
if (rr.isWrite()) {
setPermission(rr.getPermission(), RolePermission.WRITE, true);
}
if (rr.isRead()) {
setPermission(rr.getPermission(), RolePermission.READ, true);
}
}
public static BortalLocalContextHolder getInstance() {
return getThread();
}
}
\ No newline at end of file
<root>
<facet id="jpt.jpa">
<node name="libprov">
<attribute name="provider-id" value="eclipselink-210-osgi-bundles-library-provider"/>
</node>
<node name="osgi-bundles-container">
<attribute name="bundles" value="javax.persistence:[2.0.0,2.1.0);org.eclipse.persistence.core:[2.1.0,2.2.0);org.eclipse.persistence.jpa:[2.1.0,2.2.0);org.eclipse.persistence.asm:[2.1.0,2.2.0);org.eclipse.persistence.antlr:[2.1.0,2.2.0)"/>
<attribute name="label" value="EclipseLink 2.1.x"/>
</node>
</facet>
</root>
......@@ -12,7 +12,8 @@
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<users:list />
<!-- <users:list /> -->
</ui:define>
</ui:composition>
</h:body>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!