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.resource; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.fukurou.util.StringUtil; // 6.2.0.0 (2015/02/27) 020import static org.opengion.fukurou.util.StringUtil.nval2; 021import static org.opengion.fukurou.system.HybsConst.CR; // 6.1.0.0 (2014/12/26) 022import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 023 024/** 025 * 画面オブジェクトの元となる 画面データを作成します。 026 * 画面データは、言語(lang)に依存しない情報で、最終的な 画面オブジェクト内部で 027 * 使用される 固定的なデータオブジェクトになります。 028 * 029 * @og.rev 4.0.0.0 (2004/12/31) 新規作成 030 * @og.group リソース管理 031 * 032 * @version 4.0 033 * @author Kazuhiko Hasegawa 034 * @since JDK5.0, 035 */ 036public final class GUIData { 037 038 // 内部データのカラム番号 039 /** カラム番号 {@value} */ public static final int GUIKEY = 0 ; 040 /** カラム番号 {@value} */ public static final int GUILVL = 1 ; 041 /** カラム番号 {@value} */ public static final int LABEL_CLM = 2 ; 042 /** カラム番号 {@value} */ public static final int ADDRESS = 3 ; 043 /** カラム番号 {@value} */ public static final int SEQNO = 4 ; 044 /** カラム番号 {@value} */ public static final int GROUPS = 5 ; 045 /** カラム番号 {@value} */ public static final int CLASSIFY = 6 ; 046 /** カラム番号 {@value} */ public static final int ROLES = 7 ; 047 /** カラム番号 {@value} */ public static final int RWMODE = 8 ; 048 /** カラム番号 {@value} */ public static final int TARGET = 9 ; 049 /** カラム番号 {@value} */ public static final int PARAM = 10 ; 050 /** カラム番号 {@value} */ public static final int KBLINK = 11 ; 051 /** カラム番号 {@value} */ public static final int DYUPD = 12 ; // 5.3.3.0 (2011/03/01) 更新日時追加 052 /** カラム番号 {@value} */ public static final int SYSTEM_ID = 13 ; // 7.2.6.0 (2020/06/30) 内部的に使ってないが定義しておく 053 /** カラム番号 {@value} */ public static final int KBSAKU = 14 ; // 7.4.2.0 (2021/05/18) 内部的に使ってないが定義しておく 054 /** カラム番号 {@value} */ public static final int SNO = 15 ; // 7.2.6.1 (2020/07/17) 内部的に使ってないが定義しておく 055 056 private final String guiKey; // 画面ID 057 private final int guiLevel; // 画面階層 058 private final String lblClm; // 画面カラムID 059 private final String address; // アドレス 060 private final String realAddress; // 実行実アドレス 061 private final int seqno; // 表示順 062 private final String groups; // グループ 063 private final String classify; // 分類 064 private final String target; // ターゲット 065 private final String param; // 設定値(パラメータ) 6.3.8.4 (2015/10/09) イメージアイコン設定は、KBLINK にします。 066 private final String kblink; // リンク区分 067 private final boolean pageUse; // page が、アドレスに追加できるかどうか 068 private final RoleMode roleMode; // 4.3.0.0 (2008/07/04) ロールズとモードを管理するオブジェクト 069 private final String dyupd; // 5.3.3.0 (2011/03/01) 更新日時追加 070 private final String imageKey; // 5.5.2.5 (2012/05/21) イメージアイコンの値。null の場合は、画面ID 071 072 private static final String CON_DIR = "/" + HybsSystem.getContextName() + "/"; 073 074 /** 075 * 配列文字列のデータを元に、GUIDataオブジェクトを構築します。 076 * このコンストラクタは、他のパッケージから呼び出せないように、 077 * パッケージプライベートにしておきます。 078 * このコンストラクタは、DBリソースファイルを想定しています。 079 * 080 * @og.rev 4.3.3.7 (2008/11/22) https対応 081 * @og.rev 5.1.3.0 (2010/02/01) 画面ロールのroot の場合は、user が root 以外、アクセス禁止のはず 082 * @og.rev 5.3.3.0 (2011/03/01) 更新日時追加 DYUPD 083 * @og.rev 5.5.2.5 (2012/05/21) imageKey イメージアイコンの処理を追加 084 * @og.rev 5.6.4.3 (2013/05/24) faqt追加 085 * @og.rev 5.7.8.1 (2014/07/18) address の "/" 対応 086 * @og.rev 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の取得は廃止。(helpタグで行う) 087 * @og.rev 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 088 * 089 * @param data GUIKEY,GUILVL,LABEL_CLM,ADDRESS,SEQNO,GROUPS,CLASSIFY,ROLES,RWMODE,TARGET,KBLINK,DYUPD 090 */ 091 /* default */ GUIData( final String[] data ) { 092 guiKey = data[GUIKEY].intern() ; // 画面ID 093 guiLevel = Integer.parseInt( data[GUILVL] ); // 画面階層 094 lblClm = nval2( data[LABEL_CLM],guiKey ) ; // 画面カラムID 095 address = data[ADDRESS].intern() ; // アドレス 096 seqno = Integer.parseInt( data[SEQNO] ); // 表示順 097 groups = nval2( data[GROUPS] , null ) ; // グループ 098 classify = nval2( data[CLASSIFY] , "" ) ; // 分類 099 target = nval2( data[TARGET] , null ) ; // ターゲット 100 101 // realAddress と pageUse を設定します。 102 // 3.5.5.0 (2004/03/12) kblink の設定方法を見直し 103 // 4.3.3.7 (2008/11/22) https対応 104 if( address.startsWith( "http://" ) || address.startsWith( "https://" ) || StringUtil.startsChar( address , '.' ) ) { 105 pageUse = false; 106 kblink = "http"; 107 realAddress = address; 108 } 109 // 5.7.8.1 (2014/07/18) address の "/" 対応 110 else if( StringUtil.startsChar( address , '/' ) ) { // 6.2.0.0 (2015/02/27) 1文字 String.startsWith 111 pageUse = false; 112 kblink = "/"; 113 realAddress = address; 114 } 115 // 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 116 else { 117 pageUse = true; 118 kblink = "jsp"; // 6.3.8.4 (2015/10/09) 119 realAddress = CON_DIR + "jsp/" + address + "/" ; 120 } 121 122 // 4.0.0 (2005/01/31) param を追加します。 123 final String paramTmp = data[PARAM] ; // 設定値(パラメータ) 124 if( paramTmp != null && paramTmp.length() > 0 ) { 125 param = paramTmp.intern() ; 126 } 127 else { 128 param = "" ; 129 } 130 131 // 5.5.2.5 (2012/05/21) イメージアイコンの処理。既存の param 設定と分けておきます。(将来的にはDBから読み取りたい) 132 // 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 133 imageKey = nval2( data[KBLINK] , guiKey ) ; 134 135 // 5.1.3.0 (2010/02/01) 画面ロールのroot の場合は、user が root 以外、アクセス禁止のはず 136 // ここでは、RoleMode で、共通化を図っているため、"root" を、"r00t" に置換えます。 137 String roles = data[ROLES]; 138 if( "root".equals( roles ) ) { roles = "r00t" ; } 139 roleMode = RoleMode.newInstance( roles,data[RWMODE] ); // ロールモード 140 141 dyupd = nval2( data[DYUPD] , "" ) ; 142 } 143 144 /** 145 * 画面オブジェクトのキーを返します。 146 * 147 * @return 画面オブジェクトのキー 148 */ 149 public String getGuiKey() { return guiKey; } 150 151 /** 152 * 画面オブジェクトの階層レベルを返します。 153 * 154 * @return 画面オブジェクトの階層レベル 155 */ 156 public int getGuiLevel() { return guiLevel ; } 157 158 /** 159 * 画面オブジェクトの画面カラムIDを返します。 160 * これは、同一画面ID(GUIKEY)で、ロール違いやアドレス違いにより 161 * 画面に表示する名称を変える場合に使用します。 162 * 163 * @return 画面オブジェクトの画面カラムID 164 */ 165 public String getLabelClm() { return lblClm ; } 166 167 /** 168 * 画面オブジェクトのアドレスを返します。 169 * 170 * @return 画面オブジェクトのアドレス 171 */ 172 public String getAddress() { return address; } 173 174 /** 175 * トップからの実行アドレス情報を取得します。 176 * コンテキスト名とリンク区分属性を利用して、サーバートップからのアドレスを 177 * 返します。ただし、GUIリソースに、http://~ または、.~ から始まるアドレスは 178 * そのまま、なにも変換せずに返します。 179 * param 属性がある場合は、引数として後ろに追加します。 180 * 181 * http://AAAA ⇒ http://AAAA 182 * ../../AAAA/ ⇒ ../../AAAA/ 183 * AAAA ⇒ /CONTEXT_NAME/KBLINK/AAAA/ 184 * 185 * @og.rev 3.5.5.0 (2004/03/12) 新規追加 186 * @og.rev 4.0.0.0 (2005/01/31) param 属性の追加 187 * 188 * @return 実行実アドレス 189 */ 190 public String getRealAddress() { 191 return realAddress ; 192 } 193 194 /** 195 * トップからの実行アドレス情報を取得します。 196 * コンテキスト名とリンク区分属性を利用して、サーバートップからのアドレスを 197 * 返します。ただし、GUIリソースに、http://~ または、.~ から始まるアドレスは 198 * そのまま、なにも変換せずに返します。 199 * また、アドレスの最後がスラッシュ(/)で終了している場合は、page属性を追加します。 200 * 201 * http://AAAA ⇒ http://AAAA 202 * ../../AAAA/ ⇒ ../../AAAA/ 203 * AAAA ⇒ /CONTEXT_NAME/KBLINK/AAAA/ 204 * 205 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 206 * 207 * @param page 実行ページ(index.jsp など) 208 * @return 実行実アドレス 209 */ 210 public String getRealAddress( final String page ) { 211 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 212 return ! pageUse || page == null ? realAddress : (realAddress + page); 213 } 214 215 /** 216 * 画面オブジェクトの表示順を返します。 217 * 218 * @return 画面オブジェクトの表示順 219 */ 220 public int getSeqno() { return seqno; } 221 222 /** 223 * 画面オブジェクトのグループを返します。 224 * 225 * @return 画面オブジェクトのグループ 226 */ 227 public String getGroups() { return groups; } 228 229 /** 230 * 画面オブジェクトの分類を返します。 231 * 232 * @return 画面オブジェクトの分類 233 */ 234 public String getClassify() { return classify; } 235 236 /** 237 * 画面オブジェクトのロールズを返します。 238 * 239 * @return 画面オブジェクトのロールズ文字列 240 */ 241 public String getRoles() { return roleMode.getRoles(); } 242 243 /** 244 * 画面オブジェクトのモード文字列を返します。 245 * 246 * @return 画面オブジェクトのモード文字列 247 */ 248 public String getMode() { return roleMode.getMode(); } 249 250 /** 251 * RoleMode 構築時に発生したエラーメッセージを返します。 252 * エラーがない場合は、null を返します。 253 * 254 * @og.rev 8.4.0.0 (2023/01/31) RoleMode でthrow しても、インスタンスは生成する。 255 * 256 * @return エラーメッセージ(正常時は、null) 257 */ 258 public String getModeErrMsg() { return roleMode.getModeErrMsg(); } 259 260 /** 261 * ロールモード情報を取得します。 262 * 263 * @og.rev 4.3.0.0 (2008/07/04) 新規追加 264 * 265 * @return ロールモード情報 266 */ 267 public RoleMode getRoleMode() { return roleMode ; } 268 269 /** 270 * 画面オブジェクトのターゲットを返します。 271 * 272 * @return 画面オブジェクトのターゲット 273 */ 274 public String getTarget() { return target; } 275 276 /** 277 * 画面オブジェクトのパラメータを返します。 278 * 279 * @return 画面オブジェクトのパラメータ 280 */ 281 public String getParam() { return param; } 282 283 /** 284 * 画面オブジェクトのリンク区分を返します。 285 * 286 * @return 画面オブジェクトのリンク区分 287 */ 288 public String getKblink() { return kblink; } 289 290 /** 291 * 画面オブジェクトの更新日時を返します。 292 * 293 * @og.rev 5.3.3.0 (2011/03/01) 新規追加 294 * 295 * @return 画面オブジェクトの更新日時 296 */ 297 public String getDyupd() { return dyupd; } 298 299 /** 300 * イメージアイコンのキーを返します。 301 * 302 * 画面にアイコンを追加する場合、jsp/menuImage フォルダに、画面ID と同じ名称の 303 * 画像ファイルを置く必要があります。 304 * 305 * ※ 6.3.8.4 (2015/10/09) 306 * 従来は、PARAM 属性に、IMAGE_KEY=XXXX と指定していましたが、 307 * KBLINK(リンク区分) を使用するように変更しました。 308 * 309 * @og.rev 5.5.2.5 (2012/05/21) 新規追加 310 * @og.rev 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 311 * 312 * @return イメージアイコンのキー 313 */ 314 public String getImageKey() { return imageKey; } 315 316 /** 317 * オブジェクトの識別子として、詳細なユーザー情報を返します。 318 * 319 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追加 320 * @og.rev 5.6.4.3 (2013/05/24) faq 321 * @og.rev 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の取得は廃止。(helpタグで行う) 322 * 323 * @return 詳細な画面情報 324 * @og.rtnNotNull 325 */ 326 @Override 327 public String toString() { 328 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ) 329 .append( "guiKey :" ).append( guiKey ).append( CR ) 330 .append( "guiLevel :" ).append( guiLevel ).append( CR ) 331 .append( "address :" ).append( address ).append( CR ) 332 .append( "realAddress:" ).append( realAddress ).append( CR ) 333 .append( "seqno :" ).append( seqno ).append( CR ) 334 .append( "classify :" ).append( classify ).append( CR ) 335 .append( "roles :" ).append( getRoles() ).append( CR ) 336 .append( "mode :" ).append( getMode() ).append( CR ) 337 .append( "target :" ).append( target ).append( CR ) 338 .append( "param :" ).append( param ).append( CR ) 339 .append( "kblink :" ).append( kblink ).append( CR ) 340 .append( "dyupd :" ).append( dyupd ).append( CR ); 341 return rtn.toString(); 342 } 343}