Skip to content
Snippets Groups Projects
Commit 021033fe authored by Barbara B. Frosik's avatar Barbara B. Frosik
Browse files

No commit message

No commit message
parent ce9987d5
No related branches found
No related tags found
No related merge requests found
Showing
with 298 additions and 149 deletions
......@@ -9,12 +9,12 @@ import gov.anl.aps.dm.portal.model.beans.ExperimentFacade;
import gov.anl.aps.dm.portal.model.beans.RoleTypeFacade;
import gov.anl.aps.dm.portal.model.beans.UserExperimentRoleFacade;
import gov.anl.aps.dm.portal.model.beans.UserInfoFacade;
import gov.anl.aps.dm.portal.model.entities.CloneableEntity;
import gov.anl.aps.dm.portal.model.entities.RoleType;
import gov.anl.aps.dm.portal.model.entities.UserExperimentRole;
import gov.anl.aps.dm.portal.model.entities.UserInfo;
import gov.anl.aps.dm.portal.model.tempstorage.ExperimentUser;
// import gov.anl.aps.dm.portal.model.tempstorage.ExperimentUser;
import gov.anl.aps.dm.portal.utilities.SessionUtility;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -48,6 +48,107 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
@EJB
private UserExperimentRoleFacade userExperimentRoleFacade;
public class ExperimentUser extends CloneableEntity {
String username;
String name;
int userId;
int experimentId;
private final boolean [] roles;
// private final boolean [] updatedRoles;
int maxRoleId = 4; // this is hardcoded, should be determined from the RoleType data table.
// for now leave it hardcoded
// Map<RoleType, Boolean> roles = new HashMap();
public ExperimentUser(int experimentId, int userId) {
roles = new boolean[maxRoleId+1];
// updatedRoles = new boolean[maxRoleId+1];
this.experimentId = experimentId;
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isIsManager() {
return roles[2];
}
public void setIsManager(boolean isManager) {
logger.debug("setting Manager role for experiment "+ experimentId + " and user " + username + " to " + isManager);
roles[2] = isManager;
}
public boolean isIsPI() {
return roles[3];
}
public void setIsPI(boolean isPI) {
roles[3] = isPI;
}
public boolean isIsUser() {
return roles[4];
}
public void setIsUser(boolean isUser) {
roles[4] = isUser;
}
public void setIsInRole(RoleType role, boolean isInRole) {
roles[role.getId()] = isInRole;
// updatedRoles[role.getId()] = isInRole;
}
public boolean[] getRoles() {
return roles;
}
public void removeAllExperimentRoles() {
UserExperimentRole userExperimentRole;
for (int i = 1; i <= maxRoleId; i++) {
if (roles[i]) {
userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, i);
userExperimentRoleFacade.remove(userExperimentRole);
// updatedRoles[i] = false;
}
}
}
public boolean canAddUsers() {
return roles[2] || roles[3];
}
@Override
public int hashCode() {
return userId * 1000 + experimentId;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof ExperimentUser)) {
return false;
}
return ((userId == ((ExperimentUser)object).userId) && (experimentId == ((ExperimentUser)object).experimentId));
}
}
class ExperimentUsersTable extends DataTableController<ExperimentUser> {
@Override
......@@ -67,16 +168,21 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
List<ExperimentUser> convertExperimentUsers(List<UserInfo> list) {
logger.debug("converring ExperimentUser ");
List<RoleType> roleTypes = roleTypeFacade.findByRoleSystemType(false);
generateColumns(roleTypes);
for (UserInfo user : list) {
ExperimentUser eUser = new ExperimentUser(getCurrent().getId(), user.getId());
eUser.setUsername(user.getUsername());
if (experimentUsers.containsKey(eUser)) {
eUser = experimentUsers.get(eUser);
} else {
experimentUsers.put(eUser, eUser);
}
eUser.setName(user.getLastName() + ", " + user.getFirstName());
for (RoleType roleType : roleTypes) {
eUser.setIsInRole(roleType, user.inRole(roleType.getId(), getCurrent().getId()));
boolean inRole = user.inRole(roleType.getId(), getCurrent().getId());
eUser.setIsInRole(roleType, inRole);
}
experimentUsers.put(eUser, eUser.getRoles());
}
return new ArrayList<>(experimentUsers.keySet());
}
......@@ -85,31 +191,11 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
public String getTableName() {
return "experimentUsersTable";
}
}
static public class ColumnModel implements Serializable {
private String header;
private int property;
public ColumnModel(String header, int property) {
this.header = header;
this.property = property;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public int getProperty() {
return property;
}
public void setProperty(int property) {
this.property = property;
@Override
public void resetList() {
// experimentUsers.clear();
super.resetList();
}
}
......@@ -135,8 +221,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
private ExperimentController.ExperimentUsersTable experimentUsersListTable;
private ExperimentController.ExperimentUsersTable experimentUsersEditTable;
private ExperimentController.NoExperimentUsersTypeTable noExperimentUsersTypeTable;
private List<ExperimentController.ColumnModel> columns = new ArrayList();
final private Map<ExperimentUser, boolean[]> experimentUsers = new HashMap<>();
final private Map<ExperimentUser, ExperimentUser> experimentUsers = new HashMap<>();
public ExperimentController() {
this.experimentUsersListTable = new ExperimentController.ExperimentUsersTable();
......@@ -214,6 +299,34 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
return "Experiment " + experiment.getName() + " already exists.";
}
@Override
public String update() {
// findUsersInExperiment(int experimentId)
for (ExperimentUser experimentUser: experimentUsers.keySet()) {
UserInfo userInfo = userInfoFacade.find(experimentUser.userId);
for (int i = 2; i <= 4; i++) {
UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(experimentUser.userId, experimentUser.experimentId, i);
if (experimentUser.roles[i] && (userExperimentRole == null)) {
userExperimentRole = new UserExperimentRole(experimentUser.userId, experimentUser.experimentId, i);
userExperimentRoleFacade.create(userExperimentRole);
// userInfo.addUserExperimentRole(userExperimentRole);
logger.debug("adding userExperimentRole " + experimentUser.userId + " " + experimentUser.experimentId + " " + i);
}
else if (!experimentUser.roles[i] && (userExperimentRole != null)) {
userExperimentRoleFacade.remove(userExperimentRole);
// userInfo.removeUserExperimentRole(userExperimentRole);
logger.debug("removing userExperimentRole " + experimentUser.userId + " " + experimentUser.experimentId + " " + i);
}
// experimentUser.roles[i] = experimentUser.updatedRoles[i];
}
}
// clear();
experimentUsersListTable.resetList();
experimentUsersEditTable.resetList();
return super.update();
}
private void verifyExperiment(Experiment experiment) throws InvalidDate, MissingProperty {
if (experiment.getExperimentType() == null) {
......@@ -226,20 +339,12 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
// the methods for Experiment User
public List<ExperimentController.ColumnModel> getColumns() {
return columns;
}
public void setColumns(List<ExperimentController.ColumnModel> columns) {
this.columns = columns;
}
public void clear() {
experimentUsersListTable.resetList();
experimentUsersEditTable.resetList();
experimentUsers.clear();
noExperimentUsersTypeTable.resetList();
columns.clear();
}
public ExperimentController.ExperimentUsersTable getExperimentUsersListTable() {
......@@ -265,13 +370,6 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
public void setNoExperimentUsersTypeTable(ExperimentController.NoExperimentUsersTypeTable noExperimentUsersTypeTable) {
this.noExperimentUsersTypeTable = noExperimentUsersTypeTable;
}
void generateColumns(List<RoleType> roleTypes) {
for (RoleType role : roleTypes) {
ExperimentController.ColumnModel column = new ExperimentController.ColumnModel(role.getName(), role.getId());
columns.add(column);
}
}
public boolean canAddUsers(String username) {
UserInfo user = userInfoFacade.findByUsername(username);
......@@ -291,13 +389,18 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
public String getRemovedUserName() {
return experimentUsersEditTable.getCurrentObject().getName();
if (experimentUsersEditTable.getCurrentObject() != null) {
return experimentUsersEditTable.getCurrentObject().getUsername();
}
return "";
}
public void removeUser() {
public String removeUser() {
ExperimentUser user = experimentUsersEditTable.getCurrentObject();
user.removeAllExperimentRoles();
experimentUsers.remove(user);
clear();
return "edit?faces-redirect=true";
}
public String addExperimentUser() {
......@@ -315,6 +418,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
userExperimentRole = new UserExperimentRole(user.getId(), current.getId(), 4); // set the User
userExperimentRoleFacade.create(userExperimentRole);
}
clear();
return edit();
} catch (RuntimeException ex) {
SessionUtility.addErrorMessage("Error", "Could not update UserInfo" + ": " + ex.getMessage());
......@@ -322,17 +426,17 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
}
}
// @Override
// public String update() {
// logger.debug("current name "+current.getName());
// logger.debug("current startDate "+current.getStartDate());
// logger.debug("current endDate "+current.getEndDate());
// String s = super.update();
// logger.debug("redirecting to " + s);
// return s;
// }
public boolean hasSystemRole(String user) {
RoleType rt;
rt = roleTypeFacade.findById(1);
if (rt == null) {
return false;
}
return rt.isAdmin(user);
}
@FacesConverter(forClass = Experiment.class)
public static class ExperimentControllerConverter implements Converter
{
......
......@@ -7,7 +7,6 @@
package gov.anl.aps.dm.portal.model.beans;
import gov.anl.aps.dm.portal.model.entities.UserExperimentRole;
import gov.anl.aps.dm.portal.model.entities.UserInfo;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
......@@ -37,7 +36,7 @@ public class UserExperimentRoleFacade extends AbstractFacade<UserExperimentRole>
return (UserExperimentRole) em.createNamedQuery("UserExperimentRole.findByUserExperimentRole")
.setParameter("userId", userId)
.setParameter("experimentId", experimentId)
.setParameter(roleId, roleId)
.setParameter("roleTypeId", roleId)
.getSingleResult();
}
catch (NoResultException ex) {
......
......@@ -201,6 +201,18 @@ public class UserInfo extends CloneableEntity
}
return false;
}
public void addUserExperimentRole(UserExperimentRole experimentRole) {
if (!inRole(experimentRole.getUserExperimentRolePK().getRoleTypeId(), experimentRole.getUserExperimentRolePK().getExperimentId())) {
userExperimentRoleList.add(experimentRole);
}
}
public void removeUserExperimentRole(UserExperimentRole experimentRole) {
if (inRole(experimentRole.getUserExperimentRolePK().getRoleTypeId(), experimentRole.getUserExperimentRolePK().getExperimentId())) {
userExperimentRoleList.remove(experimentRole);
}
}
@Override
public int hashCode() {
......
......@@ -20,7 +20,7 @@ public class ExperimentUser extends CloneableEntity {
String name;
int userId;
int experimentId;
private boolean [] roles;
private final boolean [] roles;
static int maxRoleId = 4; // this is hardcoded, should be determined from the RoleType data table.
// for now leave it hardcoded
......@@ -48,33 +48,60 @@ public class ExperimentUser extends CloneableEntity {
this.name = name;
}
public void setIsInRole(RoleType role, boolean isInRole) {
roles[role.getId()] = isInRole;
public boolean isIsManager() {
return roles[2];
}
public boolean getIsInRole(RoleType role) {
return roles[role.getId()];
public void setIsManager(boolean isManager) {
roles[2] = isManager;
if (isManager) {
UserExperimentRole userExperimentRole = new UserExperimentRole(userId, experimentId, 2);
userExperimentRoleFacade.create(userExperimentRole);
} else {
UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, 2);
userExperimentRoleFacade.remove(userExperimentRole);
}
}
public boolean[] getRoles() {
return roles;
public boolean isIsPI() {
return roles[3];
}
public void setRoles(boolean[] roles) {
UserExperimentRole userExperimentRole;
for (int i = 1; i <= maxRoleId; i++) {
if (roles[i] && !this.roles[i]) {
userExperimentRole = new UserExperimentRole(userId, experimentId, i);
userExperimentRoleFacade.create(userExperimentRole);
} else if (!roles[i] && this.roles[i]) {
userExperimentRole = new UserExperimentRole(userId, experimentId, i);
userExperimentRoleFacade.remove(userExperimentRole);
}
public void setIsPI(boolean isPI) {
roles[3] = isPI;
if (isPI) {
UserExperimentRole userExperimentRole = new UserExperimentRole(userId, experimentId, 3);
userExperimentRoleFacade.create(userExperimentRole);
} else {
UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, 3);
userExperimentRoleFacade.remove(userExperimentRole);
}
}
public boolean isIsUser() {
return roles[4];
}
public void setIsUser(boolean isUser) {
roles[4] = isUser;
if (isUser) {
UserExperimentRole userExperimentRole = new UserExperimentRole(userId, experimentId, 4);
userExperimentRoleFacade.create(userExperimentRole);
} else {
UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, 4);
userExperimentRoleFacade.remove(userExperimentRole);
}
this.roles = roles;
}
public void setIsInRole(RoleType role, boolean isInRole) {
roles[role.getId()] = isInRole;
}
public boolean[] getRoles() {
return roles;
}
public void removeAllExperimentRoles() {
public void removeAllExperimentRoles(UserExperimentRoleFacade userExperimentRoleFacade) {
UserExperimentRole userExperimentRole;
for (int i = 1; i <= maxRoleId; i++) {
if (roles[i]) {
......@@ -85,14 +112,7 @@ public class ExperimentUser extends CloneableEntity {
}
public boolean canAddUsers() {
// this can be tied to permission. For now let's hardcode
if (roles[2] || roles[3]) {
return true;
}
else {
return false;
}
return roles[2] || roles[3];
}
@Override
......
......@@ -15,7 +15,7 @@
<h1>Edit Experiment</h1>
</div>
<p:accordionPanel multiple="true" dynamic="true" cache="true" >
<p:accordionPanel multiple="true" dynamic="true" cache="false" activeIndex="0,1" >
<p:tab title="Experiment Properties" id="detailsTab" >
<div class="middleCenterLeftContent">
......@@ -35,7 +35,7 @@
<p:commandButton action="#{experimentController.prepareList()}" immediate="true" value="Return" alt="Return" icon="ui-icon-arrowreturnthick-1-w"/>
</div>
<ui:include src="experimentUserRemoveDialog.xhtml" />
<ui:include src="experimentUserRemoveDialog.xhtml" />
</h:form>
</ui:define>
</ui:composition>
......
......@@ -4,10 +4,10 @@
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<p:confirmDialog id="experimentUserRemoveDialog" message="Remove user from Experiment?"
<p:confirmDialog id="experimentUserRemoveDialog" message="Remove user #{experimentController.getRemovedUserName()} from Experiment?"
header="Remove User" severity="alert" widgetVar="experimentUserRemoveDialogWidget"
styleClass="dialog">
<p:commandButton value="Yes" oncomplete="experimentUserRemoveDialogWidget.hide()" action="#{experimentController.removeUser()}"/>
<p:commandButton value="Yes" oncomplete="PF('experimentUserRemoveDialogWidget').hide()" action="#{experimentController.removeUser()}" update="@form"/>
<p:commandButton value="No" onclick="PF('experimentUserRemoveDialogWidget').hide()" type="button" />
</p:confirmDialog>
</ui:composition>
......@@ -8,58 +8,65 @@
<ui:include src="experimentUserAddDialog.xhtml" />
<p:commandButton id="experimentUserAddButton" value="Add" onclick="PF('experimentUserAddDialogWidget').show();" rendered="#{experimentController.canAddUsers(loginController.username)}" icon="ui-icon-plus" >
<p:tooltip for="experimentUserAddButton" value="Add new users." />
</p:commandButton>
<p:commandButton id="ResetFiltersButton" action="#{experimentController.experimentUsersEditTable.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight" oncomplete="PF('experimentUsersEditWidget').clearFilters()" update="experimentUsersEditDataTable">
<p:tooltip for="ResetFiltersButton" value="Reset filters."/>
</p:commandButton>
<p:dataTable id="experimentUsersEditDataTable"
var="experimentUserObject"
value="#{experimentController.experimentUsersEditTable.listDataModel}"
filteredValue="#{experimentController.experimentUsersEditTable.filteredObjectList}"
paginator="true"
paginatorAlwaysVisible="false"
rows="25"
binding="#{experimentController.experimentUsersEditTable.listDataTable}"
widgetVar="experimentUsersEditWidget"
emptyMessage="No users found.">
<ui:include src="experimentUserAddDialog.xhtml" />
<p:commandButton id="experimentUserAddButton" value="Add" onclick="PF('experimentUserAddDialogWidget').show();" rendered="#{experimentController.canAddUsers(loginController.username)}" icon="ui-icon-plus" >
<p:tooltip for="experimentUserAddButton" value="Add new users." />
</p:commandButton>
<p:commandButton id="ResetFiltersButton" action="#{experimentController.experimentUsersEditTable.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight" oncomplete="PF('experimentUsersEditWidget').clearFilters()" update="experimentUsersEditDataTable">
<p:tooltip for="ResetFiltersButton" value="Reset filters."/>
</p:commandButton>
<p:dataTable id="experimentUsersEditDataTable"
var="experimentUserObject"
value="#{experimentController.experimentUsersEditTable.listDataModel}"
filteredValue="#{experimentController.experimentUsersEditTable.filteredObjectList}"
paginator="true"
paginatorAlwaysVisible="false"
rows="25"
binding="#{experimentController.experimentUsersEditTable.listDataTable}"
widgetVar="experimentUsersEditWidget"
emptyMessage="No users found.">
<ui:param name="experimentRoles" value="#{experimentUserObject.roles}" />
<p:column sortBy="#{experimentUserObject.username}" headerText="Username"
filterBy="#{experimentUserObject.username}" filterMatchMode="contains" >
<h:outputText value="#{experimentUserObject.username}"/>
</p:column>
<p:column sortBy="#{experimentUserObject.name}" headerText="Last, First Name"
filterBy="#{experimentUserObject.name}" filterMatchMode="contains" >
<h:outputText value="#{experimentUserObject.name}"/>
</p:column>
<p:columns value="#{experimentController.columns}" var="column">
<ui:param name="columnId" value="#{column.property}" />
<f:facet name="header">
<h:outputText value="#{column.header}" />
</f:facet>
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentRoles[columnId]}" />
<p:selectBooleanCheckbox value="#{experimentRoles[columnId]}" rendered="true" />
</p:columns>
<p:column headerText="Actions" >
<div class="actionLink" >
<p:commandLink oncomplete="PF('experimentUserRemoveDialogWidget').show()" rendered="true" styleClass="ui-icon ui-icon-trash" title="Remove" >
<f:setPropertyActionListener value="#{experimentUserObject}" target="#{experimentController.experimentUsersEditTable.currentObject}" />
</p:commandLink>
</div>
</p:column>
</p:dataTable>
filterBy="#{experimentUserObject.username}" filterMatchMode="contains" >
<h:outputText value="#{experimentUserObject.username}"/>
</p:column>
<p:column sortBy="#{experimentUserObject.name}" headerText="Last, First Name"
filterBy="#{experimentUserObject.name}" filterMatchMode="contains" >
<h:outputText value="#{experimentUserObject.name}"/>
</p:column>
<ui:param name="isAdmin" value="#{experimentController.hasSystemRole(loginController.username)}" />
<p:column headerText="Manager">
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isManager} AND #{!isAdmin}" />
<p:selectBooleanCheckbox value="#{experimentUserObject.isManager}" rendered="#{isAdmin}" immediate="true" />
</p:column>
<p:column headerText="Principal Investigator">
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isPI} AND #{!isAdmin}" />
<p:selectBooleanCheckbox value="#{experimentUserObject.isPI}" rendered="#{isAdmin}" />
</p:column>
<p:column headerText="User">
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isUser} AND #{!isAdmin}" />
<p:selectBooleanCheckbox value="#{experimentUserObject.isUser}" rendered="#{isAdmin}" />
</p:column>
<p:column headerText="Actions" rendered="#{isAdmin}">
<div class="actionLink" >
<p:commandLink oncomplete="PF('experimentUserRemoveDialogWidget').show()" rendered="true" styleClass="ui-icon ui-icon-trash" title="Remove" update="@form">
<f:setPropertyActionListener value="#{experimentUserObject}" target="#{experimentController.experimentUsersEditTable.currentObject}" />
</p:commandLink>
</div>
</p:column>
</p:dataTable>
</ui:composition>
......@@ -3,7 +3,6 @@
<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">
<p:commandButton id="ResetFiltersButton" action="#{experimentController.experimentUsersListTable.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight" oncomplete="PF('experimentUsersListWidget').clearFilters()" update="experimentUsersListDataTable">
......@@ -31,12 +30,19 @@
<h:outputText value="#{experimentUserObject.name}"/>
</p:column>
<p:columns value="#{experimentController.columns}" var="column">
<f:facet name="header">
<h:outputText value="#{column.header}" />
</f:facet>
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.roles[column.property]}" />
</p:columns>
<p:column headerText="Manager">
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isManager}" />
</p:column>
<p:column headerText="Principal Investigator">
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isPI}" />
</p:column>
<p:column headerText="User">
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isUser}" />
</p:column>
</p:dataTable>
......
......@@ -6,7 +6,7 @@
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<ui:param name="experimentObject" value="#{experimentController.selected}"/>
<ui:param name="experimentObject" value="#{experimentController.current}"/>
<p:panelGrid columns="2" styleClass="viewEntityDetails">
......
......@@ -14,7 +14,8 @@
<h1>Experiment Details</h1>
</div>
<p:accordionPanel multiple="true">
<ui:param name="experimentObject" value="#{experimentController.current}"/>
<p:accordionPanel multiple="true" activeIndex="0,1" >
<p:tab title="Experiment Properties">
<div class="middleCenterLeftContent">
<ui:include src="experimentViewPanelGrid.xhtml"/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment