From 0feed84b79a373fefbfc3a2f14034d5d43023eae Mon Sep 17 00:00:00 2001 From: "Barbara B. Frosik" <bfrosik@aps.anl.gov> Date: Tue, 4 Nov 2014 21:12:18 +0000 Subject: [PATCH] Fixed resources --- .../anl/aps/dm/portal/constants/DmStatus.java | 1 + .../controllers/ExperimentController.java | 130 ++++++++++++++++++ .../dm/portal/exceptions/IncorrectDate.java | 61 ++++++++ .../portal/model/beans/ExperimentFacade.java | 16 +++ .../dm/portal/model/entities/Experiment.java | 16 ++- .../DmWebPortal/src/java/resources.properties | 2 + .../resources/js/experiment/list.filter.js | 6 + .../templates/contentViewTemplate4x3.xhtml | 1 + .../web/views/experiment/create.xhtml | 30 ++++ .../web/views/experiment/edit.xhtml | 33 +++++ .../experimentCreatePanelGrid.xhtml | 44 ++++++ .../experiment/experimentDestroyDialog.xhtml | 15 ++ .../experiment/experimentEditPanelGrid.xhtml | 46 +++++++ .../experiment/experimentListDataTable.xhtml | 68 +++++++++ .../experiment/experimentViewPanelGrid.xhtml | 41 ++++++ .../web/views/experiment/list.xhtml | 31 +++++ .../web/views/experiment/view.xhtml | 42 ++++++ 17 files changed, 581 insertions(+), 2 deletions(-) create mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java create mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java create mode 100644 src/java/DmWebPortal/web/resources/js/experiment/list.filter.js create mode 100644 src/java/DmWebPortal/web/views/experiment/create.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/edit.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/experimentCreatePanelGrid.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/experimentDestroyDialog.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/experimentEditPanelGrid.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/list.xhtml create mode 100644 src/java/DmWebPortal/web/views/experiment/view.xhtml diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java index 5f6e205b..5722ffea 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java @@ -14,4 +14,5 @@ public class DmStatus public static final int DM_INVALID_OBJECT_STATE = 5; public static final int DM_OBJECT_ALREADY_EXISTS = 6; public static final int DM_OBJECT_NOT_FOUND = 7; + public static final int DM_INVALID_DATES = 8; } \ No newline at end of file diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java new file mode 100644 index 00000000..d5fa1945 --- /dev/null +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java @@ -0,0 +1,130 @@ +package gov.anl.aps.dm.portal.controllers; + +import gov.anl.aps.dm.portal.exceptions.DmPortalException; +import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists; +import gov.anl.aps.dm.portal.exceptions.IncorrectDate; +import gov.anl.aps.dm.portal.model.entities.Experiment; +import gov.anl.aps.dm.portal.model.beans.ExperimentFacade; +import java.util.List; + +import javax.ejb.EJB; +import javax.inject.Named; +import javax.enterprise.context.SessionScoped; +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.convert.Converter; +import javax.faces.convert.FacesConverter; +import org.apache.log4j.Logger; + +@Named("experimentController") +@SessionScoped +public class ExperimentController extends CrudEntityController<Experiment, ExperimentFacade> +{ + + private static final Logger logger = Logger.getLogger(ExperimentController.class.getName()); + + @EJB + private ExperimentFacade experimentFacade; + + public ExperimentController() { + } + + @Override + protected ExperimentFacade getFacade() { + return experimentFacade; + } + + @Override + protected Experiment createEntityInstance() { + return new Experiment(); + } + + @Override + public String getEntityTypeName() { + return "experiment"; + } + + @Override + public String getCurrentEntityInstanceName() { + if (getCurrent() != null) { + return getCurrent().getName(); + } + return ""; + } + + @Override + public List<Experiment> getAvailableItems() { + return super.getAvailableItems(); + } + + @Override + public String prepareEdit(Experiment experiment) { + return super.prepareEdit(experiment); + } + + @Override + public void prepareEntityInsert(Experiment experiment) throws ObjectAlreadyExists, IncorrectDate { + Experiment existingExperiment = experimentFacade.findByName(experiment.getName()); + if (existingExperiment != null) { + throw new ObjectAlreadyExists("Experiment " + experiment.getName() + " already exists."); + } + + if ((experiment.getStartDate() != null) && (experiment.getEndDate() != null) && (experiment.getEndDate().before(experiment.getStartDate()))) { + throw new IncorrectDate("Experiment end date is before start date."); + } + + logger.debug("Inserting new experiment " + experiment.getName()); + } + + @Override + public void prepareEntityUpdate(Experiment experiment) throws DmPortalException { + super.prepareEntityUpdate(experiment); + if ((experiment.getStartDate() != null) && (experiment.getEndDate() != null) && (experiment.getEndDate().before(experiment.getStartDate()))) { + throw new IncorrectDate("Experiment end date is before start date."); + } + } + + + @FacesConverter(forClass = Experiment.class) + public static class ExperimentControllerConverter implements Converter + { + + @Override + public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { + if (value == null || value.length() == 0) { + return null; + } + ExperimentController controller = (ExperimentController) facesContext.getApplication().getELResolver(). + getValue(facesContext.getELContext(), null, "experimentController"); + return controller.getEntity(getKey(value)); + } + + java.lang.Integer getKey(String value) { + java.lang.Integer key; + key = Integer.valueOf(value); + return key; + } + + String getStringKey(java.lang.Integer value) { + StringBuilder sb = new StringBuilder(); + sb.append(value); + return sb.toString(); + } + + @Override + public String getAsString(FacesContext facesContext, UIComponent component, Object object) { + if (object == null) { + return null; + } + if (object instanceof Experiment) { + Experiment o = (Experiment) object; + return getStringKey(o.getId()); + } + else { + throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Experiment.class.getName()); + } + } + + } + +} \ No newline at end of file diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java new file mode 100644 index 00000000..1b1f1a4b --- /dev/null +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java @@ -0,0 +1,61 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package gov.anl.aps.dm.portal.exceptions; + + +import gov.anl.aps.dm.portal.constants.DmStatus; + +/** + * Object already exists exception class. + */ +public class IncorrectDate extends DmPortalException +{ + + /** + * Constructor. + */ + public IncorrectDate() + { + super(); + setErrorCode(DmStatus.DM_INVALID_DATES); + } + + /** + * Constructor. + * + * @param message Error message + */ + public IncorrectDate(String message) + { + super(message); + setErrorCode(DmStatus.DM_INVALID_DATES); + } + + /** + * Constructor. + * + * @param throwable Throwable object + */ + public IncorrectDate(Throwable throwable) + { + super(throwable); + setErrorCode(DmStatus.DM_INVALID_DATES); + } + + /** + * Constructor. + * + * @param message Error message + * @param throwable Throwable object + */ + public IncorrectDate(String message, Throwable throwable) + { + super(message, throwable); + setErrorCode(DmStatus.DM_INVALID_DATES); + } + +} \ No newline at end of file diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java index d292111b..ebf51d3f 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java @@ -9,6 +9,7 @@ package gov.anl.aps.dm.portal.model.beans; import gov.anl.aps.dm.portal.model.entities.Experiment; import javax.ejb.Stateless; import javax.persistence.EntityManager; +import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; /** @@ -30,4 +31,19 @@ public class ExperimentFacade extends AbstractFacade<Experiment> super(Experiment.class); } + public Experiment findByName(String name) { + try { + return (Experiment) em.createNamedQuery("Experiment.findByName") + .setParameter("name", name) + .getSingleResult(); + } + catch (NoResultException ex) { + } + return null; + } + + public boolean checkIfNameExists(String name) { + return findByName(name) != null; + } + } diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java index d22df348..0285c5d6 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java @@ -118,7 +118,13 @@ public class Experiment extends CloneableEntity this.startDate = startDate; } - public Date getEndDate() { +// public void setStartDate(String startDate) { +// Date sDate = new Date(); +// +// setStartDate(sDate); +// } + + public Date getEndDate() { return endDate; } @@ -126,6 +132,12 @@ public class Experiment extends CloneableEntity this.endDate = endDate; } +// public void setEndDate(String endDate) { +// Date eDate = new Date(); +// +// setEndDate(eDate); +// } + @XmlTransient public List<DataFolder> getDataFolderList() { return dataFolderList; @@ -161,7 +173,7 @@ public class Experiment extends CloneableEntity this.experimentType = experimentType; } - @Override + @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); diff --git a/src/java/DmWebPortal/src/java/resources.properties b/src/java/DmWebPortal/src/java/resources.properties index e33fd814..01b751cd 100644 --- a/src/java/DmWebPortal/src/java/resources.properties +++ b/src/java/DmWebPortal/src/java/resources.properties @@ -1,3 +1,5 @@ +DatePattern=MM-dd-yyy + PersistenceErrorOccured=A persistence error occurred. Previous=Previous Next=Next diff --git a/src/java/DmWebPortal/web/resources/js/experiment/list.filter.js b/src/java/DmWebPortal/web/resources/js/experiment/list.filter.js new file mode 100644 index 00000000..0cb3f029 --- /dev/null +++ b/src/java/DmWebPortal/web/resources/js/experiment/list.filter.js @@ -0,0 +1,6 @@ + +jQuery(document).ready(function() { + PF('experimentListWidget').filter(); +}); + + diff --git a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml index 5ae9816d..b90a1633 100644 --- a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml +++ b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml @@ -59,6 +59,7 @@ <p:menuitem value="Experiment Types" url="/views/experimentType/list.xhtml"/> <p:menuitem value="Role Types" url="/views/roleType/list.xhtml"/> <p:menuitem value="Users" url="/views/userInfo/list.xhtml"/> + <p:menuitem value="Experiments" url="/views/experiment/list.xhtml"/> <p:menuitem value="Login" onclick="PF('loginDialog').show();" rendered="#{!loginController.loggedIn}" icon="ui-icon-person"/> <p:menuitem value="Logout" action="#{loginController.logout()}" rendered="#{loginController.loggedIn}" icon="ui-icon-close"/> </p:menubar> </h:form> diff --git a/src/java/DmWebPortal/web/views/experiment/create.xhtml b/src/java/DmWebPortal/web/views/experiment/create.xhtml new file mode 100644 index 00000000..f9a48d18 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/create.xhtml @@ -0,0 +1,30 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" + template="../../templates/contentViewTemplate4x3.xhtml"> + + <ui:define name="middleCenter"> + <div class="pageTitle"> + <h1>Add Experiment</h1> + </div> + + <h:form id="addExperimentForm"> + + <ui:include src="experimentCreatePanelGrid.xhtml"/> + + <p/> + <div class="actionButton"> + <p:commandButton action="#{experimentController.create()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/> + <p:commandButton action="#{experimentController.prepareList()}" immediate="true" value="Cancel" alt="Cancel" icon="ui-icon-cancel"/> + </div> + </h:form> + + </ui:define> +</ui:composition> + + diff --git a/src/java/DmWebPortal/web/views/experiment/edit.xhtml b/src/java/DmWebPortal/web/views/experiment/edit.xhtml new file mode 100644 index 00000000..63a6f528 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/edit.xhtml @@ -0,0 +1,33 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" + template="../../templates/contentViewTemplate4x3.xhtml"> + + <ui:define name="middleCenter"> + <h:form id="editExperimentForm"> + + <div class="middleCenterLeftContent"> + <div class="pageTitle"> + <h1>Edit Experiment</h1> + </div> + + <ui:include src="experimentEditPanelGrid.xhtml"/> + <p/> + <div class="actionButton"> + <p:commandButton action="#{experimentController.update()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/> +<!-- <p:commandButton action="list.xhtml?faces-redirect=true" immediate="true" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/>--> + <p:commandButton action="#{experimentController.prepareList()}" immediate="true" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/> + </div> + </div> + + </h:form> + + </ui:define> +</ui:composition> + + diff --git a/src/java/DmWebPortal/web/views/experiment/experimentCreatePanelGrid.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentCreatePanelGrid.xhtml new file mode 100644 index 00000000..7bb29ad0 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentCreatePanelGrid.xhtml @@ -0,0 +1,44 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:p="http://primefaces.org/ui" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> + + <c:set var="experimentObject" value="#{experimentController.selected}"/> + + <p:panelGrid columns="3" styleClass="createEntityDetails"> + + <h:outputLabel for="name" value="Name" styleClass="entityDataEmphasizedLabel"/> + <h:inputText id="name" value="#{experimentObject.name}" title="Name" required="true" styleClass="entityDataEmphasizedText"/> + <p:message for="name"/> + + <h:outputLabel for="experimentType" value="Experiment Type" styleClass="entityDataLabel"/> + <p:selectOneMenu id="experimentType" value="#{experimentObject.experimentType}" styleClass="entityDataText"> + <f:selectItem itemLabel="Select Type" itemValue="" noSelectionOption="true" /> + <f:selectItems value="#{experimentTypeController.getAvailableItems()}" + var="n" + itemValue="#{n}" + itemLabel="#{n.name}"/> + </p:selectOneMenu> + <p:message for="experimentType"/> + + <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/> + <h:inputText id="description" value="#{experimentObject.description}" title="Description" styleClass="entityDataText"/> + <p:message for="description"/> + + <h:outputLabel for="startDate" value="Start Date" styleClass="entityDataLabel"/> + <p:calendar id="startDate" value="#{experimentObject.startDate}" /> + <p:message for="startDate"/> + + <h:outputLabel for="endDate" value="End Date" styleClass="entityDataLabel"/> + <p:calendar id="endDate" value="#{experimentObject.endDate}" /> + <p:message for="endDate"/> + + </p:panelGrid> + +</ui:composition> + + diff --git a/src/java/DmWebPortal/web/views/experiment/experimentDestroyDialog.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentDestroyDialog.xhtml new file mode 100644 index 00000000..1f8af3d4 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentDestroyDialog.xhtml @@ -0,0 +1,15 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:p="http://primefaces.org/ui" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> + + <p:confirmDialog id="experimentDestroyDialog" message="Destroy experiment #{experimentController.getCurrentEntityInstanceName()}?" + header="Destroy Experiment" severity="alert" widgetVar="experimentDestroyDialogWidget" + styleClass="dialog"> + <p:commandButton value="Yes" oncomplete="experimentDestroyDialogWidget.hide()" action="#{experimentController.destroy()}"/> + <p:commandButton value="No" onclick="PF('experimentDestroyDialogWidget').hide()" type="button" /> + </p:confirmDialog> +</ui:composition> + + diff --git a/src/java/DmWebPortal/web/views/experiment/experimentEditPanelGrid.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentEditPanelGrid.xhtml new file mode 100644 index 00000000..7163ffcd --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentEditPanelGrid.xhtml @@ -0,0 +1,46 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" + xmlns:f="http://xmlns.jcp.org/jsf/core"> + + <c:set var="experimentObject" value="#{experimentController.selected}"/> + <c:set var="isFieldWriteable" value="#{loginController.loggedIn}"/> + + <p:panelGrid columns="3" styleClass="editEntityDetails"> + + <h:outputLabel for="name" value="Name" styleClass="entityDataEmphasizedLabel"/> + <h:inputText id="name" value="#{experimentObject.name}" title="Name" required="true" styleClass="entityDataEmphasizedText"/> + <p:message for="name"/> + + <h:outputLabel for="id" value="Id" styleClass="entityDataLabel"/> + <h:outputText id="id" value="#{experimentObject.id}" title="Id" styleClass="entityDataText"/> + <p:message for="id"/> + + <h:outputLabel for="experimentType" value="Experiment Type" styleClass="entityDataLabel"/> + <p:selectOneMenu id="experimentType" value="#{experimentObject.experimentType}" styleClass="entityDataText"> + <f:selectItem itemLabel="Select Type" itemValue="" noSelectionOption="true" /> + <f:selectItems value="#{experimentTypeController.getAvailableItems()}" + var="n" + itemValue="#{n}" + itemLabel="#{n.name}"/> + </p:selectOneMenu> + <p:message for="experimentType"/> + + <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/> + <h:inputText id="description" value="#{experimentObject.description}" title="Description" styleClass="entityDataText"/> + <p:message for="description"/> + + <h:outputLabel for="startDate" value="Start Date" styleClass="entityDataLabel"/> + <p:calendar id="startDate" value="#{experimentObject.startDate}" /> + <p:message for="startDate"/> + + <h:outputLabel for="endDate" value="End Date" styleClass="entityDataLabel"/> + <p:calendar id="endDate" value="#{experimentObject.endDate}" /> + <p:message for="endDate"/> + + </p:panelGrid> +</ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml new file mode 100644 index 00000000..940327f3 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml @@ -0,0 +1,68 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> + + <p:dataTable id="experimentListDataTable" + var="experimentObject" + value="#{experimentController.listDataModel}" + filteredValue="#{experimentController.filteredObjectList}" + paginator="true" + paginatorAlwaysVisible="false" + rows="25" + binding="#{experimentController.listDataTable}" + widgetVar="experimentListWidget" + emptyMessage="No experiments found."> + + <p:column sortBy="#{experimentObject.id}" headerText="Id" width="40"> + <h:outputText value="#{experimentObject.id}"/> + </p:column> + + <p:column sortBy="#{experimentObject.name}" headerText="Name" + filterBy="#{experimentObject.name}" filterMatchMode="contains" width="120"> + <h:outputText value="#{experimentObject.name}"/> + </p:column> + + <p:column sortBy="#{experimentObject.experimentType.name}" headerText="Type" + filterBy="#{experimentObject.experimentType.name}" filterMatchMode="contains" width="120"> + <h:outputText value="#{experimentObject.experimentType.name}"/> + </p:column> + + <p:column sortBy="#{experimentObject.description}" headerText="Description" + filterBy="#{experimentObject.description}" filterMatchMode="contains"> + <h:outputText value="#{experimentObject.description}"/> + </p:column> + + <p:column sortBy="#{experimentObject.startDate}" headerText="Start Date" + filterBy="#{experimentObject.startDate}" filterMatchMode="contains" width="120"> + + <h:outputText value="#{experimentObject.startDate}"> + <f:convertDateTime pattern="#{resources.DatePattern}" type="date" /> + </h:outputText> + </p:column> + + <p:column sortBy="#{experimentObject.endDate}" headerText="End Date" + filterBy="#{experimentObject.endDate}" filterMatchMode="contains" width="120"> + + <h:outputText value="#{experimentObject.endDate}"> + <f:convertDateTime pattern="#{resources.DatePattern}" type="date" /> + </h:outputText> + </p:column> + + <c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/> + <p:column headerText="Actions" width="70"> + <div class="actionLink"> + <p:commandLink action="#{experimentController.prepareView(experimentObject)}" styleClass="ui-icon ui-icon-info" title="View"/> + <p:commandLink action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{isEntityWriteable}" styleClass="ui-icon ui-icon-pencil" title="Edit"/> + <p:commandLink oncomplete="PF('experimentDestroyDialogWidget').show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form"> + <f:setPropertyActionListener value="#{experimentObject}" target="#{experimentController.current}"/> + </p:commandLink> + </div> + </p:column> + </p:dataTable> + +</ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml new file mode 100644 index 00000000..a8561042 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml @@ -0,0 +1,41 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" + xmlns:f="http://xmlns.jcp.org/jsf/core"> + + <c:set var="experimentObject" value="#{experimentController.selected}"/> + + <p:panelGrid columns="2" styleClass="viewEntityDetails"> + + <h:outputLabel for="name" value="Name" styleClass="entityDataEmphasizedLabel"/> + <h:outputText id="name" value="#{experimentObject.name}" title="Name" styleClass="entityDataEmphasizedText"/> + + <h:outputLabel for="id" value="Id" styleClass="entityDataLabel"/> + <h:outputText id="id" value="#{experimentObject.id}" title="Id" styleClass="entityDataText"/> + + <h:outputLabel for="experimentType" value="Type" styleClass="entityDataLabel"/> + <h:outputText id="experimentType" value="#{experimentObject.experimentType.name}" title="Name" styleClass="entityDataText"/> + + <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/> + <h:outputText id="description" value="#{experimentObject.description}" title="Description" styleClass="entityDataText"/> + + <h:outputLabel for="startDate" value="Start Date" styleClass="entityDataLabel"/> + <h:outputText id="startDate" value="#{experimentObject.startDate}" styleClass="entityDataText"> + <f:convertDateTime pattern="#{resources.DatePattern}" type="date" /> + </h:outputText> + + + <h:outputLabel for="endDate" value="End Date" styleClass="entityDataLabel"/> + <h:outputText id="endDate" value="#{experimentObject.endDate}" styleClass="entityDataText"> + <f:convertDateTime pattern="#{resources.DatePattern}" type="date" /> + </h:outputText> + + </p:panelGrid> + +</ui:composition> + + diff --git a/src/java/DmWebPortal/web/views/experiment/list.xhtml b/src/java/DmWebPortal/web/views/experiment/list.xhtml new file mode 100644 index 00000000..21d4a729 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/list.xhtml @@ -0,0 +1,31 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" + template="../../templates/contentViewTemplate4x3.xhtml"> + + <ui:define name="middleCenter"> + <div class="pageTitle"> + <h1>Experiments</h1> + </div> + + <h:form id="viewExperimentListForm"> + <c:set var="entityController" value="#{experimentController}"/> + <ui:include src="../common/commonListActionButtons.xhtml"/> + + <h:panelGroup> + <ui:include src="experimentListDataTable.xhtml"/> + </h:panelGroup> + + <ui:include src="experimentDestroyDialog.xhtml"/> + + <h:outputScript library="js/experiment" name="list.filter.js" rendered="#{loginController.loggedIn}"/> + + </h:form> + + </ui:define> +</ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/view.xhtml b/src/java/DmWebPortal/web/views/experiment/view.xhtml new file mode 100644 index 00000000..b521d96c --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/view.xhtml @@ -0,0 +1,42 @@ +<?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"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" + template="../../templates/contentViewTemplate4x3.xhtml"> + + <ui:define name="middleCenter"> + <h:form id="viewExperimentForm"> + + <div class="middleCenterLeftContent"> + <div class="pageTitle"> + <h1>Experiment Details</h1> + </div> + + <ui:include src="experimentViewPanelGrid.xhtml"/> + + <p/> + <c:set var="experimentObject" value="#{experimentController.selected}"/> + <c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/> + <div class="actionButton"> + <p:commandButton action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{isEntityWriteable}" value="Edit" alt="Edit" icon="ui-icon-pencil"/> + <p:commandButton onclick="PF('experimentDestroyDialogWidget').show();" rendered="#{loginController.loggedIn}" value="Delete" alt="Delete" icon="ui-icon-trash"> + <f:setPropertyActionListener value="#{experimentObject}" target="#{experimentController.current}"/> + </p:commandButton> + <p:commandButton action="#{experimentController.prepareList()}" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/> + </div> + + <ui:include src="experimentDestroyDialog.xhtml"/> + + </div> + + </h:form> + + </ui:define> + +</ui:composition> + + -- GitLab