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 }