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 */
016package org.opengion.hayabusa.taglib;
017
018import org.opengion.hayabusa.common.HybsSystem;
019import org.opengion.hayabusa.resource.ResourceManager;
020import org.opengion.hayabusa.resource.ResourceFactory;
021
022import static org.opengion.fukurou.util.StringUtil.nval ;
023
024import 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 * ●形式:<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 */
068public 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}