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.hayabusa.resource;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020 import org.opengion.fukurou.util.StringUtil;
021 import org.opengion.fukurou.util.HybsEntry;
022
023 import java.util.List;
024 import java.util.ArrayList;
025 import java.util.Set;
026 import java.util.LinkedHashSet;
027
028 /**
029 * 画面æƒ??の取得ã?為のインターフェースですã?
030 *
031 * {@GUI.XXXX} で、XXXX 部に、GUIInfo オブジェクトで定義されてã�?‚‹
032 * 属æ?æƒ??を取りå?すことがå?来ますã?
033 *
034 * ・KEY 画面ID
035 * ・ADDRESS 実行アドレス
036 * ・REALADDRESS 実行実アドレス
037 * ・SEQUENCE 表示é ?
038 * ・GROUPS メニュグルーãƒ?
039 * ・CLASSIFY メニュåˆ?¡?
040 * ・LEVEL メニュ階層番号
041 * ・LABEL 画面名称
042 * ・NAME 画面名称(=SNAME)
043 * ・SNAME 画面名称(short)
044 * ・LNAME 画面名称(long)
045 * ・ROLES ロールズ
046 * ・MODE アクセスモードå?(mr,mw,-r,-w のç¾??)
047 * ・TARGET ターゲãƒ?ƒˆ
048 * ・PARAM 設定å?(パラメータ)
049 * ・KBLINK リンク区åˆ?
050 * ・DESCRIPTION 概要説æ˜?
051 * ・IMAGEKEY イメージキー
052 * ・DYUPD 更新日æ™?
053 * ・ISREAD 読取り許可[true/false]
054 * ・ISWRITE 書込み許可[true/false]
055 *
056 * @og.group リソース管ç�?
057 *
058 * @version 4.0
059 * @author Kazuhiko Hasegawa
060 * @since JDK5.0,
061 */
062 public final class GUIInfo implements Comparable<GUIInfo> { // 4.3.3.6 (2008/11/15) Generics警告対å¿?
063
064 private static final String YOYAKU = "|KEY|ADDRESS|REALADDRESS|SEQUENCE"
065 + "|GROUPS|CLASSIFY|LEVEL|LABEL|NAME"
066 + "|SNAME|LNAME|ROLES|MODE|TARGET"
067 // + "|PARAM|KBLINK|DESCRIPTION|" ;
068 // + "|PARAM|KBLINK|DESCRIPTION|DYUPD|" ;
069 + "|PARAM|KBLINK|DESCRIPTION|DYUPD|IMAGEKEY|" ; // 5.5.2.5 (2012/05/21) イメージアイコン
070
071 private final GUIData guiData ;
072 private final LabelData labelData ;
073 private final String[] groupKeys ;
074
075 private final boolean menuFlag ; // メニューへの表示可否属æ?
076 private final boolean writeFlag ; // 書き込み許可属æ?
077 // private final boolean fileDFlag ; // 4.3.0.0 (2008/07/04) ファイル出力許可属æ?
078 // private final boolean fileUFlag ; // 4.3.0.0 (2008/07/04) ファイル入力許可属æ?
079 private final byte bitMode ; // ビットモーãƒ?UserInfo åŠ?‘³済み)
080 private final boolean pulldownFlag; // 4.3.3.0 (2008/10/01) 強制プルãƒ?‚¦ン化属æ?
081
082 private final GUIAccessCount accessCount ; // こã?画面へのアクセス統計を管ç�?�—ますã?
083
084 private int level = 0;
085
086 private final Set<String> nextGui = new LinkedHashSet<String>(); // 5.2.3.0 (2010/12/01) アクセス履歴管ç�?
087
088 /**
089 * コンストラクター
090 *
091 * 引数の bitMode は、UserInfo とåŠ?‘³済み
092 *
093 * @og.rev 4.3.0.0 (2008/07/04) ファイル入出力制御追åŠ?
094 * @og.rev 4.3.3.0 (2008/10/01) 強制プルãƒ?‚¦ンモード追åŠ?
095 *
096 * @param guiData 画面ãƒ??タオブジェクãƒ?D
097 * @param labelData ラベルãƒ??タオブジェクãƒ?
098 * @param bitMode ビットモードé?åˆ?"--:000","-r:001","-w:010","mr:101","mw:110" に対応した数å?0,1,2,5,6)
099 */
100 public GUIInfo( final GUIData guiData ,
101 final LabelData labelData ,
102 final byte bitMode ) {
103 this.guiData = guiData;
104 this.labelData = labelData;
105 groupKeys = StringUtil.csv2Array( guiData.getGroups() );
106
107 menuFlag = RoleMode.isMenu( bitMode );
108 writeFlag = RoleMode.isWrite( bitMode );
109 pulldownFlag = RoleMode.isPulldown( bitMode ); // 4.3.3.0 (2008/10/01)
110 // fileDFlag = RoleMode.isDownload( bitMode );
111 // fileUFlag = RoleMode.isUpload( bitMode );
112 accessCount = new GUIAccessCount( guiData.getGuiKey() ) ;
113 this.bitMode = bitMode ;
114
115 level = guiData.getGuiLevel();
116 }
117
118 /**
119 * 画面æƒ?? 画面ID を取得しますã?
120 *
121 * @return 画面ID
122 */
123 public String getKey() {
124 return guiData.getGuiKey();
125 }
126
127 /**
128 * 実行アドレスæƒ??を取得しますã?
129 *
130 * @return 実行アドレス
131 */
132 public String getAddress() {
133 return guiData.getAddress();
134 }
135
136 /**
137 * トップからã?実行アドレスæƒ??を取得しますã?
138 * コンãƒ?‚スト名とリンク区åˆ?±žæ?を利用して、サーバã?トップからã?アドレスã‚?
139 * 返しますã?ただしã?GUIリソースに、http://??またã?ã€???から始まるアドレスは
140 * そã?まま、なにも変換せずに返しますã?
141 * 実アドレスには、param属æ?のæƒ??を付加しますã?param属æ?は、接続文字を用ã�?�šに
142 * そã?まま連結されますã?でã€?index.jsp?AAA=XX&BBB=YY とã�?�†感じで "/" から
143 * はじめますã?
144 *
145 * http://AAAA � http://AAAA
146 * ../../AAAA/ � ../../AAAA/
147 * AAAA â‡? /CONTEXT_NAME/KBLINK/AAAA/ param なã�?
148 * AAAA â‡? /CONTEXT_NAME/KBLINK/AAAA/index.jsp?AAA=XX&BBB=YY param あり
149 *
150 * @og.rev 3.5.5.0 (2004/03/12) 新規追åŠ?
151 * @og.rev 4.0.0.0 (2005/01/31) param属æ?追åŠ?
152 *
153 * @return 実行実アドレス
154 */
155 public String getRealAddress() {
156 return guiData.getRealAddress();
157 }
158
159 /**
160 * トップからã?実行アドレスæƒ??を取得しますã?
161 * コンãƒ?‚スト名とリンク区åˆ?±žæ?を利用して、サーバã?トップからã?アドレスã‚?
162 * 返しますã?ただしã?GUIリソースに、http://??またã?ã€???から始まるアドレスは
163 * そã?まま、なにも変換せずに返しますã?
164 * 実アドレスには、param属æ?のæƒ??を付加しますã?param属æ?は、接続文字を用ã�?�šに
165 * そã?まま連結されますã?でã€?index.jsp?AAA=XX&BBB=YY とã�?�†感じで "/" から
166 * はじめますã?
167 * またã?アドレスのæœ?¾Œがスラãƒ?‚·ュ(/)で終äº?�—てã�?‚‹場合ã?、page属æ?を追åŠ?�—ますã?
168 *
169 * http://AAAA � http://AAAA
170 * ../../AAAA/ � ../../AAAA/
171 * AAAA â‡? /CONTEXT_NAME/KBLINK/AAAA/ param なã�?
172 * AAAA â‡? /CONTEXT_NAME/KBLINK/AAAA/index.jsp?AAA=XX&BBB=YY param あり
173 *
174 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?param属æ?追åŠ?
175 *
176 * @param page 実行ã?ージ(index.jsp など)
177 *
178 * @return 実行実アドレス
179 */
180 public String getRealAddress( final String page ) {
181 return guiData.getRealAddress( page );
182 }
183
184 /**
185 * 画面の表示é ?‚’取得しますã?
186 *
187 * @return 画面の表示é ?
188 */
189 public int getSequence() {
190 return guiData.getSeqno();
191 }
192
193 /**
194 * 画面の階層番号(レベル)を取得しますã?
195 * 画面階層はã€?
196 * ã€?:予ç´?šŽ層(å°?�¥çš?�«タブブラウザ対応時に使用
197 * ã€?:トップ階層(通常のメニューのåˆ?¡žとして表示されますã?)
198 * ã€?:選択階層(通常の折りたたみメニューの画面選択時に使用されますã?)
199 * ã€?以ä¸?下位階層(通常の選択メニューとしてã€?¼‘段下げて表示されますã?)
200 * ですã?
201 * なおã?これらã?意味は、実際にメニューを作æ?/表示するクラスに依存しますã?
202 *
203 * @return 画面の表示é ?
204 */
205 public int getLevel() {
206 return level;
207 }
208
209 /**
210 * 画面の階層番号(レベル)をアãƒ??しますã?
211 *
212 * これは、レベルが3ã?場å�?階層時ã?éš?�—メニュー)をレベル?’に
213 * することで、常に見えてã�?‚‹メニューに格上げしますã?
214 * 具体的には、設定å?が隠しメニューの場合に、アクセスするとレベル?’へ格上げ
215 * することで、å?人単位でã€?�Ž去の履歴に応じたメニュー配置が可能になりますã?
216 */
217 public void setLevelUp() {
218 // if( level == 3 ) { level = 2; }
219 if( level == 4 ) { level = 3; } // 4.0.0.0 (2007/10/30)
220 }
221
222 /**
223 * 画面æƒ?? メニュグループã?オリジナルキー を取得しますã?
224 * メニュグループã?、カンマ区åˆ?‚Šでè¤?•°登録できますã?
225 *
226 * @return メニュåˆ?¡žã?キー
227 */
228 public String getGroups() {
229 return guiData.getGroups();
230 }
231
232 /**
233 * æŒ?®šã?æ–?—å?がグループに含まれてã�?‚‹かどã�?�‹を判定しますã?
234 * メニュグループã?、カンマ区åˆ?‚Šでè¤?•°登録できますã?で、そのã�?�¡の
235 * どれかに含まれてã�?‚Œば、true を返しますã?
236 * こã?メニューそã?もã?に、グループがæŒ?®šされてã�?�ªã�??合ã?ã€?
237 * ãƒ?ƒ•ォルトグループとã�?�†扱ã�?�§、true を返しますã?
238 * 引数がã?null またã?、ゼロæ–?—å?の場合も、同様に、true を返しますã?
239 *
240 * @param group 判定するグルーãƒ?
241 *
242 * @return グループに含まれてã�?‚‹かどã�?�‹
243 */
244 public boolean isGroupIn( final String group ) {
245 if( groupKeys.length == 0 || group == null || group.length() == 0 ) {
246 return true;
247 }
248
249 for( int i=0; i<groupKeys.length; i++ ) {
250 if( group.equals( groupKeys[i] ) ) {
251 return true;
252 }
253 }
254 return false;
255 }
256
257 /**
258 * 画面æƒ?? メニュåˆ?¡žã?オリジナルキー を取得しますã?
259 *
260 * @return メニュåˆ?¡žã?キー
261 */
262 public String getClassify() {
263 return guiData.getClassify();
264 }
265
266 /**
267 * 画面æƒ?? 画面名称 を取得しますã?
268 * これは、加工前ã?ラベルリソースに登録されてã�?‚‹値ですã?
269 *
270 * @return 画面名称
271 */
272 public String getLabel() {
273 return labelData.getLabel();
274 }
275
276 /**
277 * 画面æƒ?? 画面名称(short) を取得しますã?
278 * こã?名称は、チãƒ??表示付きのæ–?—å?を返しますã?
279 *
280 * @return 画面名称(short)
281 */
282 public String getName() {
283 return labelData.getShortLabel();
284 }
285
286 /**
287 * 画面æƒ?? 画面名称(long) を取得しますã?
288 * こã?名称は、チãƒ??表示付きのæ–?—å?を返しますã?
289 *
290 * @return 画面名称(long)
291 */
292 public String getLongName() {
293 return labelData.getLongLabel();
294 }
295
296 /**
297 * 画面æƒ?? ロール を取得しますã?
298 * ロールは、AAA|BBB|CCC と『|』ã?区åˆ?‚Šæ–?—でè¤?•°登録できますã?
299 * ユーザーのロール(こちらも、XXX|YYY|AAAとè¤?•°登録可能)とマッチすã‚?
300 * ロールがあれã?、その画面のアクセス許可がありますã?
301 * 読み書きと、メニュー表示は、アクセスモードでæŒ?®šしますã?
302 *
303 * @return ロール
304 */
305 public String getRoles() {
306 return guiData.getRoles();
307 }
308
309 /**
310 * アクセスモードを取得しますã?
311 *
312 * r,w,_ を各ロール毎に設定しますã?
313 * mr:メニューよりアクセスできる読取専用画面ですã?登録ボタンは表示されませんã€?
314 * mw:メニューよりアクセスできる登録編é›?”»面ですã?表示もしますã?
315 * -r:メニューに現れませんがã?アクセスすることは可能ですã?読取専用ã€?
316 * -w:メニューに現れませんがã?アクセスすることは可能ですã?読み書きå?来ますã?
317 *
318 * こã??’文字ずつのセãƒ?ƒˆがã?å�?ƒールに対応付けられたアクセス制御になりますã?
319 * ロールがã?AAA|BBB|CCC|DDD で、モードが mw|mr|-r|-w であればã€?
320 * AAA は、mw , BBB は、mr ?ŒCCC はã€?r ?ŒDDD は -w と設定されたことになりますã?
321 * 特別にã€?¼’文字ã?み登録されたå?合ã?、å?ロールが同ä¸?ƒ¢ードに設å®?
322 * されたとみなしますã?
323 *
324 * @return ロール毎ã?アクセスモードå?(mr,mw,-r,-w のç¾??)
325 */
326 public String getMode() {
327 return guiData.getMode();
328 }
329
330 /**
331 * 画面を表示する時ã?ターゲãƒ?ƒˆ属æ?を取得しますã?
332 *
333 * @return ターゲãƒ?ƒˆ
334 */
335 public String getTarget() {
336 return guiData.getTarget();
337 }
338
339 /**
340 * 画面を表示する時ã?パラメータ属æ?を取得しますã?
341 *
342 * @return パラメータ
343 */
344 public String getParam() {
345 return guiData.getParam();
346 }
347
348 /**
349 * リンク区åˆ?±žæ?を取得しますã?
350 *
351 * @og.rev 3.4.0.0 (2003/09/01) リンク区åˆ?KBLINK)属æ?を追åŠ??
352 *
353 * @return リンク区åˆ?
354 */
355 public String getKblink() {
356 return guiData.getKblink();
357 }
358
359 /**
360 * 概要説明属æ?を取得しますã?
361 * 概要説明が設定されてã�?�ªã�??合ã?、longName を返しますã?
362 *
363 * @og.rev 3.5.6.5 (2004/08/09) 概要説æ˜?DESCRIPTION)属æ?を追åŠ??
364 *
365 * @return 概要説æ˜?
366 */
367 public String getDescription() {
368 return labelData.getDescription() ;
369 }
370
371 /**
372 * 更新日時を取得しますã?
373 *
374 * @og.rev 5.3.3.0 (2011/03/01) 新規作æ?
375 *
376 * @return 更新日æ™?
377 */
378 public String getDyupd() {
379 return guiData.getDyupd();
380 }
381
382 /**
383 * イメージアイコンのキーを返しますã?
384 *
385 * 画面にアイコンを追åŠ?�™るå?合ã?jsp/menuImage フォルãƒ?�«、画面ID と同じ名称の
386 * 画像ファイルを置くå¿?¦�がありますã?
387 * 本来は、画面リソース(GEA11)に、カラãƒ?‚’追åŠ?�—て対応すべきですが、互換性の関係よりã?
388 * PARAM 属æ?で、所定ã?キーを登録することで使えるようにしますã?
389 * こã?、PARAMは、画面アドレスの引数(たとえã?、command=NEW など)を使ã�?�Ÿめã?パラメータですがã€?
390 * アイコン割り当て(IMAGE_KEY=XXXX)を使用することで、XXXX をキーとして使ã�?�¾すã?
391 * IMAGE_KEY=XXXX が指定されなã�??合ã?、画面IDがã?imageKey として返されますã?
392 *
393 * @og.rev 5.5.2.5 (2012/05/21) 新規追åŠ?
394 *
395 * @return イメージアイコンのキー
396 */
397 public String getImageKey() {
398 return guiData.getImageKey();
399 }
400
401 /**
402 * ロールモード情報を取得しますã?
403 *
404 * @og.rev 4.3.0.0 (2008/07/04) 新規追åŠ?
405 *
406 * @return ロールモーãƒ?
407 */
408 public RoleMode getRoleMode() {
409 return guiData.getRoleMode() ;
410 }
411
412 /**
413 * リードアクセス(読取り許可)の 可否ã‚?チェãƒ?‚¯しますã?
414 * アクセスチェãƒ?‚¯は、画面のロールをユーザーの
415 * それと比è¼?�—て条件が含まれてã�?‚‹かどã�?�‹を確認しますã?
416 * 条件ã�?null (またã??�ストリング)の場合ã?, true となりますã?
417 * 条件の判断は、AND 条件ですã?
418 * さらに、その他ã?条件部åˆ?‚’判断して、OR 条件で先ã?結果と突き合わせますã?
419 * ユーザーのロールがã? "root" の場合ã?,rw 属æ?のみのチェãƒ?‚¯で判断しますã?
420 *
421 * @og.rev 3.5.4.0 (2003/11/25) 引数にロールズを渡しますã?
422 *
423 * @return アクセスOK?štrue アクセス拒否?šfalse
424 */
425 public boolean isRead() {
426 return menuFlag;
427 }
428
429 /**
430 * ライトアクセス(書込み許可)の 可否ã‚?チェãƒ?‚¯しますã?
431 * アクセスチェãƒ?‚¯は、画面のロールをユーザーの
432 * それと比è¼?�—て条件が含まれてã�?‚‹かどã�?�‹を確認しますã?
433 * 条件ã�?null (またã??�ストリング)の場合ã?, true となりますã?
434 * 条件の判断は、AND 条件ですã?
435 * さらに、その他ã?条件部åˆ?‚’判断して、OR 条件で先ã?結果と突き合わせますã?
436 * ユーザーのロールがã? "root" の場合ã?,rw 属æ?のみのチェãƒ?‚¯で判断しますã?
437 *
438 * @og.rev 3.5.4.0 (2003/11/25) 引数にロールズを渡しますã?
439 *
440 * @return アクセスOK?štrue アクセス拒否?šfalse
441 */
442 public boolean isWrite() {
443 return writeFlag;
444 }
445
446 /**
447 * ボタンメニューにプルãƒ?‚¦ンを指定するã?かをチェãƒ?‚¯しますã?
448 *
449 * @og.rev 4.3.3.0 (2008/10/01) 新規作æ?
450 *
451 * @return プルãƒ?‚¦ン化ã?場å�?rue
452 */
453 public boolean isPulldown() {
454 return pulldownFlag;
455 }
456
457 /**
458 * æŒ?®šã?ユーザーロールに対するビット条件を取得しますã?
459 * こã? bitMode は、すでにユーザー単位に作æ?されたå?ですã?
460 *
461 * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
462 *
463 * @return アクセスビッãƒ?
464 */
465 public byte getBitMode() {
466 return bitMode;
467 }
468
469 /**
470 * FAQがGE80に関連画面IDとして存在してã�?‚‹かどã�?�‹
471 *
472 * @og.rev 5.6.4.3 (2013/05/25) 追åŠ?
473 *
474 * @return FAQの存在
475 */
476 public boolean isFaq() {
477 return guiData.isFaq();
478 }
479
480 /**
481 * ファイル出åŠ?ファイル出力許可)の 可否ã‚?チェãƒ?‚¯しますã?
482 * ファイル出力ã?、画面個ã?に設定できる フロãƒ?ƒ”ーアイコンを制御するのに
483 * 使用しますã?
484 * ユーザーと画面のロールを比è¼?�—て条件が含まれてã�?‚‹かどã�?�‹を確認しますã?
485 *
486 * @og.rev 4.3.0.0 (2008/07/04) 新規追åŠ?
487 *
488 * @return ファイル出力許可?štrue ファイル出力不可?šfalse
489 */
490 // public boolean isFileDownload() {
491 // return fileDFlag;
492 // }
493
494 /**
495 * ファイル入åŠ?ファイル入力許可)の 可否ã‚?チェãƒ?‚¯しますã?
496 * ファイル入力ã?、画面個ã?に設定できる フロãƒ?ƒ”ーアイコンを制御するのに
497 * 使用しますã?
498 * ユーザーと画面のロールを比è¼?�—て条件が含まれてã�?‚‹かどã�?�‹を確認しますã?
499 *
500 * @og.rev 4.3.0.0 (2008/07/04) 新規追åŠ?
501 *
502 * @return ファイル入力許可?štrue ファイル入力不可?šfalse
503 */
504 // public boolean isFileUpload() {
505 // return fileUFlag;
506 // }
507
508 /**
509 * GUIInfoの属æ?æ–?—å?を取得しますã?
510 *
511 * ・KEY 画面ID
512 * ・ADDRESS 実行アドレス
513 * ・REALADDRESS 実行実アドレス
514 * ・SEQUENCE 表示é ?
515 * ・GROUPS メニュグルーãƒ?
516 * ・CLASSIFY メニュåˆ?¡?
517 * ・LEVEL メニュ階層番号
518 * ・LABEL 画面名称
519 * ・NAME 画面名称(=SNAME)
520 * ・SNAME 画面名称(short)
521 * ・LNAME 画面名称(long)
522 * ・ROLES ロール
523 * ・MODE アクセスモードå?(mr,mw,-r,-w のç¾??)
524 * ・TARGET ターゲãƒ?ƒˆ
525 * ・PARAM 設定å?(パラメータ)
526 * ・KBLINK リンク区åˆ?
527 * ・DESCRIPTION 概要説æ˜?
528 * ・IMAGEKEY イメージキー
529 * ・DYUPD 更新日æ™?
530 * ・ISREAD 読取り許可[true/false]
531 * ・ISWRITE 書込み許可[true/false]
532 *
533 * @og.rev 3.4.0.0 (2003/09/01) リンク区åˆ?KBLINK)属æ?を追åŠ??
534 * @og.rev 3.5.5.0 (2004/03/12) 実行実アドレス(REALADDRESS)属æ?を追åŠ??
535 * @og.rev 3.5.6.5 (2004/08/09) 概要説æ˜?DESCRIPTION)属æ?を追åŠ??
536 * @og.rev 4.0.0.0 (2005/11/30) ISREAD,ISWRITE 属æ?を追åŠ??
537 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追åŠ?
538 * @og.rev 5.5.2.5 (2012/05/21) IMAGEKEY 追åŠ?
539 * @og.rev 5.6.4.3 (2013/05/25) FAQ追åŠ?
540 *
541 * @param key キー
542 *
543 * @return 属æ?æ–?—å?の値
544 */
545 public String getAttribute( final String key ) {
546 if( key == null ) { return null; }
547 final String rtn ;
548
549 if( key.equalsIgnoreCase( "KEY" ) ) { rtn = getKey(); }
550 else if( key.equalsIgnoreCase( "GUICLM" ) ) { rtn = labelData.getKey(); }
551 else if( key.equalsIgnoreCase( "ADDRESS" ) ) { rtn = getAddress(); }
552 else if( key.equalsIgnoreCase( "REALADDRESS" ) ) { rtn = getRealAddress(); }
553 else if( key.equalsIgnoreCase( "SEQUENCE" ) ) { rtn = String.valueOf( getSequence() ); }
554 else if( key.equalsIgnoreCase( "GROUPS" ) ) { rtn = getGroups(); }
555 else if( key.equalsIgnoreCase( "CLASSIFY" ) ) { rtn = getClassify(); }
556 else if( key.equalsIgnoreCase( "LEVEL" ) ) { rtn = String.valueOf( getLevel() ); }
557 else if( key.equalsIgnoreCase( "LABEL" ) ) { rtn = getLabel(); }
558 else if( key.equalsIgnoreCase( "NAME" ) ) { rtn = getName(); }
559 else if( key.equalsIgnoreCase( "SNAME" ) ) { rtn = getName(); }
560 else if( key.equalsIgnoreCase( "LNAME" ) ) { rtn = getLongName(); }
561 else if( key.equalsIgnoreCase( "ROLE" ) ) { rtn = getRoles(); }
562 else if( key.equalsIgnoreCase( "ROLES" ) ) { rtn = getRoles(); }
563 else if( key.equalsIgnoreCase( "MODE" ) ) { rtn = getMode(); }
564 else if( key.equalsIgnoreCase( "TARGET" ) ) { rtn = getTarget(); }
565 else if( key.equalsIgnoreCase( "PARAM" ) ) { rtn = getParam(); }
566 else if( key.equalsIgnoreCase( "KBLINK" ) ) { rtn = getKblink(); }
567 else if( key.equalsIgnoreCase( "DESCRIPTION" ) ) { rtn = getDescription(); } // 3.5.6.5 (2004/08/09)
568 else if( key.equalsIgnoreCase( "IMAGEKEY" ) ) { rtn = getImageKey(); } // 3.5.6.5 (2004/08/09)
569 else if( key.equalsIgnoreCase( "DYUPD" ) ) { rtn = getDyupd(); } // 5.5.2.5 (2012/05/21)
570 else if( key.equalsIgnoreCase( "ISREAD" ) ) { rtn = String.valueOf( isRead() ); } // 4.0.0 (2005/11/30)
571 else if( key.equalsIgnoreCase( "ISWRITE" ) ) { rtn = String.valueOf( isWrite() ); } // 4.0.0 (2005/11/30)
572 else if( key.equalsIgnoreCase( "FAQ" ) ) { rtn = String.valueOf(isFaq()); } // 5.6.4.3 (2013/05/24)
573 else {
574 String errMsg = "属æ?æ–?—å?キーが不正ですã? key=[" + key + "]"
575 + HybsSystem.CR
576 + "予ç´?ª?" + YOYAKU + ") 以外ã?æŒ?®šできませんã€? ;
577 throw new HybsSystemException( errMsg );
578 }
579 return rtn ;
580 }
581
582 /**
583 * GUIInfoの属æ?æ–?—å?のå†?ƒ¨æƒ??を返しますã?
584 * こã?å†?ƒ¨æƒ??の中には、getAttribute( String ) で取得できる管ç�?ƒ…報ですã?
585 *
586 * @og.rev 4.0.0.0 (2004/12/31) 新規作æ?
587 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追åŠ?
588 * @og.rev 5.5.2.5 (2012/05/21) IMAGEKEY 追åŠ?
589 *
590 * @return 属æ?æ–?—å?のHybsEntryオブジェクトé?åˆ?
591 */
592 public HybsEntry[] getEntrys() {
593 List<HybsEntry> list = new ArrayList<HybsEntry>();
594
595 list.add( new HybsEntry( "GUI.KEY" , getAttribute( "KEY" ) , "画面ID" ) );
596 list.add( new HybsEntry( "GUI.GUICLM" , getAttribute( "GUICLM" ) , "画面カラãƒ?D" ) );
597 list.add( new HybsEntry( "GUI.ADDRESS" , getAttribute( "ADDRESS" ) , "実行アドレス" ) );
598 list.add( new HybsEntry( "GUI.REALADDRESS" , getAttribute( "REALADDRESS" ) , "実行実アドレス" ) );
599 list.add( new HybsEntry( "GUI.SEQUENCE" , getAttribute( "SEQUENCE" ) , "表示é ? ) );
600 list.add( new HybsEntry( "GUI.GROUPS" , getAttribute( "GROUPS" ) , "メニュグルーãƒ? ) );
601 list.add( new HybsEntry( "GUI.CLASSIFY" , getAttribute( "CLASSIFY" ) , "メニュåˆ?¡? ) );
602 list.add( new HybsEntry( "GUI.LEVEL" , getAttribute( "LEVEL" ) , "メニュ階層番号" ) );
603 list.add( new HybsEntry( "GUI.LABEL" , getAttribute( "LABEL" ) , "画面名称" ) );
604 list.add( new HybsEntry( "GUI.NAME" , getAttribute( "NAME" ) , "画面名称(=SNAME)" ) );
605 list.add( new HybsEntry( "GUI.SNAME" , getAttribute( "SNAME" ) , "画面名称(short)" ) );
606 list.add( new HybsEntry( "GUI.LNAME" , getAttribute( "LNAME" ) , "画面名称(long)" ) );
607 list.add( new HybsEntry( "GUI.ROLES" , getAttribute( "ROLES" ) , "ロール" ) );
608 list.add( new HybsEntry( "GUI.MODE" , getAttribute( "MODE" ) , "アクセスモードå?(mr,mw,-r,-w のç¾??)" ) );
609 list.add( new HybsEntry( "GUI.TARGET" , getAttribute( "TARGET" ) , "ターゲãƒ?ƒˆ" ) );
610 list.add( new HybsEntry( "GUI.PARAM" , getAttribute( "PARAM" ) , "パラメータ" ) );
611 list.add( new HybsEntry( "GUI.KBLINK" , getAttribute( "KBLINK" ) , "リンク区åˆ? ) );
612 list.add( new HybsEntry( "GUI.DESCRIPTION" , getAttribute( "DESCRIPTION" ) , "概要説æ˜? ) );
613 list.add( new HybsEntry( "GUI.IMAGEKEY" , getAttribute( "IMAGEKEY" ) , "イメージキー" ) ); // 5.5.2.5 (2012/05/21)
614 list.add( new HybsEntry( "GUI.DYUPD" , getAttribute( "DYUPD" ) , "更新日æ™? ) ); // 5.3.3.0 (2011/03/01)
615 list.add( new HybsEntry( "GUI.ISREAD" , getAttribute( "ISREAD" ) , "読取り許可[true/false]" ) );
616 list.add( new HybsEntry( "GUI.ISWRITE" , getAttribute( "ISWRITE" ) , "書込み許可[true/false]" ) );
617
618 return list.toArray( new HybsEntry[list.size()] );
619 }
620
621 /**
622 * ãƒ??タベã?ス検索した数と、掛かった時é–?ms)をã?セãƒ?ƒˆしますã?
623 * これは、セキュリãƒ?‚£上ã?監視フラグで、不å¿?¦�に、大量ã?
624 * ãƒ??タが検索されたå?合や、不正なãƒ??タアクセスがあるかどã�?�‹ã‚?
625 * 監視するためã?統計情報を取得しますã?
626 * 画面オブジェクトã?、各ユーザー毎に作æ?されてã�?‚‹ため、å?ã€??
627 * ユーザーæ¯?画面毎ã?アクセス状況を見ることが可能になりますã?
628 *
629 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
630 *
631 * @param cnt ãƒ??タベã?ス検索した数
632 * @param time ãƒ??タベã?ス検索した数
633 * @param query そã?ときã?SQLæ–?
634 */
635 public void addReadCount( final int cnt,final long time,final String query ) {
636 accessCount.addReadCount( cnt,time,query );
637 }
638
639 /**
640 * ãƒ??タベã?ス登録した数と、掛かった時é–?ms)をã?セãƒ?ƒˆしますã?
641 * これは、セキュリãƒ?‚£上ã?監視フラグで、不å¿?¦�に、大量ã?
642 * ãƒ??タが登録されたå?合や、不正なãƒ??タアクセスがあるかどã�?�‹ã‚?
643 * 監視するためã?統計情報を取得しますã?
644 * 画面オブジェクトã?、各ユーザー毎に作æ?されてã�?‚‹ため、å?ã€??
645 * ユーザーæ¯?画面毎ã?アクセス状況を見ることが可能になりますã?
646 *
647 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
648 *
649 * @param cnt ãƒ??タベã?ス登録した数
650 * @param time ãƒ??タベã?ス検索した数
651 * @param query そã?ときã?SQLæ–?
652 */
653 public void addWriteCount( final int cnt,final long time,final String query ) {
654 accessCount.addWriteCount( cnt,time,query );
655 }
656
657 /**
658 * こã?画面へのアクセス回数をã??‹1しますã?
659 * アクセス回数は、このメソãƒ?ƒ‰の呼び出し回数のことですã?
660 * 現状では、result.jsp 画面でセãƒ?ƒˆすることで、アクセス数ã‚?
661 * 数えることにしますã?
662 *
663 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
664 *
665 */
666 public void addAccessCount() {
667 // if( level == 3 ) { level = 2; }
668 if( level == 4 ) { level = 3; } // 4.0.0.0 (2007/10/30)
669 accessCount.addAccessCount();
670 }
671
672 /**
673 * エラー発生時の件数を+1しますã?
674 * これは、エラー発生時に呼び出すことで、エラー件数をチェãƒ?‚¯することã�?
675 * 可能になりますã?
676 * ä¸?ˆ¬にエラーには、予期するエラー(å¿??入力登録漏れç?と、予期しなã�?‚¨ラー
677 * がありますが、ここでは、Java の Exceptionが発生する予期しなã�?‚¨ラーの
678 * 件数をカウントしますã?
679 *
680 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
681 *
682 */
683 public void addErrorCount() {
684 accessCount.addErrorCount();
685 }
686
687 /**
688 * こã?画面のアクセス統計オブジェクトを取得しますã?
689 *
690 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
691 *
692 * @return アクセス統計オブジェクãƒ?
693 */
694 public GUIAccessCount getGUIAccessCount() {
695 return accessCount;
696 }
697
698 /**
699 * こã?画面の次にアクセスされた画面IDをセãƒ?ƒˆしますã?
700 *
701 * これは、画面アクセスの履歴(é ?•ª)を管ç�?�™る機è?を提供しますã?
702 * 自åˆ??身の次にアクセスされる画面IDのé›?�ˆを管ç�?�™ることで
703 * QUERY画面上部のショートカãƒ?ƒˆリンクに、次に使用する画面の
704 * リンクを用意することが可能になりますã?
705 *
706 * @og.rev 5.2.3.0 (2010/12/01) アクセス履歴管ç�?
707 *
708 * @param guiKey こã?画面の次にアクセスされた画面ID
709 */
710 public void setNextGuiKey( final String guiKey ) {
711 // 自åˆ??身の場合ã?、セãƒ?ƒˆしなã�??
712 if( guiKey != null && !guiKey.equals( getKey() ) ) {
713 synchronized( nextGui ) {
714 // 再挿入を避けてã�?‚‹のは、å?ç�?™‚間をè€??してã�?‚‹ã�?�‘。意味があるかは不æ?ã€?
715 if( !nextGui.contains( guiKey ) ) {
716 nextGui.add( guiKey ) ;
717 }
718 }
719 }
720 }
721
722 /**
723 * こã?画面の次にアクセスされた画面IDのCSVæ–?—å?を取得しますã?
724 *
725 * これは、画面アクセスの履歴(é ?•ª)をカンマ区åˆ?‚Šæ–?—å?で取り出しますã?
726 * アクセス履歴を外部記æ?媒体に出力するå?合に使用しますã?
727 *
728 * @og.rev 5.2.3.0 (2010/12/01) アクセス履歴管ç�?
729 *
730 * @return こã?画面の次にアクセスされた画面IDのCSVæ–?—å?
731 */
732 public String getNextGuiKeys() {
733 StringBuilder buf = new StringBuilder();
734 synchronized( nextGui ) {
735 for( String key : nextGui ) {
736 buf.append( key ).append( "," );
737 }
738 }
739 return buf.toString();
740 }
741
742 /**
743 * こã?画面の次にアクセスされた画面IDのæ–?—å?配å?で取得しますã?
744 *
745 * これは、画面アクセスの履歴(é ?•ª)を文字å?配å?で取り出しますã?
746 *
747 * @og.rev 5.2.3.0 (2010/12/01) アクセス履歴管ç�?
748 *
749 * @return こã?画面の次にアクセスされた画面IDのæ–?—å?配å?
750 */
751 public String[] getNextGuiArray() {
752 final String[] rtnAry ;
753 synchronized( nextGui ) {
754 rtnAry = nextGui.toArray( new String[nextGui.size()] );
755 }
756
757 return rtnAry ;
758 }
759
760 /**
761 * 自然比è¼?ƒ¡ソãƒ?ƒ‰
762 * インタフェース Comparable の 実è£?�«関連して、å?定義してã�?�¾すã?
763 * 登録されたシーケンス(画面の表示é ?で比è¼?�—ますã?
764 * equals メソãƒ?ƒ‰では、キーの同ä¸??のみにç�?›®して判定してã�?�¾すã?
765 * こã?比è¼?�§はã€?運用上同ä¸?‚ーは発生しませんã�?たとえ同ä¸?‚ーが存在した
766 * としてもã?そã?比è¼??が同じになることを保証してã�?�¾せんã€?
767 *
768 * @param other 比è¼?¯¾象のObject
769 *
770 * @return こã?オブジェクトがæŒ?®šされたオブジェクトより小さã�??合ã?è²??整数、等しã�??合ã?ゼロ、大きい場合ã?正の整数
771 * @throws ClassCastException 引数ã�?GUIInfo ではなã�??å�?
772 * @throws IllegalArgumentException 引数ã�?null の場å�?
773 */
774 // public int compareTo( final Object object ) {
775 public int compareTo( final GUIInfo other ) { // 4.3.3.6 (2008/11/15) Generics警告対å¿?
776 // if( object == null ) {
777 if( other == null ) {
778 String errMsg = "引数がã?null ですã?" ;
779 throw new IllegalArgumentException( errMsg );
780 }
781 return getSequence() - other.getSequence(); // 4.3.3.6 (2008/11/15) Generics警告対å¿?
782
783 // if( object instanceof GUIInfo ) {
784 // return getSequence() - ((GUIInfo)object).getSequence(); // 表示é ?
785 // }
786 // String errMsg = "引数ã�?GUIInfo オブジェクトではありませんã€? ;
787 // throw new ClassCastException( errMsg );
788 }
789
790 /**
791 * こã?オブジェクトと他ã?オブジェクトが等しã�?�‹どã�?�‹を示しますã?
792 * 画面は、画面IDが等しければ、è¨?ªžや表示é ?�«関係なく同ä¸?�¨みなされますã?
793 * GUIInfo は、ユーザー個別に扱われ、そのグループには、key は唯ä¸?�§、かつ
794 * 同ä¸?¨?ªžå?で扱われるオブジェクトã?為、同ä¸?�¨みなしますã?
795 *
796 * @param object 比è¼?¯¾象の参ç?オブジェクãƒ?
797 *
798 * @return 引数にæŒ?®šされたオブジェクトとこã?オブジェクトが等しã�??合ã? true、そã�?�§なã�??合ã? false
799 */
800 @Override
801 public boolean equals( final Object object ) {
802 if( object instanceof GUIInfo ) {
803 return getKey().equals( ((GUIInfo)object).getKey() );
804 }
805 return false ;
806 }
807
808 /**
809 * オブジェクトã?ハッシュコードå?を返しますã?
810 * こã?メソãƒ?ƒ‰は、java.util.Hashtable によって提供されるような
811 * ハッシュãƒ??ブルで使用するために用意されてã�?�¾すã?
812 * equals( Object ) メソãƒ?ƒ‰をオーバã?ライトしたå?合ã?、hashCode() メソãƒ?ƒ‰ã‚?
813 * å¿?�š 記述するå¿?¦�がありますã?
814 * こã?実è£?�§は、getKey().hashCode() と同å?を返しますã?
815 *
816 * @return こã?オブジェクトã?ハッシュコードå?
817 */
818 @Override
819 public int hashCode() {
820 return getKey().hashCode() ;
821 }
822
823 /**
824 * オブジェクトã?識別子として?Œ詳細な画面æƒ??を返しますã?
825 *
826 * @og.rev 3.4.0.0 (2003/09/01) リンク区åˆ?KBLINK)属æ?を追åŠ??
827 * @og.rev 3.5.5.0 (2004/03/12) 実行アドレス(ADDRESS)属æ?を追åŠ??
828 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追åŠ?
829 * @og.rev 5.5.2.5 (2012/05/21) IMAGEKEY 追åŠ?
830 *
831 * @return 詳細な画面æƒ??
832 */
833 @Override
834 public String toString() {
835 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
836 rtn.append( "key :").append( getKey() ).append( HybsSystem.CR ); // 画面ID
837 rtn.append( "lvlclm :").append( labelData.getKey() ).append( HybsSystem.CR ); // 画面カラãƒ?D
838 rtn.append( "address :").append( getAddress() ).append( HybsSystem.CR ); // 実行アドレス
839 rtn.append( "sequence :").append( getSequence() ).append( HybsSystem.CR ); // 表示é ?
840 rtn.append( "groups :").append( getGroups() ).append( HybsSystem.CR ); // メニュグルーãƒ?
841 rtn.append( "classify :").append( getClassify() ).append( HybsSystem.CR ); // メニュåˆ?¡?
842 rtn.append( "level :").append( getLevel() ).append( HybsSystem.CR ); // 階層レベル
843 rtn.append( "name :").append( getName() ).append( HybsSystem.CR ); // 画面名称
844 rtn.append( "longName :").append( getLongName() ).append( HybsSystem.CR ); // 画面名称(long)
845 rtn.append( "roles :").append( getRoles() ).append( HybsSystem.CR ); // ロール
846 rtn.append( "mode :").append( getMode() ).append( HybsSystem.CR ); // アクセスモーãƒ? "rwrwrw"
847 rtn.append( "target :").append( getTarget() ).append( HybsSystem.CR ); // ターゲãƒ?ƒˆ
848 rtn.append( "kblink :").append( getKblink() ).append( HybsSystem.CR ); // リンク区åˆ?
849 rtn.append( "description:").append( getDescription() ).append( HybsSystem.CR ); // 概要説æ˜?
850 rtn.append( "imageKey :").append( getImageKey() ).append( HybsSystem.CR ); // イメージキー 5.5.2.5 (2012/05/21)
851 rtn.append( "dyupd :").append( getDyupd() ).append( HybsSystem.CR ); // 更新日æ™?
852 return rtn.toString();
853 }
854 }