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.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.resource.ResourceManager;
020    import org.opengion.hayabusa.resource.ResourceFactory;
021    
022    import static org.opengion.fukurou.util.StringUtil.nval ;
023    
024    import javax.servlet.jsp.PageContext;
025    
026    /**
027     * ローカルリソースを構築しまã�?有効ç¯?›²は、ã?ージスコーãƒ?å†?�§ã�?ã€?
028     *
029     * ペã?ジスコープå?で使用されますã?で、主に、ã?ージ先é?にて、ローカルリソースの
030     * 設定を行いますã?そã?ペã?ジå†?�§は、ここで定義した ResourceManager が使用されますã?
031     * これは、シスãƒ?ƒ IDの異なる画面をã?リソースをå?離した形で使用できるようになりますã?
032     * 例えば、systemId="ZY" のシスãƒ?ƒ に、systemId="MR" の画面をçµ?�¿込ã‚??合にã€?
033     * そã?画面でã€?MR" のリソースをそのままそã?画面に適用することで、同ä¸?‚«ラãƒ?��に
034     * 対して、異なã‚?そã?画面ã�?�‘、特別な)リソースを適用することがå?来ますã?
035     *
036     * @og.formSample
037     * ●形式ï¼?lt;og:localResource systemId="GE" lang="zh" initLoad="false" />
038     * ●body?šなã�?
039     *
040     * ●Tag定義??
041     *   <og:localResource
042     *       systemId           【TAG】ローカルリソース設定用のシスãƒ?ƒ ID をセãƒ?ƒˆしまã�?
043     *       lang               【TAG】ローカルリソースを構築するå?合ã?、è¨?ª?lang)を指定しまã�?
044     *       initLoad           【TAG】リソースæƒ??の先読み込みの可否をセãƒ?ƒˆしまã�?初期値:false)
045     *       remove             【TAG】ã?ージスコープå?のResourceManager を削除しまã�?初期値:false)
046     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
047     *   />
048     *
049     * ●使用ä¾?
050     *      こã?設定以降ã?ペã?ジにローカルリソースを適用しますã?
051     *      ・<og:localResource
052     *               systemId  ="GE"       シスãƒ?ƒ ID
053     *               lang      ="zh"       è¨?ª?ja,en,zh)
054     *               initLoad  ="false"    初期読み込み可否(true:先読み込みする/false:しなã�?
055     *        />
056     *
057     *      ペã?ジの途中でローカルリソースをç?æ£?�—ますã?
058     *      ・<og:localResource
059     *               remove  ="true"       ペã?ジスコープå?のResourceManager を削除しますã?
060     *        />
061     *
062     * @og.group 画面制御
063     *
064     * @version  4.0
065     * @author   Kazuhiko Hasegawa
066     * @since    JDK5.0,
067     */
068    public class LocalResourceTag extends CommonTagSupport {
069            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
070            private static final String VERSION = "4.0.0.0 (2005/01/31)" ;
071    
072            private static final long serialVersionUID = 400020050131L ;
073    
074            private String  systemId = null;                // シスãƒ?ƒ ID
075            private String  lang     = null;                // è¨?ª?
076            private boolean initLoad = false;               // リソース初期読み込み可否(true:先読み込みする)
077            private boolean remove   = false;               // ペã?ジスコープå?のリソースを削除しますã?
078    
079            /**
080             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
081             *
082             * @return      後続å?ç�??æŒ?¤º
083             */
084            @Override
085            public int doEndTag() {
086                    debugPrint();           // 4.0.0 (2005/02/28)
087                    if( remove ) {
088                            pageContext.removeAttribute( HybsSystem.LOCAL_RES_KEY,PageContext.PAGE_SCOPE );
089                    }
090                    else {
091                            lang = nval( lang,getLanguage() );
092    
093                            final ResourceManager resource ;
094                            if( systemId == null ) {
095                                    resource = ResourceFactory.newInstance( lang );
096                            }
097                            else {
098                                    resource = ResourceFactory.newInstance( systemId,lang,initLoad );
099                            }
100    
101                            pageContext.setAttribute( HybsSystem.LOCAL_RES_KEY,resource );
102                    }
103    
104                    return(EVAL_PAGE);
105            }
106    
107            /**
108             * タグリブオブジェクトをリリースしますã?
109             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
110             *
111             */
112            @Override
113            protected void release2() {
114                    super.release2();
115                    systemId = null;
116                    lang     = null;
117                    initLoad = false;
118                    remove   = false;
119            }
120    
121            /**
122             * 【TAG】ローカルリソース設定用のシスãƒ?ƒ ID をセãƒ?ƒˆしますã?
123             *
124             * @og.tag
125             * こã?シスãƒ?ƒ IDを利用して、ResourceManager を構築しますã?
126             * æŒ?®šã?なã�??合ã?、シスãƒ?ƒ プロパティーの SYSTEM_ID パラメータ値ですã?
127             *
128             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
129             *
130             * @param       sysId   シスãƒ?ƒ ID
131             */
132            public void setSystemId( final String sysId ) {
133                    systemId = nval( getRequestParameter( sysId ),systemId );
134            }
135    
136            /**
137             * 【TAG】ローカルリソースを構築するå?合ã?、è¨?ª?lang)を指定しますã?
138             *
139             * @og.tag ここでè¨?ªžをæŒ?®šしなã�??合ã?、language 属æ?が使用されますã?
140             *
141             * @param   lng è¨?ª?
142             */
143            public void setLang( final String lng ) {
144                    lang= nval( getRequestParameter( lng ),lang );
145            }
146    
147            /**
148             * 【TAG】リソースæƒ??の先読み込みの可否をセãƒ?ƒˆしまã�?初期値:false)ã€?
149             *
150             * @og.tag
151             * リソースæƒ??は、FGLOADフラグã�?1'のæƒ??をå?読み込みしますã?
152             * ローカルリソースは、å?リソースを使用することはなã�?�Ÿめã?通常ã€?
153             * 先読み込みするå¿?¦�ã?ありません。またã?ä¸?º¦読み込んだリソースはã€?
154             * å†?ƒ¨でキャãƒ?‚·ュされるためã?æœ??の使用時ã?み、DBアクセスが発生しますã?
155             * (先読み込みは、Tomcat起動時の、å?めてのアクセス時に行われますã?)
156             * 初期値は、å?読みしなã�?false)ですã?
157             *
158             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
159             *
160             * @param       inLoad  リソースãƒ??タの先読み可否(false:先読みしなã�?
161             */
162            public void setInitLoad( final String inLoad ) {
163                    initLoad = nval( getRequestParameter( inLoad ),initLoad );
164            }
165    
166            /**
167             * 【TAG】ã?ージスコープå?のResourceManager を削除しまã�?初期値:false)ã€?
168             *
169             * @og.tag
170             * ペã?ジスコープå?のResourceManager を削除すると、å?期化されますã?
171             * これは、ã?ージå†??部åˆ?š„にリソースを適用する場合に、使用しますã?
172             * 初期値は、削除しなã�?false)ですã?
173             *
174             * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
175             *
176             * @param   flag リソースの削除(初期値:削除しなã�?
177             */
178            public void setRemove( final String flag ) {
179                    remove = nval( getRequestParameter( flag ),remove );
180            }
181    
182            /**
183             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
184             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
185             *
186             * @return こã?クラスのæ–?­—å?表現
187             */
188            @Override
189            public String toString() {
190                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
191                                    .println( "VERSION"             ,VERSION        )
192                                    .println( "systemId"    ,systemId       )
193                                    .println( "lang"                ,lang           )
194                                    .println( "initLoad"    ,initLoad       )
195                                    .println( "remove"              ,remove         )
196                                    .println( "Other..."    ,getAttributes().getAttribute() )
197                                    .fixForm().toString() ;
198            }
199    }