package net.techreadiness.navigation; import java.util.Set; import net.techreadiness.security.PermissionCode; import com.google.common.collect.Sets; public class DefaultTab implements Tab, Cloneable { private String label; private String namespace; private String defaultAction; private Set<Group> groups; private String subtitle; private Integer sequence; private String code; private String descriptionText; private boolean displayIfEmpty; private PermissionCode[] permissions; protected DefaultTab(String code, String label, String namespace, String defaultAction, Integer sequence, String descriptionText, Set<Group> groups) { setCode(code); setLabel(label); setNamespace(namespace); setDefaultAction(defaultAction); setSequence(sequence); setDescriptionText(descriptionText); setGroups(groups); } protected DefaultTab(String code, String label, String namespace, String defaultAction, String descriptionText, Integer sequence, boolean displayIfEmpty) { setCode(code); setLabel(label); setNamespace(namespace); setDefaultAction(defaultAction); setSequence(sequence); setDescriptionText(descriptionText); setDisplayIfEmpty(displayIfEmpty); groups = Sets.newTreeSet(); } protected DefaultTab(String code, String subtitle, String label, String namespace, String defaultAction, String descriptionText, Integer sequence, boolean displayIfEmpty) { setCode(code); setSubtitle(subtitle); setLabel(label); setNamespace(namespace); setDefaultAction(defaultAction); setSequence(sequence); setDescriptionText(descriptionText); setDisplayIfEmpty(displayIfEmpty); groups = Sets.newTreeSet(); } @Override public Tab clone() { Tab tab = new DefaultTab(code, subtitle, label, namespace, defaultAction, descriptionText, sequence, displayIfEmpty); for (Group g : groups) { Group ng = new Group(tab, g.getName(), g.getSequence()); for (SubTab st : g.getChildren()) { SubTab nst = new DefaultSubTab(st.getCode(), st.getLabel(), st.getNamespace(), st.getDefaultAction(), st.getDescriptionText(), st.getSequence(), st.getPermissionCodes()); ng.addSubTab(nst); } tab.getGroups().add(ng); } return tab; } @Override public boolean isEmpty() { for (Group group : groups) { if (!group.getChildren().isEmpty()) { return false; } } return true; } @Override public void setLabel(String label) { this.label = label; } @Override public String getLabel() { return label; } @Override public String getSubtitle() { return subtitle; } @Override public void setSubtitle(String subtitle) { this.subtitle = subtitle; } @Override public void setGroups(Set<Group> groups) { this.groups = groups; } @Override public void addChild(SubTab subTab, String groupName) { if (groups == null) { groups = Sets.newTreeSet(); } for (Group group : groups) { if (group.getName().equals(groupName)) { subTab.setGroup(group); group.getChildren().add(subTab); } } } @Override public Set<Group> getGroups() { return groups; } @Override public void setNamespace(String namespace) { this.namespace = namespace; } @Override public String getNamespace() { return namespace; } @Override public void setDefaultAction(String defaultAction) { this.defaultAction = defaultAction; } @Override public String getDefaultAction() { return defaultAction; } @Override public Integer getSequence() { return sequence; } @Override public void setSequence(Integer sequence) { this.sequence = sequence; } @Override public int compareTo(Tab o) { return getSequence().compareTo(o.getSequence()); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (code == null ? 0 : code.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof DefaultTab)) { return false; } DefaultTab other = (DefaultTab) obj; if (code == null) { if (other.code != null) { return false; } } else if (!code.equals(other.code)) { return false; } return true; } @Override public void setCode(String code) { this.code = code; } @Override public String getCode() { return code; } @Override public String getDescriptionText() { return descriptionText; } @Override public void setDescriptionText(String descriptionText) { this.descriptionText = descriptionText; } @Override public void setDisplayIfEmpty(boolean displayIfEmpty) { this.displayIfEmpty = displayIfEmpty; } @Override public boolean isDisplayIfEmpty() { return displayIfEmpty; } @Override public void setPermissionCodes(PermissionCode... permissions) { this.permissions = permissions; } @Override public PermissionCode[] getPermissionCodes() { return permissions; } }