Commit 0e48a8ea by Antti Tönkyrä

Further filtering logic

1 parent 61143b14
...@@ -2,6 +2,7 @@ package fi.codecrew.moya.beans; ...@@ -2,6 +2,7 @@ package fi.codecrew.moya.beans;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
...@@ -64,15 +65,23 @@ public class ActionLogBean implements ActionLogBeanLocal { ...@@ -64,15 +65,23 @@ public class ActionLogBean implements ActionLogBeanLocal {
alm.setMessage(message); alm.setMessage(message);
alm.setUser(permissionBean.getCurrentUser()); alm.setUser(permissionBean.getCurrentUser());
alm.setLanEvent(permissionBean.getCurrentUser().getEvent()); alm.setLanEvent(permissionBean.getCurrentUser().getEvent());
alm.setTags(almts);
actionLogFacade.saveToActionLog(alm); actionLogFacade.saveToActionLog(alm);
} }
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG) @RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
@Deprecated
public List<ActionLogMessage> getAllActionLogEvents() { public List<ActionLogMessage> getAllActionLogEvents() {
return actionLogFacade.getAllSortedByTimestamp(permissionBean.getCurrentUser().getEvent()); return actionLogFacade.getAllSortedByTimestamp(permissionBean.getCurrentUser().getEvent());
} }
@Override
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<ActionLogMessage> getAllActionLogEventsByFilter(List<ActionLogMessageTag> filterTags) {
return actionLogFacade.getAllSortedByTimestampFiltered(permissionBean.getCurrentUser().getEvent(), filterTags);
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG) @RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<Role> getAssignableRoles() { public List<Role> getAssignableRoles() {
return roleBean.listRoles(); return roleBean.listRoles();
...@@ -84,6 +93,12 @@ public class ActionLogBean implements ActionLogBeanLocal { ...@@ -84,6 +93,12 @@ public class ActionLogBean implements ActionLogBeanLocal {
return actionLogFacade.getActionLogMessageResponses(alm); return actionLogFacade.getActionLogMessageResponses(alm);
} }
@Override
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<ActionLogMessageTag> getAllTags() {
return actionLogMessageTagFacade.getAllTags(eventBean.getCurrentEvent());
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG) @RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state) { public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state) {
if(!alm.getLanEvent().equals(permissionBean.getCurrentUser().getEvent())) return; if(!alm.getLanEvent().equals(permissionBean.getCurrentUser().getEvent())) return;
...@@ -149,7 +164,9 @@ public class ActionLogBean implements ActionLogBeanLocal { ...@@ -149,7 +164,9 @@ public class ActionLogBean implements ActionLogBeanLocal {
return almts; return almts;
} }
private ActionLogMessageTag getActionLogMessageTagByString(String s) { @Override
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public ActionLogMessageTag getActionLogMessageTagByString(String s) {
s = s.toLowerCase(); s = s.toLowerCase();
ActionLogMessageTag almt = null; ActionLogMessageTag almt = null;
......
package fi.codecrew.moya.facade; package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
...@@ -12,6 +13,7 @@ import javax.persistence.criteria.Root; ...@@ -12,6 +13,7 @@ import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.ActionLogMessageResponse_; import fi.codecrew.moya.model.ActionLogMessageResponse_;
import fi.codecrew.moya.model.ActionLogMessage; import fi.codecrew.moya.model.ActionLogMessage;
import fi.codecrew.moya.model.ActionLogMessageResponse; import fi.codecrew.moya.model.ActionLogMessageResponse;
import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.model.ActionLogMessage_; import fi.codecrew.moya.model.ActionLogMessage_;
import fi.codecrew.moya.model.LanEvent; import fi.codecrew.moya.model.LanEvent;
...@@ -24,6 +26,7 @@ public class ActionLogFacade extends IntegerPkGenericFacade<ActionLogMessage> { ...@@ -24,6 +26,7 @@ public class ActionLogFacade extends IntegerPkGenericFacade<ActionLogMessage> {
super(ActionLogMessage.class); super(ActionLogMessage.class);
} }
@Deprecated
public List<ActionLogMessage> getAllSortedByTimestamp(LanEvent event) { public List<ActionLogMessage> getAllSortedByTimestamp(LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<ActionLogMessage> cq = cb.createQuery(ActionLogMessage.class); CriteriaQuery<ActionLogMessage> cq = cb.createQuery(ActionLogMessage.class);
...@@ -56,4 +59,35 @@ public class ActionLogFacade extends IntegerPkGenericFacade<ActionLogMessage> { ...@@ -56,4 +59,35 @@ public class ActionLogFacade extends IntegerPkGenericFacade<ActionLogMessage> {
getEm().persist(almr); getEm().persist(almr);
getEm().flush(); getEm().flush();
} }
public List<ActionLogMessage> getAllSortedByTimestampFiltered(LanEvent event, List<ActionLogMessageTag> filterTags) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<ActionLogMessage> cq = cb.createQuery(ActionLogMessage.class);
Root<ActionLogMessage> root = cq.from(ActionLogMessage.class);
cq.where(
cb.equal(root.get(ActionLogMessage_.lanEvent), event)
);
cq.orderBy(cb.desc(root.get("time")));
// todo: filter using jpa..
TypedQuery<ActionLogMessage> tq = getEm().createQuery(cq);
List<ActionLogMessage> allResults = tq.getResultList();
List<ActionLogMessage> filteredResults = new ArrayList<>();
boolean containsTag = false;
for(ActionLogMessage alm : allResults) {
for(ActionLogMessageTag almt : alm.getTags()) {
if(filterTags.contains(almt)) {
containsTag = true;
break;
}
}
if(containsTag) {
filteredResults.add(alm);
containsTag = false;
}
}
return filteredResults;
}
} }
package fi.codecrew.moya.facade; package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
...@@ -40,4 +43,20 @@ public class ActionLogMessageTagFacade extends IntegerPkGenericFacade<ActionLogM ...@@ -40,4 +43,20 @@ public class ActionLogMessageTagFacade extends IntegerPkGenericFacade<ActionLogM
} }
return almt; return almt;
} }
public List<ActionLogMessageTag> getAllTags(LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<ActionLogMessageTag> cq = cb.createQuery(ActionLogMessageTag.class);
Root<ActionLogMessageTag> root = cq.from(ActionLogMessageTag.class);
cq.where(
cb.equal(root.get(ActionLogMessageTag_.event), event)
);
TypedQuery<ActionLogMessageTag> tq = getEm().createQuery(cq);
try {
return tq.getResultList();
} catch(Exception e) {
return new ArrayList<ActionLogMessageTag>();
}
}
} }
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
...@@ -6,6 +7,7 @@ import javax.ejb.Local; ...@@ -6,6 +7,7 @@ import javax.ejb.Local;
import fi.codecrew.moya.enums.ActionLogMessageState; import fi.codecrew.moya.enums.ActionLogMessageState;
import fi.codecrew.moya.model.ActionLogMessage; import fi.codecrew.moya.model.ActionLogMessage;
import fi.codecrew.moya.model.ActionLogMessageResponse; import fi.codecrew.moya.model.ActionLogMessageResponse;
import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
@Local @Local
...@@ -16,4 +18,8 @@ public interface ActionLogBeanLocal { ...@@ -16,4 +18,8 @@ public interface ActionLogBeanLocal {
public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage id); public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage id);
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state); public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state);
public void createActionLogEvent(String message, boolean isTask); public void createActionLogEvent(String message, boolean isTask);
List<ActionLogMessageTag> getAllTags();
ActionLogMessageTag getActionLogMessageTagByString(String s);
List<ActionLogMessage> getAllActionLogEventsByFilter(
List<ActionLogMessageTag> filterTags);
} }
...@@ -58,7 +58,7 @@ public class ActionLogMessage extends GenericEntity { ...@@ -58,7 +58,7 @@ public class ActionLogMessage extends GenericEntity {
@JoinColumn(name = "actionlog_message_tag_id", referencedColumnName = ActionLogMessageTag.ID_COLUMN) @JoinColumn(name = "actionlog_message_tag_id", referencedColumnName = ActionLogMessageTag.ID_COLUMN)
} }
) )
private List<ActionLogMessageTag> parents = new ArrayList<ActionLogMessageTag>(); private List<ActionLogMessageTag> tags = new ArrayList<ActionLogMessageTag>();
@Column(name = "state", nullable = true) @Column(name = "state", nullable = true)
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
...@@ -112,4 +112,11 @@ public class ActionLogMessage extends GenericEntity { ...@@ -112,4 +112,11 @@ public class ActionLogMessage extends GenericEntity {
this.actionLogMessageResponses = actionLogMessageResponses; this.actionLogMessageResponses = actionLogMessageResponses;
} }
public List<ActionLogMessageTag> getTags() {
return tags;
}
public void setTags(List<ActionLogMessageTag> tags) {
this.tags = tags;
}
} }
...@@ -15,24 +15,30 @@ ...@@ -15,24 +15,30 @@
<p>#{i18n['actionlog.messagelist.description']}</p> <p>#{i18n['actionlog.messagelist.description']}</p>
<h:form id="actionlog_create"> <h:form id="actionlog_create">
<h2>#{i18n['actionlog.create.header']}</h2> <h2>#{i18n['actionlog.create.header']}</h2>
<h:messages /> <p:messages />
<div class="row"> <h:panelGrid columns="2">
<h3 class="actionlog_create_message">#{i18n['actionlog.create.message']}</h3> <h:panelGrid columns="3">
<h3 class="actionlog_create_istask">#{i18n['actionlog.create.taskradio']}</h3> <h:outputText value="#{i18n['actionlog.create.message']}" />
</div> <h:outputText value="#{i18n['actionlog.create.taskradio']}" />
<h:outputText />
<div class="row"> <p:inputText value="#{actionLogCreateView.message}" />
<div class="actionlog_create_message"> <p:selectBooleanCheckbox value="#{actionLogCreateView.task}" />
<h:inputText value="#{actionLogCreateView.message}" /> <h:commandButton class="sendbutton" action="#{actionLogCreateView.send}" value="#{i18n['actionlog.create.submitbutton']}" />
</div> </h:panelGrid>
<div class="actionlog_create_istask"> <h:panelGrid columns="1">
<h:selectBooleanCheckbox value="#{actionLogCreateView.task}" /> <p:tagCloud model="#{actionLogMessageView.tagCloud}">
</div> <p:ajax event="select" listener="#{actionLogMessageView.onTagSelect}" update="@form" />
</p:tagCloud>
<h:commandButton class="sendbutton" action="#{actionLogCreateView.send}" value="#{i18n['actionlog.create.submitbutton']}"> <h:panelGroup layout="block">
</h:commandButton> <ui:repeat id="selectedtags" var="tag" value="#{actionLogMessageView.activeTags}">
</div> <span style="border: 1px solid #0af; display: inline-block; padding: 2px">#{tag.tag}</span>
</ui:repeat>
</h:panelGroup>
</h:panelGrid>
</h:panelGrid>
</h:form> </h:form>
<div class="clearfix"></div> <div class="clearfix"></div>
<h2>#{i18n['actionlog.tasklist.header']}</h2> <h2>#{i18n['actionlog.tasklist.header']}</h2>
......
...@@ -22,7 +22,6 @@ public class ActionLogCreateView extends GenericCDIView { ...@@ -22,7 +22,6 @@ public class ActionLogCreateView extends GenericCDIView {
@Size(min=4,message="{actionlog.message.tooshort}") @Size(min=4,message="{actionlog.message.tooshort}")
private String message; private String message;
private Role role;
private boolean task; private boolean task;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
......
...@@ -4,9 +4,16 @@ import java.util.ArrayList; ...@@ -4,9 +4,16 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.tagcloud.DefaultTagCloudItem;
import org.primefaces.model.tagcloud.DefaultTagCloudModel;
import org.primefaces.model.tagcloud.TagCloudItem;
import org.primefaces.model.tagcloud.TagCloudModel;
import fi.codecrew.moya.beans.ActionLogBeanLocal; import fi.codecrew.moya.beans.ActionLogBeanLocal;
import fi.codecrew.moya.enums.apps.ContentPermission; import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.model.ActionLogMessage; import fi.codecrew.moya.model.ActionLogMessage;
...@@ -14,20 +21,35 @@ import fi.codecrew.moya.model.ActionLogMessageTag; ...@@ -14,20 +21,35 @@ import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named @Named
@RequestScoped @ConversationScoped
public class ActionLogMessageView extends GenericCDIView { public class ActionLogMessageView extends GenericCDIView {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private boolean updateEnabled = true; private boolean updateEnabled = true;
private ArrayList<ActionLogMessageTag> selectedTags; private TagCloudModel tagCloud = null;
private List<ActionLogMessageTag> activeTags = null;
@EJB @EJB
private transient ActionLogBeanLocal actionLogBean; private transient ActionLogBeanLocal actionLogBean;
public void initView() { public void initView() {
super.requirePermissions(ContentPermission.MANAGE_ACTIONLOG); if(super.requirePermissions(ContentPermission.MANAGE_ACTIONLOG)) {
this.beginConversation();
if(tagCloud == null || activeTags == null) {
tagCloud = new DefaultTagCloudModel();
for(ActionLogMessageTag almt : actionLogBean.getAllTags()) {
tagCloud.addTag(new DefaultTagCloudItem(almt.getTag(), 1));
}
activeTags = new ArrayList<>();
}
}
} }
public boolean getUpdateEnabled() { public boolean getUpdateEnabled() {
return updateEnabled; return updateEnabled;
} }
...@@ -37,6 +59,23 @@ public class ActionLogMessageView extends GenericCDIView { ...@@ -37,6 +59,23 @@ public class ActionLogMessageView extends GenericCDIView {
} }
public List<ActionLogMessage> getMessages() { public List<ActionLogMessage> getMessages() {
return actionLogBean.getAllActionLogEvents(); return actionLogBean.getAllActionLogEventsByFilter(activeTags);
}
public TagCloudModel getTagCloud() {
return tagCloud;
}
public void onTagSelect(SelectEvent event) {
System.err.println("T+" + activeTags.size());
TagCloudItem item = (TagCloudItem)event.getObject();
ActionLogMessageTag almt = actionLogBean.getActionLogMessageTagByString(item.getLabel());
if(!activeTags.contains(almt))
activeTags.add(almt);
}
public List<ActionLogMessageTag> getActiveTags() {
return this.activeTags;
} }
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!