001 // Copyright 2007, 2008, 2011 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry5.javadoc; 016 017 import java.io.IOException; 018 import java.io.Writer; 019 import java.util.regex.Pattern; 020 021 import com.sun.javadoc.FieldDoc; 022 import com.sun.javadoc.SeeTag; 023 import com.sun.javadoc.Tag; 024 025 public class ParameterDescription 026 { 027 public final FieldDoc field; 028 029 public final String name; 030 031 public final String type; 032 033 public final String defaultValue; 034 035 public final String defaultPrefix; 036 037 public final boolean required; 038 039 public final boolean allowNull; 040 041 public final boolean cache; 042 043 public final String since; 044 045 public final boolean deprecated; 046 047 private static final Pattern STRIPPER = Pattern.compile("(<.*?>|&.*?;)", Pattern.DOTALL); 048 049 public ParameterDescription(FieldDoc fieldDoc, String name, String type, String defaultValue, String defaultPrefix, 050 boolean required, boolean allowNull, boolean cache, String since, boolean deprecated) 051 { 052 this.field = fieldDoc; 053 this.name = name; 054 this.type = type; 055 this.defaultValue = defaultValue; 056 this.defaultPrefix = defaultPrefix; 057 this.required = required; 058 this.allowNull = allowNull; 059 this.cache = cache; 060 this.since = since; 061 this.deprecated = deprecated; 062 } 063 064 public void writeDescription(Writer writer) throws IOException 065 { 066 StringBuilder builder = new StringBuilder(); 067 068 for (Tag tag : field.inlineTags()) 069 { 070 if (tag.name().equals("Text")) 071 { 072 builder.append(tag.text()); 073 continue; 074 } 075 076 if (tag.name().equals("@link")) 077 { 078 SeeTag seeTag = (SeeTag) tag; 079 080 String label = seeTag.label(); 081 if (label != null && !label.equals("")) 082 { 083 builder.append(label); 084 continue; 085 } 086 087 if (seeTag.referencedClassName() != null) 088 builder.append(seeTag.referencedClassName()); 089 090 if (seeTag.referencedMemberName() != null) 091 { 092 builder.append("#"); 093 builder.append(seeTag.referencedMemberName()); 094 } 095 } 096 } 097 098 String text = builder.toString(); 099 100 // Fix it up a little. 101 102 // Remove any simple open or close tags found in the text, as well as any XML entities. 103 104 String stripped = STRIPPER.matcher(text).replaceAll(""); 105 106 writer.write(stripped); 107 } 108 }