/* ======================================================================== * JCommon : a free general purpose class library for the Java(tm) platform * ======================================================================== * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info: http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ---------------- * SafeTagList.java * ---------------- * (C)opyright 2003-2005, by Thomas Morgner and Contributors. * * Original Author: Thomas Morgner; * Contributor(s): David Gilbert (for Object Refinery Limited); * * $Id: SafeTagList.java,v 1.3 2005/10/18 13:35:06 mungady Exp $ * * Changes * ------- * 21-Feb-2003 : Added standard header and Javadocs (DG); * */ package org.jfree.xml.writer; import java.util.HashMap; /** * A container for information relating to the tags in the JFreeReport XML report files. Some tags * cannot be spread across multiple lines, because it causes problems for the parser. * * @author Thomas Morgner. */ public class SafeTagList { /** Storage for the tag information. */ private HashMap safeTags; /** * A tag description. */ private static class SafeDescription { /** A flag indicating whether or not it is safe to put a new line after the open tag. */ private boolean open; /** A flag indicating whether or not it is safe to put a new line before the close tag. */ private boolean close; /** * Creates a new tag description. * * @param open the 'open' flag. * @param close the 'close' flag. */ public SafeDescription(final boolean open, final boolean close) { this.open = open; this.close = close; } /** * Returns the 'open' flag. * * @return <code>true</code> or <code>false</code>. */ public boolean isOpen() { return this.open; } /** * Returns the 'close' flag. * * @return <code>true</code> or <code>false</code>. */ public boolean isClose() { return this.close; } } /** * Creates a new list. */ public SafeTagList() { this.safeTags = new HashMap(); } /** * Adds a tag with both the 'open' and 'close' flags set to <code>true</code>. * * @param tag the tag name. */ public void add (final String tag) { this.safeTags.put(tag, new SafeDescription(true, true)); } /** * Adds a tag. * * @param tag the tag name. * @param open the 'open' flag. * @param closed the 'close' flag. */ public void add (final String tag, final boolean open, final boolean closed) { this.safeTags.put(tag, new SafeDescription(open, closed)); } /** * Returns <code>true</code> if it is safe to start a new line * immediately after an open tag. * * @param tag the tag name. * * @return A boolean. */ public boolean isSafeForOpen (final String tag) { final SafeDescription sd = (SafeDescription) this.safeTags.get(tag); if (sd == null) { return false; } return sd.isOpen(); } /** * Returns <code>true</code> if it is safe to start a new * line immediately after a close tag. * * @param tag the tag name. * * @return A boolean. */ public boolean isSafeForClose (final String tag) { final SafeDescription sd = (SafeDescription) this.safeTags.get(tag); if (sd == null) { return false; } return sd.isClose(); } }