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