/* ======================================================================== * 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.] * * --------------------- * DescriptionModel.java * --------------------- * (C)opyright 2003, 2004, by Thomas Morgner and Contributors. * * Original Author: Thomas Morgner; * Contributor(s): David Gilbert (for Object Refinery Limited); * * $Id: DescriptionModel.java,v 1.3 2005/10/18 13:32:37 mungady Exp $ * * Changes * ------- * 21-Jun-2003 : Initial version (TM); * */ package org.jfree.xml.generator.model; import java.util.ArrayList; import java.util.HashMap; import org.jfree.util.Log; /** * A model containing class descriptions. */ public class DescriptionModel { /** The sources. */ private ArrayList sources; /** The classes. */ private ArrayList classes; /** Maps classes to class descriptions. */ private HashMap classesMap; /** The mapping model. */ private MappingModel mappingModel; /** Model comments. */ private Comments modelComments; /** Include comments. */ private HashMap includeComments; /** * Creates a new class description model. */ public DescriptionModel() { this.classes = new ArrayList(); this.classesMap = new HashMap(); this.mappingModel = new MappingModel(); this.sources = new ArrayList(); this.includeComments = new HashMap(); } /** * Adds a class description to the model. * * @param cd the class description. */ public void addClassDescription(final ClassDescription cd) { this.classesMap.put(cd.getObjectClass(), cd); if (!this.classes.contains(cd)) { this.classes.add(cd); } } /** * Removes a class description from the model. * * @param cd the class description. */ public void removeClassDescription(final ClassDescription cd) { this.classesMap.remove(cd.getObjectClass()); this.classes.remove(cd); } /** * Returns a class description. * * @param index the description index (zero-based). * * @return a class description. */ public ClassDescription get(final int index) { return (ClassDescription) this.classes.get(index); } /** * Returns a class description for the given class name. * * @param key the class name. * * @return the class description. */ public ClassDescription get(final Class key) { return (ClassDescription) this.classesMap.get(key); } /** * Returns the number of classes in the model. * * @return the number of classes in the model. */ public int size() { return this.classes.size(); } /** * Returns the mapping model. * * @return the mapping model. */ public MappingModel getMappingModel() { return this.mappingModel; } /** * Adds a source to the model description. * * @param source the source. */ public void addSource(final String source) { this.sources.add(source); } /** * Returns the sources for the model description. * * @return The sources. */ public String[] getSources() { return (String[]) this.sources.toArray(new String[this.sources.size()]); } /** * Removes any class descriptions that are not fully defined. */ public void prune() { final ClassDescription[] cds = (ClassDescription[]) this.classes.toArray(new ClassDescription[0]); for (int i = 0; i < cds.length; i++) { if (cds[i].isUndefined()) { removeClassDescription(cds[i]); Log.debug("Pruned: " + cds[i].getName()); } } } /** * Adds an include comment. * * @param source the source. * @param comments the comments. */ public void addIncludeComment(final String source, final Comments comments) { this.includeComments.put(source, comments); } /** * Returns the include comment for the specified source. * * @param source the source. * * @return The include comment. */ public Comments getIncludeComment(final String source) { return (Comments) this.includeComments.get(source); } /** * Returns the model comments. * * @return The model comments. */ public Comments getModelComments() { return this.modelComments; } /** * Sets the model comments. * * @param modelComments the model comments. */ public void setModelComments(final Comments modelComments) { Log.debug ("Model: Comment set: " + modelComments); this.modelComments = modelComments; } }