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 SNO = 14 ; // 7.2.6.1 (2020/07/17) 内部的に使ってないが定義しておく 054 055 private final String guiKey ; // 画面ID 056 private final int guiLevel ; // 画面階層 057 private final String lblClm ; // 画面カラムID 058 private final String address ; // アドレス 059 private final String realAddress ; // 実行実アドレス 060 private final int seqno ; // 表示順 061 private final String groups ; // グループ 062 private final String classify ; // 分類 063 private final String target ; // ターゲット 064 private final String param ; // 設定値(パラメータ) 6.3.8.4 (2015/10/09) イメージアイコン設定は、KBLINK にします。 065 private final String kblink ; // リンク区分 066 private final boolean pageUse ; // page が、アドレスに追加できるかどうか 067 private final RoleMode roleMode ; // 4.3.0.0 (2008/07/04) ロールズとモードを管理するオブジェクト 068 private final String dyupd ; // 5.3.3.0 (2011/03/01) 更新日時追加 069 private final String imageKey ; // 5.5.2.5 (2012/05/21) イメージアイコンの値。null の場合は、画面ID 070 071 private static final String CON_DIR = "/" + HybsSystem.getContextName() + "/"; 072 073 /** 074 * 配列文字列のデータを元に、GUIDataオブジェクトを構築します。 075 * このコンストラクタは、他のパッケージから呼び出せないように、 076 * パッケージプライベートにしておきます。 077 * このコンストラクタは、DBリソースファイルを想定しています。 078 * 079 * @og.rev 4.3.3.7 (2008/11/22) https対応 080 * @og.rev 5.1.3.0 (2010/02/01) 画面ロールのroot の場合は、user が root 以外、アクセス禁止のはず 081 * @og.rev 5.3.3.0 (2011/03/01) 更新日時追加 DYUPD 082 * @og.rev 5.5.2.5 (2012/05/21) imageKey イメージアイコンの処理を追加 083 * @og.rev 5.6.4.3 (2013/05/24) faqt追加 084 * @og.rev 5.7.8.1 (2014/07/18) address の "/" 対応 085 * @og.rev 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の取得は廃止。(helpタグで行う) 086 * @og.rev 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 087 * 088 * @param data GUIKEY,GUILVL,LABEL_CLM,ADDRESS,SEQNO,GROUPS,CLASSIFY,ROLES,RWMODE,TARGET,KBLINK,DYUPD 089 */ 090 GUIData( final String[] data ) { 091 guiKey = data[GUIKEY].intern() ; // 画面ID 092 guiLevel = Integer.parseInt( data[GUILVL] ); // 画面階層 093 lblClm = nval2( data[LABEL_CLM],guiKey ) ; // 画面カラムID 094 address = data[ADDRESS].intern() ; // アドレス 095 seqno = Integer.parseInt( data[SEQNO] ); // 表示順 096 groups = nval2( data[GROUPS] , null ) ; // グループ 097 classify = nval2( data[CLASSIFY] , "" ) ; // 分類 098 target = nval2( data[TARGET] , null ) ; // ターゲット 099 100 // realAddress と pageUse を設定します。 101 // 3.5.5.0 (2004/03/12) kblink の設定方法を見直し 102 // 4.3.3.7 (2008/11/22) https対応 103 if( address.startsWith( "http://" ) || address.startsWith( "https://" ) || StringUtil.startsChar( address , '.' ) ) { 104 pageUse = false; 105 kblink = "http"; 106 realAddress = address; 107 } 108 // 5.7.8.1 (2014/07/18) address の "/" 対応 109 else if( StringUtil.startsChar( address , '/' ) ) { // 6.2.0.0 (2015/02/27) 1文字 String.startsWith 110 pageUse = false; 111 kblink = "/"; 112 realAddress = address; 113 } 114 // 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 115 else { 116 pageUse = true; 117 kblink = "jsp"; // 6.3.8.4 (2015/10/09) 118 realAddress = CON_DIR + "jsp/" + address + "/" ; 119 } 120 121 // 4.0.0 (2005/01/31) param を追加します。 122 final String paramTmp = data[PARAM] ; // 設定値(パラメータ) 123 if( paramTmp != null && paramTmp.length() > 0 ) { 124 param = paramTmp.intern() ; 125 } 126 else { 127 param = "" ; 128 } 129 130 // 5.5.2.5 (2012/05/21) イメージアイコンの処理。既存の param 設定と分けておきます。(将来的にはDBから読み取りたい) 131 // 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 132 imageKey = nval2( data[KBLINK] , guiKey ) ; 133 134 // 5.1.3.0 (2010/02/01) 画面ロールのroot の場合は、user が root 以外、アクセス禁止のはず 135 // ここでは、RoleMode で、共通化を図っているため、"root" を、"r00t" に置換えます。 136 String roles = data[ROLES]; 137 if( "root".equals( roles ) ) { roles = "r00t" ; } 138 roleMode = RoleMode.newInstance( roles,data[RWMODE] ); // ロールモード 139 140 dyupd = nval2( data[DYUPD] , "" ) ; 141 } 142 143 /** 144 * 画面オブジェクトのキーを返します。 145 * 146 * @return 画面オブジェクトのキー 147 */ 148 public String getGuiKey() { return guiKey; } 149 150 /** 151 * 画面オブジェクトの階層レベルを返します。 152 * 153 * @return 画面オブジェクトの階層レベル 154 */ 155 public int getGuiLevel() { return guiLevel ; } 156 157 /** 158 * 画面オブジェクトの画面カラムIDを返します。 159 * これは、同一画面ID(GUIKEY)で、ロール違いやアドレス違いにより 160 * 画面に表示する名称を変える場合に使用します。 161 * 162 * @return 画面オブジェクトの画面カラムID 163 */ 164 public String getLabelClm() { return lblClm ; } 165 166 /** 167 * 画面オブジェクトのアドレスを返します。 168 * 169 * @return 画面オブジェクトのアドレス 170 */ 171 public String getAddress() { return address; } 172 173 /** 174 * トップからの実行アドレス情報を取得します。 175 * コンテキスト名とリンク区分属性を利用して、サーバートップからのアドレスを 176 * 返します。ただし、GUIリソースに、http://~ または、.~ から始まるアドレスは 177 * そのまま、なにも変換せずに返します。 178 * param 属性がある場合は、引数として後ろに追加します。 179 * 180 * http://AAAA ⇒ http://AAAA 181 * ../../AAAA/ ⇒ ../../AAAA/ 182 * AAAA ⇒ /CONTEXT_NAME/KBLINK/AAAA/ 183 * 184 * @og.rev 3.5.5.0 (2004/03/12) 新規追加 185 * @og.rev 4.0.0.0 (2005/01/31) param 属性の追加 186 * 187 * @return 実行実アドレス 188 */ 189 public String getRealAddress() { 190 return realAddress ; 191 } 192 193 /** 194 * トップからの実行アドレス情報を取得します。 195 * コンテキスト名とリンク区分属性を利用して、サーバートップからのアドレスを 196 * 返します。ただし、GUIリソースに、http://~ または、.~ から始まるアドレスは 197 * そのまま、なにも変換せずに返します。 198 * また、アドレスの最後がスラッシュ(/)で終了している場合は、page属性を追加します。 199 * 200 * http://AAAA ⇒ http://AAAA 201 * ../../AAAA/ ⇒ ../../AAAA/ 202 * AAAA ⇒ /CONTEXT_NAME/KBLINK/AAAA/ 203 * 204 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 205 * 206 * @param page 実行ページ(index.jsp など) 207 * 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 * ロールモード情報を取得します。 252 * 253 * @og.rev 4.3.0.0 (2008/07/04) 新規追加 254 * 255 * @return ロールモード情報 256 */ 257 public RoleMode getRoleMode() { return roleMode ; } 258 259 /** 260 * 画面オブジェクトのターゲットを返します。 261 * 262 * @return 画面オブジェクトのターゲット 263 */ 264 public String getTarget() { return target; } 265 266 /** 267 * 画面オブジェクトのパラメータを返します。 268 * 269 * @return 画面オブジェクトのパラメータ 270 */ 271 public String getParam() { return param; } 272 273 /** 274 * 画面オブジェクトのリンク区分を返します。 275 * 276 * @return 画面オブジェクトのリンク区分 277 */ 278 public String getKblink() { return kblink; } 279 280 /** 281 * 画面オブジェクトの更新日時を返します。 282 * 283 * @og.rev 5.3.3.0 (2011/03/01) 新規追加 284 * 285 * @return 画面オブジェクトの更新日時 286 */ 287 public String getDyupd() { return dyupd; } 288 289 /** 290 * イメージアイコンのキーを返します。 291 * 292 * 画面にアイコンを追加する場合、jsp/menuImage フォルダに、画面ID と同じ名称の 293 * 画像ファイルを置く必要があります。 294 * 295 * ※ 6.3.8.4 (2015/10/09) 296 * 従来は、PARAM 属性に、IMAGE_KEY=XXXX と指定していましたが、 297 * KBLINK(リンク区分) を使用するように変更しました。 298 * 299 * @og.rev 5.5.2.5 (2012/05/21) 新規追加 300 * @og.rev 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 301 * 302 * @return イメージアイコンのキー 303 */ 304 public String getImageKey() { return imageKey; } 305 306 /** 307 * オブジェクトの識別子として,詳細なユーザー情報を返します。 308 * 309 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追加 310 * @og.rev 5.6.4.3 (2013/05/24) faq 311 * @og.rev 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の取得は廃止。(helpタグで行う) 312 * 313 * @return 詳細な画面情報 314 * @og.rtnNotNull 315 */ 316 @Override 317 public String toString() { 318 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ) 319 .append( "guiKey :" ).append( guiKey ).append( CR ) 320 .append( "guiLevel :" ).append( guiLevel ).append( CR ) 321 .append( "address :" ).append( address ).append( CR ) 322 .append( "realAddress:" ).append( realAddress ).append( CR ) 323 .append( "seqno :" ).append( seqno ).append( CR ) 324 .append( "classify :" ).append( classify ).append( CR ) 325 .append( "roles :" ).append( getRoles() ).append( CR ) 326 .append( "mode :" ).append( getMode() ).append( CR ) 327 .append( "target :" ).append( target ).append( CR ) 328 .append( "param :" ).append( param ).append( CR ) 329 .append( "kblink :" ).append( kblink ).append( CR ) 330 .append( "dyupd :" ).append( dyupd ).append( CR ); 331 return rtn.toString(); 332 } 333}