001/* ======================================================================== 002 * JCommon : a free general purpose class library for the Java(tm) platform 003 * ======================================================================== 004 * 005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jcommon/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * --------------------- 028 * DescriptionModel.java 029 * --------------------- 030 * (C)opyright 2003, 2004, by Thomas Morgner and Contributors. 031 * 032 * Original Author: Thomas Morgner; 033 * Contributor(s): David Gilbert (for Object Refinery Limited); 034 * 035 * $Id: DescriptionModel.java,v 1.3 2005/10/18 13:32:37 mungady Exp $ 036 * 037 * Changes 038 * ------- 039 * 21-Jun-2003 : Initial version (TM); 040 * 041 */ 042 043package org.jfree.xml.generator.model; 044 045import java.util.ArrayList; 046import java.util.HashMap; 047 048import org.jfree.util.Log; 049 050/** 051 * A model containing class descriptions. 052 */ 053public class DescriptionModel { 054 055 /** The sources. */ 056 private ArrayList sources; 057 058 /** The classes. */ 059 private ArrayList classes; 060 061 /** Maps classes to class descriptions. */ 062 private HashMap classesMap; 063 064 /** The mapping model. */ 065 private MappingModel mappingModel; 066 067 /** Model comments. */ 068 private Comments modelComments; 069 070 /** Include comments. */ 071 private HashMap includeComments; 072 073 /** 074 * Creates a new class description model. 075 */ 076 public DescriptionModel() { 077 this.classes = new ArrayList(); 078 this.classesMap = new HashMap(); 079 this.mappingModel = new MappingModel(); 080 this.sources = new ArrayList(); 081 this.includeComments = new HashMap(); 082 } 083 084 /** 085 * Adds a class description to the model. 086 * 087 * @param cd the class description. 088 */ 089 public void addClassDescription(final ClassDescription cd) { 090 this.classesMap.put(cd.getObjectClass(), cd); 091 if (!this.classes.contains(cd)) { 092 this.classes.add(cd); 093 } 094 } 095 096 /** 097 * Removes a class description from the model. 098 * 099 * @param cd the class description. 100 */ 101 public void removeClassDescription(final ClassDescription cd) { 102 this.classesMap.remove(cd.getObjectClass()); 103 this.classes.remove(cd); 104 } 105 106 /** 107 * Returns a class description. 108 * 109 * @param index the description index (zero-based). 110 * 111 * @return a class description. 112 */ 113 public ClassDescription get(final int index) { 114 return (ClassDescription) this.classes.get(index); 115 } 116 117 /** 118 * Returns a class description for the given class name. 119 * 120 * @param key the class name. 121 * 122 * @return the class description. 123 */ 124 public ClassDescription get(final Class key) { 125 return (ClassDescription) this.classesMap.get(key); 126 } 127 128 /** 129 * Returns the number of classes in the model. 130 * 131 * @return the number of classes in the model. 132 */ 133 public int size() { 134 return this.classes.size(); 135 } 136 137 /** 138 * Returns the mapping model. 139 * 140 * @return the mapping model. 141 */ 142 public MappingModel getMappingModel() { 143 return this.mappingModel; 144 } 145 146 /** 147 * Adds a source to the model description. 148 * 149 * @param source the source. 150 */ 151 public void addSource(final String source) { 152 this.sources.add(source); 153 } 154 155 /** 156 * Returns the sources for the model description. 157 * 158 * @return The sources. 159 */ 160 public String[] getSources() { 161 return (String[]) this.sources.toArray(new String[this.sources.size()]); 162 } 163 164 /** 165 * Removes any class descriptions that are not fully defined. 166 */ 167 public void prune() { 168 final ClassDescription[] cds = (ClassDescription[]) this.classes.toArray(new ClassDescription[0]); 169 for (int i = 0; i < cds.length; i++) { 170 if (cds[i].isUndefined()) { 171 removeClassDescription(cds[i]); 172 Log.debug("Pruned: " + cds[i].getName()); 173 } 174 } 175 } 176 177 /** 178 * Adds an include comment. 179 * 180 * @param source the source. 181 * @param comments the comments. 182 */ 183 public void addIncludeComment(final String source, final Comments comments) { 184 this.includeComments.put(source, comments); 185 } 186 187 /** 188 * Returns the include comment for the specified source. 189 * 190 * @param source the source. 191 * 192 * @return The include comment. 193 */ 194 public Comments getIncludeComment(final String source) { 195 return (Comments) this.includeComments.get(source); 196 } 197 198 /** 199 * Returns the model comments. 200 * 201 * @return The model comments. 202 */ 203 public Comments getModelComments() { 204 return this.modelComments; 205 } 206 207 /** 208 * Sets the model comments. 209 * 210 * @param modelComments the model comments. 211 */ 212 public void setModelComments(final Comments modelComments) { 213 Log.debug ("Model: Comment set: " + modelComments); 214 this.modelComments = modelComments; 215 } 216 217}