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