1 package org.codehaus.mojo.jaxb2.schemageneration.postprocessing.javadoc; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import com.thoughtworks.qdox.model.DocletTag; 23 import org.codehaus.mojo.jaxb2.AbstractJaxbMojo; 24 25 import java.util.List; 26 import java.util.Map; 27 import java.util.SortedMap; 28 import java.util.TreeMap; 29 30 /** 31 * Simplified structure containing comments and tags read from a JavaDoc comment block. 32 * 33 * @author <a href="mailto:lj@jguru.se">Lennart Jörelid</a>, jGuru Europe AB 34 * @since 2.0 35 */ 36 public class JavaDocData { 37 38 /** 39 * Substitution value for when no JavaDoc comment text was found within a JavaDoc comment block. 40 */ 41 public static final String NO_COMMENT = ""; 42 43 // Internal state 44 private String comment; 45 private SortedMap<String, String> tag2ValueMap; 46 47 /** 48 * Creates a JavaDocData for a particular entry with the supplied JavaDoc comment and List of DocletTags. 49 * 50 * @param comment The actual comment in the JavaDoc. Null values are replaced with the value {@code NO_COMMENT}, 51 * to ensure that the {@code getComment() } method does not return null values. 52 * @param tags The DocletTags of the JavaDoc entry. Can be null or empty. 53 */ 54 public JavaDocData(final String comment, final List<DocletTag> tags) { 55 56 // Assign internal state 57 this.comment = comment == null ? NO_COMMENT : comment; 58 this.tag2ValueMap = new TreeMap<String, String>(); 59 60 // Parse, and assign internal state 61 for (DocletTag current : tags) { 62 63 final String tagName = current.getName(); 64 String tagValue = current.getValue(); 65 66 // Handle the case of multi-valued tags, such as 67 // 68 // @author SomeAuthor 69 // @author AnotherAuthor 70 // 71 // which becomes [author] --> [SomeAuthor, AnotherAuthor] 72 String currentValue = tag2ValueMap.get(tagName); 73 if (currentValue != null) { 74 tagValue = currentValue + ", " + current.getValue(); 75 } 76 77 tag2ValueMap.put(tagName, tagValue); 78 } 79 } 80 81 /** 82 * Retrieves the comment/text in the JavaDoc structure, minus the names and values of any given JavaDoc tags. 83 * 84 * @return the comment/text in the JavaDoc structure, or {@code NO_COMMENT} if no JavaDoc was provided. 85 * Never returns a {@code null} value. 86 */ 87 public String getComment() { 88 return comment; 89 } 90 91 /** 92 * Retrieves the names and values of all JavaDoc tags found. 93 * If two tags were found (such as two {@code @author} tags, the 94 * value contains all found 95 * 96 * @return A non-null Map relating the names of all supplied JavaDoc Tags to their value(s). 97 */ 98 public SortedMap<String, String> getTag2ValueMap() { 99 return tag2ValueMap; 100 } 101 102 /** 103 * {@inheritDoc} 104 */ 105 @Override 106 public String toString() { 107 108 StringBuilder toReturn = new StringBuilder(); 109 110 toReturn.append("\n+=================\n"); 111 toReturn.append("| Comment: ").append(comment).append("\n"); 112 113 if (tag2ValueMap.size() == 0) { 114 toReturn.append("| No JavaDoc tags.\n"); 115 } else { 116 117 toReturn.append("| ").append(tag2ValueMap.size()).append(" JavaDoc tags ...\n"); 118 for (Map.Entry<String, String> current : tag2ValueMap.entrySet()) { 119 toReturn.append("| ").append(current.getKey()).append(": ").append(current.getValue()).append("\n"); 120 } 121 } 122 toReturn.append("+=================\n\n"); 123 return toReturn.toString().replace("\n", AbstractJaxbMojo.NEWLINE); 124 } 125 }