1 /** 2 * Redistribution and use of this software and associated documentation 3 * ("Software"), with or without modification, are permitted provided 4 * that the following conditions are met: 5 * 6 * 1. Redistributions of source code must retain copyright 7 * statements and notices. Redistributions must also contain a 8 * copy of this document. 9 * 10 * 2. Redistributions in binary form must reproduce the 11 * above copyright notice, this list of conditions and the 12 * following disclaimer in the documentation and/or other 13 * materials provided with the distribution. 14 * 15 * 3. The name "Exolab" must not be used to endorse or promote 16 * products derived from this Software without prior written 17 * permission of Intalio, Inc. For written permission, 18 * please contact info@exolab.org. 19 * 20 * 4. Products derived from this Software may not be called "Exolab" 21 * nor may "Exolab" appear in their names without prior written 22 * permission of Intalio, Inc. Exolab is a registered 23 * trademark of Intalio, Inc. 24 * 25 * 5. Due credit should be given to the Exolab Project 26 * (http://www.exolab.org/). 27 * 28 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS 29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT 30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 32 * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 39 * OF THE POSSIBILITY OF SUCH DAMAGE. 40 * 41 * Copyright 1999-2003 (C) Intalio, Inc. All Rights Reserved. 42 */ 43 package org.exolab.javasource; 44 45 import java.util.Enumeration; 46 import java.util.Vector; 47 48 /** 49 * A class that "SOMEWHAT" represents a JavaDoc Comment. 50 * 51 * @author <a href="mailto:keith AT kvisco DOT com">Keith Visco</a> 52 * @version $Revision$ $Date: 2005-02-26 17:30:28 -0700 (Sat, 26 Feb 2005) $ 53 */ 54 public final class JDocComment { 55 //-------------------------------------------------------------------------- 56 57 /** An ordered list of descriptors. */ 58 private Vector<JDocDescriptor> _descriptors = null; 59 60 /** The internal buffer for this JDocComment. */ 61 private StringBuffer _comment = null; 62 63 //-------------------------------------------------------------------------- 64 65 /** 66 * Creates a new JavaDoc Comment. 67 */ 68 public JDocComment() { 69 super(); 70 71 _descriptors = new Vector<JDocDescriptor>(); 72 _comment = new StringBuffer(); 73 } 74 75 /** 76 * Creates a new JavaDoc Comment and initializie it with given JDocDescriptor. 77 * 78 * @param jdesc The JDocDescriptor to add. 79 */ 80 public JDocComment(final JDocDescriptor jdesc) { 81 super(); 82 83 _descriptors = new Vector<JDocDescriptor>(); 84 _comment = new StringBuffer(); 85 86 addDescriptor(jdesc); 87 } 88 89 //-------------------------------------------------------------------------- 90 91 /** 92 * Adds the given JDocDescriptor to this JDocComment. 93 * 94 * @param jdesc The JDocDescriptor to add. 95 */ 96 public void addDescriptor(final JDocDescriptor jdesc) { 97 if (jdesc == null) { return; } 98 //-- on the fly sorting of descriptors 99 if (_descriptors.size() == 0) { 100 _descriptors.addElement(jdesc); 101 return; 102 } 103 104 for (int i = 0; i < _descriptors.size(); i++) { 105 JDocDescriptor jdd = _descriptors.elementAt(i); 106 107 short compare = jdesc.compareTo(jdd); 108 109 switch (compare) { 110 case 0: // equal 111 _descriptors.insertElementAt(jdesc, i + 1); 112 return; 113 case -1: //-- less than 114 _descriptors.insertElementAt(jdesc, i); 115 return; 116 default: 117 //-- keep looking 118 break; 119 } 120 } 121 122 //-- if we make it here we need to add 123 _descriptors.addElement(jdesc); 124 } 125 126 /** 127 * Appends the provided comment String to this JDocComment. 128 * 129 * @param comment The comment to append. 130 */ 131 public void appendComment(final String comment) { 132 _comment.append(comment); 133 } 134 135 /** 136 * Returns the String value of this JDocComment. 137 * 138 * @return The String value of this JDocComment. 139 */ 140 public String getComment() { 141 return _comment.toString(); 142 } 143 144 /** 145 * Sets the comment String of this JDocComment. 146 * 147 * @param comment The comment String of this JDocComment. 148 */ 149 public void setComment(final String comment) { 150 _comment.setLength(0); 151 _comment.append(comment); 152 } 153 154 /** 155 * Returns an Enumeration of the parameters of this JDocComment. 156 * 157 * @return An Enumeration of the parameters of this JDocComment. 158 */ 159 public Enumeration<JDocDescriptor> getDescriptors() { 160 return _descriptors.elements(); 161 } 162 163 /** 164 * Returns the length of the JavaDoc comment in characters. 165 * 166 * @return The length of the JavaDoc comment in characters. 167 */ 168 public int getLength() { 169 return _comment.length(); 170 } 171 172 /** 173 * Returns the Parameter Descriptor associated with the given name. 174 * 175 * @param name The name whose ParamDescriptor is being searched for. 176 * @return the Parameter Descriptor associated with the given name. 177 */ 178 public JDocDescriptor getParamDescriptor(final String name) { 179 if (name == null) { return null; } 180 181 for (int i = 0; i < _descriptors.size(); i++) { 182 JDocDescriptor jdd 183 = _descriptors.elementAt(i); 184 if (jdd.getType() == JDocDescriptor.PARAM) { 185 if (name.equals(jdd.getName())) { return jdd; } 186 } 187 } 188 return null; 189 } 190 191 //-------------------------------------------------------------------------- 192 193 /** 194 * Prints this JavaDoc comment using the given JSourceWriter. 195 * 196 * @param jsw The JSourceWriter to print to. 197 */ 198 public void print(final JSourceWriter jsw) { 199 //-- I reuse JComment for printing 200 JComment jComment = new JComment(JComment.JAVADOC_STYLE); 201 202 jComment.setComment(_comment.toString()); 203 204 //-- force a separating "*" for readability 205 if (_descriptors.size() > 0) { 206 jComment.appendComment("\n"); 207 } 208 209 for (int i = 0; i < _descriptors.size(); i++) { 210 jComment.appendComment("\n"); 211 jComment.appendComment(_descriptors.elementAt(i).toString()); 212 } 213 jComment.print(jsw); 214 } 215 216 /** 217 * {@inheritDoc} 218 */ 219 public String toString() { 220 StringBuilder sb = new StringBuilder(); 221 sb.append("/**\n"); 222 sb.append(" * "); 223 sb.append(" */\n"); 224 return sb.toString(); 225 } 226 227 //-------------------------------------------------------------------------- 228 }