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    }