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    }