/* * Copyright (c) 1998-2011 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 Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Emil Ong */ package com.caucho.xtpdoc; import com.caucho.vfs.Path; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.logging.Logger; public class Navigation { private static final Logger log = Logger.getLogger(Navigation.class.getName()); private Document _document; private Navigation _parent; private int _depth; private Path _rootPath; private String _uri; private String _section; private boolean _threaded; private boolean _comment; private final ArrayList<NavigationItem> _items = new ArrayList<NavigationItem>(); private NavigationItem _docItem; private NavigationItem _child; private final HashMap<String,NavigationItem> _itemMap = new HashMap<String,NavigationItem>(); private final HashMap<String,NavigationItem> _refMap = new HashMap<String,NavigationItem>(); public Navigation(Document document, String uri, Path path, int depth) { _document = document; _rootPath = path; _uri = uri; _depth = depth; } public Navigation(Navigation parent, String uri, Path path, int depth) { _parent = parent; _document = parent.getDocument(); _rootPath = path; _uri = uri; _depth = depth; } public Path getRootPath() { return _rootPath; } public void setChild(NavigationItem child) { _child = child; } public String getUri() { return _uri; } public Document getDocument() { return _document; } public Navigation getParent() { return _parent; } public void setSection(String section) { _section = section; } public String getSection() { return _section; } public void setComment(boolean comment) { _comment = comment; } public void setThreaded(boolean threaded) { _threaded = threaded; } public NavigationItem getRoot() { if (_items.size() > 0) return _items.get(0); else return null; } public NavigationItem createItem() { return new NavigationItem(this, null, _depth); } public void addItem(NavigationItem item) { _items.add(item); } public void putItem(String uri, NavigationItem item) { if (_child != null && _child.getUri().equals(uri)) { if (item.getParent() != null) _child.setParent(item.getParent()); _itemMap.put(uri, _child); if (_child.getReference() != null) _refMap.put(_child.getReferenceUri(), _child); } else { _itemMap.put(uri, item); if (item.getReference() != null) _refMap.put(item.getReferenceUri(), item); } if (_parent != null) _parent.putItem(uri, item); } public NavigationItem getItem(String uri) { NavigationItem item = _itemMap.get(uri); if (item == null) item = _refMap.get(uri); return item; } public NavigationItem getItemByReference(String uri) { return _itemMap.get(uri); } public NavigationItem getRootItem() { if (_items.size() > 0) return _items.get(0); else return null; } public void writeHtml(XMLStreamWriter out) throws XMLStreamException { writeHtml(out, "", 1, 0, 4); } public void writeHtml(XMLStreamWriter out, int styleDepth) throws XMLStreamException { writeHtml(out, "", 1, styleDepth, 4); } public void writeHtml(XMLStreamWriter out, String path, int depth, int styleDepth, int maxDepth) throws XMLStreamException { for (NavigationItem item : _items) item.writeHtml(out, path, depth, styleDepth, maxDepth); } protected void initSummary() { for (NavigationItem item : _items) item.initSummary(); } public void writeLeftNav(XMLStreamWriter out) throws XMLStreamException { if (_items.size() > 0) { NavigationItem topItem = _items.get(0); } for (NavigationItem item : _items) item.writeLeftNav(out); } public void writeLaTeX(PrintWriter writer) throws IOException { } }