package org.codehaus.mojo.jaxb2.schemageneration.postprocessing.javadoc; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import com.thoughtworks.qdox.model.DocletTag; import org.codehaus.mojo.jaxb2.AbstractJaxbMojo; import java.util.List; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; /** * Simplified structure containing comments and tags read from a JavaDoc comment block. * * @author <a href="mailto:lj@jguru.se">Lennart Jörelid</a>, jGuru Europe AB * @since 2.0 */ public class JavaDocData { /** * Substitution value for when no JavaDoc comment text was found within a JavaDoc comment block. */ public static final String NO_COMMENT = ""; // Internal state private String comment; private SortedMap<String, String> tag2ValueMap; /** * Creates a JavaDocData for a particular entry with the supplied JavaDoc comment and List of DocletTags. * * @param comment The actual comment in the JavaDoc. Null values are replaced with the value {@code NO_COMMENT}, * to ensure that the {@code getComment() } method does not return null values. * @param tags The DocletTags of the JavaDoc entry. Can be null or empty. */ public JavaDocData(final String comment, final List<DocletTag> tags) { // Assign internal state this.comment = comment == null ? NO_COMMENT : comment; this.tag2ValueMap = new TreeMap<String, String>(); // Parse, and assign internal state for (DocletTag current : tags) { final String tagName = current.getName(); String tagValue = current.getValue(); // Handle the case of multi-valued tags, such as // // @author SomeAuthor // @author AnotherAuthor // // which becomes [author] --> [SomeAuthor, AnotherAuthor] String currentValue = tag2ValueMap.get(tagName); if (currentValue != null) { tagValue = currentValue + ", " + current.getValue(); } tag2ValueMap.put(tagName, tagValue); } } /** * Retrieves the comment/text in the JavaDoc structure, minus the names and values of any given JavaDoc tags. * * @return the comment/text in the JavaDoc structure, or {@code NO_COMMENT} if no JavaDoc was provided. * Never returns a {@code null} value. */ public String getComment() { return comment; } /** * Retrieves the names and values of all JavaDoc tags found. * If two tags were found (such as two {@code @author} tags, the * value contains all found * * @return A non-null Map relating the names of all supplied JavaDoc Tags to their value(s). */ public SortedMap<String, String> getTag2ValueMap() { return tag2ValueMap; } /** * {@inheritDoc} */ @Override public String toString() { StringBuilder toReturn = new StringBuilder(); toReturn.append("\n+=================\n"); toReturn.append("| Comment: ").append(comment).append("\n"); if (tag2ValueMap.size() == 0) { toReturn.append("| No JavaDoc tags.\n"); } else { toReturn.append("| ").append(tag2ValueMap.size()).append(" JavaDoc tags ...\n"); for (Map.Entry<String, String> current : tag2ValueMap.entrySet()) { toReturn.append("| ").append(current.getKey()).append(": ").append(current.getValue()).append("\n"); } } toReturn.append("+=================\n\n"); return toReturn.toString().replace("\n", AbstractJaxbMojo.NEWLINE); } }