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    }