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}