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             *
083             * @param       data    GUIKEY,GUILVL,LABEL_CLM,ADDRESS,SEQNO,GROUPS,CLASSIFY,ROLES,RWMODE,TARGET,KBLINK
084             */
085            GUIData( final String[] data ) {
086                    guiKey          = data[GUIKEY].intern() ;                                       // 画面ID
087                    guiLevel        = Integer.parseInt( data[GUILVL] );                     // 画面階層
088                    lblClm          = nval2( data[LABEL_CLM],guiKey ) ;                     // 画面カラãƒ?D
089                    address         = data[ADDRESS].intern() ;                                      // アドレス
090                    seqno           = Integer.parseInt( data[SEQNO] );                      // 表示é ?
091                    groups          = nval2( data[GROUPS] , null ) ;                        // グルーãƒ?
092                    classify        = nval2( data[CLASSIFY] , "" ) ;                        // åˆ?¡?
093    //              roleMode        = RoleMode.newInstance( data[ROLES],data[RWMODE] );     // ロールモーãƒ?Ver.5.1.3.0 削除
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( "." ) ) {
100                    if( address.startsWith( "http://" ) || address.startsWith( "https://" ) || address.startsWith( "." ) ) {
101                            kblink = "http";
102                            pageUse = false;
103                            realAddress = address;
104                    }
105                    else {
106                            pageUse = true;
107                            kblink = nval2( data[KBLINK] , "jsp" ) ;                        // リンク区åˆ?
108                            if( kblink.startsWith( "/" ) ) {
109                                    realAddress = ( kblink + "/" + address + "/" ) ;
110                            }
111                            else {
112                                    realAddress = ( CON_DIR + kblink + "/" + address + "/" ) ;
113    //                              realAddress = ( "/" + HybsSystem.getContextName() + "/" + kblink +
114    //                                              "/" + address + "/" ) ;
115                            }
116                    }
117    
118                    // 4.0.0 (2005/01/31) param を追åŠ?�—ますã?
119                    String paramTmp = data[PARAM] ; // 設定å?(パラメータ)
120                    if( paramTmp != null && paramTmp.length() > 0 ) {
121                            param = paramTmp.intern() ;
122                    }
123                    else {
124                            param    = "" ;
125                    }
126    
127                    // 5.5.2.5 (2012/05/21) イメージアイコンの処ç�??既存ã? param 設定とåˆ?�‘ておきますã?(å°?�¥çš?�«はDBから読み取りたい)
128                    int indx1 = param.indexOf( "IMAGE_KEY=" );
129                    if( indx1 >= 0 ) {
130                            indx1 = indx1+"IMAGE_KEY=".length() ;           // æŒ?®šã?æ–?­—å?まで進めておくã€?
131                            int indx2 = param.indexOf( "&",indx1 );     // パラメータの区åˆ?‚Š記号。なã�?¼�最å¾?
132                            if( indx2 >= 0 ) {
133                                    imageKey = param.substring( indx1, indx2 );
134                            }
135                            else {
136                                    imageKey = param.substring( indx1 );
137                            }
138                    }
139                    else {
140                            imageKey = guiKey ;             // 5.5.2.5 (2012/05/21) イメージアイコンの処ç�?‚’追åŠ?
141                    }
142    
143                    // 5.1.3.0 (2010/02/01) 画面ロールのroot の場合ã?、user ã�?root 以外ã?アクセス禁止のはã�?
144                    // ここでは、RoleMode で、å?通化を図ってã�?‚‹ためã€?root" をã?"r00t" に置換えますã?
145                    String roles = data[ROLES];
146                    if( "root".equals( roles ) ) { roles = "r00t" ; }
147                    roleMode        = RoleMode.newInstance( roles,data[RWMODE] );   // ロールモーãƒ?
148    
149                    // 3.5.5.0 (2004/03/12) 実行実アドレスを求めますã?
150    //              if( address.startsWith( "http://" ) || address.startsWith( "." ) ) {
151    //                      realAddress = address;
152    //                      pageUse = false;
153    //              }
154    //              else {
155    //                      realAddress = ( "/" + HybsSystem.getContextName() + "/" + kblink +
156    //                                                              "/" + address + "/" ) ;
157    //                      pageUse = true;
158    //              }
159    
160                    dyupd = nval2( data[DYUPD] , "" ) ;
161                    
162                    faq = Boolean.parseBoolean( data[FAQ] ); // 5.6.4.3 (2013/06/24)
163            }
164    
165            /**
166             * 画面オブジェクトã?キーを返しますã?
167             *
168             * @return 画面オブジェクトã?キー
169             */
170            public String getGuiKey() { return guiKey; }
171    
172            /**
173             * 画面オブジェクトã?階層レベルを返しますã?
174             *
175             * @return 画面オブジェクトã?階層レベル
176             */
177            public int getGuiLevel() { return guiLevel ; }
178    
179            /**
180             * 画面オブジェクトã?画面カラãƒ?Dを返しますã?
181             * これは、同ä¸?”»面ID(GUIKEY)で、ロール違いã‚?‚¢ドレス違いにより
182             * 画面に表示する名称を変えるå?合に使用しますã?
183             *
184             * @return 画面オブジェクトã?画面カラãƒ?D
185             */
186            public String getLabelClm() { return lblClm ; }
187    
188            /**
189             * 画面オブジェクトã?アドレスを返しますã?
190             *
191             * @return 画面オブジェクトã?アドレス
192             */
193            public String getAddress() { return address; }
194    
195            /**
196             * トップからã?実行アドレスæƒ??を取得しますã?
197             * コンãƒ?‚­スト名とリンク区åˆ?±žæ?を利用して、サーバã?トップからã?アドレスã‚?
198             * 返しますã?ただしã?GUIリソースに、http://??またã?ã€???から始まるアドレスは
199             * そã?まま、なにも変換せずに返しますã?
200             * param 属æ?があるå?合ã?、引数として後ろに追åŠ?�—ますã?
201             *
202             * http://AAAA  � http://AAAA
203             * ../../AAAA/  � ../../AAAA/
204             * AAAA         � /CONTEXT_NAME/KBLINK/AAAA/
205             *
206             * @og.rev 3.5.5.0 (2004/03/12) 新規追åŠ?
207             * @og.rev 4.0.0.0 (2005/01/31) param 属æ?の追åŠ?
208             *
209             * @return      実行実アドレス
210             */
211            public String getRealAddress() {
212                    return realAddress ;
213            }
214    
215            /**
216             * トップからã?実行アドレスæƒ??を取得しますã?
217             * コンãƒ?‚­スト名とリンク区åˆ?±žæ?を利用して、サーバã?トップからã?アドレスã‚?
218             * 返しますã?ただしã?GUIリソースに、http://??またã?ã€???から始まるアドレスは
219             * そã?まま、なにも変換せずに返しますã?
220             * またã?アドレスのæœ?¾Œがスラãƒ?‚·ュ(/)で終äº?�—てã�?‚‹場合ã?、page属æ?を追åŠ?�—ますã?
221             *
222             * http://AAAA  � http://AAAA
223             * ../../AAAA/  � ../../AAAA/
224             * AAAA         � /CONTEXT_NAME/KBLINK/AAAA/
225             *
226             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
227             *
228             * @param    page          実行ã?ージ(index.jsp など)
229             *
230             * @return      実行実アドレス
231             */
232            public String getRealAddress( final String page ) {
233                    if( ! pageUse || page == null ) {
234                            return realAddress ;
235                    }
236                    else {
237                            return realAddress + page;
238                    }
239            }
240    
241            /**
242             * 画面オブジェクトã?表示é ?‚’返しますã?
243             *
244             * @return      画面オブジェクトã?表示é ?
245             */
246            public int getSeqno() { return seqno; }
247    
248            /**
249             * 画面オブジェクトã?グループを返しますã?
250             *
251             * @return      画面オブジェクトã?グルーãƒ?
252             */
253            public String getGroups() { return groups; }
254    
255            /**
256             * 画面オブジェクトã?åˆ?¡žを返しますã?
257             *
258             * @return      画面オブジェクトã?åˆ?¡?
259             */
260            public String getClassify() { return classify; }
261    
262            /**
263             * 画面オブジェクトã?ロールズを返しますã?
264             *
265             * @return      画面オブジェクトã?ロールズæ–?­—å?
266             */
267            public String getRoles() { return roleMode.getRoles(); }
268    
269            /**
270             * 画面オブジェクトã?モード文字å?を返しますã?
271             *
272             * @return      画面オブジェクトã?モード文字å?
273             */
274            public String getMode() { return roleMode.getMode(); }
275    
276            /**
277             * ロールモード情報を取得しますã?
278             *
279             * @og.rev 4.3.0.0 (2008/07/04) 新規追åŠ?
280             *
281             * @return      ロールモード情報
282             */
283            public RoleMode getRoleMode() { return roleMode ; }
284    
285            /**
286             * 画面オブジェクトã?ターゲãƒ?ƒˆを返しますã?
287             *
288             * @return 画面オブジェクトã?ターゲãƒ?ƒˆ
289             */
290            public String getTarget() { return target; }
291    
292            /**
293             * 画面オブジェクトã?パラメータを返しますã?
294             *
295             * @return 画面オブジェクトã?パラメータ
296             */
297            public String getParam() { return param; }
298    
299            /**
300             * 画面オブジェクトã?リンク区åˆ?‚’返しますã?
301             *
302             * @return 画面オブジェクトã?リンク区åˆ?
303             */
304            public String getKblink() { return kblink; }
305    
306            /**
307             * 画面オブジェクトã?更新日時を返しますã?
308             *
309             * @og.rev 5.3.3.0 (2011/03/01) 新規追åŠ?
310             *
311             * @return 画面オブジェクトã?更新日æ™?
312             */
313            public String getDyupd() { return dyupd; }
314            
315            /**
316             * 画面オブジェクトã?FAQを返しますã?
317             *
318             * @return 画面オブジェクトã?FAQ
319             */
320            public boolean isFaq() { return faq; }
321            
322            /**
323             * イメージアイコンのキーを返しますã?
324             *
325             * 画面にアイコンを追åŠ?�™るå?合ã?jsp/menuImage フォルãƒ?�«、画面ID と同じ名称の
326             * 画像ファイルを置くå¿?¦�がありますã?
327             * 本来は、画面リソース(GEA11)に、カラãƒ?‚’追åŠ?�—て対応すべきですが、互換性の関係よりã?
328             * PARAM 属æ?で、所定ã?キーを登録することで使えるようにしますã?
329             * こã?、PARAMは、画面アドレスの引数(たとえã?、command=NEW など)を使ã�?�Ÿめã?パラメータですがã€?
330             * アイコン割り当て(IMAGE_KEY=XXXX)を使用することで、XXXX をキーとして使ã�?�¾すã?
331             * IMAGE_KEY=XXXX が指定されなã�??合ã?、画面IDがã?imageKey として返されますã?
332             *
333             * @og.rev 5.5.2.5 (2012/05/21) 新規追åŠ?
334             *
335             * @return イメージアイコンのキー
336             */
337            public String getImageKey() { return imageKey; }
338    
339            /**
340             * 画面オブジェクトへのアクセス可否を返しますã?
341             *
342             * @param       userRoles       ユーザーロール配å?
343             *
344             * @return アクセスできる(true)/出来なã�?false)
345             */
346    //      public boolean isAccess( final String[] userRoles ) {
347    //              return roleMode.isAccess( userRoles );
348    //      }
349    
350            /**
351             * こã?画面のアクセス条件を設定しますã?
352             * アクセス条件は、è¤?•°あるユーザーロールの中で、最大のアクセス条件を算å?しますã?
353             * 例えば、AAA|BBB|CCC の?“つのロールにã€?r|-w|mr| のモードが設定されてã�?‚‹場合ã?
354             * ユーザーがã?AAA ã�?�‘の場合ã?ã€?r ですが、AAA|BBB を持ってã�?‚‹場合ã?ã€?w になりますã?
355             * さらに、BBB|CCC と持ってã�?‚‹場合ã?ã€?-w:書き込み許可)と(mr:メニューから読取許可)の
356             * 権限により、mw:メニューからの書き込み許可が与えられますã?
357             * 実際には、メニュー表示の可否は、ã?ãƒ??アãƒ??系によく用ã�?‚‰れますã?で、上記ã?ような
358             * 許可が実際にあるかどã�?�‹は不æ?ですが、すべてのモードã?OR条件での結合になりますã?
359             *
360             * @param       userRoles       ユーザーロール配å?
361             * @param       isRoot  ルートロールフラグ
362             *
363             * @return  ビットモードé?åˆ?"--:000","-r:001","-w:010","mr:101","mw:110" に対応した数å­?0,1,2,5,6)
364             */
365    //      public byte getAccessBitMode( final String[] userRoles,final boolean isRoot ) {
366    //              return roleMode.getAccessBitMode( userRoles,isRoot );
367    //      }
368    
369            /**
370             * æŒ?®šã?ユーザーロールに対するæœ?µ‚的なアクセス条件を取得しますã?
371             * アクセス条件は、è¤?•°あるユーザーロールの中で、最大のアクセス条件を算å?しますã?
372             * 例えば、AAA(-r)|BBB(-w)|CCC(mr) の?“つのロール/モードが設定されてã�?‚‹場合ã?
373             * ユーザーがã?AAA ã�?�‘の場合ã?ã€?r ですが、AAA|BBB を持ってã�?‚‹場合ã?ã€?w になりますã?
374             * さらに、BBB|CCC と持ってã�?‚‹場合ã?ã€?-w:書き込み許可)と(mr:メニューから読取許可)の
375             * 権限により、mw:メニューからの書き込み許可が与えられますã?
376             * モード指定がある場合ã?、AND演算になりますã?
377             * 例えば、AAA(-r)|BBB(-w)|CCC(mr) と BBB|CCC(-r) の場合ã?(-r)+(-w)+(mr)*(-r)=-w に
378             * なりますã?ロールは、OR ですが、モードã?、同ä¸?ƒ­ールでのAND になりますã?
379             * 実際には、メニュー表示の可否は、ã?ãƒ??アãƒ??系によく用ã�?‚‰れますã?で、上記ã?ような
380             * 許可が実際にあるかどã�?�‹は不æ?ですが、すべてのモードã?OR条件での結合になりますã?
381             *
382             * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
383             *
384             * @param other RoleMode ロールモーãƒ?
385             *
386             * @return アクセスビッãƒ?
387             */
388    //      public byte getAccessBitMode( final RoleMode other ) {
389    //              return roleMode.getAccessBitMode( other );
390    //      }
391    
392            /**
393             * オブジェクトã?識別子として?Œ詳細なユーザーæƒ??を返しますã?
394             *
395             * @og.rev 5.3.3.0 (2011/03/01) 更新日時を追åŠ?
396             * @og.rev 5.6.4.3 (2013/05/24) faq
397             *
398             * @return  詳細な画面æƒ??
399             */
400            @Override
401            public String toString() {
402                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
403                    rtn.append( "guiKey     :" ).append( guiKey      ).append( HybsSystem.CR );
404                    rtn.append( "guiLevel   :" ).append( guiLevel    ).append( HybsSystem.CR );
405                    rtn.append( "address    :" ).append( address     ).append( HybsSystem.CR );
406                    rtn.append( "realAddress:" ).append( realAddress ).append( HybsSystem.CR );
407                    rtn.append( "seqno      :" ).append( seqno       ).append( HybsSystem.CR );
408                    rtn.append( "classify   :" ).append( classify    ).append( HybsSystem.CR );
409                    rtn.append( "roles      :" ).append( getRoles()  ).append( HybsSystem.CR );
410                    rtn.append( "mode       :" ).append( getMode()   ).append( HybsSystem.CR );
411                    rtn.append( "target     :" ).append( target      ).append( HybsSystem.CR );
412                    rtn.append( "param      :" ).append( param       ).append( HybsSystem.CR );
413                    rtn.append( "kblink     :" ).append( kblink      ).append( HybsSystem.CR );
414                    rtn.append( "dyupd      :" ).append( dyupd       ).append( HybsSystem.CR );
415                    rtn.append( "faq        :" ).append( faq         ).append( HybsSystem.CR );
416                    return rtn.toString();
417            }
418    }