Commit 48ec93c2 by Juho Juopperi

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

2 parents b8c333b4 81e0bba8
Showing with 541 additions and 264 deletions
......@@ -3,14 +3,17 @@ package fi.insomnia.bortal.beans;
import java.util.Date;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.ActionLogMessageState;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.ActionLogFacade;
import fi.insomnia.bortal.model.ActionLogMessage;
import fi.insomnia.bortal.model.ActionLogMessageResponse;
import fi.insomnia.bortal.model.Role;
/**
......@@ -21,6 +24,7 @@ import fi.insomnia.bortal.model.Role;
* - deletointi
*/
@Stateless
@DeclareRoles(ContentPermission.S_MANAGE_ACTIONLOG)
public class ActionLogBean implements ActionLogBeanLocal {
// TODO: Permissions
......@@ -37,11 +41,12 @@ public class ActionLogBean implements ActionLogBeanLocal {
// TODO Auto-generated constructor stub
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public void createActionLogEvent(String message, Role crew, boolean isTask) {
ActionLogMessage alm = new ActionLogMessage();
alm.setCrew(crew);
if(isTask) {
alm.setState(ActionLogMessageState.PENDING);
alm.setState(ActionLogMessageState.NEW);
} else {
alm.setState(null);
}
......@@ -52,15 +57,38 @@ public class ActionLogBean implements ActionLogBeanLocal {
actionLogFacade.saveToActionLog(alm);
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<ActionLogMessage> getAllActionLogEvents() {
return actionLogFacade.getAllSortedByTimestamp();
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<Role> getAssignableRoles() {
return roleBean.listRoles();
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage alm) {
return actionLogFacade.getActionLogMessageResponses(alm);
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state) {
if(alm.getState() != state && state != null) {
alm.setState(state);
}
ActionLogMessageResponse almr = new ActionLogMessageResponse();
almr.setMessage(message);
almr.setActionLogMessage(alm);
almr.setStateChange(state);
almr.setUser(permissionBean.getCurrentUser());
actionLogFacade.saveActionLogResponse(almr);
}
@Override
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public ActionLogMessage find(Integer id) {
return actionLogFacade.find(id);
......
package fi.insomnia.bortal.beans;
import java.security.Principal;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User;
@Stateless
@DeclareRoles({
UserPermission.S_CREATE_NEW,
UserPermission.S_LOGIN,
UserPermission.S_LOGOUT,
UserPermission.S_MODIFY,
UserPermission.S_MODIFY_ACCOUNTEVENTS,
UserPermission.S_VIEW_ACCOUNTEVENTS,
UserPermission.S_VIEW_ALL,
UserPermission.S_VIEW_SELF,
UserPermission.S_WRITE_ROLES,
UserPermission.S_READ_ROLES,
UserPermission.S_ANYUSER,
UserPermission.S_MANAGE_HTTP_SESSION,
MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS,
MapPermission.S_MANAGE_OTHERS,
MapPermission.S_BUY_PLACES,
ShopPermission.S_LIST_ALL_PRODUCTS,
ShopPermission.S_LIST_USERPRODUCTS,
ShopPermission.S_SHOP_TO_OTHERS,
ShopPermission.S_MANAGE_PRODUCTS,
ShopPermission.S_SHOP_PRODUCTS,
BillPermission.S_CREATE_BILL,
BillPermission.S_READ_ALL,
BillPermission.S_WRITE_ALL,
BillPermission.S_VIEW_OWN,
ContentPermission.S_MANAGE_NEWS,
ContentPermission.S_MANAGE_PAGES,
PollPermission.S_ANSWER,
PollPermission.S_VIEW_RESULTS,
PollPermission.S_CREATE,
SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER,
SpecialPermission.S_ANONYMOUS
})
public class PermissionBean implements PermissionBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class);
@Resource
private SessionContext context;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private UserFacade userfacade;
//
// @Override
// public boolean hasPermission(String perm) {
// return context.isCallerInRole(perm);
// }
@Override
public boolean hasPermission(IAppPermission perm) {
if (perm == null)
{
return false;
}
return context.isCallerInRole(perm.getFullName());
}
@Override
public boolean fatalPermission(IAppPermission permission, Object... failmessage) throws PermissionDeniedException {
boolean ret = hasPermission(permission);
if (!ret) {
StringBuilder message = new StringBuilder().append(" permission: ").append(permission);
if (failmessage == null || failmessage.length == 0) {
message.append(" MSG: SessionHandler mbean permission exception: Permission: ")
.append(permission);
} else {
for (Object part : failmessage) {
message.append(part == null ? "NULL" : part.toString());
}
}
// throw new SecurityException("Foobar");
throw new PermissionDeniedException(loggingbean, getCurrentUser(), message.toString());
}
return true;
}
@Override
public void fatalNotLoggedIn() throws PermissionDeniedException {
if (!isLoggedIn()) {
throw new PermissionDeniedException(loggingbean, getCurrentUser(), "User is not logged in!");
}
}
@Override
public boolean isCurrentUser(User user) {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getLogin());
}
@Override
public boolean isLoggedIn() {
return !getAnonUser().equals(getCurrentUser()) || getCurrentUser().isSuperadmin();
}
@Override
public User getCurrentUser() {
Principal principal = context.getCallerPrincipal();
User ret = userfacade.findByLogin(principal.getName());
if (ret == null) {
ret = getAnonUser();
}
return ret;
}
/**
* Makes sure default user and public role exist and the user is member of
* the role.
*/
@Override
public User getAnonUser() {
User defaultUser = userfacade.findByLogin(User.ANONYMOUS_LOGINNAME);
if (defaultUser == null) {
defaultUser = new User();
defaultUser.setLogin(User.ANONYMOUS_LOGINNAME);
defaultUser.setNick(User.ANONYMOUS_LOGINNAME);
userfacade.create(defaultUser);
// defaultUser.setSuperadmin(true);
}
return defaultUser;
}
}
package fi.insomnia.bortal.beans;
import java.security.Principal;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.User;
@Stateless
@DeclareRoles({
UserPermission.S_CREATE_NEW,
UserPermission.S_LOGIN,
UserPermission.S_LOGOUT,
UserPermission.S_MODIFY,
UserPermission.S_MODIFY_ACCOUNTEVENTS,
UserPermission.S_VIEW_ACCOUNTEVENTS,
UserPermission.S_VIEW_ALL,
UserPermission.S_VIEW_SELF,
UserPermission.S_WRITE_ROLES,
UserPermission.S_READ_ROLES,
UserPermission.S_ANYUSER,
UserPermission.S_MANAGE_HTTP_SESSION,
MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS,
MapPermission.S_MANAGE_OTHERS,
MapPermission.S_BUY_PLACES,
ShopPermission.S_LIST_ALL_PRODUCTS,
ShopPermission.S_LIST_USERPRODUCTS,
ShopPermission.S_SHOP_TO_OTHERS,
ShopPermission.S_MANAGE_PRODUCTS,
ShopPermission.S_SHOP_PRODUCTS,
BillPermission.S_CREATE_BILL,
BillPermission.S_READ_ALL,
BillPermission.S_WRITE_ALL,
BillPermission.S_VIEW_OWN,
ContentPermission.S_MANAGE_NEWS,
ContentPermission.S_MANAGE_PAGES,
ContentPermission.S_MANAGE_ACTIONLOG,
PollPermission.S_ANSWER,
PollPermission.S_VIEW_RESULTS,
PollPermission.S_CREATE,
SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER,
SpecialPermission.S_ANONYMOUS
})
public class PermissionBean implements PermissionBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(PermissionBean.class);
@Resource
private SessionContext context;
@EJB
private LoggingBeanLocal loggingbean;
@EJB
private UserFacade userfacade;
//
// @Override
// public boolean hasPermission(String perm) {
// return context.isCallerInRole(perm);
// }
@Override
public boolean hasPermission(IAppPermission perm) {
if (perm == null)
{
return false;
}
return context.isCallerInRole(perm.getFullName());
}
@Override
public boolean fatalPermission(IAppPermission permission, Object... failmessage) throws PermissionDeniedException {
boolean ret = hasPermission(permission);
if (!ret) {
StringBuilder message = new StringBuilder().append(" permission: ").append(permission);
if (failmessage == null || failmessage.length == 0) {
message.append(" MSG: SessionHandler mbean permission exception: Permission: ")
.append(permission);
} else {
for (Object part : failmessage) {
message.append(part == null ? "NULL" : part.toString());
}
}
// throw new SecurityException("Foobar");
throw new PermissionDeniedException(loggingbean, getCurrentUser(), message.toString());
}
return true;
}
@Override
public void fatalNotLoggedIn() throws PermissionDeniedException {
if (!isLoggedIn()) {
throw new PermissionDeniedException(loggingbean, getCurrentUser(), "User is not logged in!");
}
}
@Override
public boolean isCurrentUser(User user) {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getLogin());
}
@Override
public boolean isLoggedIn() {
return !getAnonUser().equals(getCurrentUser()) || getCurrentUser().isSuperadmin();
}
@Override
public User getCurrentUser() {
Principal principal = context.getCallerPrincipal();
User ret = userfacade.findByLogin(principal.getName());
if (ret == null) {
ret = getAnonUser();
}
return ret;
}
/**
* Makes sure default user and public role exist and the user is member of
* the role.
*/
@Override
public User getAnonUser() {
User defaultUser = userfacade.findByLogin(User.ANONYMOUS_LOGINNAME);
if (defaultUser == null) {
defaultUser = new User();
defaultUser.setLogin(User.ANONYMOUS_LOGINNAME);
defaultUser.setNick(User.ANONYMOUS_LOGINNAME);
userfacade.create(defaultUser);
// defaultUser.setSuperadmin(true);
}
return defaultUser;
}
}
package fi.insomnia.bortal.beans;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
/**
* Session Bean implementation class VotingBean
*/
@Stateless
@LocalBean
public class VotingBean implements VotingBeanLocal {
/**
* Default constructor.
*/
public VotingBean() {
// TODO Auto-generated constructor stub
}
}
......@@ -14,6 +14,8 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.AccountEvent_;
import fi.insomnia.bortal.model.ActionLogMessage;
import fi.insomnia.bortal.model.ActionLogMessageResponse;
import fi.insomnia.bortal.model.ActionLogMessageResponse_;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Bill_;
import fi.insomnia.bortal.model.EventPk;
......@@ -56,4 +58,21 @@ public class ActionLogFacade extends GenericFacade<Integer,ActionLogMessage> {
em.persist(alm);
em.flush();
}
public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage alm) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<ActionLogMessageResponse> cq = cb.createQuery(ActionLogMessageResponse.class);
Root<ActionLogMessageResponse> root = cq.from(ActionLogMessageResponse.class);
cq.where(cb.equal(root.get(ActionLogMessageResponse_.actionLogMessage), alm));
cq.orderBy(cb.asc(root.get("time")));
TypedQuery<ActionLogMessageResponse> tq = em.createQuery(cq);
return tq.getResultList();
}
public void saveActionLogResponse(ActionLogMessageResponse almr) {
em.persist(almr);
em.flush();
}
}
......@@ -3,7 +3,9 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.enums.ActionLogMessageState;
import fi.insomnia.bortal.model.ActionLogMessage;
import fi.insomnia.bortal.model.ActionLogMessageResponse;
import fi.insomnia.bortal.model.Role;
@Local
......@@ -12,4 +14,6 @@ public interface ActionLogBeanLocal {
public List<Role> getAssignableRoles();
public void createActionLogEvent(String message, Role crew, boolean isTask);
public ActionLogMessage find(Integer id);
public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage id);
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state);
}
package fi.insomnia.bortal.beans;
import javax.ejb.Local;
@Local
public interface VotingBeanLocal {
}
package fi.insomnia.bortal.model;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.eclipse.persistence.annotations.PrivateOwned;
import fi.insomnia.bortal.enums.ActionLogMessageState;
......@@ -34,6 +42,11 @@ public class ActionLogMessage extends GenericEntity {
@Column(name = "message", nullable = false)
private String message;
@OneToMany(mappedBy = "actionLogMessage", cascade = CascadeType.ALL)
@PrivateOwned
@OrderBy("id")
private List<ActionLogMessageResponse> actionLogMessageResponses = new ArrayList<ActionLogMessageResponse>();
@Column(name = "state", nullable = true)
@Enumerated(EnumType.STRING)
......@@ -79,4 +92,12 @@ public class ActionLogMessage extends GenericEntity {
this.state = state;
}
public List<ActionLogMessageResponse> getActionLogMessageResponses() {
return actionLogMessageResponses;
}
public void setActionLogMessageResponses(List<ActionLogMessageResponse> actionLogMessageResponses) {
this.actionLogMessageResponses = actionLogMessageResponses;
}
}
package fi.insomnia.bortal.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import fi.insomnia.bortal.enums.ActionLogMessageState;
@Entity
@Table(name = "actionlog_message_responses")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class ActionLogMessageResponse extends GenericEntity {
@Column(name = "time", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date time = new Date();
@JoinColumn(name = "user_id")
private User user;
@Column(name = "message", nullable = false)
private String message;
@Column(name = "state_change", nullable = true)
@Enumerated(EnumType.STRING)
private ActionLogMessageState stateChange;
@JoinColumn(name = "actionlog_message_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private ActionLogMessage actionLogMessage;
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ActionLogMessageState getStateChange() {
return stateChange;
}
public void setStateChange(ActionLogMessageState stateChange) {
this.stateChange = stateChange;
}
public ActionLogMessage getActionLogMessage() {
return actionLogMessage;
}
public void setActionLogMessage(ActionLogMessage message) {
this.actionLogMessage = message;
}
}
......@@ -27,16 +27,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
*/
@Entity
@Table(name = "compos")
@NamedQueries({
@NamedQuery(name = "Compo.findAll", query = "SELECT c FROM Compo c"),
@NamedQuery(name = "Compo.findByName", query = "SELECT c FROM Compo c WHERE c.name = :name"),
@NamedQuery(name = "Compo.findByStartTime", query = "SELECT c FROM Compo c WHERE c.startTime = :startTime"),
@NamedQuery(name = "Compo.findByVoteStart", query = "SELECT c FROM Compo c WHERE c.voteStart = :voteStart"),
@NamedQuery(name = "Compo.findByVoteEnd", query = "SELECT c FROM Compo c WHERE c.voteEnd = :voteEnd"),
@NamedQuery(name = "Compo.findBySubmitStart", query = "SELECT c FROM Compo c WHERE c.submitStart = :submitStart"),
@NamedQuery(name = "Compo.findBySubmitEnd", query = "SELECT c FROM Compo c WHERE c.submitEnd = :submitEnd"),
@NamedQuery(name = "Compo.findByHoldVoting", query = "SELECT c FROM Compo c WHERE c.holdVoting = :holdVoting"),
@NamedQuery(name = "Compo.findByDescription", query = "SELECT c FROM Compo c WHERE c.description = :description") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Compo extends GenericEventChild {
private static final long serialVersionUID = 1L;
......
......@@ -32,13 +32,6 @@ import org.eclipse.persistence.annotations.PrivateOwned;
*/
@Entity
@Table(name = "entries")
@NamedQueries({
@NamedQuery(name = "CompoEntry.findAll", query = "SELECT c FROM CompoEntry c"),
@NamedQuery(name = "CompoEntry.findByCreated", query = "SELECT c FROM CompoEntry c WHERE c.created = :created"),
@NamedQuery(name = "CompoEntry.findByName", query = "SELECT c FROM CompoEntry c WHERE c.name = :name"),
@NamedQuery(name = "CompoEntry.findByNotes", query = "SELECT c FROM CompoEntry c WHERE c.notes = :notes"),
@NamedQuery(name = "CompoEntry.findByScreenMessage", query = "SELECT c FROM CompoEntry c WHERE c.screenMessage = :screenMessage"),
@NamedQuery(name = "CompoEntry.findBySort", query = "SELECT c FROM CompoEntry c WHERE c.sort = :sort") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class CompoEntry extends GenericEventChild {
private static final long serialVersionUID = 1L;
......
......@@ -27,13 +27,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
*/
@Entity
@Table(name = "entry_files")
@NamedQueries({
@NamedQuery(name = "CompoEntryFile.findAll", query = "SELECT c FROM CompoEntryFile c"),
@NamedQuery(name = "CompoEntryFile.findByMimeType", query = "SELECT c FROM CompoEntryFile c WHERE c.mimeType = :mimeType"),
@NamedQuery(name = "CompoEntryFile.findByFileName", query = "SELECT c FROM CompoEntryFile c WHERE c.fileName = :fileName"),
@NamedQuery(name = "CompoEntryFile.findByDescription", query = "SELECT c FROM CompoEntryFile c WHERE c.description = :description"),
@NamedQuery(name = "CompoEntryFile.findByHash", query = "SELECT c FROM CompoEntryFile c WHERE c.hash = :hash"),
@NamedQuery(name = "CompoEntryFile.findByUploaded", query = "SELECT c FROM CompoEntryFile c WHERE c.uploaded = :uploaded") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class CompoEntryFile extends GenericEventChild {
private static final long serialVersionUID = 1L;
......
......@@ -21,10 +21,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
*/
@Entity
@Table(name = "entry_participations")
@NamedQueries({
@NamedQuery(name = "CompoEntryParticipant.findAll", query = "SELECT c FROM CompoEntryParticipant c"),
@NamedQuery(name = "CompoEntryParticipant.findByRole", query = "SELECT c FROM CompoEntryParticipant c WHERE c.role = :role") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class CompoEntryParticipant extends GenericEventChild {
private static final long serialVersionUID = 1L;
......
......@@ -26,10 +26,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
*/
@Entity
@Table(name = "votes", uniqueConstraints = { @UniqueConstraint(columnNames = { "entry_id", "event_id", "voter_user_id" }) })
@NamedQueries({
@NamedQuery(name = "Vote.findAll", query = "SELECT v FROM Vote v"),
@NamedQuery(name = "Vote.findByScore", query = "SELECT v FROM Vote v WHERE v.score = :score"),
@NamedQuery(name = "Vote.findByTime", query = "SELECT v FROM Vote v WHERE v.time = :time") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Vote extends GenericEventChild {
......
......@@ -3,5 +3,10 @@ package fi.insomnia.bortal.enums;
public enum ActionLogMessageState {
NEW,
PENDING,
DONE
DONE;
public String getKey(){
return "actionlog.messagestate." + name();
}
}
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum ContentPermission implements IAppPermission {
MANAGE_NEWS("Manage newsgroups"),
MANAGE_PAGES("Manage pages"),
;
public static final String S_MANAGE_NEWS = "CONTENT/MANAGE_NEWS";
public static final String S_MANAGE_PAGES = "CONTENT/MANAGE_PAGES";
private String description;
private String fullName;
private ContentPermission(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.CONTENT;
}
@Override
public String getDescription() {
return this.description;
}
@Override
public String getFullName() {
return fullName;
}
}
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum ContentPermission implements IAppPermission {
MANAGE_NEWS("Manage newsgroups"),
MANAGE_PAGES("Manage pages"),
MANAGE_ACTIONLOG(""),
;
public static final String S_MANAGE_NEWS = "CONTENT/MANAGE_NEWS";
public static final String S_MANAGE_PAGES = "CONTENT/MANAGE_PAGES";
public static final String S_MANAGE_ACTIONLOG = "CONTENT/MANAGE_ACTIONLOG";
private String description;
private String fullName;
private ContentPermission(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.CONTENT;
}
@Override
public String getDescription() {
return this.description;
}
@Override
public String getFullName() {
return fullName;
}
}
......@@ -77,7 +77,8 @@
<h:outputText value="#{message.message}" />
</h:column>
<h:column>
<h:link rendered="#{!empty message.state}" >
<h:link rendered="#{!empty message.state}" outcome="taskview" >
<f:param name="id" value="#{message.id}" />
Näytä tehtävä
</h:link>
</h:column>
......
......@@ -4,6 +4,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
>
<h:body>
......@@ -14,34 +15,86 @@
</f:metadata>
<ui:define name="content">
<h:outputStylesheet library="style" name="insomnia2/css/actionlog.css"></h:outputStylesheet>
<h1>Task: insert id<!-- #{i18n['actionlog.messagelist.header']} --></h1>
<h1>Task id: #{taskModificationView.message.id}<!-- #{i18n['actionlog.messagelist.header']} --></h1>
<!-- <p>Mo #{i18n['actionlog.messagelist.description']} </p> -->
<table>
<tr>
<td><h:outputText class="taskHeader" value="Submit time/date: " /></td>
<td><h:outputText value="#{taskModification.message.time}" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="Submitter: " /></td>
<td><h:outputText value="infopoika69" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="Target crew: " /></td>
<td><h:outputText value="net" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="State: " /></td>
<td><h:outputText value="odottaa nappaamista" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="Message: " /></td>
<td><h:outputText value="verkko ei toimi." /></td>
</tr>
</table>
<div>
<table>
<tr>
<td><h:outputText class="taskHeader" value="#{i18n['actionlog.time']}: " /></td>
<td><h:outputText value="#{taskModificationView.message.time}" >
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
</h:outputText></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="#{i18n['actionlog.user']}: " /></td>
<td><h:outputText value="#{taskModificationView.message.user.nick}" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="#{i18n['actionlog.crew']}: " /></td>
<td><h:outputText value="#{taskModificationView.message.crew.name}" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="#{i18n['actionlog.state']}: " /></td>
<td><h:outputText value="#{i18n[taskModificationView.message.state.key]}" /></td>
</tr>
<tr>
<td><h:outputText class="taskHeader" value="#{i18n['actionlog.message']}: " /></td>
<td><h:outputText value="#{taskModificationView.message.message}" /></td>
</tr>
</table>
</div>
<div class="clearfix"></div>
<hr style="width:90%;" />
<div id="actionlog">
<div>
<h:form>
<p:poll interval="1" update="messageresponsetable" />
<h:dataTable id="messageresponsetable" value="#{taskModificationView.responses}" var="response">
<h:column>
<f:facet name="header">
<h:outputText value="Aika" />
</f:facet>
<h:outputText value="#{response.time}">
<f:convertDateTime type="both" pattern="dd.MM.yyyy HH:mm" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Submitter" />
</f:facet>
<h:outputText value="#{response.user.nick}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Message" />
</f:facet>
<h:outputText value="#{response.message}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="tilanvaihdos" />
</f:facet>
<h:outputText value="#{i18n[response.stateChange.key]}" />
</h:column>
</h:dataTable>
</h:form>
</div>
<div>
<h:form>
<h3>Lisää viesti</h3>
<h:outputText value="Viestisi: " />
<h:inputText value="#{taskModificationView.responseMessage}" size="100" />
<h:outputText value="Tila: " />
<h:selectOneMenu id="stateMenu" title="asdas" value="#{taskModificationView.responseStateChange}">
<f:selectItem itemLabel="Ei muutosta" itemValue="#{null}" />
<f:selectItem itemLabel="Uusi" itemValue="NEW" />
<f:selectItem itemLabel="Työn alla" itemValue="PENDING" />
<f:selectItem itemLabel="Tehty" itemValue="DONE" />
</h:selectOneMenu>
<h:commandButton class="sendbutton2" value="#{i18n['actionlog.create.submitbutton']}" action="#{taskModificationView.createResponse}" />
</h:form>
</div>
</ui:define>
</ui:composition>
......
......@@ -83,4 +83,9 @@
color: #7DAC0C;
font-size: 120%;
font-weight: bold;
}
.sendbutton2 {
border: 1px solid #aaa;
margin-left: 10px;
}
\ No newline at end of file
package fi.insomnia.bortal.web.cdiview.actionlog;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
......@@ -9,7 +8,6 @@ import javax.inject.Named;
import javax.validation.constraints.Size;
import fi.insomnia.bortal.beans.ActionLogBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......
......@@ -4,26 +4,60 @@ import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import java.util.List;
import fi.insomnia.bortal.beans.ActionLogBeanLocal;
import fi.insomnia.bortal.enums.ActionLogMessageState;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.ActionLogMessage;
import fi.insomnia.bortal.model.ActionLogMessageResponse;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class TaskModificationView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 938879097893244897L;
private Integer id;
private ActionLogMessage message;
private List<ActionLogMessageResponse> responses;
private String responseMessage;
private ActionLogMessageState responseStateChange;
@EJB
private ActionLogBeanLocal logbean;
public void initView(){
if(message == null) {
if(super.requirePermissions(ContentPermission.MANAGE_ACTIONLOG) && message == null) {
super.beginConversation();
message = logbean.find(id);
}
}
public void createResponse() {
if(responseStateChange == null || responseStateChange == message.getState())
logbean.addActionLogMessageResponse(message, responseMessage, null);
else {
logbean.addActionLogMessageResponse(message, responseMessage, responseStateChange);
if(responseStateChange != message.getState()) {
this.message = logbean.find(id);
}
}
responseMessage = "";
responseStateChange = null;
}
public List<ActionLogMessageResponse> getResponses() {
responses = logbean.getActionLogMessageResponses(message);
return responses;
}
public ActionLogMessage getMessage(){
return message;
}
public Integer getId() {
return id;
}
......@@ -32,4 +66,20 @@ public class TaskModificationView extends GenericCDIView {
this.id = id;
}
public String getResponseMessage() {
return responseMessage;
}
public void setResponseMessage(String responseMessage) {
this.responseMessage = responseMessage;
}
public ActionLogMessageState getResponseStateChange() {
return responseStateChange;
}
public void setResponseStateChange(ActionLogMessageState responseStateChange) {
this.responseStateChange = responseStateChange;
}
}
......@@ -15,6 +15,8 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class UserCardView extends GenericCDIView {
private static final long serialVersionUID = -7316229268164228981L;
@EJB
private CardTemplateBeanLocal cardBean;
......
......@@ -58,9 +58,15 @@ public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Int
T ret = null;
Integer id = null;
if (value != null) {
id = Integer.parseInt(value);
if (id != null) {
ret = find(id);
try {
id = Integer.parseInt(value);
if (id != null) {
ret = find(id);
}
} catch (NumberFormatException nfe) {
if (value == null || !value.equals("null")) {
throw nfe;
}
}
}
logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret });
......@@ -78,6 +84,10 @@ public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Int
ret = entity.getId().toString();
}
}
if (ret == null)
{
ret = "null";
}
return ret;
}
//
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!