Commit ba482559 by Tuomas Riihimäki

Initial vip creation and listing

1 parent 842e5f50
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import fi.codecrew.moya.model.Vip; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import java.util.List;
import java.util.Set; import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
@Local @Local
public interface VipBeanLocal { public interface VipBeanLocal {
List<Vip> getAvailableVips(); List<Vip> getAvailableVips();
SearchResult<Vip> search(SearchQuery sq);
void create(Vip vip);
Vip find(Integer id);
} }
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import fi.codecrew.moya.enums.apps.VipPermission; import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.facade.VipFacade; import fi.codecrew.moya.facade.VipFacade;
import fi.codecrew.moya.model.Vip; import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -12,29 +14,52 @@ import javax.annotation.security.RolesAllowed; ...@@ -12,29 +14,52 @@ import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import java.util.Date;
import java.util.List; import java.util.List;
@Stateless @Stateless
@LocalBean @LocalBean
@DeclareRoles({ @DeclareRoles({
VipPermission.S_VIEW, VipPermission.S_VIEW,
VipPermission.S_USAGE, VipPermission.S_USAGE,
VipPermission.S_EDIT VipPermission.S_EDIT
}) })
public class VipBean implements VipBeanLocal { public class VipBean implements VipBeanLocal {
private static final Logger log = LoggerFactory.getLogger(VipBean.class); private static final Logger log = LoggerFactory.getLogger(VipBean.class);
//@EJB
//private PermissionBeanLocal permissionBean;
@EJB
private VipFacade vipFacade;
@EJB
private PermissionBeanLocal permbean;
@EJB
private EventBeanLocal eventbean;
@Override
@RolesAllowed({ VipPermission.S_VIEW })
public List<Vip> getAvailableVips() {
return vipFacade.findForEvent();
}
@Override
public void create(Vip vip) {
vip.setCreated(new Date());
vip.setCreator(permbean.getCurrentUser());
vip.setEvent(eventbean.getCurrentEvent());
if (vip.getHost() == null) {
vip.setHost(vip.getCreator());
}
vipFacade.create(vip);
@EJB }
private EventBeanLocal eventBean;
//@EJB
//private PermissionBeanLocal permissionBean;
//@EJB
//private VipFacade vipFacade;
@Override @Override
@RolesAllowed({VipPermission.S_VIEW}) public Vip find(Integer id) {
public List<Vip> getAvailableVips() { return vipFacade.find(id);
return eventBean.getCurrentEvent().getVips(); }
}
} }
package fi.codecrew.moya.facade; package fi.codecrew.moya.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Vip; import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.Vip_;
@Stateless
@LocalBean
public class VipFacade extends IntegerPkGenericFacade<Vip> { public class VipFacade extends IntegerPkGenericFacade<Vip> {
public VipFacade() { public VipFacade() {
super(Vip.class); super(Vip.class);
} }
@EJB
private EventBeanLocal eventBean;
public List<Vip> findForEvent() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Vip> cq = cb.createQuery(Vip.class);
Root<Vip> root = cq.from(Vip.class);
LanEvent event = eventBean.getCurrentEvent();
cq.where(cb.equal(root.get(Vip_.event), event));
return getEm().createQuery(cq).getResultList();
}
} }
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{vipView.initCreate}" />
</f:metadata>
<ui:define name="content">
<h:form id="vipcreate">
<h:panelGrid columns="2">
<h:outputLabel for="hostselect" />
<p:autoComplete label="#{i18n['vip.host']}" id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
</h:panelGrid>
<p:inputTextarea cols="50" rows="3" value="#{vipView.vip.description}" />
<br />
<p:inputTextarea cols="50" rows="6" value="#{vipView.vip.description}" />
<br />
<p:commandButton action="#{vipView.create()}" value="#{i18n['vip.create']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{vipView.initEdit}" />
<f:viewParam name="id" value="#{vipView.id}" />
</f:metadata>
<ui:define name="content">
<h:form id="vipcreate">
<h:panelGrid columns="2">
<h:outputLabel for="hostselect" />
<p:autoComplete label="#{i18n['vip.host']}" id="hostselect" value="#{vipView.vip.host}" completeMethod="#{vipView.usersearch}" converter="#{eventUserConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.wholeName}" />
</h:panelGrid>
<p:inputTextarea cols="50" rows="3" value="#{vipView.vip.description}" />
<br />
<p:inputTextarea cols="50" rows="6" value="#{vipView.vip.description}" />
<br />
<p:commandButton action="#{vipView.create()}" value="#{i18n['vip.save']}" />
<p:dataTable var="prod" value="#{vipView.vipProducts}">
<p:ajax event="rowEdit" listener="#{vipView.productRowEdit}" />
<p:ajax event="rowEditCancel" listener="#{vipView.productRowEditCancel}" />
<p:column>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{prod.productName}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{prod.name}" />
<br />
<p:selectOneMenu value="#{prod.product}" var="p" converter="#{productConverter}">
<f:selectItem itemLabel="---" itemValue="0" />
<f:selectItems value="#{vipView.eventProducts}" itemValue="#{p.name}" />
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{prod.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="3" />
</h:outputText>
</f:facet>
<f:facet name="input">
<h:outputText value="#{prod.quantity}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:32px">
<p:rowEditor />
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body> <h:body>
<ui:composition template="#{sessionHandler.template}"> <ui:composition template="#{sessionHandler.template}">
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{vipListView.initView}"/> <f:event type="preRenderView" listener="#{vipListView.initView}" />
</f:metadata> </f:metadata>
<ui:define name="content">
<h:dataTable id="reader" value="#{vipListView.vips}" var="vip">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['vip.description']}"/>
</f:facet>
<h:outputText value="#{vip.description}"/>
</h:column>
<h:column>
<h:link outcome="/vip/vipuse" value="#{i18n['vip.use']}">
<f:param value="#{vip.id}" name="vipId"/>
</h:link>
</h:column>
<h:column>
<h:link outcome="/vip/vipedit" value="#{i18n['vip.edit']}">
<f:param value="#{vip.id}" name="vipId"/>
</h:link>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition> <ui:define name="content">
<h:form>
<p:dataTable id="vip" value="#{vipListView.viplist}" widgetVar="viplist" styleClass="moya_datatable4" var="vip" filteredValue="#{vipListView.filteredVips}">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields:" />
<p:inputText id="globalFilter" onkeyup="PF('viplist').filter()" style="width:150px" placeholder="Enter keyword" />
</p:outputPanel>
</f:facet>
<p:column headerText="#{i18n['vip.hostsName']}" filterBy="#{vip.host.wholeName}" filterMatchMode="contains">
<h:outputText value="#{vip.host.wholeName}" />
</p:column>
<p:column headerText="#{i18n['vip.description']}" filterBy="#{vip.description}" filterMatchMode="contains">
<h:outputText value="#{vip.shortDisplayDescr}" title="#{vip.description}" />
</p:column>
<p:column headerText="#{i18n['vip.products']} | #{i18n['vip.productQuantity']} | #{i18n['vip.productDelivered']}">
<h:dataTable border="0" var="prod" value="#{vip.products}" >
<p:column>
<h:outputText title="#{prod.notes}" value="#{prod.productName}" />
</p:column>
<p:column>
<h:outputText value="#{prod.quantity}">
<f:convertNumber maxFractionDigits="3" minFractionDigits="0" />
</h:outputText>
</p:column>
<p:column>
<h:outputText value="#{prod.delivered}">
<f:convertNumber maxFractionDigits="3" minFractionDigits="0" />
</h:outputText>
</p:column>
</h:dataTable>
</p:column>
<p:column>
<h:link outcome="/vip/edit" value="#{i18n['vip.edit']}">
<f:param name="id" value="#{vip.id}" />
</h:link>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body> </h:body>
</html> </html>
\ No newline at end of file
package fi.codecrew.moya.web.cdiview.vip; package fi.codecrew.moya.web.cdiview.vip;
import fi.codecrew.moya.beans.VipBeanLocal; import java.util.List;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.web.cdiview.PaginationView;
/** /**
* Created by jkj on 2015-01-11. * Created by jkj on 2015-01-11.
*/ */
public class VipListView extends GenericCDIView { @Named
@ConversationScoped
public class VipListView extends PaginationView<Vip> {
private static final long serialVersionUID = 4508923404658416898L;
@EJB
private VipBeanLocal vipBean;
private ListDataModel<Vip> viplist;
private List<Vip> filteredVips;
public void initView() {
if (super.requirePermissions(VipPermission.VIEW) && viplist == null) {
viplist = new ListDataModel<Vip>(vipBean.getAvailableVips());
super.beginConversation();
}
}
public ListDataModel<Vip> getViplist() {
return viplist;
}
@EJB public void setViplist(ListDataModel<Vip> viplist) {
VipBeanLocal vipBean; this.viplist = viplist;
}
protected ListDataModel<Vip> vipListDataModel; public List<Vip> getFilteredVips() {
return filteredVips;
}
public void initView() { public void setFilteredVips(List<Vip> filteredVips) {
if (super.requirePermissions(VipPermission.VIEW)) { this.filteredVips = filteredVips;
vipListDataModel = new ListDataModel<Vip>(vipBean.getAvailableVips()); }
super.beginConversation();
}
}
public ListDataModel<Vip> getVips() {
return vipListDataModel;
}
} }
package fi.codecrew.moya.web.cdiview.vip;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.ProductBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.beans.VipBeanLocal;
import fi.codecrew.moya.enums.apps.VipPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.VipProduct;
import fi.codecrew.moya.util.UserSearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
/**
* Created by jkj on 2015-01-11.
*/
@Named
@ConversationScoped
public class VipView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 1L;
@EJB
private VipBeanLocal vipBean;
private Vip vip;
private Integer id;
@EJB
private UserBeanLocal userbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private ProductBeanLocal productBean;
private static final Logger logger = LoggerFactory.getLogger(VipView.class);
public void initEdit() {
if (super.requirePermissions(VipPermission.VIEW) && vip == null) {
vip = vipBean.find(id);
super.beginConversation();
}
}
public List<Product> getEventProducts() {
return productBean.getProducts();
}
private ListDataModel<VipProduct> vipProducts;
public ListDataModel<VipProduct> getVipProducts() {
if (vipProducts == null && vip != null) {
vipProducts = new ListDataModel<>(vip.getProducts());
}
return vipProducts;
}
public void initCreate() {
if (super.requirePermissions(VipPermission.VIEW) && vip == null) {
vip = new Vip();
vip.setHost(permbean.getCurrentUser());
super.beginConversation();
}
}
public void productRowEdit() {
logger.warn("Editing product: {}", getVipProducts().getRowData());
}
public void productRowEditCancel() {
logger.warn("Editing product cancelled: {}", getVipProducts().getRowData());
}
public List<EventUser> usersearch(String search) {
UserSearchQuery usq = new UserSearchQuery();
usq.setSearch(search);
SearchResult<EventUser> ret = userbean.getThisEventsUsers(usq);
return ret.getResults();
}
public String create()
{
vipBean.create(vip);
return "/vip/edit?faces-redirect=true";
}
public Vip getVip() {
return vip;
}
public void setVip(Vip vip) {
this.vip = vip;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!