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 static org.opengion.fukurou.util.StringUtil.nval2;
020
021 /**
022 * 画面オブジェクトã?å…?�¨なã‚?画面ãƒ??タを作æ?しますã?
023 * 画面ãƒ??タは、è¨?ª?lang)に依存しなã�?ƒ…報で、最終的な 画面オブジェクトå?部で
024 * 使用されã‚?固定的なãƒ??タオブジェクトになりますã?
025 *
026 * @og.rev 4.0.0.0 (2004/12/31) 新規作æ?
027 * @og.group リソース管ç�?
028 *
029 * @version 4.0
030 * @author Kazuhiko Hasegawa
031 * @since JDK5.0,
032 */
033 public final class GUIData {
034
035 /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value} */
036 public static final int GUIKEY = 0 ;
037 public static final int GUILVL = 1 ;
038 public static final int LABEL_CLM = 2 ;
039 public static final int ADDRESS = 3 ;
040 public static final int SEQNO = 4 ;
041 public static final int GROUPS = 5 ;
042 public static final int CLASSIFY = 6 ;
043 public static final int ROLES = 7 ;
044 public static final int RWMODE = 8 ;
045 public static final int TARGET = 9 ;
046 public static final int PARAM = 10 ;
047 public static final int KBLINK = 11 ;
048 // public static final int DATA_SIZE = 12 ;
049 public static final int DYUPD = 12 ; // 5.3.3.0 (2011/03/01) 更新日時追åŠ?
050 public static final int FAQ = 13; // 5.6.4.3 (2013/05/24)
051
052 private final String guiKey ; // 画面ID
053 private final int guiLevel ; // 画面階層
054 private final String lblClm ; // 画面カラãƒ?D
055 private final String address ; // アドレス
056 private final String realAddress ; // 実行実アドレス
057 private final int seqno ; // 表示é ?
058 private final String groups ; // グルーãƒ?
059 private final String classify ; // åˆ?¡?
060 private final String target ; // ターゲãƒ?ƒˆ
061 private final String param ; // 設定å?(パラメータ),イメージアイコン設定にも使ã�?�¾すã?
062 private final String kblink ; // リンク区åˆ?
063 private final boolean pageUse ; // page がã?アドレスに追åŠ?�§きるかどã�?�‹
064 private final RoleMode roleMode ; // 4.3.0.0 (2008/07/04) ロールズとモードを管ç�?�™るオブジェクãƒ?
065 private final String dyupd ; // 5.3.3.0 (2011/03/01) 更新日時追åŠ?
066 private final String imageKey ; // 5.5.2.5 (2012/05/21) イメージアイコンの値。null の場合ã?、画面ID
067 private final boolean faq ; // 5.6.4.3 (2013/05/24) FAQが存在してã�?‚‹ã�?
068
069 private static final String CON_DIR = "/" + HybsSystem.getContextName() + "/";
070
071 /**
072 * 配å?æ–?—å?のãƒ??タをå?に、GUIDataオブジェクトを構築しますã?
073 * こã?コンストラクタは、他ã?パッケージから呼び出せなã�?‚ˆã�?�«ã€?
074 * パッケージプライベã?トにしておきますã?
075 * こã?コンストラクタはã€?¼¤?¢リソースファイルを想定してã�?�¾すã?
076 *
077 * @og.rev 4.3.3.7 (2008/11/22) https対å¿?
078 * @og.rev 5.1.3.0 (2010/02/01) 画面ロールのroot の場合ã?、user ã�?root 以外ã?アクセス禁止のはã�?
079 * @og.rev 5.3.3.0 (2011/03/01) 更新日時追åŠ?
080 * @og.rev 5.5.2.5 (2012/05/21) imageKey イメージアイコンの処ç�?‚’追åŠ?
081 * @og.rev 5.6.4.3 (2013/05/24) faqt追åŠ?
082 *
083 * @param data GUIKEY,GUILVL,LABEL_CLM,ADDRESS,SEQNO,GROUPS,CLASSIFY,ROLES,RWMODE,TARGET,KBLINK
084 */
085 GUIData( final String[] data ) {
086 guiKey = data[GUIKEY].intern() ; // 画面ID
087 guiLevel = Integer.parseInt( data[GUILVL] ); // 画面階層
088 lblClm = nval2( data[LABEL_CLM],guiKey ) ; // 画面カラãƒ?D
089 address = data[ADDRESS].intern() ; // アドレス
090 seqno = Integer.parseInt( data[SEQNO] ); // 表示é ?
091 groups = nval2( data[GROUPS] , null ) ; // グルーãƒ?
092 classify = nval2( data[CLASSIFY] , "" ) ; // åˆ?¡?
093 // roleMode = RoleMode.newInstance( data[ROLES],data[RWMODE] ); // ロールモーãƒ?Ver.5.1.3.0 削除
094 target = nval2( data[TARGET] , null ) ; // ターゲãƒ?ƒˆ
095
096 // realAddress と pageUse を設定しますã?
097 // 3.5.5.0 (2004/03/12) kblink の設定方法を見直ã�?
098 // 4.3.3.7 (2008/11/22) https対å¿?
099 // if( address.startsWith( "http://" ) || address.startsWith( "." ) ) {
100 if( address.startsWith( "http://" ) || address.startsWith( "https://" ) || address.startsWith( "." ) ) {
101 kblink = "http";
102 pageUse = false;
103 realAddress = address;
104 }
105 else {
106 pageUse = true;
107 kblink = nval2( data[KBLINK] , "jsp" ) ; // リンク区åˆ?
108 if( kblink.startsWith( "/" ) ) {
109 realAddress = ( kblink + "/" + address + "/" ) ;
110 }
111 else {
112 realAddress = ( CON_DIR + kblink + "/" + address + "/" ) ;
113 // realAddress = ( "/" + HybsSystem.getContextName() + "/" + kblink +
114 // "/" + address + "/" ) ;
115 }
116 }
117
118 // 4.0.0 (2005/01/31) param を追åŠ?�—ますã?
119 String paramTmp = data[PARAM] ; // 設定å?(パラメータ)
120 if( paramTmp != null && paramTmp.length() > 0 ) {
121 param = paramTmp.intern() ;
122 }
123 else {
124 param = "" ;
125 }
126
127 // 5.5.2.5 (2012/05/21) イメージアイコンの処ç�??既存ã? param 設定とåˆ?�‘ておきますã?(å°?�¥çš?�«はDBから読み取りたい)
128 int indx1 = param.indexOf( "IMAGE_KEY=" );
129 if( indx1 >= 0 ) {
130 indx1 = indx1+"IMAGE_KEY=".length() ; // æŒ?®šã?æ–?—å?まで進めておくã€?
131 int indx2 = param.indexOf( "&",indx1 ); // パラメータの区åˆ?‚Š記号。なã�?¼�最å¾?
132 if( indx2 >= 0 ) {
133 imageKey = param.substring( indx1, indx2 );
134 }
135 else {
136 imageKey = param.substring( indx1 );
137 }
138 }
139 else {
140 imageKey = guiKey ; // 5.5.2.5 (2012/05/21) イメージアイコンの処ç�?‚’追åŠ?
141 }
142
143 // 5.1.3.0 (2010/02/01) 画面ロールのroot の場合ã?、user ã�?root 以外ã?アクセス禁止のはã�?
144 // ここでは、RoleMode で、å?通化を図ってã�?‚‹ためã€?root" をã?"r00t" に置換えますã?
145 String roles = data[ROLES];
146 if( "root".equals( roles ) ) { roles = "r00t" ; }
147 roleMode = RoleMode.newInstance( roles,data[RWMODE] ); // ロールモーãƒ?
148
149 // 3.5.5.0 (2004/03/12) 実行実アドレスを求めますã?
150 // if( address.startsWith( "http://" ) || address.startsWith( "." ) ) {
151 // realAddress = address;
152 // pageUse = false;
153 // }
154 // else {
155 // realAddress = ( "/" + HybsSystem.getContextName() + "/" + kblink +
156 // "/" + address + "/" ) ;
157 // pageUse = true;
158 // }
159
160 dyupd = nval2( data[DYUPD] , "" ) ;
161
162 faq = Boolean.parseBoolean( data[FAQ] ); // 5.6.4.3 (2013/06/24)
163 }
164
165 /**
166 * 画面オブジェクトã?キーを返しますã?
167 *
168 * @return 画面オブジェクトã?キー
169 */
170 public String getGuiKey() { return guiKey; }
171
172 /**
173 * 画面オブジェクトã?階層レベルを返しますã?
174 *
175 * @return 画面オブジェクトã?階層レベル
176 */
177 public int getGuiLevel() { return guiLevel ; }
178
179 /**
180 * 画面オブジェクトã?画面カラãƒ?Dを返しますã?
181 * これは、同ä¸?”»面ID(GUIKEY)で、ロール違いã‚?‚¢ドレス違いにより
182 * 画面に表示する名称を変えるå?合に使用しますã?
183 *
184 * @return 画面オブジェクトã?画面カラãƒ?D
185 */
186 public String getLabelClm() { return lblClm ; }
187
188 /**
189 * 画面オブジェクトã?アドレスを返しますã?
190 *
191 * @return 画面オブジェクトã?アドレス
192 */
193 public String getAddress() { return address; }
194
195 /**
196 * トップからã?実行アドレスæƒ??を取得しますã?
197 * コンãƒ?‚スト名とリンク区åˆ?±žæ?を利用して、サーバã?トップからã?アドレスã‚?
198 * 返しますã?ただしã?GUIリソースに、http://??またã?ã€???から始まるアドレスは
199 * そã?まま、なにも変換せずに返しますã?
200 * param 属æ?があるå?合ã?、引数として後ろに追åŠ?�—ますã?
201 *
202 * http://AAAA � http://AAAA
203 * ../../AAAA/ � ../../AAAA/
204 * AAAA � /CONTEXT_NAME/KBLINK/AAAA/
205 *
206 * @og.rev 3.5.5.0 (2004/03/12) 新規追åŠ?
207 * @og.rev 4.0.0.0 (2005/01/31) param 属æ?の追åŠ?
208 *
209 * @return 実行実アドレス
210 */
211 public String getRealAddress() {
212 return realAddress ;
213 }
214
215 /**
216 * トップからã?実行アドレスæƒ??を取得しますã?
217 * コンãƒ?‚スト名とリンク区åˆ?±žæ?を利用して、サーバã?トップからã?アドレスã‚?
218 * 返しますã?ただしã?GUIリソースに、http://??またã?ã€???から始まるアドレスは
219 * そã?まま、なにも変換せずに返しますã?
220 * またã?アドレスのæœ?¾Œがスラãƒ?‚·ュ(/)で終äº?�—てã�?‚‹場合ã?、page属æ?を追åŠ?�—ますã?
221 *
222 * http://AAAA � http://AAAA
223 * ../../AAAA/ � ../../AAAA/
224 * AAAA � /CONTEXT_NAME/KBLINK/AAAA/
225 *
226 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
227 *
228 * @param page 実行ã?ージ(index.jsp など)
229 *
230 * @return 実行実アドレス
231 */
232 public String getRealAddress( final String page ) {
233 if( ! pageUse || page == null ) {
234 return realAddress ;
235 }
236 else {
237 return realAddress + page;
238 }
239 }
240
241 /**
242 * 画面オブジェクトã?表示é ?‚’返しますã?
243 *
244 * @return 画面オブジェクトã?表示é ?
245 */
246 public int getSeqno() { return seqno; }
247
248 /**
249 * 画面オブジェクトã?グループを返しますã?
250 *
251 * @return 画面オブジェクトã?グルーãƒ?
252 */
253 public String getGroups() { return groups; }
254
255 /**
256 * 画面オブジェクトã?åˆ?¡žを返しますã?
257 *
258 * @return 画面オブジェクトã?åˆ?¡?
259 */
260 public String getClassify() { return classify; }
261
262 /**
263 * 画面オブジェクトã?ロールズを返しますã?
264 *
265 * @return 画面オブジェクトã?ロールズæ–?—å?
266 */
267 public String getRoles() { return roleMode.getRoles(); }
268
269 /**
270 * 画面オブジェクトã?モード文字å?を返しますã?
271 *
272 * @return 画面オブジェクトã?モード文字å?
273 */
274 public String getMode() { return roleMode.getMode(); }
275
276 /**
277 * ロールモード情報を取得しますã?
278 *
279 * @og.rev 4.3.0.0 (2008/07/04) 新規追åŠ?
280 *
281 * @return ロールモード情報
282 */
283 public RoleMode getRoleMode() { return roleMode ; }
284
285 /**
286 * 画面オブジェクトã?ターゲãƒ?ƒˆを返しますã?
287 *
288 * @return 画面オブジェクトã?ターゲãƒ?ƒˆ
289 */
290 public String getTarget() { return target; }
291
292 /**
293 * 画面オブジェクトã?パラメータを返しますã?
294 *
295 * @return 画面オブジェクトã?パラメータ
296 */
297 public String getParam() { return param; }
298
299 /**
300 * 画面オブジェクトã?リンク区åˆ?‚’返しますã?
301 *
302 * @return 画面オブジェクトã?リンク区åˆ?
303 */
304 public String getKblink() { return kblink; }
305
306 /**
307 * 画面オブジェクトã?更新日時を返しますã?
308 *
309 * @og.rev 5.3.3.0 (2011/03/01) 新規追åŠ?
310 *
311 * @return 画面オブジェクトã?更新日æ™?
312 */
313 public String getDyupd() { return dyupd; }
314
315 /**
316 * 画面オブジェクトã?FAQを返しますã?
317 *
318 * @return 画面オブジェクトã?FAQ
319 */
320 public boolean isFaq() { return faq; }
321
322 /**
323 * イメージアイコンのキーを返しますã?
324 *
325 * 画面にアイコンを追åŠ?�™るå?合ã?jsp/menuImage フォルãƒ?�«、画面ID と同じ名称の
326 * 画像ファイルを置くå¿?¦�がありますã?
327 * 本来は、画面リソース(GEA11)に、カラãƒ?‚’追åŠ?�—て対応すべきですが、互換性の関係よりã?
328 * PARAM 属æ?で、所定ã?キーを登録することで使えるようにしますã?
329 * こã?、PARAMは、画面アドレスの引数(たとえã?、command=NEW など)を使ã�?�Ÿめã?パラメータですがã€?
330 * アイコン割り当て(IMAGE_KEY=XXXX)を使用することで、XXXX をキーとして使ã�?�¾すã?
331 * IMAGE_KEY=XXXX が指定されなã�??合ã?、画面IDがã?imageKey として返されますã?
332 *
333 * @og.rev 5.5.2.5 (2012/05/21) 新規追åŠ?
334 *
335 * @return イメージアイコンのキー
336 */
337 public String getImageKey() { return imageKey; }
338
339 /**
340 * 画面オブジェクトへのアクセス可否を返しますã?
341 *
342 * @param userRoles ユーザーロール配å?
343 *
344 * @return アクセスできる(true)/出来なã�?false)
345 */
346 // public boolean isAccess( final String[] userRoles ) {
347 // return roleMode.isAccess( userRoles );
348 // }
349
350 /**
351 * こã?画面のアクセス条件を設定しますã?
352 * アクセス条件は、è¤?•°あるユーザーロールの中で、最大のアクセス条件を算å?しますã?
353 * 例えば、AAA|BBB|CCC の?“つのロールにã€?r|-w|mr| のモードが設定されてã�?‚‹場合ã?
354 * ユーザーがã?AAA ã�?�‘の場合ã?ã€?r ですが、AAA|BBB を持ってã�?‚‹場合ã?ã€?w になりますã?
355 * さらに、BBB|CCC と持ってã�?‚‹場合ã?ã€?-w:書き込み許可)と(mr:メニューから読取許可)の
356 * 権限により、mw:メニューからの書き込み許可が与えられますã?
357 * 実際には、メニュー表示の可否は、ã?ãƒ??アãƒ??系によく用ã�?‚‰れますã?で、上記ã?ような
358 * 許可が実際にあるかどã�?�‹は不æ?ですが、すべてのモードã?OR条件での結合になりますã?
359 *
360 * @param userRoles ユーザーロール配å?
361 * @param isRoot ルートロールフラグ
362 *
363 * @return ビットモードé?åˆ?"--:000","-r:001","-w:010","mr:101","mw:110" に対応した数å?0,1,2,5,6)
364 */
365 // public byte getAccessBitMode( final String[] userRoles,final boolean isRoot ) {
366 // return roleMode.getAccessBitMode( userRoles,isRoot );
367 // }
368
369 /**
370 * æŒ?®šã?ユーザーロールに対するæœ?µ‚的なアクセス条件を取得しますã?
371 * アクセス条件は、è¤?•°あるユーザーロールの中で、最大のアクセス条件を算å?しますã?
372 * 例えば、AAA(-r)|BBB(-w)|CCC(mr) の?“つのロール/モードが設定されてã�?‚‹場合ã?
373 * ユーザーがã?AAA ã�?�‘の場合ã?ã€?r ですが、AAA|BBB を持ってã�?‚‹場合ã?ã€?w になりますã?
374 * さらに、BBB|CCC と持ってã�?‚‹場合ã?ã€?-w:書き込み許可)と(mr:メニューから読取許可)の
375 * 権限により、mw:メニューからの書き込み許可が与えられますã?
376 * モード指定がある場合ã?、AND演算になりますã?
377 * 例えば、AAA(-r)|BBB(-w)|CCC(mr) と BBB|CCC(-r) の場合ã?(-r)+(-w)+(mr)*(-r)=-w に
378 * なりますã?ロールは、OR ですが、モードã?、同ä¸?ƒールでのAND になりますã?
379 * 実際には、メニュー表示の可否は、ã?ãƒ??アãƒ??系によく用ã�?‚‰れますã?で、上記ã?ような
380 * 許可が実際にあるかどã�?�‹は不æ?ですが、すべてのモードã?OR条件での結合になりますã?
381 *
382 * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
383 *
384 * @param other RoleMode ロールモーãƒ?
385 *
386 * @return アクセスビッãƒ?
387 */
388 // public byte getAccessBitMode( final RoleMode other ) {
389 // return roleMode.getAccessBitMode( other );
390 // }
391
392 /**
393 * オブジェクトã?識別子として?Œ詳細なユーザーæƒ??を返しますã?
394 *
395 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追åŠ?
396 * @og.rev 5.6.4.3 (2013/05/24) faq
397 *
398 * @return 詳細な画面æƒ??
399 */
400 @Override
401 public String toString() {
402 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
403 rtn.append( "guiKey :" ).append( guiKey ).append( HybsSystem.CR );
404 rtn.append( "guiLevel :" ).append( guiLevel ).append( HybsSystem.CR );
405 rtn.append( "address :" ).append( address ).append( HybsSystem.CR );
406 rtn.append( "realAddress:" ).append( realAddress ).append( HybsSystem.CR );
407 rtn.append( "seqno :" ).append( seqno ).append( HybsSystem.CR );
408 rtn.append( "classify :" ).append( classify ).append( HybsSystem.CR );
409 rtn.append( "roles :" ).append( getRoles() ).append( HybsSystem.CR );
410 rtn.append( "mode :" ).append( getMode() ).append( HybsSystem.CR );
411 rtn.append( "target :" ).append( target ).append( HybsSystem.CR );
412 rtn.append( "param :" ).append( param ).append( HybsSystem.CR );
413 rtn.append( "kblink :" ).append( kblink ).append( HybsSystem.CR );
414 rtn.append( "dyupd :" ).append( dyupd ).append( HybsSystem.CR );
415 rtn.append( "faq :" ).append( faq ).append( HybsSystem.CR );
416 return rtn.toString();
417 }
418 }