Commit 0e48a8ea by Antti Tönkyrä

Further filtering logic

1 parent 61143b14
......@@ -2,6 +2,7 @@ package fi.codecrew.moya.beans;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.annotation.security.DeclareRoles;
......@@ -64,14 +65,22 @@ public class ActionLogBean implements ActionLogBeanLocal {
alm.setMessage(message);
alm.setUser(permissionBean.getCurrentUser());
alm.setLanEvent(permissionBean.getCurrentUser().getEvent());
alm.setTags(almts);
actionLogFacade.saveToActionLog(alm);
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
@Deprecated
public List<ActionLogMessage> getAllActionLogEvents() {
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)
public List<Role> getAssignableRoles() {
......@@ -83,6 +92,12 @@ public class ActionLogBean implements ActionLogBeanLocal {
if(!alm.getLanEvent().equals(permissionBean.getCurrentUser().getEvent())) return null;
return actionLogFacade.getActionLogMessageResponses(alm);
}
@Override
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public List<ActionLogMessageTag> getAllTags() {
return actionLogMessageTagFacade.getAllTags(eventBean.getCurrentEvent());
}
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state) {
......@@ -149,7 +164,9 @@ public class ActionLogBean implements ActionLogBeanLocal {
return almts;
}
private ActionLogMessageTag getActionLogMessageTagByString(String s) {
@Override
@RolesAllowed(ContentPermission.S_MANAGE_ACTIONLOG)
public ActionLogMessageTag getActionLogMessageTagByString(String s) {
s = s.toLowerCase();
ActionLogMessageTag almt = null;
......
package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
......@@ -12,6 +13,7 @@ import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.ActionLogMessageResponse_;
import fi.codecrew.moya.model.ActionLogMessage;
import fi.codecrew.moya.model.ActionLogMessageResponse;
import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.model.ActionLogMessage_;
import fi.codecrew.moya.model.LanEvent;
......@@ -24,6 +26,7 @@ public class ActionLogFacade extends IntegerPkGenericFacade<ActionLogMessage> {
super(ActionLogMessage.class);
}
@Deprecated
public List<ActionLogMessage> getAllSortedByTimestamp(LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<ActionLogMessage> cq = cb.createQuery(ActionLogMessage.class);
......@@ -56,4 +59,35 @@ public class ActionLogFacade extends IntegerPkGenericFacade<ActionLogMessage> {
getEm().persist(almr);
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;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
......@@ -40,4 +43,20 @@ public class ActionLogMessageTagFacade extends IntegerPkGenericFacade<ActionLogM
}
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;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Local;
......@@ -6,6 +7,7 @@ import javax.ejb.Local;
import fi.codecrew.moya.enums.ActionLogMessageState;
import fi.codecrew.moya.model.ActionLogMessage;
import fi.codecrew.moya.model.ActionLogMessageResponse;
import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.model.Role;
@Local
......@@ -16,4 +18,8 @@ public interface ActionLogBeanLocal {
public List<ActionLogMessageResponse> getActionLogMessageResponses(ActionLogMessage id);
public void addActionLogMessageResponse(ActionLogMessage alm, String message, ActionLogMessageState state);
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 {
@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)
@Enumerated(EnumType.STRING)
......@@ -112,4 +112,11 @@ public class ActionLogMessage extends GenericEntity {
this.actionLogMessageResponses = actionLogMessageResponses;
}
public List<ActionLogMessageTag> getTags() {
return tags;
}
public void setTags(List<ActionLogMessageTag> tags) {
this.tags = tags;
}
}
......@@ -15,24 +15,30 @@
<p>#{i18n['actionlog.messagelist.description']}</p>
<h:form id="actionlog_create">
<h2>#{i18n['actionlog.create.header']}</h2>
<h:messages />
<div class="row">
<h3 class="actionlog_create_message">#{i18n['actionlog.create.message']}</h3>
<h3 class="actionlog_create_istask">#{i18n['actionlog.create.taskradio']}</h3>
</div>
<div class="row">
<div class="actionlog_create_message">
<h:inputText value="#{actionLogCreateView.message}" />
</div>
<div class="actionlog_create_istask">
<h:selectBooleanCheckbox value="#{actionLogCreateView.task}" />
</div>
<h:commandButton class="sendbutton" action="#{actionLogCreateView.send}" value="#{i18n['actionlog.create.submitbutton']}">
</h:commandButton>
</div>
<p:messages />
<h:panelGrid columns="2">
<h:panelGrid columns="3">
<h:outputText value="#{i18n['actionlog.create.message']}" />
<h:outputText value="#{i18n['actionlog.create.taskradio']}" />
<h:outputText />
<p:inputText value="#{actionLogCreateView.message}" />
<p:selectBooleanCheckbox value="#{actionLogCreateView.task}" />
<h:commandButton class="sendbutton" action="#{actionLogCreateView.send}" value="#{i18n['actionlog.create.submitbutton']}" />
</h:panelGrid>
<h:panelGrid columns="1">
<p:tagCloud model="#{actionLogMessageView.tagCloud}">
<p:ajax event="select" listener="#{actionLogMessageView.onTagSelect}" update="@form" />
</p:tagCloud>
<h:panelGroup layout="block">
<ui:repeat id="selectedtags" var="tag" value="#{actionLogMessageView.activeTags}">
<span style="border: 1px solid #0af; display: inline-block; padding: 2px">#{tag.tag}</span>
</ui:repeat>
</h:panelGroup>
</h:panelGrid>
</h:panelGrid>
</h:form>
<div class="clearfix"></div>
<h2>#{i18n['actionlog.tasklist.header']}</h2>
......
......@@ -22,7 +22,6 @@ public class ActionLogCreateView extends GenericCDIView {
@Size(min=4,message="{actionlog.message.tooshort}")
private String message;
private Role role;
private boolean task;
private static final long serialVersionUID = 1L;
......
......@@ -4,9 +4,16 @@ import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
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.enums.apps.ContentPermission;
import fi.codecrew.moya.model.ActionLogMessage;
......@@ -14,20 +21,35 @@ import fi.codecrew.moya.model.ActionLogMessageTag;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@RequestScoped
@ConversationScoped
public class ActionLogMessageView extends GenericCDIView {
private static final long serialVersionUID = 1L;
private boolean updateEnabled = true;
private ArrayList<ActionLogMessageTag> selectedTags;
private TagCloudModel tagCloud = null;
private List<ActionLogMessageTag> activeTags = null;
@EJB
private transient ActionLogBeanLocal actionLogBean;
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() {
return updateEnabled;
}
......@@ -37,6 +59,23 @@ public class ActionLogMessageView extends GenericCDIView {
}
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!