КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Тестирование графика сравнения категорий по сумме финансовых операций 2 страница@Named @ViewScoped public class DiaryPayBacking extends GridBacking<Pay> {
private static final long serialVersionUID = -3370333139341916306L;
@Inject private DateBacking dateBacking;
@Inject private ActionByDateService actionByDateService;
@Inject private PayByDateService payByDateService;
@Override protected Class<Pay> getType() { return Pay.class; }
@Override protected Pay getNewBlank() { Pay pay = new Pay(); pay.setDate(dateBacking.getDate()); return pay; }
@Override public Collection<Pay> getList() { return payByDateService.getList(dateBacking.getDate()); }
public double getBalance() { return actionByDateService.getList(dateBacking.getDate()).stream().mapToDouble(task -> task.getBalance()).sum(); } } DiaryRepayBacking.java package ru.ulstu.secretary.grid;
import java.util.Collection;
import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named;
import ru.ulstu.secretary.db.RepayByDateService; import ru.ulstu.secretary.entity.Repay;
@Named @ViewScoped public class DiaryRepayBacking extends GridBacking<Repay> {
private static final long serialVersionUID = 8966176107954231754L;
@Inject private DateBacking dateBacking;
@Inject private RepayByDateService repayByDateService;
@Override protected Class<Repay> getType() { return Repay.class; }
public Collection<Repay> getList() { return repayByDateService.getList(dateBacking.getDate()); } } GridBacking.java package ru.ulstu.secretary.grid;
import java.io.Serializable; import java.util.Collection;
import javax.annotation.PostConstruct; import javax.inject.Inject;
import ru.ulstu.secretary.db.EntityService;
public abstract class GridBacking<Entity> implements Serializable {
private static final long serialVersionUID = -2639437488394357753L;
@Inject private EntityService entityService;
private Entity blank;
@PostConstruct private void init() throws Exception { blank = getNewBlank(); }
protected abstract Class<Entity> getType();
protected Entity getNewBlank() throws Exception { return getType().getConstructor().newInstance(); }
public Collection<Entity> getList() { return entityService.getList(getType()); }
public Entity getBlank() { return blank; }
public void save() throws Exception { entityService.save(blank); blank = getNewBlank(); }
public void remove(Entity obj) { entityService.remove(obj); } } PayBacking.java package ru.ulstu.secretary.grid;
import javax.faces.view.ViewScoped; import javax.inject.Named;
import ru.ulstu.secretary.entity.Pay; import static ru.ulstu.secretary.utils.DateUtil.getToday;
@Named @ViewScoped public class PayBacking extends GridBacking<Pay> {
private static final long serialVersionUID = -520158973748994729L;
@Override protected Class<Pay> getType() { return Pay.class; }
protected Pay getNewBlank() { Pay pay = new Pay(); pay.setDate(getToday()); return pay; }
public int getCount() { return getList().size(); }
public double getBalance() { return getList().stream().mapToDouble(pay -> pay.getBalance()).sum(); } } RepayBacking.java package ru.ulstu.secretary.grid;
import java.util.Collection;
import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named;
import ru.ulstu.secretary.entity.Repay;
@Named @ViewScoped public class RepayBacking extends GridBacking<Repay> {
private static final long serialVersionUID = -5042825198701507477L;
@Inject private DebtBacking debtBacking;
@Override protected Class<Repay> getType() { return Repay.class; }
@Override public Collection<Repay> getList() { return debtBacking.getDebt() == null? null: debtBacking.getDebt().getRepays(); } } TodayBacking.java package ru.ulstu.secretary.grid;
import java.io.Serializable;
import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named;
import ru.ulstu.secretary.db.TaskByDateService; import ru.ulstu.secretary.utils.DateUtil;
@Named @ViewScoped public class TodayBacking implements Serializable {
private static final long serialVersionUID = -6983619217861517215L;
@Inject private TaskByDateService taskByDateService;
public int getCount() { return taskByDateService.getList(DateUtil.getToday()).size(); } } DateUtil.java package ru.ulstu.secretary.utils;
import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar;
public class DateUtil {
public static Date getToday() { Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } } Balance.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">#{i18n.balance}</ui:define> <ui:define name="body"> <s:chart backing="#{balanceBacking}"/> </ui:define> </ui:composition> Category.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">#{i18n.category}</ui:define> <ui:define name="body"> <s:chart backing="#{categoryBalanceBacking}" hasPeriod="false"/> </ui:define> </ui:composition> Day.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">#{i18n.day}</ui:define> <ui:define name="body"> <s:chart backing="#{dayBacking}"/> </ui:define> </ui:composition> Debt.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">Debt</ui:define> <ui:define name="body"> <s:grid name="debt" backing="#{debtBacking}"/> <s:grid name="repay" backing="#{repayBacking}" editable="false"/> </ui:define> </ui:composition> Diary.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">#{i18n.diary}</ui:define> <ui:define name="body"> <div class="panel panel-info"> <div class="panel-heading"><span class="glyphicon glyphicon-calendar"/> #{i18n.date}</div> <div class="panel-body"> <div class="form-inline"> <h:inputText styleClass="form-control" value="#{dateBacking.date}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:inputText> <h:commandButton styleClass="btn btn-primary" value="#{i18n.see}"/> </div> </div> </div> <s:grid name="diary" backing="#{diaryPayBacking}"/> <s:grid name="repay" backing="#{diaryRepayBacking}" editable="false"/> <div class="panel panel-info"> <div class="panel-heading"><span class="glyphicon glyphicon-ok"/> #{i18n.total}</div> <div class="panel-body"> <p><strong>#{i18n.balance}</strong>: #{diaryPayBacking.balance}</p> </div> </div> </ui:define> </ui:composition> Pay.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">#{i18n.pay}</ui:define> <ui:define name="body"> <s:grid name="pay" backing="#{payBacking}"/> <div class="panel panel-info"> <div class="panel-heading"><span class="glyphicon glyphicon-ok"/> #{i18n.total}</div> <div class="panel-body"> <p><strong>#{i18n.count}</strong>: #{payBacking.count}</p> </div> </div> </ui:define> </ui:composition> Unpaid.xhtml <ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:s="http://java.sun.com/jsf/composite/secretary"> <ui:define name="title">#{i18n.unpaid}</ui:define> <ui:define name="body"> <s:chart backing="#{unpaidBacking}"/> </ui:define> </ui:composition> Chart.xhtml <html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core"> <c:interface> <c:attribute name="backing"/> <c:attribute name="hasPeriod" default="true"/> </c:interface> <c:implementation> <ui:fragment rendered="#{cc.attrs.hasPeriod}"> <div class="panel panel-info"> <div class="panel-heading"><span class="glyphicon glyphicon-calendar"/> #{i18n.date}</div> <div class="panel-body"> <div class="form-inline"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.from}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:inputText> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.to}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:inputText> <p:commandButton styleClass="btn btn-primary" ajax="none" value="#{i18n.see}"/> </div> </div> </div> </ui:fragment> <div class="panel panel-info" style="overflow: hidden"> <div class="panel-heading"><span class="glyphicon glyphicon-th-list"/> #{i18n.graphics}</div> <div class="panel-body"> <p:chart type="bar" model="#{cc.attrs.backing.model}"/> </div> </div> <div class="panel panel-info"> <div class="panel-heading"><span class="glyphicon glyphicon-ok"/> #{i18n.total}</div> <div class="panel-body"> <p><p:commandButton styleClass="btn btn-primary" action="#{cc.attrs.backing.redirect(cc.attrs.backing.min)}" value="#{i18n.see}"/> #{i18n.min}: #{cc.attrs.backing.minValue}</p> <p><p:commandButton styleClass="btn btn-primary" action="#{cc.attrs.backing.redirect(cc.attrs.backing.max)}" value="#{i18n.see}"/> #{i18n.max}: #{cc.attrs.backing.maxValue}</p> </div> </div> </c:implementation> </html> Grid.xhtml <html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core"> <c:interface> <c:attribute name="name"/> <c:attribute name="backing"/> <c:attribute name="icon" default="glyphicon glyphicon-th-list"/> <c:attribute name="editable" default="true"/> </c:interface> <c:implementation> <div class="panel panel-info"> <div class="panel-heading"><span class="#{cc.attrs.icon}"/> #{i18n[cc.attrs.name]}</div> <p:dataTable tableStyleClass="table" value="#{cc.attrs.backing.list}" var="obj"> <ui:include src="/WEB-INF/grid/#{cc.attrs.name}.xhtml"/> <p:column rendered="#{cc.attrs.editable}" style="width: 1%"> <p:commandButton style="display: inline-block" value="" ajax="none" icon="glyphicon glyphicon-remove" styleClass="btn btn-danger" action="#{cc.attrs.backing.remove(obj)}"/> <f:facet name="footer"> <p:commandButton style="display: inline-block" value="" ajax="none" icon="glyphicon glyphicon-plus" styleClass="btn btn-primary" action="#{cc.attrs.backing.save}"/> </f:facet> </p:column> </p:dataTable> </div> </c:implementation> </html> Debt.xhtml <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" xmlns:f="http://java.sun.com/jsf/core"> <ui:include src="/WEB-INF/grid/pay.xhtml"/> <p:column headerText="#{i18n.deadline}"> <h:outputText value="#{obj.deadline}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:outputText> <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.deadline}" a:placeholder="#{i18n.deadline}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:inputText> </f:facet> </p:column> <p:column headerText="#{i18n.repay}"> #{obj.repay} <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.repay}" a:placeholder="#{i18n.repay}"/>
</f:facet> </p:column> <p:column headerText="#{i18n.frequency}"> #{obj.frequency} <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.frequency}" a:placeholder="#{i18n.frequency}"/> </f:facet> </p:column> <p:column headerText="#{i18n.unit}"> #{i18n[obj.unit]} <f:facet name="footer"> <h:selectOneMenu styleClass="form-control" value="#{cc.attrs.backing.blank.unit}"> <f:selectItems value="#{unitService.list}" var="unit" itemLabel="#{i18n[unit]}"/> </h:selectOneMenu> </f:facet> </p:column> </ui:composition> Diary.xhtml <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" xmlns:f="http://java.sun.com/jsf/core"> <p:column headerText="#{i18n.balance}"> #{obj.balance} <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.balance}" a:placeholder="#{i18n.balance}"/> </f:facet> </p:column> <p:column headerText="#{i18n.category}"> #{i18n[obj.category]} <f:facet name="footer"> <h:selectOneMenu styleClass="form-control" value="#{cc.attrs.backing.blank.category}"> <f:selectItems value="#{categoryService.list}" var="category" itemLabel="#{i18n[category]}"/> </h:selectOneMenu> </f:facet> </p:column> <p:column headerText="#{i18n.comment}"> #{obj.comment} <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.comment}" a:placeholder="#{i18n.comment}"/> </f:facet> </p:column> </ui:composition> Pay.xhtml <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" xmlns:f="http://java.sun.com/jsf/core"> <p:column headerText="#{i18n.date}"> <h:outputText value="#{obj.date}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:outputText> <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.date}" a:placeholder="#{i18n.date}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:inputText> </f:facet> </p:column> <ui:include src="/WEB-INF/grid/diary.xhtml"/> </ui:composition> Repay.xhtml <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" xmlns:f="http://java.sun.com/jsf/core"> <p:column headerText="#{i18n.date}"> <h:outputText value="#{obj.date}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:outputText> <ui:fragment rendered="#{cc.attrs.editable}"> <f:facet name="footer"> <h:inputText styleClass="form-control" value="#{cc.attrs.backing.blank.date}" a:placeholder="#{i18n.date}"> <f:convertDateTime pattern="yyyy-MM-dd"/> </h:inputText> </f:facet> </ui:fragment> </p:column> <p:column headerText="#{i18n.balance}"> #{obj.balance} <ui:fragment rendered="#{cc.attrs.editable}"> <f:facet name="footer"> <h:inputText rendered="#{cc.attrs.editable}" styleClass="form-control" value="#{cc.attrs.backing.blank.balance}" a:placeholder="#{i18n.balance}"/> </f:facet> </ui:fragment> </p:column> </ui:composition> Base.xhtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>#{i18n.appTitle}</title> <h:outputScript library="bootstrap" name="js/bootstrap.min.js" /> <link rel="stylesheet" href="#{request.contextPath}/resources/bootstrap/css/bootstrap.min.css"/> </h:head> <h:body> <div class="container-fluid"> <div class="navbar navbar-default"> <ul class="nav navbar-nav"> <li> <h:link outcome="diary" style="#{todayBacking.count > 0? 'color: white; background: #E74C3C': ''}"> <span class="glyphicon glyphicon-exclamation-sign"/> #{todayBacking.count} </h:link> </li> <li><h:link outcome="pay"><span class="glyphicon glyphicon-book"/> #{i18n.pay}</h:link></li> <li><h:link outcome="debt"><span class="glyphicon glyphicon glyphicon-calendar"/> #{i18n.debt}</h:link></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-stats"/> #{i18n.graphics} <span class="caret"/></a> <ul class="dropdown-menu" role="menu"> <li><h:link outcome="balance">#{i18n.balance}</h:link></li> <li><h:link outcome="day">#{i18n.day}</h:link></li> <li><h:link outcome="unpaid">#{i18n.unpaid}</h:link></li> <li><h:link outcome="category">#{i18n.category}</h:link></li> </ul> </li> </ul> </div> <div class="page-header"> <h1><ui:insert name="title"/></h1> </div> <h:form> <p:messages/> <ui:insert name="body"/> </h:form> </div> </h:body> </html> Web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <context-param> <param-name>primefaces.THEME</param-name> <param-value>none</param-value> </context-param> <context-param> <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name> <param-value>true</param-value> </context-param> </web-app> Faces-config.xml <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> <application> <locale-config> <default-locale>en</default-locale> </locale-config> <resource-bundle> <base-name>ru.ulstu.secretary.i18n</base-name> <var>i18n</var> </resource-bundle> </application> </faces-config> Persistence.xml <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="secretaryPU" transaction-type="JTA"> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.schema-generation.database.action" value="create" /> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence> I18n.properties appTitle=Home Secretary
pay=Pay diary=Diary debt=Debt repay=Repay
grid=Data total=Total
date=Date balance=Sum category=Category comment=Comment action=Action delete=Delete complete=Complete count=Count graphics=Graphic day=Day deadline=Deadline required=Required frequency=Frequency unit=Unit year=Year month=Month week=Week unpaid=Unpaid
add=Add see=See
auto=Auto home=Home
min=Min max=Max Приложение 2. Скриншоты интерфейса Страница входа
Дата добавления: 2015-08-31; Просмотров: 307; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |