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 }