/*
* Copyright (c) 1998-2000 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
* Free SoftwareFoundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Scott Ferguson
*
* $Id: NavItem.java,v 1.2 2004/09/29 00:13:49 cvs Exp $
*/
package com.caucho.web;
import com.caucho.util.Tree;
import java.util.ArrayList;
import java.util.Iterator;
public class NavItem {
Tree tree;
String title;
String link;
String description;
String brief;
String _product;
NavItem()
{
}
void setTree(Tree tree)
{
this.tree = tree;
}
/**
* Returns the underlying tree.
*/
Tree getTree()
{
return tree;
}
/**
* Returns the parent item.
*/
public NavItem getParent()
{
if (tree == null)
return null;
Tree parent = tree.getParent();
return parent == null ? null : (NavItem) parent.getData();
}
public Iterator children()
{
return tree.iterator();
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getProduct()
{
return _product;
}
public void setProduct(String product)
{
_product = product;
}
public String getBrief()
{
return brief;
}
public void setBrief(String brief)
{
this.brief = brief;
}
public String getLink()
{
return link;
}
public void setLink(String link)
{
this.link = link;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
/**
* Returns the previous sibling.
*/
public NavItem getPrevious()
{
Tree prevTree = tree.getPrevious();
if (prevTree == null)
return null;
else
return (NavItem) prevTree.getData();
}
/**
* Returns the previous item in a preorder DFS traversal.
*/
public NavItem getPreviousPreorder()
{
Tree prevTree = tree.getPreviousPreorder();
if (prevTree == null)
return null;
else
return (NavItem) prevTree.getData();
}
/**
* Returns the next sibling item.
*/
public NavItem getNext()
{
Tree nextTree = tree.getNext();
if (nextTree == null)
return null;
else
return (NavItem) nextTree.getData();
}
/**
* Returns the next item in a preorder DFS traversal.
*/
public NavItem getNextPreorder()
{
Tree nextTree = tree.getNextPreorder();
if (nextTree == null)
return null;
else
return (NavItem) nextTree.getData();
}
/**
* Returns the specialized family navigation
*/
public ArrayList familyNavigation()
{
ArrayList list = new ArrayList();
familyNavigation(tree, list);
return list;
}
/**
* Specialized to get a family navigation.
*/
private boolean familyNavigation(Tree tree, ArrayList results)
{
if (tree == null) {
return false;
}
boolean hasParent = false;
if (tree.getParent() != null) {
hasParent = familyNavigation(tree.getParent(), results);
}
Iterator iter = tree.iterator();
boolean hasChild = false;
while (iter.hasNext()) {
NavItem child = (NavItem) iter.next();
if (! hasChild && hasParent)
results.add(null);
hasChild = true;
results.add(child);
}
return hasChild || hasParent;
}
public String toString()
{
return "[NavItem title='" + title + "' link='" + link + "']";
}
}