/**
* Copyright (c) 2009--2014 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.frontend.nav;
import com.redhat.rhn.common.localization.LocalizationService;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Class representing a navigation tree node (aka tab)
* @version $Rev$
*/
public class NavNode {
private String label;
private String name;
private String acl;
private String target;
private boolean dominant;
private boolean invisible;
private boolean overrideSidenav;
private boolean showChildrenIfActive;
private boolean first;
private boolean last;
private String permFailRedirect;
private String activeImage;
private String inactiveImage;
private String onClick;
private String dynamicChildren;
private List<NavNode> children;
private List<String> urls;
private List<String> dirs;
/**
* Default constructor
*/
public NavNode() {
children = new ArrayList<NavNode>();
urls = new ArrayList<String>();
dirs = new ArrayList<String>();
showChildrenIfActive = true;
}
/**
* Returns an unmodifiableList containing children of the node
* @return List the children of the node
*/
public List<NavNode> getNodes() {
return Collections.unmodifiableList(children);
}
/**
* Adds a child node to the current node
* @param child The child node
*/
public void addNode(NavNode child) {
children.add(child);
}
/**
* Associated a URL with this node
* @param url The URL (a string, not java.net.URL)
*/
public void addURL(String url) {
urls.add(url);
}
/**
* Associated a URL with this node. This is the primary URL and
* comes first. If not called, then the first normal addURL is
* the primary URL.
* @param url The URL (a string, not java.net.URL)
*/
public void addPrimaryURL(String url) {
urls.add(0, url);
}
/**
* Get URLs associated with this node
* @return List the associated URLs
*/
public List<String> getURLs() {
return Collections.unmodifiableList(urls);
}
/**
* Get Dirs associated with this node
* @return List the associated dirs
*/
public List<String> getDirs() {
return Collections.unmodifiableList(dirs);
}
/**
* Associates a directory with this node
* @param dir the directory
*/
public void addDirectory(String dir) {
dirs.add(dir);
}
/**
* String version of node
* @return String the stringified node
*/
public String toString() {
return
ToStringBuilder.reflectionToString(this,
ToStringStyle.MULTI_LINE_STYLE);
}
/* Begin copy/paste constructors */
/**
* Gets the current value of label
* @return String the current value
*/
public String getLabel() {
return this.label;
}
/**
* Sets the value of label to new value
* @param labelIn New value for label
*/
public void setLabel(String labelIn) {
this.label = labelIn;
}
/**
* Gets the current value of name
* @return String the current value
*/
public String getName() {
//Return the translated and escaped name
String unescapedName = LocalizationService.getInstance().getMessage(this.name);
return StringEscapeUtils.escapeHtml(unescapedName);
}
/**
* Sets the value of name to the localized version of the passed in name.
* @param nameIn Message key for name
*/
public void setName(String nameIn) {
name = nameIn;
}
/**
* Gets the current value of acl
* @return String the current value
*/
public String getAcl() {
return this.acl;
}
/**
* Sets the value of acl to new value
* @param aclIn New value for acl
*/
public void setAcl(String aclIn) {
this.acl = aclIn;
}
/**
* Gets the current value of dominant
* @return boolean the current value
*/
public boolean getDominant() {
return this.dominant;
}
/**
* Sets the value of dominant to new value
* @param dominantIn New value for dominant
*/
public void setDominant(boolean dominantIn) {
this.dominant = dominantIn;
}
/**
* Gets the current value of invisible
* @return boolean the current value
*/
public boolean getInvisible() {
return this.invisible;
}
/**
* Sets the value of invisible to new value
* @param invisibleIn New value for invisible
*/
public void setInvisible(boolean invisibleIn) {
this.invisible = invisibleIn;
}
/**
* Gets the current value of overrideSidenav
* @return boolean the current value
*/
public boolean getOverrideSidenav() {
return this.overrideSidenav;
}
/**
* Sets the value of overrideSidenav to new value
* @param overrideSidenavIn New value for overrideSidenav
*/
public void setOverrideSidenav(boolean overrideSidenavIn) {
this.overrideSidenav = overrideSidenavIn;
}
/**
* Gets the current value of showChildrenIfActive
* @return boolean the current value
*/
public boolean getShowChildrenIfActive() {
return this.showChildrenIfActive;
}
/**
* Sets the value of showChildrenIfActive to new value
* @param showChildrenIfActiveIn New value for showChildrenIfActive
*/
public void setShowChildrenIfActive(boolean showChildrenIfActiveIn) {
this.showChildrenIfActive = showChildrenIfActiveIn;
}
/**
* Gets the current value of permFailRedirect
* @return String the current value
*/
public String getPermFailRedirect() {
return this.permFailRedirect;
}
/**
* Sets the value of permFailRedirect to new value
* @param permFailRedirectIn New value for permFailRedirect
*/
public void setPermFailRedirect(String permFailRedirectIn) {
this.permFailRedirect = permFailRedirectIn;
}
/**
* Gets the current value of activeImage
* @return String the current value
*/
public String getActiveImage() {
return this.activeImage;
}
/**
* Sets the value of activeImage to new value
* @param activeImageIn New value for activeImage
*/
public void setActiveImage(String activeImageIn) {
this.activeImage = activeImageIn;
}
/**
* Gets the current value of inactiveImage
* @return String the current value
*/
public String getInactiveImage() {
return this.inactiveImage;
}
/**
* Sets the value of inactiveImage to new value
* @param inactiveImageIn New value for inactiveImage
*/
public void setInactiveImage(String inactiveImageIn) {
this.inactiveImage = inactiveImageIn;
}
/**
* Gets the current value of onClick
* @return String the current value
*/
public String getOnClick() {
return this.onClick;
}
/**
* Sets the value of onClick to new value
* @param onClickIn New value for onClick
*/
public void setOnClick(String onClickIn) {
this.onClick = onClickIn;
}
/**
* Gets the current value of dynamicChildren
* @return String the current value
*/
public String getDynamicChildren() {
return this.dynamicChildren;
}
/**
* Sets the value of dynamicChildren to new value
* @param dynamicChildrenIn New value for dynamicChildren
*/
public void setDynamicChildren(String dynamicChildrenIn) {
this.dynamicChildren = dynamicChildrenIn;
}
/**
* get the "best" most "proper" URL for this node
* @return "best" most "proper" URL for this node
*/
public String getPrimaryURL() {
if (urls != null && urls.size() > 0) {
return urls.get(0);
}
throw new IndexOutOfBoundsException("attempt to ask for primary URL of " +
this.getName() +
" node with no URLs associated");
}
/**
* Marks the Node as the first in a list.
* @param flag true if this Node is the first in a particular level of
* the tree.
*/
public void setFirst(boolean flag) {
first = flag;
last = false;
}
/**
* Returns true if this Node is the first in a particular level of
* the tree.
* @return true if this Node is the first in a particular level of
* the tree.
*/
public boolean isFirst() {
return first;
}
/**
* Marks the Node as the last in a list.
* @param flag true if this Node is the last in a particular level of
* the tree.
*/
public void setLast(boolean flag) {
last = flag;
first = false;
}
/**
* Returns true if this Node is the last in a particular level of
* the tree.
* @return true if this Node is the last in a particular level of
* the tree.
*/
public boolean isLast() {
return last;
}
/**
* Sets the target of the url.
* @param tgt link target
*/
public void setTarget(String tgt) {
target = tgt;
}
/**
* returns the target for the url
* @return the target for the url
*/
public String getTarget() {
return target;
}
}