package org.robobinding.doctaglet;
import java.text.MessageFormat;
import java.util.Map;
import com.sun.javadoc.Doc;
import com.sun.javadoc.Tag;
import com.sun.tools.doclets.formats.html.TagletOutputImpl;
import com.sun.tools.doclets.formats.html.TagletWriterImpl;
import com.sun.tools.doclets.internal.toolkit.taglets.Taglet;
import com.sun.tools.doclets.internal.toolkit.taglets.TagletOutput;
import com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter;
/**
*
* @since 1.0
* @version $Revision: 1.0 $
* @author Cheng Wei
*/
public class PropTaglet implements Taglet {
private static final String NAME = "prop";
private PropParser parser;
private final InlineLinkTagTranslator inlineLinkTagTranslator;
public PropTaglet(PropParser parser, InlineLinkTagTranslator inlineLinkTagTranslator) {
this.parser = parser;
this.inlineLinkTagTranslator = inlineLinkTagTranslator;
}
public String getName() {
return NAME;
}
public TagletOutput getTagletOutput(Doc doc, TagletWriter tagletWriter) throws IllegalArgumentException {
Tag[] tags = doc.tags(NAME);
if (tags.length == 0) {
return null;
}
TagletWriterImpl tagletWriterImpl = (TagletWriterImpl)tagletWriter;
StringBuilder sb = new StringBuilder();
sb.append("<table style=\"border: 2px solid gray\"><caption style=\"text-align:left\"><strong>Supported Properties</strong></caption><tr style=\"background-color:#555555; color: #ffffff\"><th>Name</th><th>Supported types</th><th>Two-ways?</th></tr>");
for (int i=0; i<tags.length; i++) {
Tag tag = tags[i];
Prop prop = parser.parse(tag);
sb.append(MessageFormat.format("<tr style=\"background-color:{0}\"><td><strong>{1}</strong></td><td>{2}</td><td>{3}</td></tr>",
(i % 2 == 0)?"#eeeeef":"#ffffff",
prop.getName(),
inlineLinkTagTranslator.translate(prop.getSupportedTypes(), tag, doc, tagletWriterImpl),
prop.getSupportedBindingTypes()));
}
sb.append("</table></br>");
return new TagletOutputImpl(sb.toString());
}
public static void register(Map<String, Taglet> tagletMap) {
Taglet existing = (Taglet) tagletMap.get(NAME);
if (existing != null) {
tagletMap.remove(NAME);
}
PropTaglet target = new PropTaglet(new PropParser(), new InlineLinkTagTranslator());
tagletMap.put(target.getName(), target);
}
public boolean inPackage() {
return true;
}
public boolean inConstructor() {
return false;
}
public boolean inField() {
return false;
}
public boolean inMethod() {
return false;
}
public boolean inOverview() {
return false;
}
public boolean inType() {
return false;
}
public boolean isInlineTag() {
return false;
}
public TagletOutput getTagletOutput(Tag arg0, TagletWriter arg1) throws IllegalArgumentException {
throw new UnsupportedOperationException();
}
}