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.fukurou.db.ConnectionFactory;
019    import org.opengion.hayabusa.common.HybsSystem;
020    import org.opengion.hayabusa.resource.UserInfo;
021    import org.opengion.hayabusa.resource.ResourceFactory;
022    import org.opengion.hayabusa.resource.CalendarFactory;
023    import org.opengion.hayabusa.db.SelectionFactory;
024    
025    import static org.opengion.fukurou.util.StringUtil.nval ;
026    
027    /**
028     * キャãƒ?‚·ュしてã�?‚‹å�?¨®ãƒ??タをå?期化(クリア)しますã?
029     *
030     * ãƒ??タベã?スリソースを使用してã�?‚‹場合ã?、キャãƒ?‚·ュをクリアすることで、å?度
031     * 読み込みなおしますã?で、データベã?スの値を変更した後には、クリアがå¿?¦�ですã?
032     *
033     * クリアする対象は、connection,resource,gui,query,calendar がありますã?
034     * all とã�?�† キーワードã?、下記ã?すべてのリソースキャãƒ?‚·ュをクリアしますã?
035     * <table border="1" frame="box" rules="all" >
036     *   <caption>初期åŒ?クリア)対象のキーワーãƒ?/caption>
037     *   <tr><th>対象        </th><th>説æ˜?/th></tr>
038     *   <tr><td>connection  </td><td>コネクションプã?リングのコネクションを開放しますã?</td></tr>
039     *   <tr><td>resource    </td><td>ユーザー、シスãƒ?ƒ を除くリソースキャãƒ?‚·ュをクリアしますã?</td></tr>
040     *   <tr><td>gui         </td><td>GUIæƒ??のキャãƒ?‚·ュをクリアしますã?</td></tr>
041     *   <tr><td>calendar    </td><td>事業æ‰?‚«レンãƒ?‚’含ã‚?‚«レンãƒ?‚ªブジェクトキャãƒ?‚·ュをクリアしますã?</td></tr>
042     * </table>
043     *
044     * @og.formSample
045     * ●形式ï¼?lt;og:engine connectionClear="[true|false]" ?¥?¥?¥ /&gt;
046     * ●body?šなã�?
047     *
048     * ●Tag定義??
049     *   &lt;og:engine
050     *       allClear           【TAG】すべてのキャãƒ?‚·ュãƒ??タをクリアしまã�?初期値:false)
051     *       connectionClear    【TAG】データベã?スコネクションプã?ルのコネクションを削除(開放)しまã�?初期値:false)
052     *       resourceClear      【TAG】リソースãƒ??タをクリアしまã�?初期値:false)
053     *       guiClear           【TAG】GUIæƒ??のキャãƒ?‚·ュをクリアしまã�?初期値:false)
054     *       userClear          【TAG】Useræƒ??のパラメータãƒ??タをクリアしまã�?初期値:false)
055     *       calendarClear      【TAG】カレンãƒ?‚ªブジェクトã?キャãƒ?‚·ュをクリアしまã�?初期値:false)
056     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
057     *   /&gt;
058     *
059     * ●使用ä¾?
060     *     &lt;og:engine
061     *         connectionClear = "true"  初期値:false
062     *         resourceClear   = "true"  初期値:false
063     *         guiClear        = "true"  初期値:false
064     *         userClear       = "true"  初期値:false
065     *         calendarClear   = "true"  初期値:false
066     *     /&gt;
067     *
068     *     &lt;og:engine
069     *         allClear = "true"
070     *     /&gt;
071     *
072     * @og.rev 3.6.0.0 (2004/09/17) 新規作æ?
073     * @og.group ログイン制御
074     *
075     * @version  4.0
076     * @author   Kazuhiko Hasegawa
077     * @since    JDK5.0,
078     */
079    public class EngineTag extends CommonTagSupport {
080            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
081            private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
082    
083            private static final long serialVersionUID = 400020050831L ;
084    
085            private static final Object lock = new Object();
086    
087            private boolean allClear                = false;
088            private boolean connectionClear = false;
089            private boolean resourceClear   = false;
090            private boolean guiClear                = false;
091            private boolean userClear               = false;
092            private boolean calendarClear   = false;
093    
094            /**
095             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
096             *
097             * @return      後続å?ç�??æŒ?¤º
098             */
099            @Override
100            public int doEndTag() {
101                    debugPrint();           // 4.0.0 (2005/02/28)
102                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
103    
104                    synchronized( lock ) {
105                            if( connectionClear ) {
106                                    ConnectionFactory.realClose();
107                                    buf.append( "Connection Factory Real Closed" ).append( HybsSystem.BR );
108                                    System.out.println( "Connection Factory Real Closed" );
109                            }
110    
111                            if( calendarClear ) {
112                                    CalendarFactory.clear();                // 3.6.0.0 (2004/09/17)
113                                    buf.append( "Calendar Factory Cleared" ).append( HybsSystem.BR );
114                                    System.out.println( "Calendar Factory Cleared" );
115                            }
116    
117                            if( guiClear ) {
118                                    ResourceFactory.guiClear();
119                                    UserInfo userInfo = getUser();
120                                    userInfo.clear();
121                                    getResource().makeGUIInfos( userInfo );
122                                    buf.append( "GUIInfo Data Cleared" ).append( HybsSystem.BR );
123                                    System.out.println( "GUIInfo Data Cleared" );
124                            }
125    
126                            if( userClear ) {
127                                    UserInfo userInfo = getUser();
128                                    userInfo.clear();
129                                    buf.append( "UserInfo Parameter Data Cleared" ).append( HybsSystem.BR );
130                                    System.out.println( "UserInfo Parameter Data Cleared" );
131                            }
132    
133                            if( resourceClear ) {
134                                    ResourceFactory.clear();
135                                    SelectionFactory.clear();                               // 4.0.0 (2006/11/17)
136                                    buf.append( "Resource Factory Cleared" ).append( HybsSystem.BR );
137                                    System.out.println( "Resource Factory Cleared" );
138                            }
139                    }
140    
141                    return(EVAL_PAGE);
142            }
143    
144            /**
145             * タグリブオブジェクトをリリースしますã?
146             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
147             *
148             */
149            @Override
150            protected void release2() {
151                    super.release2();
152                    allClear                = false;
153                    connectionClear = false;
154                    resourceClear   = false;
155                    guiClear                = false;
156                    userClear               = false;
157                    calendarClear   = false;
158            }
159    
160            /**
161             * 【TAG】すべてのキャãƒ?‚·ュãƒ??タをクリアしまã�?初期値:false)ã€?
162             *
163             * @og.tag
164             * connectionClear,resourceClear,guiClear,calendarClearの
165             * すべてをã?true に設定することと同じですã?
166             *
167             * @param   flag キャãƒ?‚·ュクリア[true:すべて/false:個別]
168             */
169            public void setAllClear( final String flag ) {
170                    allClear = nval( getRequestParameter( flag ),allClear );
171    
172                    connectionClear = connectionClear       || allClear ;
173                    resourceClear   = resourceClear         || allClear ;
174                    guiClear                = guiClear                      || allClear ;
175                    userClear               = userClear                     || allClear ;
176                    calendarClear   = calendarClear         || allClear ;
177            }
178    
179            /**
180             * 【TAG】データベã?スコネクションプã?ルのコネクションを削除(開放)しまã�?初期値:false)ã€?
181             *
182             * @og.tag ãƒ??タベã?ス操作がおかしい場合ã?、クリアしてみてくださいã€?
183             *
184             * @param   flag コネクション削除するかどã�?�‹[true:する/false:しない]
185             */
186            public void setConnectionClear( final String flag ) {
187                    connectionClear = nval( getRequestParameter( flag ),connectionClear );
188            }
189    
190            /**
191             * 【TAG】リソースãƒ??タをクリアしまã�?初期値:false)ã€?
192             *
193             * @og.tag
194             * ユーザーリソースとシスãƒ?ƒ リソースを除くリソースキャãƒ?‚·ュ
195             * ãƒ??タをクリアしますã?
196             *
197             * @param   flag リソースãƒ??タをクリアするかどã�?�‹[true:する/false:しない]
198             */
199            public void setResourceClear( final String flag ) {
200                    resourceClear = nval( getRequestParameter( flag ),resourceClear );
201            }
202    
203            /**
204             * 【TAG】Useræƒ??のパラメータãƒ??タをクリアしまã�?初期値:false)ã€?
205             *
206             * @og.tag
207             * Useræƒ??のパラメータãƒ??タ(GE16から読み込み)に追åŠ?更新/削除が発生したときã?ã€?
208             * キャãƒ?‚·ュをクリアするå¿?¦�がありますã?
209             * Useræƒ??のパラメータãƒ??タは、{&#064;USER.XXXX}でアクセスできる値ではなくã?
210             * シスãƒ?ƒ パラメータ {&#064;SYS.XXXX}としてアクセスできるユーザー個別æƒ??のことですã?
211             *
212             * @param   flag パラメータãƒ??タをクリアするかどã�?�‹[true:する/false:しない]
213             */
214            public void setUserClear( final String flag ) {
215                    userClear = nval( getRequestParameter( flag ),userClear );
216            }
217    
218            /**
219             * 【TAG】GUIæƒ??のキャãƒ?‚·ュをクリアしまã�?初期値:false)ã€?
220             *
221             * @og.tag
222             * GUIæƒ??の追åŠ?更新/削除が発生したときã?、キャãƒ?‚·ュをクリアするå¿?¦�がありますã?
223             *
224             * @param   flag GUIæƒ??キャãƒ?‚·ュをクリアするかどã�?�‹[true:する/false:しない]
225             */
226            public void setGuiClear( final String flag ) {
227                    guiClear = nval( getRequestParameter( flag ),guiClear );
228            }
229    
230            /**
231             * 【TAG】カレンãƒ?‚ªブジェクトã?キャãƒ?‚·ュをクリアしまã�?初期値:false)ã€?
232             *
233             * @og.tag
234             * カレンãƒ?‚ªブジェクトã?、事業æ‰?‚«レンãƒ?例:GE13)毎にオブジェクトを
235             * 作æ?しますã?キャãƒ?‚·ュに持ってã�?‚‹ため、データベã?スを更新するたã?にã€?
236             * キャãƒ?‚·ュをクリアしなおすå¿?¦�がありますã?
237             *
238             * @param   flag カレンãƒ??キャãƒ?‚·ュをクリアするかどã�?�‹[true:する/false:しない]
239             */
240            public void setCalendarClear( final String flag ) {
241                    calendarClear = nval( getRequestParameter( flag ),calendarClear );
242            }
243    
244            /**
245             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
246             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
247             *
248             * @return こã?クラスのæ–?­—å?表現
249             */
250            @Override
251            public String toString() {
252                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
253                                    .println( "VERSION"                     ,VERSION                )
254                                    .println( "allClear"            ,allClear               )
255                                    .println( "connectionClear"     ,connectionClear)
256                                    .println( "resourceClear"       ,resourceClear  )
257                                    .println( "guiClear"            ,guiClear               )
258                                    .println( "userClear"           ,userClear              )
259                                    .println( "calendarClear"       ,calendarClear  )
260                                    .println( "Other..."            ,getAttributes().getAttribute() )
261                                    .fixForm().toString() ;
262            }
263    }