package org.sakaiproject.delegatedaccess.model; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; /** * * This is a Model object for each tree node. This helps store tree state information as well as get information for the node * * @author Bryan Holladay (holladay@longsight.com) * */ public class NodeModel implements Serializable { private String nodeId; private HierarchyNodeSerialized node; private boolean directAccessOrig = false; private boolean directAccess = false; private boolean accessAdmin = false; private boolean accessAdminOrig = false; private String realm = ""; private String role = ""; private String realmOrig = ""; private String roleOrig = ""; private NodeModel parentNode; private List<ListOptionSerialized> restrictedAuthTools; private List<ListOptionSerialized> restrictedAuthToolsOrig; private List<ListOptionSerialized> restrictedPublicTools; private List<ListOptionSerialized> restrictedPublicToolsOrig; private Date shoppingPeriodStartDate = new Date(); private Date shoppingPeriodStartDateOrig = new Date(); private Date shoppingPeriodEndDate = new Date(); private Date shoppingPeriodEndDateOrig = new Date(); private boolean addedDirectChildrenFlag = false; private boolean shoppingPeriodAdmin = false; private boolean shoppingPeriodAdminOrig = false; private String siteInstructors; private SelectOption roleOption; private Date shoppingAdminModified = null; private String shoppingAdminModifiedBy = null; private Date modified = null; private String modifiedBy = null; //this flag is used to track accessAdmin access private boolean editable = true; private boolean shoppingPeriodRevokeInstructorEditable = false; private boolean shoppingPeriodRevokeInstructorEditableOrig = false; private boolean shoppingPeriodRevokeInstructorPublicOpt = false; private boolean shoppingPeriodRevokeInstructorPublicOptOrig = false; private String[] subAdminSiteAccess = null; private boolean isActive = true; private boolean allowBecomeUser = false; private boolean allowBecomeUserOrig = false; //flag to keep track of nodes that were edited by the instructor private boolean instructorEdited = false; private boolean instructorEditedOrig = false; /** * this function should be called after a save in order to reset the original values to their current value. * By doing this, you allow the next save the check against the new values */ public void setOriginals(){ directAccessOrig = directAccess; accessAdminOrig = accessAdmin; shoppingPeriodAdminOrig = shoppingPeriodAdmin; realmOrig = realm; roleOrig = role; restrictedAuthToolsOrig = copyListOptions(restrictedAuthTools); restrictedPublicToolsOrig = copyListOptions(restrictedPublicTools); shoppingPeriodStartDateOrig = shoppingPeriodStartDate; shoppingPeriodEndDateOrig = shoppingPeriodEndDate; shoppingPeriodRevokeInstructorEditableOrig = shoppingPeriodRevokeInstructorEditable; shoppingPeriodRevokeInstructorPublicOptOrig = shoppingPeriodRevokeInstructorPublicOpt; allowBecomeUserOrig = allowBecomeUser; instructorEditedOrig = instructorEdited; } public NodeModel(String nodeId, HierarchyNodeSerialized node, boolean directAccess, String realm, String role, NodeModel parentNode, List<ListOptionSerialized> restrictedAuthTools, List<ListOptionSerialized> restrictedPublicTools, Date shoppingPeriodStartDate, Date shoppingPeriodEndDate, boolean addedDirectChildrenFlag, boolean shoppingPeriodAdmin, String modifiedBy, Date modified, Date shoppingAdminModified, String shoppingAdminModifiedBy, boolean accessAdmin, boolean shoppingPeriodRevokeInstructorEditable, boolean shoppingPeriodRevokeInstructorPublicOpt, boolean allowBecomeUser, boolean instructorEdited){ this.nodeId = nodeId; this.node = node; this.directAccessOrig = directAccess; this.directAccess = directAccess; this.realm = realm; this.role = role; this.realmOrig = realm; this.roleOrig = role; this.parentNode = parentNode; this.restrictedAuthTools = restrictedAuthTools; this.restrictedAuthToolsOrig = copyListOptions(restrictedAuthTools); this.restrictedPublicTools = restrictedPublicTools; this.restrictedPublicToolsOrig = copyListOptions(restrictedPublicTools); this.shoppingPeriodEndDate = shoppingPeriodEndDate; this.shoppingPeriodEndDateOrig = shoppingPeriodEndDate; this.shoppingPeriodStartDate = shoppingPeriodStartDate; this.shoppingPeriodStartDateOrig = shoppingPeriodStartDate; this.addedDirectChildrenFlag = addedDirectChildrenFlag; this.shoppingPeriodAdmin = shoppingPeriodAdmin; this.shoppingPeriodAdminOrig = shoppingPeriodAdmin; this.modifiedBy = modifiedBy; this.modified = modified; this.shoppingAdminModified = shoppingAdminModified; this.shoppingAdminModifiedBy = shoppingAdminModifiedBy; this.accessAdmin = accessAdmin; this.accessAdminOrig = accessAdmin; this.shoppingPeriodRevokeInstructorEditable = shoppingPeriodRevokeInstructorEditable; this.shoppingPeriodRevokeInstructorEditableOrig = shoppingPeriodRevokeInstructorEditable; this.shoppingPeriodRevokeInstructorPublicOpt = shoppingPeriodRevokeInstructorPublicOpt; this.shoppingPeriodRevokeInstructorPublicOptOrig = shoppingPeriodRevokeInstructorPublicOpt; this.allowBecomeUser = allowBecomeUser; this.allowBecomeUserOrig = allowBecomeUser; this.instructorEdited = instructorEdited; } private List<ListOptionSerialized> copyListOptions(List<ListOptionSerialized> tools){ List<ListOptionSerialized> returnList = new ArrayList<ListOptionSerialized>(); for(ListOptionSerialized tool : tools){ returnList.add(new ListOptionSerialized(tool.getId(), tool.getName(), tool.isSelected())); } return returnList; } public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } public HierarchyNodeSerialized getNode() { return node; } public void setNode(HierarchyNodeSerialized node) { this.node = node; } public boolean isDirectAccessOrig() { return directAccessOrig; } public void setDirectAccessOrig(boolean directAccess) { this.directAccessOrig = directAccess; } @Override public String toString() { //this is where the display of the node title is set return node.description; } public boolean isDirectAccess() { return directAccess; } public void setDirectAccess(boolean directAccess) { this.directAccess = directAccess; } public boolean isModified(){ if(directAccessOrig != directAccess){ return true; } if(shoppingPeriodAdmin != shoppingPeriodAdminOrig){ return true; } if(accessAdmin != accessAdminOrig){ return true; } //only worry about modifications to a direct access node if(directAccess){ return isModified(shoppingPeriodStartDate, shoppingPeriodStartDateOrig, shoppingPeriodEndDate, shoppingPeriodEndDateOrig, realm, realmOrig, role, roleOrig, convertListToArray(getSelectedRestrictedAuthTools()), convertListToArray(getSelectedRestrictedAuthToolsOrig()), convertListToArray(getSelectedRestrictedPublicTools()), convertListToArray(getSelectedRestrictedPublicToolsOrig()), shoppingPeriodRevokeInstructorEditable, shoppingPeriodRevokeInstructorEditableOrig, shoppingPeriodRevokeInstructorPublicOpt, shoppingPeriodRevokeInstructorPublicOptOrig, allowBecomeUser, allowBecomeUserOrig, instructorEdited, instructorEditedOrig); } return false; } public boolean isModified(Date shoppingStartDateOld, Date shoppingStartDateNew, Date shoppingEndDateOld, Date shoppingEndDateNew, String realmOld, String realmNew, String roleOld, String roleNew, String[] authToolsOld, String[] authToolsNew, String[] publicToolsOld, String[] publicToolsNew, boolean shoppingPeriodRevokeInstructorEditable, boolean shoppingPeriodRevokeInstructorEditableOrig, boolean shoppingPeriodRevokeInstructorPublicOpt, boolean shoppingPeriodRevokeInstructorPublicOptOrig, boolean allowBeomeUser, boolean allowBecomeUserOrig, boolean instructorEdited, boolean instructorEditedOrig){ if(realmOld != null && realmNew != null){ if(!realmOld.equals(realmNew)) return true; }else if((realmOld == null || realmNew == null) && !(realmOld == null && realmNew == null)){ return true; } if(shoppingStartDateOld != null && shoppingStartDateNew != null){ if(!shoppingStartDateOld.equals(shoppingStartDateNew)) return true; }else if((shoppingStartDateOld == null || shoppingStartDateNew == null) && !(shoppingStartDateOld == null && shoppingStartDateNew == null)){ return true; } if(shoppingEndDateOld != null && shoppingEndDateNew != null){ if(!shoppingEndDateOld.equals(shoppingEndDateNew)) return true; }else if((shoppingEndDateOld == null || shoppingEndDateNew == null) && !(shoppingEndDateOld == null && shoppingEndDateNew == null)){ return true; } if(roleOld != null && roleNew != null){ if(!roleOld.equals(roleNew)) return true; }else if((roleOld == null || roleNew == null) && !(roleOld == null && roleNew == null)){ return true; } if(authToolsOld != null && authToolsNew != null){ if(authToolsOld.length != authToolsNew.length){ return true; }else{ for(int i = 0; i < authToolsOld.length; i++){ boolean found = false; for(int j = 0; j < authToolsNew.length; j++){ if(authToolsOld[i].equals(authToolsNew[j])){ found = true; break; } } if(!found){ return true; } } } }else if((authToolsOld == null || authToolsNew == null) && !(authToolsOld == null && authToolsNew == null)){ return true; } if(publicToolsOld != null && publicToolsNew != null){ if(publicToolsOld.length != publicToolsNew.length){ return true; }else{ for(int i = 0; i < publicToolsOld.length; i++){ boolean found = false; for(int j = 0; j < publicToolsNew.length; j++){ if(publicToolsOld[i].equals(publicToolsNew[j])){ found = true; break; } } if(!found){ return true; } } } }else if((publicToolsOld == null || publicToolsNew == null) && !(publicToolsOld == null && publicToolsNew == null)){ return true; } if(shoppingPeriodRevokeInstructorEditable != shoppingPeriodRevokeInstructorEditableOrig || shoppingPeriodRevokeInstructorPublicOpt != shoppingPeriodRevokeInstructorPublicOptOrig){ return true; } if(allowBeomeUser != allowBecomeUserOrig){ return true; } if(instructorEdited != instructorEditedOrig){ return true; } return false; } private boolean isRestrictedAuthToolsModified(){ for(ListOptionSerialized origTool : restrictedAuthToolsOrig){ for(ListOptionSerialized tool : restrictedAuthTools){ if(tool.getId().equals(origTool.getId())){ if(tool.isSelected() != origTool.isSelected()){ return true; } } } } return false; } private boolean isRestrictedPublicToolsModified(){ for(ListOptionSerialized origTool : restrictedPublicToolsOrig){ for(ListOptionSerialized tool : restrictedPublicTools){ if(tool.getId().equals(origTool.getId())){ if(tool.isSelected() != origTool.isSelected()){ return true; } } } } return false; } public String getRealm() { return realm; } public void setRealm(String realm) { this.realm = realm; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } /** * Will return the inherited role from it's parents and "" if not found * @return */ public String[] getNodeAccessRealmRole(){ String[] myAccessRealmRole = new String[]{getRealm(), getRole()}; if(!isDirectAccess()){ myAccessRealmRole = getInheritedAccessRealmRole(); } if(myAccessRealmRole == null || "".equals(myAccessRealmRole[0]) || "".equals(myAccessRealmRole[1])){ return new String[]{"",""}; }else{ return myAccessRealmRole; } } public Date getNodeShoppingPeriodStartDate(){ if(isDirectAccess()){ return getShoppingPeriodStartDate(); }else{ return getInheritedShoppingPeriodStartDate(); } } public Date getNodeShoppingPeriodEndDate(){ if(isDirectAccess()){ return getShoppingPeriodEndDate(); }else{ return getInheritedShoppingPeriodEndDate(); } } public boolean getNodeAccess(){ if(isDirectAccess()){ return true; }else{ return getInheritedNodeAccess(); } } public boolean getInheritedNodeAccess(){ return getInheritedNodeAccessHelper(parentNode); } public boolean getInheritedNodeAccessHelper(NodeModel parent){ if(parent == null){ return false; } else if (parent.isDirectAccess()) { return true; }else{ return getInheritedNodeAccessHelper(parent.getParentNode()); } } public String[] getInheritedAccessRealmRole(){ return getInheritedAccessRealmRoleHelper(parentNode); } private String[] getInheritedAccessRealmRoleHelper(NodeModel parent){ if(parent == null){ return new String[]{"",""}; } else if (parent.isDirectAccess()) { return new String[]{parent.getRealm(), parent.getRole()}; }else{ return getInheritedAccessRealmRoleHelper(parent.getParentNode()); } } public Date getInheritedShoppingPeriodEndDate(){ return getInheritedShoppingPeriodEndDateHelper(parentNode); } private Date getInheritedShoppingPeriodEndDateHelper(NodeModel parent){ if(parent == null){ return null; }else if(parent.isDirectAccess()){ return parent.getShoppingPeriodEndDate(); }else{ return getInheritedShoppingPeriodEndDateHelper(parent.getParentNode()); } } public Date getInheritedShoppingPeriodStartDate(){ return getInheritedShoppingPeriodStartDateHelper(parentNode); } private Date getInheritedShoppingPeriodStartDateHelper(NodeModel parent){ if(parent == null){ return null; }else if(parent.isDirectAccess()){ return parent.getShoppingPeriodStartDate(); }else{ return getInheritedShoppingPeriodStartDateHelper(parent.getParentNode()); } } public NodeModel getParentNode() { return parentNode; } public void setParentNode(NodeModel parentNode) { this.parentNode = parentNode; } public List<ListOptionSerialized> getRestrictedAuthTools() { return restrictedAuthTools; } public void setRestrictedAuthTools(List<ListOptionSerialized> restrictedAuthTools) { this.restrictedAuthTools = restrictedAuthTools; } public String[] getNodeRestrictedAuthTools(){ List<ListOptionSerialized> myRestrictedTools = getSelectedRestrictedAuthTools(); if(!isDirectAccess()){ myRestrictedTools = getInheritedRestrictedAuthTools(); } if(myRestrictedTools == null || myRestrictedTools.size() == 0){ return new String[0]; }else{ return convertListToArray(myRestrictedTools); } } public String[] convertListToArray(List<ListOptionSerialized> list){ String[] restrictedToolsArray = new String[list.size()]; int i = 0; for(ListOptionSerialized tool : list){ restrictedToolsArray[i] = tool.getId(); i++; } return restrictedToolsArray; } public List<ListOptionSerialized> getInheritedRestrictedAuthTools(){ return getInheritedRestrictedAuthToolsHelper(parentNode); } private List<ListOptionSerialized> getInheritedRestrictedAuthToolsHelper(NodeModel parent){ if(parent == null){ return Collections.emptyList(); }else if(parent.isDirectAccess()){ return parent.getSelectedRestrictedAuthTools(); }else{ return getInheritedRestrictedAuthToolsHelper(parent.getParentNode()); } } public List<ListOptionSerialized> getSelectedRestrictedAuthTools(){ List<ListOptionSerialized> returnList = new ArrayList<ListOptionSerialized>(); for(ListOptionSerialized tool : restrictedAuthTools){ if(tool.isSelected()) returnList.add(tool); } return returnList; } public List<ListOptionSerialized> getSelectedRestrictedAuthToolsOrig(){ List<ListOptionSerialized> returnList = new ArrayList<ListOptionSerialized>(); for(ListOptionSerialized tool : restrictedAuthToolsOrig){ if(tool.isSelected()) returnList.add(tool); } return returnList; } public boolean hasAnyRestrictedAuthToolsSelected(){ for(ListOptionSerialized tool : restrictedAuthTools){ if(tool.isSelected()) return true; } return false; } public void setAuthToolRestricted(String toolId, boolean restricted){ for(ListOptionSerialized tool : restrictedAuthTools){ if(tool.getId().equals(toolId)){ tool.setSelected(restricted); break; } } } public boolean isAuthToolRestricted(String toolId){ for(ListOptionSerialized tool : restrictedAuthTools){ if(tool.getId().equals(toolId)){ return tool.isSelected(); } } return false; } //public tools: public List<ListOptionSerialized> getRestrictedPublicTools() { return restrictedPublicTools; } public void setRestrictedPublicTools(List<ListOptionSerialized> restrictedPublicTools) { this.restrictedPublicTools = restrictedPublicTools; } public String[] getNodeRestrictedPublicTools(){ List<ListOptionSerialized> myRestrictedTools = getSelectedRestrictedPublicTools(); if(!isDirectAccess()){ myRestrictedTools = getInheritedRestrictedPublicTools(); } if(myRestrictedTools == null || myRestrictedTools.size() == 0){ return new String[0]; }else{ return convertListToArray(myRestrictedTools); } } public List<ListOptionSerialized> getInheritedRestrictedPublicTools(){ return getInheritedRestrictedPublicToolsHelper(parentNode); } private List<ListOptionSerialized> getInheritedRestrictedPublicToolsHelper(NodeModel parent){ if(parent == null){ return Collections.emptyList(); }else if(parent.isDirectAccess()){ return parent.getSelectedRestrictedPublicTools(); }else{ return getInheritedRestrictedPublicToolsHelper(parent.getParentNode()); } } public List<ListOptionSerialized> getSelectedRestrictedPublicTools(){ List<ListOptionSerialized> returnList = new ArrayList<ListOptionSerialized>(); for(ListOptionSerialized tool : restrictedPublicTools){ if(tool.isSelected()) returnList.add(tool); } return returnList; } public List<ListOptionSerialized> getSelectedRestrictedPublicToolsOrig(){ List<ListOptionSerialized> returnList = new ArrayList<ListOptionSerialized>(); for(ListOptionSerialized tool : restrictedPublicToolsOrig){ if(tool.isSelected()) returnList.add(tool); } return returnList; } public boolean hasAnyRestrictedPublicToolsSelected(){ for(ListOptionSerialized tool : restrictedPublicTools){ if(tool.isSelected()) return true; } return false; } public void setPublicToolRestricted(String toolId, boolean restricted){ for(ListOptionSerialized tool : restrictedPublicTools){ if(tool.getId().equals(toolId)){ tool.setSelected(restricted); break; } } } public boolean isPublicToolRestricted(String toolId){ for(ListOptionSerialized tool : restrictedPublicTools){ if(tool.getId().equals(toolId)){ return tool.isSelected(); } } return false; } public Date getShoppingPeriodStartDate() { return shoppingPeriodStartDate; } public void setShoppingPeriodStartDate(Date shoppingPeriodStartDate) { this.shoppingPeriodStartDate = shoppingPeriodStartDate; } public Date getShoppingPeriodEndDate() { return shoppingPeriodEndDate; } public void setShoppingPeriodEndDate(Date shoppingPeriodEndDate) { this.shoppingPeriodEndDate = shoppingPeriodEndDate; } public boolean isAddedDirectChildrenFlag() { return addedDirectChildrenFlag; } public void setAddedDirectChildrenFlag(boolean addedDirectChildrenFlag) { this.addedDirectChildrenFlag = addedDirectChildrenFlag; } public boolean isShoppingPeriodAdmin() { return shoppingPeriodAdmin; } public boolean isShoppingPeriodAdminOrig(){ return shoppingPeriodAdminOrig; } public void setShoppingPeriodAdmin(boolean shoppingPeriodAdmin) { this.shoppingPeriodAdmin = shoppingPeriodAdmin; } public boolean getNodeShoppingPeriodAdmin(){ if(isShoppingPeriodAdmin()){ return true; }else{ return getInheritedShoppingPeriodAdmin(); } } public boolean getInheritedShoppingPeriodAdmin(){ return getInheritedShoppingPeriodAdminHelper(parentNode); } private boolean getInheritedShoppingPeriodAdminHelper(NodeModel parent){ if(parent == null){ return false; }else if(parent.isShoppingPeriodAdmin()){ return true; }else{ return getInheritedShoppingPeriodAdminHelper(parent.getParentNode()); } } public String getSiteInstructors() { return siteInstructors; } public void setSiteInstructors(String siteInstructors) { this.siteInstructors = siteInstructors; } public SelectOption getRoleOption() { return roleOption; } public void setRoleOption(SelectOption roleOption) { this.roleOption = roleOption; } public Date getShoppingAdminModified() { return shoppingAdminModified; } public void setShoppingAdminModified(Date shoppingAdminModified) { this.shoppingAdminModified = shoppingAdminModified; } public String getShoppingAdminModifiedBy() { return shoppingAdminModifiedBy; } public void setShoppingAdminModifiedBy(String shoppingAdminModifiedBy) { this.shoppingAdminModifiedBy = shoppingAdminModifiedBy; } public Date getModified() { return modified; } public void setModified(Date modified) { this.modified = modified; } public String getModifiedBy() { return modifiedBy; } public void setModifiedBy(String modifiedBy) { this.modifiedBy = modifiedBy; } public boolean isAccessAdmin() { return accessAdmin; } public void setAccessAdmin(boolean accessAdmin) { this.accessAdmin = accessAdmin; } public boolean isAccessAdminOrig() { return accessAdminOrig; } public void setAccessAdminOrig(boolean accessAdminOrig) { this.accessAdminOrig = accessAdminOrig; } public boolean getNodeAccessAdmin(){ if(isAccessAdmin()){ return true; }else{ return getInheritedAccessAdmin(); } } public boolean getInheritedAccessAdmin(){ return getInheritedAccessAdminHelper(parentNode); } public boolean getInheritedAccessAdminHelper(NodeModel parent){ if(parent == null){ return false; } else if (parent.isAccessAdmin()) { return true; }else{ return getInheritedAccessAdminHelper(parent.getParentNode()); } } public boolean isEditable(){ return editable; } public void setEditable(boolean editable){ this.editable = editable; } public boolean isNodeEditable(){ if(isEditable()){ return true; }else{ return getInheritedEditable(); } } private boolean getInheritedEditable(){ return getInheritedEditableHelper(parentNode); } private boolean getInheritedEditableHelper(NodeModel parent){ if(parent == null){ return false; } else if (parent.isEditable()) { return true; }else{ return getInheritedEditableHelper(parent.getParentNode()); } } public boolean isShoppingPeriodRevokeInstructorEditable() { return shoppingPeriodRevokeInstructorEditable; } public void setShoppingPeriodRevokeInstructorEditable( boolean shoppingPeriodRevokeInstructorEditable) { this.shoppingPeriodRevokeInstructorEditable = shoppingPeriodRevokeInstructorEditable; } public boolean isShoppingPeriodRevokeInstructorEditableOrig() { return shoppingPeriodRevokeInstructorEditableOrig; } public void setShoppingPeriodRevokeInstructorEditableOrig( boolean shoppingPeriodRevokeInstructorEditableOrig) { this.shoppingPeriodRevokeInstructorEditableOrig = shoppingPeriodRevokeInstructorEditableOrig; } public boolean getNodeShoppingPeriodRevokeInstructorEditable(){ if(isDirectAccess()){ return isShoppingPeriodRevokeInstructorEditable(); }else{ return getInheritedShoppingPeriodRevokeInstructorEditable(); } } public boolean getInheritedShoppingPeriodRevokeInstructorEditable(){ return getInheritedShoppingPeriodRevokeInstructorEditableHelper(parentNode); } public boolean getInheritedShoppingPeriodRevokeInstructorEditableHelper(NodeModel parent){ if(parent == null){ return false; } else if (parent.isDirectAccess()) { return parent.isShoppingPeriodRevokeInstructorEditable(); }else{ return getInheritedShoppingPeriodRevokeInstructorEditableHelper(parent.getParentNode()); } } public boolean isShoppingPeriodRevokeInstructorPublicOpt() { return shoppingPeriodRevokeInstructorPublicOpt; } public void setShoppingPeriodRevokeInstructorPublicOpt( boolean shoppingPeriodRevokeInstructorPublicOpt) { this.shoppingPeriodRevokeInstructorPublicOpt = shoppingPeriodRevokeInstructorPublicOpt; } public boolean isShoppingPeriodRevokeInstructorPublicOptOrig() { return shoppingPeriodRevokeInstructorPublicOptOrig; } public void setShoppingPeriodRevokeInstructorPublicOptOrig( boolean shoppingPeriodRevokeInstructorPublicOptOrig) { this.shoppingPeriodRevokeInstructorPublicOptOrig = shoppingPeriodRevokeInstructorPublicOptOrig; } public boolean getNodeShoppingPeriodRevokeInstructorPublicOpt(){ if(isDirectAccess()){ return isShoppingPeriodRevokeInstructorPublicOpt(); }else{ return getInheritedShoppingPeriodRevokeInstructorPublicOpt(); } } public boolean getInheritedShoppingPeriodRevokeInstructorPublicOpt(){ return getInheritedShoppingPeriodRevokeInstructorPublicOptHelper(parentNode); } public boolean getInheritedShoppingPeriodRevokeInstructorPublicOptHelper(NodeModel parent){ if(parent == null){ return false; } else if (parent.isDirectAccess()) { return parent.isShoppingPeriodRevokeInstructorPublicOpt(); }else{ return getInheritedShoppingPeriodRevokeInstructorPublicOptHelper(parent.getParentNode()); } } public String[] getSubAdminSiteAccess() { return subAdminSiteAccess; } public void setSubAdminSiteAccess(String[] subAdminSiteAccess) { this.subAdminSiteAccess = subAdminSiteAccess; } public String[] getInheritedSubAdminSiteAccess(){ return getInheritedSubAdminSiteAccessHelper(parentNode); } public String[] getInheritedSubAdminSiteAccessHelper(NodeModel parent){ if(parent == null){ return null; } else if (parent.getSubAdminSiteAccess() != null) { return parent.subAdminSiteAccess; }else{ return getInheritedSubAdminSiteAccessHelper(parent.getParentNode()); } } public String[] getNodeSubAdminSiteAccess(){ if(getSubAdminSiteAccess() != null){ return getSubAdminSiteAccess(); }else{ return getInheritedSubAdminSiteAccess(); } } public void setActive(boolean isActive) { this.isActive = isActive; } public boolean isActive() { return isActive; } public boolean isSiteNode(){ return node != null && node.title != null && node.title.startsWith("/site/"); } public boolean isAllowBecomeUser() { return allowBecomeUser; } public void setAllowBecomeUser(boolean allowBecomeUser) { this.allowBecomeUser = allowBecomeUser; } public boolean getNodeAllowBecomeUser(){ if(isDirectAccess()){ return isAllowBecomeUser(); }else{ return getInheritedAllowBecomeUser(); } } public boolean getInheritedAllowBecomeUser(){ return getInheritedAllowBecomeUserHelper(parentNode); } public boolean getInheritedAllowBecomeUserHelper(NodeModel parent){ if(parent == null){ return false; } else if (parent.isDirectAccess()) { return parent.isAllowBecomeUser(); }else{ return getInheritedAllowBecomeUserHelper(parent.getParentNode()); } } public boolean isInstructorEdited() { return instructorEdited; } public void setInstructorEdited(boolean instructorEdited) { this.instructorEdited = instructorEdited; } }