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