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    }