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    }