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 */
016package org.opengion.hayabusa.taglib;
017
018import org.opengion.hayabusa.common.HybsSystem;
019import org.opengion.hayabusa.common.SystemManager ;                                     // 6.3.8.4 (2015/10/09)
020import org.opengion.hayabusa.resource.GUIInfo;
021import org.opengion.fukurou.util.Attributes;
022import org.opengion.fukurou.util.XHTMLTag;
023import org.opengion.fukurou.util.ToString;                                                      // 6.1.1.0 (2015/01/17)
024import org.opengion.fukurou.util.StringUtil ;                                           // 6.2.2.0 (2015/03/27)
025import org.opengion.fukurou.util.Cleanable;                                                     // 6.3.8.4 (2015/10/09)
026import org.opengion.fukurou.util.FileMap;                                                       // 6.3.8.4 (2015/10/09)
027import org.opengion.fukurou.db.DBUtil;                                                          // 6.3.8.4 (2015/10/09)
028
029import static org.opengion.fukurou.util.StringUtil.nval ;
030
031import java.util.Set;                                                                                           // 6.3.8.4 (2015/10/09)
032import java.util.HashSet;                                                                                       // 6.3.8.4 (2015/10/09)
033
034/**
035 * 画面IDと同じヘルプファイルがあればリンクを作成するタグです(通常は query.jsp に組込み)。
036 *
037 * ヘルプファイルは、システムパラメータ の HELP_URL で定義されているhelpフォルダに配置します。
038 * このフォルダに、画面IDと同じファイル(例えば、GE0001.html など)があれば、リンクを作成します。
039 * ファイルがなければ、リンクは表示されません。
040 * メッセージの表示の制御は、viewMsg 属性で指定します。(false でファイルが存在した場合のみ表示)
041 * ファイルの拡張子も指定できますが、一般に、html でヘルプファイルを作成するほうが
042 * すばやく表示できます。
043 * ※ 6.3.8.4 (2015/10/09) topMenuタグ内のhelpタグ機能 廃止
044 * <del>また、og:topMenuタグ内にこのタグを記述することで、各画面分類に対するヘルプを表示することが
045 * できるようになります。
046 * (この場合も、画面分類のキーがヘルプファイルのキーになります)</del>
047 *
048 * ※ 6.3.8.4 (2015/10/09)
049 *    ヘルプファイルと、GE80(FAQテーブル)の関連画面IDについて、先に検索してMapにセットする方法に変更します。
050 *    従来は、ヘルプファイルは都度、GE80(FAQテーブル)は、org.opengion.hayabusa.resource.GUIDataLoader
051 *    で、読込処理していました。
052 *
053 * @og.formSample
054 * ●形式:一般ユーザーが直接組み込むことはありません。
055 * ●body:なし
056 *
057 * ●Tag定義:
058 *   &lt;og:help
059 *       guiInfoKey         【TAG】GUIInfo のキーを指定します
060 *       lbl                【TAG】ラベルリソースのラベルIDを指定します
061 *       target             【TAG】TARGET 属性を指定します(初期値:_blank)
062 *       viewMsg            【TAG】メッセージを常時表示させるかどうか[true/false]を指定します(初期値:false)
063 *       iconURL            【TAG】ヘルプリンクをアイコンで指定する場合のアイコンURLを指定します (初期値:DEFAULT_HELP_ICON[=/icon/help.png])
064 *       faqIconURL         【TAG】FAQリンクをアイコンで指定する場合のアイコンURLを指定します (初期値:DEFAULT_FAQ_ICON[=/icon/qaicon.png])
065 *       useFaq             【TAG】FAQ表示の機能を利用するかどうか[true/false]を指定します (初期値:USE_GUI_FAQ[=false])
066 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
067 *   /&gt;
068 *
069 * 【廃止】6.3.8.4 (2015/10/09) 物理削除
070 *   //  extension          【廃止】拡張子を指定します(初期値:html) 6.3.8.4 (2015/10/09) 廃止
071 *
072 * ●使用例
073 *     &lt;og:help guiInfoKey="{&#064;GUI.KEY}" lbl="HELP" /&gt;
074 *
075 *     &lt;og:help
076 *        guiInfoKey    = "GUIInfo のキーを指定します(必須)。"
077 *        lbl           = "ラベルリソースのメッセージIDを指定します。"
078 *        target        = "TARGET 属性を指定します(初期値:_blank)。"
079 *        viewMsg       = "メッセージを常時表示させるかどうか[true/false]を指定します(初期値:false)。"
080 *        iconURL       = "ヘルプアイコンのURL(初期値:/icon/help.png)"; // 5.3.8.0 (2011/08/01)
081 *     /&gt;
082 *
083 * @og.rev 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
084 * @og.group メニュー制御
085 *
086 * @version  4.0
087 * @author       Kazuhiko Hasegawa
088 * @since    JDK5.0,
089 */
090public class HelpTag extends CommonTagSupport {
091        /** このプログラムのVERSION文字列を設定します。   {@value} */
092        private static final String VERSION = "7.3.2.3 (2021/04/09)" ;
093        private static final long serialVersionUID = 732320210409L ;
094
095        private static final String     JSP = HybsSystem.sys( "JSP" );
096
097        // 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の関連画面ID のキャッシュ
098        // GE80(FAQテーブル)の関連画面IDの初期一括読み込みのクエリー
099        // 関連画面ID は、後で分割します。
100        private static final String QUERY = "select KNRNGUI from GE80 where SYSTEM_ID = ? and FGJ='1' and KNRNGUI is not null" ;
101
102        // リソースの接続先を、取得します。
103        private static final String DBID = HybsSystem.sys( "RESOURCE_DBID" );
104
105        // 6.3.8.4 (2015/10/09) ヘルプファイルと、GE80(FAQテーブル)の関連画面ID のキャッシュ
106        private static final FileMap            HELP_MAP        = new FileMap();                // 6.4.1.1 (2016/01/16) helpMap → HELP_MAP  refactoring
107        private static final Set<String>        FAQ_SET         = new HashSet<>();              // 6.4.1.1 (2016/01/16) faqSet  → FAQ_SET  refactoring
108
109        // 6.3.8.4 (2015/10/09) ヘルプファイルと、GE80(FAQテーブル)の関連画面ID のキャッシュ
110        static {
111                final Cleanable clr = new Cleanable() {
112                        /**
113                         * 初期化(クリア)します。
114                         * 主に、キャッシュクリアで利用します。
115                         */
116                        public void clear() {
117                                HELP_MAP.clear();                       // 6.3.9.0 (2015/11/06)
118                                FAQ_SET.clear();
119                        }
120                };
121                SystemManager.addCleanable( clr );
122        }
123
124        // 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
125        private static final String ICON_DIR = "/" + HybsSystem.sys( "ICON_DIR" ) + "/" ;               // 互換性の為、前後に "/" を付けておく。
126
127        private String  guiInfoKey      ;
128        private String  target          = "_blank";             // 3.6.0.7 (2004/11/06)
129        private boolean viewMsg         ;
130
131        // 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
132//      private String  iconURL         = HybsSystem.sys( "DEFAULT_HELP_ICON" );        // 5.4.3.6 (2012/01/19)
133//      private String  faqIconURL      = HybsSystem.sys( "DEFAULT_FAQ_ICON" );         // 5.5.0.4 (2012/03/16)
134//      private String  faqGUI          = HybsSystem.sys( "DEFAULT_FAQ_GUI" );          // 5.5.0.4 (2012/03/16)
135        private String  iconURL         = ICON_DIR + HybsSystem.sys( "DEFAULT_HELP_ICON" );     // 7.3.2.3 (2021/04/09)
136        private String  faqIconURL      = ICON_DIR + HybsSystem.sys( "DEFAULT_FAQ_ICON" );      // 7.3.2.3 (2021/04/09)
137        private String  faqGUI          = ICON_DIR + HybsSystem.sys( "DEFAULT_FAQ_GUI" );       // 7.3.2.3 (2021/04/09)
138
139//      private boolean  useFaq         = HybsSystem.sysBool( "USE_GUI_FAQ" );          // 5.6.7.3 (2013/08/23) 6.9.5.0 (2018/04/23) 廃止
140//      private boolean  useFaqCtrl     = HybsSystem.sysBool( "USE_GUI_FAQ_CTRL" ); // 6.3.8.4 (2015/10/09) 6.9.5.0 (2018/04/23) 廃止
141        private boolean  useFaq         ;                                                                                       // 6.9.5.0 (2018/04/23) 初期値固定
142
143        /**
144         * デフォルトコンストラクター
145         *
146         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
147         */
148        public HelpTag() { super(); }           // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
149
150        /**
151         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
152         *
153         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
154         * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応
155         * @og.rev 5.5.0.4 (2012/03/16) FAQ対応
156         * @og.rev 5.6.4.3 (2013/05/26) FAQの画面別対応
157         * @og.rev 6.3.8.4 (2015/10/09) topMenu 内でのHelp機能を廃止します。
158         * @og.rev 6.3.9.0 (2015/11/06) helpMapの初期化を、initメソッドに変更する。
159         *
160         * @return      後続処理の指示
161         */
162        @Override
163        public int doEndTag() {
164                debugPrint();           // 4.0.0 (2005/02/28)
165
166                // 6.3.8.4 (2015/10/09) 初期化されているかどうかの判定を、helpMap で行う。
167                // 6.3.9.0 (2015/11/06) helpMapの初期化を、initメソッドに変更する。
168                if( !HELP_MAP.isInit() ) {
169                        final String baseURL = HybsSystem.sys( "HELP_URL" );
170                        HELP_MAP.init( HybsSystem.url2dir( baseURL ) , baseURL );
171                        loadGE80();
172                }
173
174                // 6.3.8.4 (2015/10/09) topMenu 内でのHelp機能を廃止します。
175                        jspPrint( makeHelpTag() );                      // メソッド名変更
176                        if( useFaq ) {
177                                jspPrint( makeTagFaq() );
178                        }
179
180                return EVAL_PAGE ;
181        }
182
183        /**
184         * タグリブオブジェクトをリリースします。
185         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
186         *
187         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
188         * @og.rev 3.0.0.3 (2003/02/21) ターゲット属性の新規追加他
189         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
190         * @og.rev 3.6.0.7 (2004/11/06) target 属性の初期値を _new から _blank に変更
191         * @og.rev 5.3.8.0 (2011/08/01) iconURL追加
192         * @og.rev 5.5.0.4 (2012/03/16) faq
193         * @og.rev 5.6.4.3 (2013/05/24) faqCtrl
194         * @og.rev 5.6.7.3 (2013/08/23) useFaq と useFaqCtrl のキーの後ろにスペースが入っていた。
195         * @og.rev 6.3.8.4 (2015/10/09) extension 廃止。
196         * @og.rev 6.9.5.0 (2018/04/23) useFaq 初期値固定、useFaqCtrl 廃止。
197         * @og.rev 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
198         */
199        @Override
200        protected void release2() {
201                super.release2();
202                guiInfoKey      = null;
203                target          = "_blank";                                                                             // 3.6.0.7 (2004/11/06)
204                viewMsg         = false;
205
206                // 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
207//              iconURL         = HybsSystem.sys( "DEFAULT_HELP_ICON" );                // 5.4.3.6 (2012/01/19)
208//              faqIconURL      = HybsSystem.sys( "DEFAULT_FAQ_ICON" );                 // 5.5.0.4 (2012/03/16)
209//              faqGUI          = HybsSystem.sys( "DEFAULT_FAQ_GUI" );                  // 5.5.0.4 (2012/03/16)
210
211                iconURL         = ICON_DIR + HybsSystem.sys( "DEFAULT_HELP_ICON" );     // 7.3.2.3 (2021/04/09)
212                faqIconURL      = ICON_DIR + HybsSystem.sys( "DEFAULT_FAQ_ICON" );      // 7.3.2.3 (2021/04/09)
213                faqGUI          = ICON_DIR + HybsSystem.sys( "DEFAULT_FAQ_GUI" );       // 7.3.2.3 (2021/04/09)
214
215//              useFaq          = HybsSystem.sysBool( "USE_GUI_FAQ" );                  // 5.6.7.3 (2013/08/23)
216//              useFaqCtrl      = HybsSystem.sysBool( "USE_GUI_FAQ_CTRL" );             // 5.6.7.3 (2013/08/23)
217                useFaq          = false;                                                                                // 6.9.5.0 (2018/04/23)
218        }
219
220        /**
221         * HELPリンクを作成します。
222         *
223         * @og.rev 3.0.0.3 (2003/02/21) ターゲット属性の新規追加
224         * @og.rev 3.0.1.0 (2003/03/03) viewMsg フラグの制御のバグ修正
225         * @og.rev 5.3.8.0 (2011/08/01) iconURL対応
226         * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応
227         * @og.rev 5.5.0.4 (2012/03/16) faq
228         * @og.rev 6.3.8.4 (2015/10/09) ヘルプファイルと、GE80(FAQテーブル)の関連画面ID のキャッシュ
229         * @og.rev 6.3.8.4 (2015/10/09) メソッド名変更と、private 化。
230         *
231         * @return      リンクタグ文字列
232         */
233        private String makeHelpTag() {
234
235                if( guiInfoKey == null ) {
236                        guiInfoKey = getGUIInfoAttri( "KEY" );
237                }
238
239                // 6.3.8.4 (2015/10/09) ヘルプファイルと、GE80(FAQテーブル)の関連画面ID のキャッシュ
240                final String url = HELP_MAP.getFilename( guiInfoKey );
241                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
242                return url == null
243                                        ? viewMsg
244                                                ? getLinkBody( null,getMsglbl() ) : ""
245                                        : getLink( url );
246        }
247
248        /**
249         * FAQリンクを作成します。
250         *
251         * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応
252         * @og.rev 5.6.4.3 (2013/05/24) FAQ存在チェック対応
253         * @og.rev 6.3.8.4 (2015/10/09) 判定ロジックを、画面リソースではなく、内部Setで行う。
254         * @og.rev 6.9.5.0 (2018/04/23) useFaqCtrl 廃止(画面IDがある場合のみ表示)。
255         *
256         * @return      リンクタグ文字列
257         */
258        private String makeTagFaq() {
259                String rtn = "";
260
261                if( guiInfoKey == null ) {
262                        guiInfoKey = getGUIInfoAttri( "KEY" );
263                }
264
265                // 6.3.8.4 (2015/10/09) 判定ロジック変更。前の判定方法は、間違っていたため、修正。
266//              if( !useFaqCtrl || FAQ_SET.contains( guiInfoKey ) ) {
267                if( FAQ_SET.contains( guiInfoKey ) ) {                                          // 6.9.5.0 (2018/04/23) useFaqCtrl 廃止(画面IDがある場合のみ表示)
268                        final GUIInfo guiInfo = getGUIInfo( faqGUI );
269                        if( guiInfo == null ) { return rtn; }   // 見つからない場合は、アクセス不可
270
271                        final String address = guiInfo.getRealAddress( get( "href" ) );
272                        // KNRNGUI は、前後に %(のURLencode文字)を付けます。RequestParameter 処理は不要
273                        final String url = address+"index.jsp?command=NEW&GAMENID="+faqGUI+"&KNRNGUI=%25"+guiInfoKey+"%25" ;
274
275                        rtn = getFAQLink( url );
276                }
277
278                return rtn;
279        }
280
281        /**
282         * リンク文字列を作成します。
283         *
284         * @og.rev 5.3.9.0 (2011/09/01) 新規作成
285         * @og.rev 5.5.0.4 (2012/03/16) faq
286         *
287         * @param       url     リンクのURL
288         *
289         * @return      リンク文字列
290         * @og.rtnNotNull
291         */
292        private String getLink( final String url ) {
293                // 6.1.1.0 (2015/01/17) Attributesの連結記述
294                return XHTMLTag.link(
295                                new Attributes()
296                                        .set( "href"    , getContextPath() + "/" + url )
297                                        .set( "body"    , getLinkBody( iconURL,getMsglbl() ) )          //5.5.0.4 (2012/03/16)
298                                        .set( "target"  , target )
299                                        .set( "class"   , "helplink" )
300                        );
301        }
302
303        /**
304         * FAQリンク文字列を作成します。
305         *
306         * @og.rev 5.5.0.4 (2012/03/16) 新規作成
307         *
308         * @param       url     リンクのURL
309         *
310         * @return      リンク文字列
311         * @og.rtnNotNull
312         */
313        private String getFAQLink( final String url ) {
314                // 6.1.1.0 (2015/01/17) Attributesの連結記述
315                return XHTMLTag.link(
316                                new Attributes()
317                                        .set( "href"    , url )
318                                        .set( "body"    , getLinkBody( faqIconURL,"FAQ" ) )
319                                        .set( "target"  , target )
320                                        .set( "class"   , "faqlink" )
321                        ) ;
322        }
323
324        /**
325         * リンクのボディー部分を作成します。
326         *
327         * @og.rev 5.3.8.0 (2011/08/01) 新規作成
328         * @og.rev 5.3.9.0 (2011/09/01) 画像表示時にtitle属性を付加
329         * @og.rev 5.5.0.4 (2012/03/16) 引数対応
330         * @og.rev 6.2.2.0 (2015/03/27) BRと\nを相互に変換する処理を追加
331         * @og.rev 6.2.2.3 (2015/04/10) htmlフィルターに、BR→改行処理機能を追加。
332         * @og.rev 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。
333         *
334         * @param       icon    アイコン
335         * @param       title   タイトル
336         *
337         * @return      リンクボディー文字列
338         * @og.rtnNotNull
339         */
340        private String getLinkBody(final String icon, final String title) {
341                // 6.1.1.0 (2015/01/17) refactoring. ロジックの見直し
342
343                return icon == null || icon.isEmpty()
344                                                        ? getMsglbl()
345//                                                      : "<img src=\"" + JSP + icon + "\" title=\"" + StringUtil.htmlFilter( title,true ) + "\"/>";
346                                                        : "<img src=\"" + JSP + icon + "\" title=\"" + StringUtil.htmlFilter( title,true ) + "\">";             // 7.0.1.0 (2018/10/15)
347        }
348
349        /**
350         * 【TAG】GUIInfo のキーを指定します。
351         *
352         * @og.tag GUIInfo のキーを指定します。
353         *
354         * @param       key     GUIInfoのキー
355         */
356        public void setGuiInfoKey( final String key ) {
357                guiInfoKey = getRequestParameter( key );
358        }
359
360//      /**
361//       * 【廃止】拡張子を指定します(初期値:html)。
362//       *
363//       * @og.tag
364//       * なにも設定されていない場合は、"html" が初期値となります。
365//       * ここでは、ピリオドは、含める必要はありません。
366//       *
367//       * @og.rev 6.3.8.4 (2015/10/09) 廃止。
368//       *     フォルダをスキャンして、必要なHelpファイルを見つけるため、
369//       *     拡張子を指示する必要がなくなりました。
370//       *
371//       * @og.rev 6.9.5.0 (2018/04/23) 物理的に廃止
372//       * @param       ext 拡張子
373//       */
374//      public void setExtension( final String ext ) {
375//      }
376
377        /**
378         * 【TAG】TARGET 属性を指定します(初期値:_blank)。
379         *
380         * @og.tag
381         * 初期値は、 "_blank" として、新規に画面を立ち上げます。
382         * CONTENTS 等を指定すれば、コンテンツフレーム(メニューの右側全面)に、
383         * RESULT を指定すれば、リザルトフレーム(メニュー右下側)に表示します。
384         *
385         * @og.rev 3.0.0.3 (2003/02/21) ターゲット属性の新規追加
386         *
387         * @param       val TARGET属性(初期値:"_blank")
388         */
389        public void setTarget( final String val ) {
390                target = nval( getRequestParameter( val ),target );
391        }
392
393        /**
394         * 【TAG】メッセージを常時表示させるかどうか[true/false]を指定します(初期値:false)。
395         *
396         * @og.tag
397         * "true"の場合は、常時表示させます。
398         * ファイルが、存在した場合は、リンクが張られ、存在しない場合は、リンクが
399         * 張られません。
400         * "false" の場合は、ファイルが、存在した場合は、リンクが張られ、存在しない場合は、
401         * なにも表示されません。
402         * 初期値は、 "false"(メッセージを常時表示しない)です。
403         *
404         * @og.rev 3.0.0.3 (2003/02/21) メッセージ表示属性の新規追加
405         *
406         * @param       flag メッセージ常時表示 [true:常時表示/false:非表示]
407         */
408        public void setViewMsg( final String flag ) {
409                viewMsg = nval( getRequestParameter( flag ),viewMsg );
410        }
411
412        /**
413         * 【TAG】ヘルプリンクをアイコンで指定する場合のアイコンURLを指定します
414         *              (初期値:DEFAULT_HELP_ICON[={@og.value SystemData#DEFAULT_HELP_ICON}])。
415         *
416         * @og.tag
417         * ヘルプリンクをアイコンで指定する場合、そのアイコン画像のURLを指定します。
418         * URLは、/[CONTEXT_PATH]/jspを基準として指定します。
419//       * 例) /ge/jsp/image/help.pngに存在する画像を指定する場合、iconURL=/image/help.pngを指定します。
420         * 例) /ge/jsp/icon/help.pngに存在する画像を指定する場合、iconURL=/icon/help.pngを指定します。
421         * このURLが指定されない場合、ヘルプリンクは、msgLbl属性で指定されたテキストで表示されます。
422         * (初期値:システム定数のDEFAULT_HELP_ICON[={@og.value SystemData#DEFAULT_HELP_ICON}])。
423         *
424         * @og.rev 5.3.8.0 (2011/08/01) 新規追加
425         * @og.rev 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
426         *
427         * @param url アイコンURL
428         * @see         org.opengion.hayabusa.common.SystemData#DEFAULT_HELP_ICON
429         */
430        public void setIconURL( final String url ) {
431                iconURL = nval( getRequestParameter( url ),iconURL );
432        }
433
434        /**
435         * 【TAG】FAQリンクをアイコンで指定する場合のアイコンURLを指定します
436         *              (初期値:DEFAULT_FAQ_ICON[={@og.value SystemData#DEFAULT_FAQ_ICON}])。
437         *
438         * @og.tag
439         * FAQリンクをアイコンで指定する場合、そのアイコン画像のURLを指定します。
440         * URLは、/[CONTEXT_PATH]/jspを基準として指定します。
441//       * 例) /ge/jsp/image/help.pngに存在する画像を指定する場合、iconURL=/image/help.pngを指定します。
442         * 例) /ge/jsp/icon/help.pngに存在する画像を指定する場合、iconURL=/icon/help.pngを指定します。
443         * (初期値:システム定数のDEFAULT_FAQ_ICON[={@og.value SystemData#DEFAULT_FAQ_ICON}])。
444         *
445         * @og.rev 5.3.8.0 (2011/08/01) 新規追加
446         * @og.rev 7.3.2.3 (2021/04/09) システム定数のICON_DIRを使用します。
447         *
448         * @param url アイコンURL
449         * @see         org.opengion.hayabusa.common.SystemData#DEFAULT_FAQ_ICON
450         */
451        public void setFaqIconURL( final String url ) {
452                faqIconURL = nval( getRequestParameter( url ),faqIconURL );
453        }
454
455        /**
456         * 【TAG】FAQ表示の機能を利用するかどうか[true/false]を指定します(初期値:false)。
457         *
458         * @og.tag
459         * trueを指定すると、FAQ画面へのリンクが表示されます。(GE80にデータが存在するかは無関係)
460         * リンク先はfaqGUIでセットした画面に対して画面IDを引数としてわたします。
461         * (初期値:false)。
462         *
463         * @og.rev 5.5.0.4 (2012/03/16) 新規追加
464         * @og.rev 6.9.5.0 (2018/04/23) 初期値固定
465         *
466         * @param       flag FAQ表示利用 [true:利用する/false:利用しない]
467         */
468        public void setUseFaq( final String flag ) {
469                useFaq = nval( getRequestParameter( flag ),useFaq );
470        }
471
472//      /**
473//       * 【TAG】FAQに関連画面機能を利用するかどうか[true/false]を指定します
474//       *              (初期値:USE_GUI_FAQ_CTRL[={@og.value SystemData#USE_GUI_FAQ_CTRL}])。
475//       *
476//       * @og.tag
477//       * trueを指定すると、GE80にデータが関連画面IDとして存在する場合のみアイコンを
478//       * リンク先はfaqGUIでセットした画面に対して画面IDを引数として渡します。
479//       * falseの場合は、瀬音z内チェックを行わないため、常に表示されます。
480//       * (ただし、useFaq=true の場合のみ)
481//       * (初期値:システム定数のUSE_GUI_FAQ[={@og.value SystemData#USE_GUI_FAQ}])。
482//       *
483//       * @og.rev 5.6.4.3 (2013/05/24) 新規追加
484//       * @og.rev 6.9.5.0 (2018/04/23) useFaqCtrl 廃止(画面IDがある場合のみ表示)。
485//       *
486//       * @param       flag FAQの存在チェック機能 [true:利用する/false:利用しない]
487//       * @see         org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ_CTRL
488//       * @see         #setUseFaq( String )
489//       */
490//      public void setUseFaqCtrl( final String flag ) {
491//              useFaqCtrl = nval( getRequestParameter( flag ),useFaqCtrl );
492//      }
493
494        /**
495         * GE80(FAQテーブル)より 関連画面IDを取得、分割して、FAQセットに設定します。
496         *
497         * 関連画面IDは、スペース、またはCSV形式として、分割します。
498         * 分割後、trim() されたデータを、FAQセット に追加していきます。
499         * 画面IDは、存在チェックに使うため、重複は関係ありません。
500         *
501         * @og.rev 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の関連画面ID のキャッシュ
502         */
503        private void loadGE80() {
504                final String[] args = new String[] { HybsSystem.sys( "SYSTEM_ID" ) };
505
506                final String[][] vals = DBUtil.dbExecute( QUERY,args,getApplicationInfo(),DBID );
507                final int len = vals.length;
508
509                for( int i=0; i<len; i++ ) {
510                        final String[] guis = vals[i][0].split( "[ ,]" );               // 最初のカラムを、スペースかカンマで分解する。
511                        for( int j=0; j<guis.length; j++ ) {
512                                FAQ_SET.add( guis[j] );
513                        }
514                }
515        }
516
517        /**
518         * このオブジェクトの文字列表現を返します。
519         * 基本的にデバッグ目的に使用します。
520         *
521         * @return このクラスの文字列表現
522         * @og.rtnNotNull
523         */
524        @Override
525        public String toString() {
526                return ToString.title( this.getClass().getName() )
527                                .println( "VERSION"             ,VERSION        )
528                                .println( "guiInfoKey"  ,guiInfoKey     )
529                                .println( "target"              ,target         )
530                                .println( "viewMsg"             ,viewMsg        )
531                                .println( "iconURL"             ,iconURL        )
532                                .println( "Other..."    ,getAttributes().getAttribute() )
533                                .fixForm().toString() ;
534        }
535}