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 */
016 package org.opengion.hayabusa.resource;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import 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 */
033 public 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 ; // 画面カラ?D
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 * こ?コンストラクタは??リソースファイルを想定して?す?
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 ) ; // 画面カラ?D
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 * 画面オブジェクト?画面カラ?Dを返します?
173 * これは、同?面ID(GUIKEY)で、ロール違い?ドレス違いにより
174 * 画面に表示する名称を変える?合に使用します?
175 *
176 * @return 画面オブジェクト?画面カラ?D
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 }