001: /*
002: * Copyright (c) 1998-2000 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: * Free SoftwareFoundation, Inc.
023: * 59 Temple Place, Suite 330
024: * Boston, MA 02111-1307 USA
025: *
026: * @author Scott Ferguson
027: *
028: * $Id: NavItem.java,v 1.2 2004/09/29 00:13:49 cvs Exp $
029: */
030:
031: package com.caucho.web;
032:
033: import com.caucho.util.Tree;
034:
035: import java.util.ArrayList;
036: import java.util.Iterator;
037:
038: public class NavItem {
039: Tree tree;
040: String title;
041: String link;
042: String description;
043: String brief;
044: String _product;
045:
046: NavItem() {
047: }
048:
049: void setTree(Tree tree) {
050: this .tree = tree;
051: }
052:
053: /**
054: * Returns the underlying tree.
055: */
056: Tree getTree() {
057: return tree;
058: }
059:
060: /**
061: * Returns the parent item.
062: */
063: public NavItem getParent() {
064: if (tree == null)
065: return null;
066:
067: Tree parent = tree.getParent();
068:
069: return parent == null ? null : (NavItem) parent.getData();
070: }
071:
072: public Iterator children() {
073: return tree.iterator();
074: }
075:
076: public String getTitle() {
077: return title;
078: }
079:
080: public void setTitle(String title) {
081: this .title = title;
082: }
083:
084: public String getProduct() {
085: return _product;
086: }
087:
088: public void setProduct(String product) {
089: _product = product;
090: }
091:
092: public String getBrief() {
093: return brief;
094: }
095:
096: public void setBrief(String brief) {
097: this .brief = brief;
098: }
099:
100: public String getLink() {
101: return link;
102: }
103:
104: public void setLink(String link) {
105: this .link = link;
106: }
107:
108: public String getDescription() {
109: return description;
110: }
111:
112: public void setDescription(String description) {
113: this .description = description;
114: }
115:
116: /**
117: * Returns the previous sibling.
118: */
119: public NavItem getPrevious() {
120: Tree prevTree = tree.getPrevious();
121:
122: if (prevTree == null)
123: return null;
124: else
125: return (NavItem) prevTree.getData();
126: }
127:
128: /**
129: * Returns the previous item in a preorder DFS traversal.
130: */
131: public NavItem getPreviousPreorder() {
132: Tree prevTree = tree.getPreviousPreorder();
133:
134: if (prevTree == null)
135: return null;
136: else
137: return (NavItem) prevTree.getData();
138: }
139:
140: /**
141: * Returns the next sibling item.
142: */
143: public NavItem getNext() {
144: Tree nextTree = tree.getNext();
145:
146: if (nextTree == null)
147: return null;
148: else
149: return (NavItem) nextTree.getData();
150: }
151:
152: /**
153: * Returns the next item in a preorder DFS traversal.
154: */
155: public NavItem getNextPreorder() {
156: Tree nextTree = tree.getNextPreorder();
157:
158: if (nextTree == null)
159: return null;
160: else
161: return (NavItem) nextTree.getData();
162: }
163:
164: /**
165: * Returns the specialized family navigation
166: */
167: public ArrayList familyNavigation() {
168: ArrayList list = new ArrayList();
169:
170: familyNavigation(tree, list);
171:
172: return list;
173: }
174:
175: /**
176: * Specialized to get a family navigation.
177: */
178: private boolean familyNavigation(Tree tree, ArrayList results) {
179: if (tree == null) {
180: return false;
181: }
182:
183: boolean hasParent = false;
184: if (tree.getParent() != null) {
185: hasParent = familyNavigation(tree.getParent(), results);
186: }
187:
188: Iterator iter = tree.iterator();
189:
190: boolean hasChild = false;
191: while (iter.hasNext()) {
192: NavItem child = (NavItem) iter.next();
193:
194: if (!hasChild && hasParent)
195: results.add(null);
196:
197: hasChild = true;
198: results.add(child);
199: }
200:
201: return hasChild || hasParent;
202: }
203:
204: public String toString() {
205: return "[NavItem title='" + title + "' link='" + link + "']";
206: }
207: }
|