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; 021import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 022 023import static org.opengion.fukurou.util.StringUtil.nval ; 024 025import jakarta.servlet.jsp.PageContext; 026 027/** 028 * ローカルリソースを構築します(有効範囲は、ページスコープ 内です)。 029 * 030 * ページスコープ内で使用されますので、主に、ページ先頭にて、ローカルリソースの 031 * 設定を行います。そのページ内では、ここで定義した ResourceManager が使用されます。 032 * これは、システムIDの異なる画面を、リソースを分離した形で使用できるようになります。 033 * 例えば、systemId="ZY" のシステムに、systemId="MR" の画面を組み込む場合に、 034 * その画面で、"MR" のリソースをそのままその画面に適用することで、同一カラム名に 035 * 対して、異なる(その画面だけ、特別な)リソースを適用することが出来ます。 036 * 037 * @og.formSample 038 * ●形式:<og:localResource systemId="GE" lang="zh" initLoad="false" /> 039 * ●body:なし 040 * 041 * ●Tag定義: 042 * <og:localResource 043 * systemId 【TAG】ローカルリソース設定用のシステムID をセットします 044 * lang 【TAG】ローカルリソースを構築する場合の、言語(lang)を指定します 045 * initLoad 【TAG】リソース情報の先読み込みの可否をセットします(初期値:false) 046 * remove 【TAG】ページスコープ内のResourceManager を削除します(初期値:false) 047 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 048 * /> 049 * 050 * ●使用例 051 * この設定以降のページにローカルリソースを適用します。 052 * ・<og:localResource 053 * systemId ="GE" システムID 054 * lang ="zh" 言語(ja,en,zh) 055 * initLoad ="false" 初期読み込み可否(true:先読み込みする/false:しない) 056 * /> 057 * 058 * ページの途中でローカルリソースを破棄します。 059 * ・<og:localResource 060 * remove ="true" ページスコープ内のResourceManager を削除します。 061 * /> 062 * 063 * @og.group 画面制御 064 * 065 * @version 4.0 066 * @author Kazuhiko Hasegawa 067 * @since JDK5.0, 068 */ 069public class LocalResourceTag extends CommonTagSupport { 070 /** このプログラムのVERSION文字列を設定します。 {@value} */ 071 private static final String VERSION = "6.4.2.0 (2016/01/29)" ; 072 private static final long serialVersionUID = 642020160129L ; 073 074 private String systemId ; // システムID 075 private String lang ; // 言語 076 private boolean initLoad ; // リソース初期読み込み可否(true:先読み込みする) 077 private boolean remove ; // ページスコープ内のリソースを削除します。 078 079 /** 080 * デフォルトコンストラクター 081 * 082 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 083 */ 084 public LocalResourceTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 085 086 /** 087 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 088 * 089 * @return 後続処理の指示 090 */ 091 @Override 092 public int doEndTag() { 093 debugPrint(); // 4.0.0 (2005/02/28) 094 if( remove ) { 095 pageContext.removeAttribute( HybsSystem.LOCAL_RES_KEY,PageContext.PAGE_SCOPE ); 096 } 097 else { 098 lang = nval( lang,getLanguage() ); 099 100 final ResourceManager resource ; 101 if( systemId == null ) { 102 resource = ResourceFactory.newInstance( lang ); 103 } 104 else { 105 resource = ResourceFactory.newInstance( systemId,lang,initLoad ); 106 } 107 108 pageContext.setAttribute( HybsSystem.LOCAL_RES_KEY,resource ); 109 } 110 111 return EVAL_PAGE ; 112 } 113 114 /** 115 * タグリブオブジェクトをリリースします。 116 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 117 * 118 */ 119 @Override 120 protected void release2() { 121 super.release2(); 122 systemId = null; 123 lang = null; 124 initLoad = false; 125 remove = false; 126 } 127 128 /** 129 * 【TAG】ローカルリソース設定用のシステムID をセットします。 130 * 131 * @og.tag 132 * このシステムIDを利用して、ResourceManager を構築します。 133 * 指定のない場合は、システムプロパティーの SYSTEM_ID パラメータ値です。 134 * 135 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 136 * 137 * @param sysId システムID 138 */ 139 public void setSystemId( final String sysId ) { 140 systemId = nval( getRequestParameter( sysId ),systemId ); 141 } 142 143 /** 144 * 【TAG】ローカルリソースを構築する場合の、言語(lang)を指定します。 145 * 146 * @og.tag ここで言語を指定しない場合は、language 属性が使用されます。 147 * 148 * @param lng 言語 149 */ 150 public void setLang( final String lng ) { 151 lang= nval( getRequestParameter( lng ),lang ); 152 } 153 154 /** 155 * 【TAG】リソース情報の先読み込みの可否[true:する/false:しない]をセットします(初期値:false)。 156 * 157 * @og.tag 158 * リソース情報は、FGLOADフラグが'1'の情報を先読み込みします。 159 * ローカルリソースは、全リソースを使用することはないため、通常、 160 * 先読み込みする必要はありません。また、一度読み込んだリソースは、 161 * 内部でキャッシュされるため、最初の使用時のみ、DBアクセスが発生します。 162 * (先読み込みは、Tomcat起動時の、初めてのアクセス時に行われます。) 163 * 初期値は、false:先読みしないです。 164 * 165 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 166 * 167 * @param inLoad 先読み可否 [true:する/false:しない] 168 */ 169 public void setInitLoad( final String inLoad ) { 170 initLoad = nval( getRequestParameter( inLoad ),initLoad ); 171 } 172 173 /** 174 * 【TAG】ページスコープ内のResourceManager を削除します(初期値:false)。 175 * 176 * @og.tag 177 * ページスコープ内のResourceManager を削除すると、初期化されます。 178 * これは、ページ内の部分的にリソースを適用する場合に、使用します。 179 * 初期値は、削除しない(false)です。 180 * 181 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 182 * 183 * @param flag リソースの削除 [true:削除する/false:削除しない] 184 */ 185 public void setRemove( final String flag ) { 186 remove = nval( getRequestParameter( flag ),remove ); 187 } 188 189 /** 190 * このオブジェクトの文字列表現を返します。 191 * 基本的にデバッグ目的に使用します。 192 * 193 * @return このクラスの文字列表現 194 * @og.rtnNotNull 195 */ 196 @Override 197 public String toString() { 198 return ToString.title( this.getClass().getName() ) 199 .println( "VERSION" ,VERSION ) 200 .println( "systemId" ,systemId ) 201 .println( "lang" ,lang ) 202 .println( "initLoad" ,initLoad ) 203 .println( "remove" ,remove ) 204 .println( "Other..." ,getAttributes().getAttribute() ) 205 .fixForm().toString() ; 206 } 207}