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 * 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 * 219 * @return 画面オブジェクトの表示順 220 */ 221 public int getSeqno() { return seqno; } 222 223 /** 224 * 画面オブジェクトのグループを返します。 225 * 226 * @return 画面オブジェクトのグループ 227 */ 228 public String getGroups() { return groups; } 229 230 /** 231 * 画面オブジェクトの分類を返します。 232 * 233 * @return 画面オブジェクトの分類 234 */ 235 public String getClassify() { return classify; } 236 237 /** 238 * 画面オブジェクトのロールズを返します。 239 * 240 * @return 画面オブジェクトのロールズ文字列 241 */ 242 public String getRoles() { return roleMode.getRoles(); } 243 244 /** 245 * 画面オブジェクトのモード文字列を返します。 246 * 247 * @return 画面オブジェクトのモード文字列 248 */ 249 public String getMode() { return roleMode.getMode(); } 250 251 /** 252 * ロールモード情報を取得します。 253 * 254 * @og.rev 4.3.0.0 (2008/07/04) 新規追加 255 * 256 * @return ロールモード情報 257 */ 258 public RoleMode getRoleMode() { return roleMode ; } 259 260 /** 261 * 画面オブジェクトのターゲットを返します。 262 * 263 * @return 画面オブジェクトのターゲット 264 */ 265 public String getTarget() { return target; } 266 267 /** 268 * 画面オブジェクトのパラメータを返します。 269 * 270 * @return 画面オブジェクトのパラメータ 271 */ 272 public String getParam() { return param; } 273 274 /** 275 * 画面オブジェクトのリンク区分を返します。 276 * 277 * @return 画面オブジェクトのリンク区分 278 */ 279 public String getKblink() { return kblink; } 280 281 /** 282 * 画面オブジェクトの更新日時を返します。 283 * 284 * @og.rev 5.3.3.0 (2011/03/01) 新規追加 285 * 286 * @return 画面オブジェクトの更新日時 287 */ 288 public String getDyupd() { return dyupd; } 289 290 /** 291 * イメージアイコンのキーを返します。 292 * 293 * 画面にアイコンを追加する場合、jsp/menuImage フォルダに、画面ID と同じ名称の 294 * 画像ファイルを置く必要があります。 295 * 296 * ※ 6.3.8.4 (2015/10/09) 297 * 従来は、PARAM 属性に、IMAGE_KEY=XXXX と指定していましたが、 298 * KBLINK(リンク区分) を使用するように変更しました。 299 * 300 * @og.rev 5.5.2.5 (2012/05/21) 新規追加 301 * @og.rev 6.3.8.4 (2015/10/09) KBLINK(リンク区分)を画面のイメージファイルに割り当てます。 302 * 303 * @return イメージアイコンのキー 304 */ 305 public String getImageKey() { return imageKey; } 306 307 /** 308 * オブジェクトの識別子として,詳細なユーザー情報を返します。 309 * 310 * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追加 311 * @og.rev 5.6.4.3 (2013/05/24) faq 312 * @og.rev 6.3.8.4 (2015/10/09) GE80(FAQテーブル)の取得は廃止。(helpタグで行う) 313 * 314 * @return 詳細な画面情報 315 * @og.rtnNotNull 316 */ 317 @Override 318 public String toString() { 319 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ) 320 .append( "guiKey :" ).append( guiKey ).append( CR ) 321 .append( "guiLevel :" ).append( guiLevel ).append( CR ) 322 .append( "address :" ).append( address ).append( CR ) 323 .append( "realAddress:" ).append( realAddress ).append( CR ) 324 .append( "seqno :" ).append( seqno ).append( CR ) 325 .append( "classify :" ).append( classify ).append( CR ) 326 .append( "roles :" ).append( getRoles() ).append( CR ) 327 .append( "mode :" ).append( getMode() ).append( CR ) 328 .append( "target :" ).append( target ).append( CR ) 329 .append( "param :" ).append( param ).append( CR ) 330 .append( "kblink :" ).append( kblink ).append( CR ) 331 .append( "dyupd :" ).append( dyupd ).append( CR ); 332 return rtn.toString(); 333 } 334}