    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 * ●形式：&lt;og:localResource systemId="GE" lang="zh" initLoad="false" /&gt;
    038 * ●body：なし
    039 *
    040 * ●Tag定義：
    041 *   &lt;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 *   /&gt;
    048 *
    049 * ●使用例
    050 *      この設定以降のページにローカルリソースを適用します。
    051 *      ・&lt;og:localResource
    052 *               systemId  ="GE"       システムID
    053 *               lang      ="zh"       言語(ja,en,zh)
    054 *               initLoad  ="false"    初期読み込み可否(true:先読み込みする/false:しない)
    055 *        /&gt;
    056 *
    057 *      ページの途中でローカルリソースを破棄します。
    058 *      ・&lt;og:localResource
    059 *               remove  ="true"       ページスコープ内のResourceManager を削除します。
    060 *        /&gt;
    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}