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    }