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 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 */ 033public 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 ; // 画面カラムID 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 * このコンストラクタは、DBリソースファイルを想定しています。 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 * @og.rev 5.7.8.1 (2014/07/18) address の "/" 対応 083 * 084 * @param data GUIKEY,GUILVL,LABEL_CLM,ADDRESS,SEQNO,GROUPS,CLASSIFY,ROLES,RWMODE,TARGET,KBLINK 085 */ 086 GUIData( final String[] data ) { 087 guiKey = data[GUIKEY].intern() ; // 画面ID 088 guiLevel = Integer.parseInt( data[GUILVL] ); // 画面階層 089 lblClm = nval2( data[LABEL_CLM],guiKey ) ; // 画面カラムID 090 address = data[ADDRESS].intern() ; // アドレス 091 seqno = Integer.parseInt( data[SEQNO] ); // 表示順 092 groups = nval2( data[GROUPS] , null ) ; // グループ 093 classify = nval2( data[CLASSIFY] , "" ) ; // 分類 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( "https://" ) || address.startsWith( "." ) ) { 100 kblink = "http"; 101 pageUse = false; 102 realAddress = address; 103 } 104 // 5.7.8.1 (2014/07/18) address の "/" 対応 105 else if( address.startsWith( "/" ) ) { 106 kblink = "/"; 107 pageUse = false; 108 realAddress = address; 109 } 110 else { 111 pageUse = true; 112 kblink = nval2( data[KBLINK] , "jsp" ) ; // リンク区分 113 if( kblink.startsWith( "/" ) ) { 114 realAddress = kblink + "/" + address + "/" ; 115 } 116 else { 117 realAddress = CON_DIR + kblink + "/" + address + "/" ; 118 } 119 } 120 121 // 4.0.0 (2005/01/31) param を追加します。 122 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 int indx1 = param.indexOf( "IMAGE_KEY=" ); 132 if( indx1 >= 0 ) { 133 indx1 = indx1+"IMAGE_KEY=".length() ; // 指定の文字列まで進めておく。 134 int indx2 = param.indexOf( "&",indx1 ); // パラメータの区切り記号。ない=最後 135 if( indx2 >= 0 ) { 136 imageKey = param.substring( indx1, indx2 ); 137 } 138 else { 139 imageKey = param.substring( indx1 ); 140 } 141 } 142 else { 143 imageKey = guiKey ; // 5.5.2.5 (2012/05/21) イメージアイコンの処理を追加 144 } 145 146 // 5.1.3.0 (2010/02/01) 画面ロールのroot の場合は、user が root 以外、アクセス禁止のはず 147 // ここでは、RoleMode で、共通化を図っているため、"root" を、"r00t" に置換えます。 148 String roles = data[ROLES]; 149 if( "root".equals( roles ) ) { roles = "r00t" ; } 150 roleMode = RoleMode.newInstance( roles,data[RWMODE] ); // ロールモード 151 152 dyupd = nval2( data[DYUPD] , "" ) ; 153 154 faq = Boolean.parseBoolean( data[FAQ] ); // 5.6.4.3 (2013/06/24) 155 } 156 157 /** 158 * 画面オブジェクトのキーを返します。 159 * 160 * @return 画面オブジェクトのキー 161 */ 162 public String getGuiKey() { return guiKey; } 163 164 /** 165 * 画面オブジェクトの階層レベルを返します。 166 * 167 * @return 画面オブジェクトの階層レベル 168 */ 169 public int getGuiLevel() { return guiLevel ; } 170 171 /** 172 * 画面オブジェクトの画面カラムIDを返します。 173 * これは、同一画面ID(GUIKEY)で、ロール違いやアドレス違いにより 174 * 画面に表示する名称を変える場合に使用します。 175 * 176 * @return 画面オブジェクトの画面カラムID 177 */ 178 public String getLabelClm() { return lblClm ; } 179 180 /** 181 * 画面オブジェクトのアドレスを返します。 182 * 183 * @return 画面オブジェクトのアドレス 184 */ 185 public String getAddress() { return address; } 186 187 /** 188 * トップからの実行アドレス情報を取得します。 189 * コンテキスト名とリンク区分属性を利用して、サーバートップからのアドレスを 190 * 返します。ただし、GUIリソースに、http://~ または、.~ から始まるアドレスは 191 * そのまま、なにも変換せずに返します。 192 * param 属性がある場合は、引数として後ろに追加します。 193 * 194 * http://AAAA ⇒ http://AAAA 195 * ../../AAAA/ ⇒ ../../AAAA/ 196 * AAAA ⇒ /CONTEXT_NAME/KBLINK/AAAA/ 197 * 198 * @og.rev 3.5.5.0 (2004/03/12) 新規追加 199 * @og.rev 4.0.0.0 (2005/01/31) param 属性の追加 200 * 201 * @return 実行実アドレス 202 */ 203 public String getRealAddress() { 204 return realAddress ; 205 } 206 207 /** 208 * トップからの実行アドレス情報を取得します。 209 * コンテキスト名とリンク区分属性を利用して、サーバートップからのアドレスを 210 * 返します。ただし、GUIリソースに、http://~ または、.~ から始まるアドレスは 211 * そのまま、なにも変換せずに返します。 212 * また、アドレスの最後がスラッシュ(/)で終了している場合は、page属性を追加します。 213 * 214 * http://AAAA ⇒ http://AAAA 215 * ../../AAAA/ ⇒ ../../AAAA/ 216 * AAAA ⇒ /CONTEXT_NAME/KBLINK/AAAA/ 217 * 218 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 219 * 220 * @param page 実行ページ(index.jsp など) 221 * 222 * @return 実行実アドレス 223 */ 224 public String getRealAddress( final String page ) { 225 if( ! pageUse || page == null ) { 226 return realAddress ; 227 } 228 else { 229 return realAddress + page; 230 } 231 } 232 233 /** 234 * 画面オブジェクトの表示順を返します。 235 * 236 * @return 画面オブジェクトの表示順 237 */ 238 public int getSeqno() { return seqno; } 239 240 /** 241 * 画面オブジェクトのグループを返します。 242 * 243 * @return 画面オブジェクトのグループ 244 */ 245 public String getGroups() { return groups; } 246 247 /** 248 * 画面オブジェクトの分類を返します。 249 * 250 * @return 画面オブジェクトの分類 251 */ 252 public String getClassify() { return classify; } 253 254 /** 255 * 画面オブジェクトのロールズを返します。 256 * 257 * @return 画面オブジェクトのロールズ文字列 258 */ 259 public String getRoles() { return roleMode.getRoles(); } 260 261 /** 262 * 画面オブジェクトのモード文字列を返します。 263 * 264 * @return 画面オブジェクトのモード文字列 265 */ 266 public String getMode() { return roleMode.getMode(); } 267 268 /** 269 * ロールモード情報を取得します。 270 * 271 * @og.rev 4.3.0.0 (2008/07/04) 新規追加 272 * 273 * @return ロールモード情報 274 */ 275 public RoleMode getRoleMode() { return roleMode ; } 276 277 /** 278 * 画面オブジェクトのターゲットを返します。 279 * 280 * @return 画面オブジェクトのターゲット 281 */ 282 public String getTarget() { return target; } 283 284 /** 285 * 画面オブジェクトのパラメータを返します。 286 * 287 * @return 画面オブジェクトのパラメータ 288 */ 289 public String getParam() { return param; } 290 291 /** 292 * 画面オブジェクトのリンク区分を返します。 293 * 294 * @return 画面オブジェクトのリンク区分 295 */ 296 public String getKblink() { return kblink; } 297 298 /** 299 * 画面オブジェクトの更新日時を返します。 300 * 301 * @og.rev 5.3.3.0 (2011/03/01) 新規追加 302 * 303 * @return 画面オブジェクトの更新日時 304 */ 305 public String getDyupd() { return dyupd; } 306 307 /** 308 * 画面オブジェクトのFAQを返します。 309 * 310 * @return 画面オブジェクトのFAQ 311 */ 312 public boolean isFaq() { return faq; } 313 314 /** 315 * イメージアイコンのキーを返します。 316 * 317 * 画面にアイコンを追加する場合、jsp/menuImage フォルダに、画面ID と同じ名称の 318 * 画像ファイルを置く必要があります。 319 * 本来は、画面リソース(GEA11)に、カラムを追加して対応すべきですが、互換性の関係より、 320 * PARAM 属性で、所定のキーを登録することで使えるようにします。 321 * この、PARAMは、画面アドレスの引数(たとえば、command=NEW など)を使うためのパラメータですが、 322 * アイコン割り当て(IMAGE_KEY=XXXX)を使用することで、XXXX をキーとして使います。 323 * IMAGE_KEY=XXXX が指定されない場合は、画面IDが、imageKey として返されます。 324 * 325 * @og.rev 5.5.2.5 (2012/05/21) 新規追加 326 * 327 * @return イメージアイコンのキー 328 */ 329 public String getImageKey() { return imageKey; } 330 331 /** 332 * オブジェクトの識別子として,詳細なユーザー情報を返します。 333 * 334 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追加 335 * @og.rev 5.6.4.3 (2013/05/24) faq 336 * 337 * @return 詳細な画面情報 338 */ 339 @Override 340 public String toString() { 341 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 342 rtn.append( "guiKey :" ).append( guiKey ).append( HybsSystem.CR ); 343 rtn.append( "guiLevel :" ).append( guiLevel ).append( HybsSystem.CR ); 344 rtn.append( "address :" ).append( address ).append( HybsSystem.CR ); 345 rtn.append( "realAddress:" ).append( realAddress ).append( HybsSystem.CR ); 346 rtn.append( "seqno :" ).append( seqno ).append( HybsSystem.CR ); 347 rtn.append( "classify :" ).append( classify ).append( HybsSystem.CR ); 348 rtn.append( "roles :" ).append( getRoles() ).append( HybsSystem.CR ); 349 rtn.append( "mode :" ).append( getMode() ).append( HybsSystem.CR ); 350 rtn.append( "target :" ).append( target ).append( HybsSystem.CR ); 351 rtn.append( "param :" ).append( param ).append( HybsSystem.CR ); 352 rtn.append( "kblink :" ).append( kblink ).append( HybsSystem.CR ); 353 rtn.append( "dyupd :" ).append( dyupd ).append( HybsSystem.CR ); 354 rtn.append( "faq :" ).append( faq ).append( HybsSystem.CR ); 355 return rtn.toString(); 356 } 357}