001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.fukurou.taglet;
017
018 import com.sun.tools.doclets.Taglet;
019 import com.sun.javadoc.Tag;
020 import java.util.Map;
021 import org.opengion.fukurou.util.StringUtil;
022
023 /**
024 * ソースコメントからã?タグリブã?ニュアルの属æ?クラス定義(DOC03)へのリンクを作æ?しますã?
025 * これは、å?力可能なキーがサブクラスでæŒ?®šしたクラス名(ã?ä¸?ƒ¨?‰になるためã?
026 * 動的に変化しますã?タグリブã?ニュアル中に記述するのがç?雑になる為、タグ化しますã?
027 * Taglet インターフェースの実è£?‚¯ラスを作æ?しますã?
028 * og.doc3 タグ(属æ?クラスリンク)をå?ç�?�—ますã?
029 *
030 * こã?タグは、インラインタグ 定義されてã�?‚‹ため、@og.tag などに含まれると処ç�?�•れませんã€?
031 * そこでã€?DocletTagWriter#printTag( final Tag[] tag ) に処ç�?‚’追åŠ?�™るå¿?¦�がありますã?
032 *
033 * @og.rev 5.6.3.3 (2013/04/19) 新規作æ?
034 *
035 * @version 4.0
036 * @author Kazuhiko Hasegawa
037 * @since JDK5.0,
038 */
039 public class TagletDoc03Link extends AbstractTaglet {
040
041 private static final String NAME = "og.doc03Link";
042
043 /**
044 * こã?タグレãƒ?ƒˆがインラインタグで
045 * 使用されてã�?‚‹場合ã?true を返しますã?
046 * そうでなã�??合につã�?�¦は false が設定されますã?
047 *
048 * @return インラインタグの場合ã? true、そã�?�§なã�??合ã? false を返しまã�?
049 */
050 @Override
051 public boolean isInlineTag() {
052 return true;
053 }
054
055 /**
056 * 実行時にドックレãƒ?ƒˆがタグレãƒ?ƒˆを読み込んで使用するにはã€?
057 * そã?タグレãƒ?ƒˆがã?次のシグニチャでマッãƒ?を引数として受け取るã€?
058 * レジスタ と呼ばれる static メソãƒ?ƒ‰をもってã�?‚‹å¿?¦�がありますã?
059 * こã?メソãƒ?ƒ‰は、タグレãƒ?ƒˆ名をキーとして、カスタãƒ?‚¿グレãƒ?ƒˆの
060 * インスタンスをã?ãƒ??に追åŠ?�—ますã? タグレãƒ?ƒˆをオーバã?ライドするå?合ã?
061 * 名前の競合を避けるため、新しいタグレãƒ?ƒˆのインスタンスをã?ãƒ??に
062 * 追åŠ?�™る前に、オーバã?ライドされる側のタグレãƒ?ƒˆをã?ãƒ??から
063 * 削除するå¿?¦�がありますã?
064 *
065 * @param tagletMap タグレãƒ?ƒˆマッãƒ?
066 */
067 public static void register( final Map<String,Taglet> tagletMap ) {
068 TagletDoc03Link tagTag = new TagletDoc03Link();
069 Taglet tag = tagletMap.get(NAME);
070 if(tag != null) {
071 tagletMap.remove(NAME);
072 }
073 tagletMap.put(NAME, tagTag);
074 }
075
076 /**
077 * こã?カスタãƒ?‚¿グの名前を返しますã?
078 *
079 * @return カスタãƒ?‚¿グの名前
080 */
081 public String getName() {
082 return NAME;
083 }
084
085 /**
086 * こã?カスタãƒ?‚¿グのタグ表現を受け取りã?
087 * æ–?—å?としての表現を返し、生成されたペã?ジに出力しますã?
088 *
089 * @param tagTag こã?カスタãƒ?‚¿グのタグ表現
090 *
091 * @return こã?タグのæ–?—å?としての表現
092 */
093 public String toString( final Tag tagTag ) {
094 return DocletUtil.doc03LinkTag( tagTag );
095 }
096
097 /**
098 * こã?カスタãƒ?‚¿グのタグ表現の配å?を受け取りã?
099 * æ–?—å?としての表現を返し、生成されたペã?ジに出力しますã?
100 * こã?タグレãƒ?ƒˆがインラインタグを表すå?合ã?
101 * こã?メソãƒ?ƒ‰は null を返しますã?
102 *
103 * @param tagTags こã?カスタãƒ?‚¿グを表すタグの配å?
104 *
105 * @return こã?タグのæ–?—å?としての表現
106 */
107 public String toString( final Tag[] tagTags ) {
108 if(tagTags.length == 0) {
109 return null;
110 }
111
112 StringBuilder result = new StringBuilder();
113 for(int i = 0; i < tagTags.length; i++) {
114 result.append( DocletUtil.doc03LinkTag( tagTags[i] ) );
115 }
116 return result.toString();
117 }
118 }