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.servlet;
017
018 import java.io.File;
019 import java.io.IOException;
020 import java.io.PrintWriter;
021 import java.lang.reflect.Field;
022 import java.net.URL;
023 import java.util.Enumeration;
024 import java.util.Map;
025 import java.util.jar.JarEntry;
026 import java.util.jar.JarFile;
027
028 import javax.servlet.ServletContext;
029 import javax.servlet.ServletException;
030 import javax.servlet.http.HttpServlet;
031 import javax.servlet.http.HttpServletRequest;
032 import javax.servlet.http.HttpServletResponse;
033 import javax.servlet.http.HttpSession;
034
035 import org.opengion.fukurou.db.ConnectionFactory;
036 import org.opengion.fukurou.util.Attributes;
037 import org.opengion.fukurou.util.HybsEntry;
038 import org.opengion.fukurou.util.StringUtil;
039 import org.opengion.fukurou.util.Closer ; // 5.5.2.6 (2012/05/25)
040 import org.opengion.hayabusa.common.BuildNumber;
041 import org.opengion.hayabusa.common.HybsSystem;
042 import org.opengion.hayabusa.common.SystemManager;
043 import org.opengion.hayabusa.common.SystemParameter;
044 import org.opengion.hayabusa.common.UserSummary;
045
046 /**
047 * サーバ?管?報を取得するAdminサーブレ?です?
048 *
049 * 引数(URL)に応じて、サーバ?の状態結果を返します?
050 * ?には、http://サーバ?:ポ??シス?ID/jsp/admin?COMMAND=コマン?の
051 * 形式?URL でアクセスします?
052 *
053 * ・COMMAND=infomation
054 * サーバ???
055 * ???? = Windows 2000 Service Pack 4
056 * サーバ?? = HN50G5 ( 200.1.50.165 )
057 * サーブレ? = Apache Tomcat/4.1.27-LE-jdk14
058 * REAL_PATH = H:\webapps\gf\
059 * TOMCAT_WORK = H:\java\tomcat5.5.17\work\Catalina\localhost\ver4
060 * JDKバ?ジョン = Java HotSpot(TM) Server VM 1.4.2_02-b03
061 * JAVA_HOME = H:\java\jdk150\jre
062 *
063 * エンジンバ?ジョン
064 * バ?ジョンNo = 3.5.2.0 Release3 Builds (03291)
065 * 作?日? = 2003/10/18 17:50:35
066 *
067 * ログインユーザー
068 * ログイン人数 = 2 ?( 明細?? )
069 *
070 * メモリ??
071 * 空きメモリ = 15977 [KByte]
072 * 合計メモリ = 32448 [KByte]
073 * 使用? = 50 [??
074 *
075 * ・COMMAND=close
076 * リソース??のキャ?ュを?てクリアします?
077 *
078 * ・COMMAND=loginUser
079 * 現在のログインユーザーの明細??を表示します?
080 * SORT=[JNAME,ID,ROLES,IPADDRESS,LOGINTIME] ソートキー
081 * DIREC=[true,false] true:??/false:降?
082 *
083 * ・COMMAND=plugin
084 * 現在のプラグインのバ?ジョン??を表示します?
085 *
086 * ・COMMAND=systemResource
087 * 現在のシス?リソースの設定情報を表示します?
088 *
089 * ・COMMAND=AccessStop
090 * アクセスストップフィルターの制御(停止、許可)を行います?
091 *
092 * @og.rev 3.5.3.0 (2003/10/27) Admin JSP ?Servlet化して、エンジンと共に供給します?
093 * @og.rev 4.0.0.0 (2005/08/31) プラグインのバ?ジョン??の表示機?を追?
094 * @og.group そ?他機?
095 *
096 * @version 4.0
097 * @author Kazuhiko Hasegawa
098 * @since JDK5.0,
099 */
100 public final class HybsAdmin extends HttpServlet {
101 private static final long serialVersionUID = 4000 ; // 4.0.0 (2005/01/31)
102
103 private static final String CR = HybsSystem.CR ;
104
105 private static final String JSP = HybsSystem.sys( "JSP" ); // jspフォル??正規パス
106
107 private static final String HEADER =
108 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + CR +
109 "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"" + CR +
110 " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" + CR +
111 "<html xmlns=\"http://www.w3.org/1999/xhtml\" >" + CR +
112 "<head>" + CR +
113 " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />" + CR +
114 " <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />" + CR +
115 " <link rel=\"stylesheet\" href=\"" + JSP + "/common/default.css\" type=\"text/css\" />" + CR +
116 " <link rel=\"stylesheet\" href=\"" + JSP + "/custom/custom.css\" type=\"text/css\" />" + CR +
117 " <title>Hybs Admin</title>" + CR +
118 "</head>" + CR;
119
120 // 3.5.3.1 (2003/10/31) User??の??ブルの設定を、シス?リソース より行う?
121 private static final String TABLE_HEADER = getTableHeaderTag() ;
122
123 private static final String OS_INFO = HybsSystem.sys( "OS_INFO" ); // Windows 7 Service Pack 1
124 private static final String SERVER_INFO = HybsSystem.sys( "SERVER_INFO" ); // 10374232-0004 ( 200.1.50.239 )
125 private static final String SERVLET_INFO = HybsSystem.sys( "SERVLET_INFO" ); // Apache Tomcat/7.0.39
126 private static final String REAL_PATH = HybsSystem.sys( "REAL_PATH" ); // C:/opengion/uap/webapps/gf/
127 private static final String TOMCAT_WORK = HybsSystem.sys( "TOMCAT_WORK" ); // C:/opengion/apps/jdk170u25/jre
128 private static final String JDK_INFO = HybsSystem.sys( "JDK_INFO" ); // Java HotSpot(TM) Server VM 23.25-b01
129 private static final String JAVA_HOME = HybsSystem.sys( "JAVA_HOME" ); // C:/opengion/apps/jdk170u25/jre
130 private static final String ENGINE_INFO = HybsSystem.sys( "ENGINE_INFO" ); // 5.6.6.0 Release5 Builds (2013182)
131
132 /**
133 * GET メソ?が呼ばれたときに実行します?
134 *
135 * @og.rev 3.5.3.1 (2003/10/31) 機?ごとにメソ?を呼び出すよ?修正します?
136 * @og.rev 3.5.4.1 (2003/12/01) getAdminLink() メソ?を追?
137 *
138 * @param req HttpServletRequestオブジェク?
139 * @param res HttpServletResponseオブジェク?
140 *
141 * @throws ServletException
142 * @throws IOException
143 */
144 @Override
145 public void doGet( final HttpServletRequest req, final HttpServletResponse res)
146 throws ServletException, IOException {
147
148 res.setContentType( "text/html; charset=UTF-8" );
149 PrintWriter out = res.getWriter();
150
151 String command = req.getParameter( "COMMAND" );
152
153 out.println( HEADER );
154 out.println("<body>");
155
156 out.print("<h2>");
157 out.print( req.getServerName() );
158 out.print( ":" );
159 out.print( req.getServerPort() );
160 out.print( req.getContextPath() );
161 out.println("</h2>");
162
163 if( "infomation".equalsIgnoreCase( command ) ) {
164 out.print( getInfomation() );
165 }
166 else if( "close".equalsIgnoreCase( command ) ) {
167 out.print( getCloseMessage( req.getSession() ) );
168 }
169 else if( "loginUser".equalsIgnoreCase( command ) ) {
170 String sort = req.getParameter( "sort" );
171 String direc = req.getParameter( "direc" );
172 boolean dir = (direc == null) ? true : Boolean.valueOf( direc ).booleanValue();
173 out.print( getLoginUser(sort,dir) );
174 }
175 else if( "plugin".equalsIgnoreCase( command ) ) {
176 out.print( getPlugInInfo() );
177 }
178 else if( "taglib".equalsIgnoreCase( command ) ) {
179 out.print( getTaglibInfo() );
180 }
181 else if( "systemResource".equalsIgnoreCase( command ) ) {
182 out.print( getSystemResource() );
183 }
184 else if( "AccessStop".equalsIgnoreCase( command ) ) {
185 out.print( getAccessStop() );
186 }
187 else {
188 out.print( getAdminLink() ); // 3.5.4.1 (2003/12/01) 追?
189 }
190
191 out.println("</body></html>");
192 }
193
194 /**
195 * infomation ??を作?します?
196 *
197 * @og.rev 3.5.3.1 (2003/10/31) 機?ごとにメソ?を呼び出すよ?修正します?
198 *
199 * @return infomation??
200 */
201 private String getInfomation() {
202 // 4.0.0 (2005/01/31) ログイン数の取得方法?変更?
203 int loginCount = SystemManager.getRunningCount() ;
204
205 int freeMemory = (int)( Runtime.getRuntime().freeMemory()/1024 ) ;
206 int totalMemory = (int)( Runtime.getRuntime().totalMemory()/1024 );
207 int useMemoryRatio = (((totalMemory - freeMemory) * 100 )/totalMemory) ;
208
209 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
210
211 rtn.append( "<table border = \"0px\" >" ).append( CR );
212 tableTr1( rtn,"サーバ???" );
213 tableTr( rtn,"????" , OS_INFO );
214 tableTr( rtn,"サーバ?? , SERVER_INFO );
215 tableTr( rtn,"サーブレ?" , SERVLET_INFO );
216 tableTr( rtn,"REAL_PATH" , REAL_PATH );
217 tableTr( rtn,"TOMCAT_WORK" , TOMCAT_WORK );
218 tableTr( rtn,"JDKバ?ジョン", JDK_INFO );
219 tableTr( rtn,"JAVA_HOME" , JAVA_HOME );
220
221 tableTr1( rtn,"エンジンバ?ジョン" );
222 tableTr( rtn,"バ?ジョンNo" , ENGINE_INFO );
223 tableTr( rtn,"作?日? , BuildNumber.TIMESTAMP );
224
225 tableTr( rtn,"ログインユーザー" );
226 tableTr( rtn,"ログイン人数" , String.valueOf( loginCount )," ?","( <a href=\"admin?COMMAND=loginUser\">明細??</a> )" );
227
228 tableTr1( rtn,"メモリ??" );
229 tableTr( rtn,"空きメモリ" , String.valueOf( freeMemory ) , " [KByte]" );
230 tableTr( rtn,"合計メモリ" , String.valueOf( totalMemory ) , " [KByte]" );
231 tableTr( rtn,"使用? , String.valueOf( useMemoryRatio ) , " [??" );
232
233 // rtn.append( " <tr><td colspan = \"4\">サーバ???</td></tr>" ).append( CR );
234 // rtn.append( " <tr><td></td><td>????</td><td>=</td><td>" ).append( OS_INFO ).append( "</td></tr>" ).append( CR );
235 // rtn.append( " <tr><td></td><td>サーバ??/td><td>=</td><td>" ).append( SERVER_INFO ).append( "</td></tr>" ).append( CR );
236 // rtn.append( " <tr><td></td><td>サーブレ?</td><td>=</td><td>" ).append( SERVLET_INFO ).append( "</td></tr>" ).append( CR );
237 // rtn.append( " <tr><td></td><td>REAL_PATH</td><td>=</td><td>" ).append( REAL_PATH ).append( "</td></tr>" ).append( CR );
238 // rtn.append( " <tr><td></td><td>TOMCAT_WORK</td><td>=</td><td>" ).append( TOMCAT_WORK ).append( "</td></tr>" ).append( CR );
239 // rtn.append( " <tr><td></td><td>JDKバ?ジョン</td><td>=</td><td>" ).append( JDK_INFO ).append( "</td></tr>" ).append( CR );
240 // rtn.append( " <tr><td></td><td>JAVA_HOME</td><td>=</td><td>" ).append( JAVA_HOME ).append( "</td></tr>" ).append( CR );
241 // rtn.append( " <th><td></td><td colspan = \"2\"></td></th>" ).append( CR );
242 // rtn.append( " <tr><td colspan = \"4\">エンジンバ?ジョン</td></tr>" ).append( CR );
243 // rtn.append( " <tr><td></td><td>バ?ジョンNo</td><td>=</td><td>" ).append( ENGINE_INFO ).append( "</td></tr>" ).append( CR );
244 // rtn.append( " <tr><td></td><td>作?日?/td><td>=</td><td>" ).append( BuildNumber.TIMESTAMP ).append( "</td></tr>" ).append( CR );
245 // rtn.append( " <th><td></td><td colspan = \"2\"></td></th>" ).append( CR );
246 // rtn.append( " <tr><td colspan = \"4\">ログインユーザー</td></tr>" ).append( CR );
247 // rtn.append( " <tr><td></td><td>ログイン人数 </td><td>=</td><td>" ).append( loginCount ).append( " ?" );
248 // rtn.append( "( <a href=\"admin?COMMAND=loginUser\">明細??</a> )</td></tr>" ).append( CR );
249 // rtn.append( " <tr><td colspan = \"4\">メモリ??</td></tr>" ).append( CR );
250 // rtn.append( " <tr><td></td><td>空きメモリ</td><td>=</td><td>" ).append( freeMemory ).append( " [KByte]</td></tr>" ).append( CR );
251 // rtn.append( " <tr><td></td><td>合計メモリ</td><td>=</td><td>" ).append( totalMemory ).append( " [KByte]</td></tr>" ).append( CR );
252 // rtn.append( " <tr><td></td><td>使用?/td><td>=</td><td>" ).append( useMemoryRatio ).append( " [??</td></tr>" ).append( CR );
253 rtn.append( "</table>" ).append( CR );
254 rtn.append( CR );
255 rtn.append( "<table width=\"50%\" frame=\"box\" border = \"1px\" cellspacing=\"0px\" cellpadding=\"0px\" >" ).append( CR );
256 // rtn.append( " <tr><td width=\"" ).append( useMemoryRatio ).append( "%\" bgcolor=\"red\" >" ).append( CR );
257 // rtn.append( " <img width=\"100%\" height=\"10px\" src=\"" ).append( JSP ).append( "/image/space.gif\" alt=\"" ).append( useMemoryRatio ).append( "%\"></td>" ).append( CR );
258 // rtn.append( " <td></td>" ).append( CR );
259 // rtn.append( " </tr>" ).append( CR );
260 rtn.append( " <tr><td align=\"center\" width=\"" ).append( useMemoryRatio ).append( "%\" bgcolor=\"red\" >" ).append( CR );
261 rtn.append( useMemoryRatio ).append( "%</td>" ).append( CR );
262 rtn.append( " <td align=\"center\">" ).append( 100-useMemoryRatio ).append( "%</td>" ).append( CR );
263 rtn.append( " </tr>" ).append( CR );
264 rtn.append( "</table>" ).append( CR );
265 rtn.append( "<hr />" ).append( CR );
266 rtn.append( "<pre>" ).append( CR );
267 rtn.append( ConnectionFactory.information() ).append( CR );
268 rtn.append( "</pre>" ).append( CR );
269
270 return rtn.toString();
271 }
272
273 /**
274 * infomation ??を作?します?
275 *
276 * @og.rev 5.6.6.0 (2013/07/05) </td></tr>漏れ追?
277 *
278 * @param buf ??登録用のStringBuilder(出力と同じオブジェク?
279 * @param key キー
280 *
281 * @return infomation??
282 */
283 private StringBuilder tableTr1( final StringBuilder buf, final String key ) {
284 // buf.append( "<tr><td colspan = \"4\">" ).append( key ).append( CR );
285 buf.append( "<tr><td colspan=\"4\"><b>" ).append( key ).append( "</b></td></tr>" ).append( CR ); // td,tr 漏れ追?
286 return buf ;
287 }
288
289 /**
290 * infomation ??を作?します?
291 *
292 * @og.rev 5.6.6.0 (2013/07/05) ??の td に、?角スペ?ス?? 追?
293 *
294 * @param buf ??登録用のStringBuilder(出力と同じオブジェク?
295 * @param key キー
296 * @param val 値の可変長引数
297 *
298 * @return infomation??
299 */
300 private StringBuilder tableTr( final StringBuilder buf, final String key, final String... val ) {
301 // buf.append( "\t<tr><td></td><td>" ).append( key ).append( "</td><td>=</td><td>" );
302 buf.append( "<tr><td width=\"20px\">?/td><td>" ).append( key ).append( "</td><td>=</td><td>" ); // 段を作?する為に、width??追?
303 for( int i=0; i<val.length; i++ ) {
304 buf.append( val[i] );
305 }
306 buf.append( "</td></tr>" ).append( CR );
307 return buf ;
308 }
309
310 /**
311 * close ??を作?します?
312 *
313 * @og.rev 3.5.3.1 (2003/10/31) 機?ごとにメソ?を呼び出すよ?修正します?
314 * @og.rev 3.6.0.0 (2004/09/17) CalendarFactory.clear() を追?ます?
315 * @og.rev 4.0.0.0 (2005/01/31) Cleanable インターフェースによる初期化??
316 * @og.rev 4.1.0.2 (2008/01/29) UserInfoをsessionから消去する(?定対?
317 * @og.rev 5.6.6.0 (2013/07/05) UserSummary の削除処??、SystemManager から行う?
318 *
319 * @param session HttpSessionオブジェク?
320 *
321 * @return close??
322 */
323 private String getCloseMessage( final HttpSession session ) {
324
325 // 4.0.0 (2005/01/31) Cleanable インターフェースによる初期化??
326 SystemManager.allClear( false ) ;
327
328 ServletContext context = session.getServletContext();
329 Map<String,String> param = SystemParameter.makeSystemParameter( context );
330 HybsSystem.setInitialData( param ); // 4.0.0 (2005/01/31)
331
332 // 5.6.6.0 (2013/07/05) UserSummary の削除処??、SystemManager から行う?
333 SystemManager.removeSession( session ) ;
334
335 // UserSummary userInfo = (UserSummary)session.getAttribute( HybsSystem.USERINFO_KEY );
336 //// if( userInfo != null ) { userInfo.clear(); }
337 // if( userInfo != null ) { // 4.1.0.2 (2008/01/29)
338 // userInfo.clear();
339 // session.removeAttribute( HybsSystem.USERINFO_KEY );
340 // }
341
342 String rtn = "<pre>"
343 + "キャ?ュ??をクリアーしました?
344 + CR
345 + "ユーザー??の初期化に関しては、ブラウザを閉じて、?ログインが?です?"
346 + CR
347 + ConnectionFactory.information()
348 + "</pre>" ;
349 return rtn ;
350 }
351
352 // 5.6.6.0 (2013/07/05) getLoginUser( String,boolean ) で、指定するキーを?列で持っておきます?
353 // キーは、SystemManager.getRunningUserSummary 処??で大?化されるため?こ?配?は、表示用と兼用します?
354 private static final String[] USER_KEYS = new String[] { "ID","Jname","Roles","IPAddress","LoginTime","LastAccess","LastGamenNm" };
355
356 /**
357 * loginUser ??を作?します?
358 *
359 * @og.rev 3.5.3.1 (2003/10/31) 機?ごとにメソ?を呼び出すよ?修正します?
360 * @og.rev 3.8.5.3 (2006/08/07) ユーザー??をソートするため?キー??を追?
361 * @og.rev 3.8.7.0 (2006/12/15) USER.LASTACCESS??を追?ます?
362 * @og.rev 4.0.0.0 (2005/01/31) DBColumn の 属?(CLS_NM)から、DBTYPEに変更
363 * @og.rev 4.4.0.1 (2009/08/08) ?ログイン画面名称を追?
364 * @og.rev 5.6.6.0 (2013/07/05) table作?処?、変更します?
365 *
366 * @param sort ソートするキー?を指?
367 * @param direc ソートする方?[true:??/false:降?]
368 *
369 * @return loginUser??
370 */
371 private String getLoginUser( final String sort,final boolean direc ) {
372 // 4.0.0 (2005/01/31) ログイン数の取得方法?変更?
373 int loginCount = SystemManager.getRunningCount() ;
374
375 // 4.0.0 (2005/01/31)
376 UserSummary[] userInfos = SystemManager.getRunningUserSummary( sort,direc );
377
378 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
379
380 rtn.append( "現在 " ).append( loginCount ).append( " 名?方がログイン中です?" );
381 rtn.append( CR );
382
383 rtn.append( "<table " ).append( TABLE_HEADER ).append( " >" ).append( CR );
384 rtn.append( " <thead><tr><th>No</th>" );
385
386 // 5.6.6.0 (2013/07/05) table作?処?、変更します?
387 for( String sortKey : USER_KEYS ) {
388 rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=" ).append( sortKey )
389 .append( "&direc=" ).append( !direc )
390 .append( "\">" ).append( sortKey ).append( "</a></th>" );
391 }
392
393 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=ID&direc=" ).append( !direc );
394 // rtn.append( "\">UserID</a></th>" );
395 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=JNAME&direc=" ).append( !direc );
396 // rtn.append( "\">Jname</a></th>" );
397 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=ROLES&direc=" ).append( !direc );
398 // rtn.append( "\">Roles</th>" );
399 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=IPADDRESS&direc=" ).append( !direc );
400 // rtn.append( "\">IPAddress</a></th>" );
401 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=LOGINTIME&direc=" ).append( !direc );
402 // rtn.append( "\">LoginTime</a></th>" );
403 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=LASTACCESS&direc=" ).append( !direc );
404 // rtn.append( "\">LastAccess</a></th>" );
405 // rtn.append( " <th><a href=\"?COMMAND=loginUser&sort=LASTGAMENNM&direc=").append( !direc ); // 4.4.0.1 (2009/08/08)
406 // rtn.append( "\">LastGamenName</a></th>" );
407 rtn.append( " </tr></thead>" ).append( CR );
408 rtn.append( " <colgroup class=\"S9\" />" ).append( CR );
409 rtn.append( " <colgroup class=\"X\" span=\"6\" />" ).append( CR );
410 rtn.append( CR );
411
412 for( int i=0; i<userInfos.length; i++ ) {
413 UserSummary userInfo = userInfos[i] ;
414 rtn.append( " <tr class=\"row_" ).append( i%2 ).append( "\" >" ).append( CR );
415 rtn.append( " <td>" ).append( String.valueOf( i+1 ) ).append( "</td>" ).append( CR );
416 rtn.append( " <td>" ).append( userInfo.getUserID() ).append( "</td>" ).append( CR );
417 rtn.append( " <td>" ).append( userInfo.getJname() ).append( "</td>" ).append( CR );
418 rtn.append( " <td>" ).append( userInfo.getRoles() ).append( "</td>" ).append( CR );
419 rtn.append( " <td>" ).append( userInfo.getIPAddress() ).append( "</td>" ).append( CR );
420 rtn.append( " <td>" ).append( HybsSystem.getDate( userInfo.getLoginTime() ) ).append( "</td>" ).append( CR );
421 rtn.append( " <td>" ).append( userInfo.getAttribute( "LASTACCESS") ).append( "</td>" ).append( CR );
422 rtn.append( " <td>" ).append( StringUtil.nval( userInfo.getAttribute( "LASTGAMENNM"), "" ) ).append( "</td>" ).append( CR ); // 4.4.0.1 (2009/08/08)
423 rtn.append( " </tr>" ).append( CR );
424 }
425 rtn.append( "</table>" ).append( CR );
426
427 return rtn.toString() ;
428 }
429
430 /**
431 * PlugIn ??を作?します?
432 *
433 * @og.rev 4.0.0.0 (2005/08/31) 新規作?
434 * @og.rev 5.6.6.0 (2013/07/05) "DBConstValue","Daemon","JspCreate" を?追?ます?
435 *
436 * @return PlugIn??
437 */
438 private String getPlugInInfo() {
439
440 String[] pluginType = new String[] {
441 "Query","Renderer","Editor","DBType","ViewForm",
442 "TableReader","TableWriter","TableFilter","ChartWriter","CalendarQuery",
443 "DBConstValue","Daemon","JspCreate" // 5.6.6.0 (2013/07/05) 追?
444 } ;
445
446 ClassInfo info = new ClassInfo();
447
448 for( int j=0; j<pluginType.length; j++ ) {
449 String type = pluginType[j] ;
450 HybsEntry[] names = HybsSystem.sysEntry( type + "_" );
451 for( int i=0; i<names.length; i++ ) {
452 String key = names[i].getKey().substring( type.length()+1 );
453 String clsName = names[i].getValue();
454 info.addLine( type,key,clsName );
455 }
456 }
457 return info.getClassInfoData() ;
458 }
459
460 /**
461 * Taglib ??を作?します?
462 *
463 * @og.rev 4.0.0.0 (2006/01/31) 新規作?
464 * @og.rev 5.3.6.0 (2011/06/01) Taglib クラス名?求め方を変更します?(jar版?み)
465 * @og.rev 5.5.2.6 (2012/05/25) JarFile を?Closer#zipClose( ZipFile ) メソ?を利用して、close します?
466 *
467 * @return Taglib??
468 */
469 private String getTaglibInfo() {
470 ClassInfo info = new ClassInfo();
471
472 // 5.5.2.6 (2012/05/25) findbugs対?
473 JarFile jarFile = null;
474 try {
475 ClassLoader loader = Thread.currentThread().getContextClassLoader();
476 Enumeration<URL> enume = loader.getResources( "org/opengion/hayabusa/taglib/" ); // 4.3.3.6 (2008/11/15) Generics警告対?
477 while( enume.hasMoreElements() ) {
478 URL url = enume.nextElement(); // 4.3.3.6 (2008/11/15) Generics警告対?
479 // jar:file:/実ディレクトリ また?、file:/実ディレクトリ
480 String dir = url.getFile();
481 if( "jar".equals( url.getProtocol() ) ) {
482 // dir = file:/G:/webapps/gf/WEB-INF/lib/hayabusa4.0.0.jar!/org/opengion/hayabusa/taglib 形式です?
483 String jar = dir.substring(dir.indexOf( ':' )+1,dir.lastIndexOf( '!' ));
484 // jar = /G:/webapps/gf/WEB-INF/lib/hayabusa4.0.0.jar 形式に?出します?
485 // JarFile jarFile = new JarFile( jar );
486 jarFile = new JarFile( jar );
487 Enumeration<JarEntry> en = jarFile.entries() ; // 4.3.3.6 (2008/11/15) Generics警告対?
488 while( en.hasMoreElements() ) {
489 JarEntry ent = en.nextElement(); // 4.3.3.6 (2008/11/15) Generics警告対?
490 String file = ent.getName();
491 if( ! ent.isDirectory() && file.endsWith( "Tag.class" ) ) {
492 String type = "Taglib";
493 // 5.3.6.0 (2011/06/01) Taglib クラス名?求め方を変更します?(jar版?み)
494 // String key = file.substring( 0,file.length()-6 );
495 String key = file.substring( file.lastIndexOf( '/' )+1,file.length()-6 ); // -6 は?class ?
496 // String clsName = "org.opengion.hayabusa.taglib." + key ;
497 String clsName = file.replace( '/','.' ).substring( 0,file.length()-6 );
498 info.addLine( type,key,clsName );
499 }
500 }
501 Closer.zipClose( jarFile ); // 5.5.2.6 (2012/05/25) findbugs対?
502 jarFile = null; // 正常終?に、close() が2回呼ばれるのを防ぐため?
503 }
504 else {
505 // dir = /G:/webapps/gf/WEB-INF/classes/org/opengion/hayabusa/taglib/ 形式です?
506 File fileObj = new File( dir );
507 File[] list = fileObj.listFiles();
508 for( int i=0; i<list.length; i++ ) {
509 String file = list[i].getName() ;
510 if( list[i].isFile() && file.endsWith( "Tag.class" ) ) {
511 String type = "Taglib";
512 String key = file.substring( 0,file.length()-6 );
513 String clsName = "org.opengion.hayabusa.taglib." + key ;
514 info.addLine( type,key,clsName );
515 }
516 }
517 }
518 }
519 }
520 catch( IOException ex ) {
521 String errMsg = "taglibファイル読み取りストリー?失敗しました?
522 + CR + ex.getMessage();
523 throw new RuntimeException( errMsg,ex );
524 }
525 finally {
526 Closer.zipClose( jarFile ); // 5.5.2.6 (2012/05/25) findbugs対?
527 }
528
529 return info.getClassInfoData() ;
530 }
531
532 /**
533 * クラス??を表示するための??タを管?ます?
534 * ここでは、引数に渡された???Classify)、名称(Key Name)、クラス?Class Name)?
535 * バ?ジョン(Version)??をテーブル形式で表示します?
536 * バ?ジョン??は、クラス名から?インスタンスを作?して、private static final String VERSION
537 * フィールド?値を読み取ります?
538 *
539 * @og.rev 4.0.0.0 (2006/01/31) 新規作?
540 */
541 private static final class ClassInfo {
542 private final StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
543 private int cnt = 0;
544
545 /**
546 * コンストラクター
547 *
548 * @og.rev 4.0.0.0 (2006/01/31) 新規作?
549 */
550 public ClassInfo() {
551 rtn.append( "<table " ).append( TABLE_HEADER ).append( " >" ).append( CR );
552 rtn.append( " <thead><tr><th>No</th><th>Classify</th><th>Key Name</th><th>Class Name</th><th>Version</th></tr></thead>" ).append( CR );
553 rtn.append( " <colgroup class=\"S9\" />" ).append( CR );
554 rtn.append( " <colgroup class=\"X\" />" ).append( CR );
555 rtn.append( " <colgroup class=\"X\" />" ).append( CR );
556 rtn.append( " <colgroup class=\"X\" />" ).append( CR );
557 rtn.append( " <colgroup class=\"X\" />" ).append( CR );
558 rtn.append( " <colgroup class=\"X\" />" ).append( CR );
559 rtn.append( CR );
560 }
561
562 /**
563 * ??ブル表示用の??タを追?ます?
564 *
565 * @og.rev 4.0.0.0 (2006/01/31) 新規作?
566 *
567 * @param type タイプ属?
568 * @param key キー属?
569 * @param clsName クラス?こ?クラス名からインスタンス化します?)
570 */
571 public void addLine( final String type, final String key, final String clsName ) {
572 String version = getFieldValue( clsName );
573
574 boolean isCustom = ( version.compareTo( BuildNumber.VERSION_NO ) > 0 ) ||
575 version.indexOf( "Pache" ) >= 0 ||
576 version.indexOf( "Nightly" ) >= 0 ;
577
578 String trType = ( isCustom ) ? "warning" : String.valueOf( cnt%2 );
579
580 rtn.append( " <tr class=\"row_" ).append( trType ).append( "\" >" ).append( CR );
581 rtn.append( " <td>" ).append( cnt++ ).append( "</td>" ).append( CR );
582 rtn.append( " <td>" ).append( type ).append( "</td>" ).append( CR );
583 rtn.append( " <td>" ).append( key ).append( "</td>" ).append( CR );
584 rtn.append( " <td>" ).append( clsName ).append( "</td>" ).append( CR );
585 rtn.append( " <td>" ).append( version ).append( "</td>" ).append( CR );
586 rtn.append( " </tr>" ).append( CR );
587 }
588
589 /**
590 * すべての?の??タを文字?化して返します?
591 *
592 * @og.rev 4.0.0.0 (2006/01/31) 新規作?
593 *
594 * @return 作?されたテーブル??タ
595 */
596 public String getClassInfoData() {
597 rtn.append( "</table>" ).append( CR );
598 return rtn.toString() ;
599 }
600
601 /**
602 * ??オブジェクト? VERSION staticフィールド?値を取得します?
603 *
604 * @og.rev 4.0.0.0 (2005/08/31) 新規作?
605 *
606 * @param clsName ??クラスを表す名称
607 * @return VERSION staticフィールド?値(エラー時?、そのメ?ージ)
608 */
609 private String getFieldValue( final String clsName ) {
610 String rtn ;
611 try {
612 Object obj = HybsSystem.newInstance( clsName );
613 Field fld = obj.getClass().getDeclaredField( "VERSION" ) ;
614 // privateフィールド?取得には、accessibleフラグ?trueにする?があります?
615 fld.setAccessible( true );
616
617 rtn = (String)fld.get( null );
618 }
619 catch( Throwable ex ) {
620 rtn = ex.getMessage();
621 }
622 return rtn ;
623 }
624 }
625
626 /**
627 * systemResource ??を作?します?
628 *
629 * @og.rev 3.5.3.1 (2003/10/31) 機?ごとにメソ?を呼び出すよ?修正します?
630 * @og.rev 4.0.0.0 (2005/01/31) DBColumn の 属?(CLS_NM)から、DBTYPEに変更
631 *
632 * @return systemResource??
633 */
634 private String getSystemResource() {
635 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
636
637 rtn.append( "<table " ).append( TABLE_HEADER ).append( " >" ).append( CR );
638 rtn.append( " <thead><tr><th>No</th><th>Key</th><th>Value</th></tr></thead>" ).append( CR );
639 rtn.append( " <colgroup class=\"S9\" />" ).append( CR );
640 rtn.append( " <colgroup class=\"X\" span=\"2\" />" ).append( CR );
641 rtn.append( CR );
642
643 String[][] str = HybsSystem.getSystemResourceData();
644 for( int i=0; i<str[0].length; i++ ) {
645 rtn.append( " <tr class=\"row_" ).append( i%2 ).append( "\" >" ).append( CR );
646 rtn.append( " <td>" ).append( String.valueOf( i+1 ) ).append( "</td>" ).append( CR );
647 rtn.append( " <td>" ).append( str[0][i] ).append( "</td>" ).append( CR );
648 rtn.append( " <td>" ).append( str[1][i] ).append( "</td>" ).append( CR );
649 rtn.append( " </tr>" ).append( CR );
650 }
651 rtn.append( "</table>" ).append( CR );
652
653 return rtn.toString();
654 }
655
656 /**
657 * AccessStop ??を作?します?
658 *
659 * @og.rev 3.5.3.1 (2003/10/31) 機?ごとにメソ?を呼び出すよ?修正します?
660 * @og.rev 4.0.0.0 (2007/11/29) AccessStopFilter#getStopFilter() ?isStopFilter() に変更
661 *
662 * @return AccessStop??
663 */
664 private String getAccessStop() {
665
666 // boolean flag = org.opengion.hayabusa.filter.AccessStopFilter.getStopFilter();
667 boolean flag = org.opengion.hayabusa.filter.AccessStopFilter.isStopFilter();
668 flag = !flag ;
669
670 final String rtn ;
671 if( flag ) {
672 rtn = "Webアプリケーションのサービスを停止します?";
673 }
674 else {
675 rtn = "Webアプリケーションのサービスを開始します?";
676 }
677 org.opengion.hayabusa.filter.AccessStopFilter.setStopFilter( flag );
678
679 return rtn ;
680 }
681
682 /**
683 * admin リンク??を作?します?
684 * 簡易メソ?なので、国際化対応して?せん?
685 *
686 * @og.rev 3.5.4.1 (2003/12/01) 新規作?
687 * @og.rev 5.1.1.2 (2009/12/10) 画面IDを変更
688 * @og.rev 5.6.3.4 (2013/04/26) ?????ファ?ンス 画面を追?
689 *
690 * @return アドミンリンク??
691 */
692 private String getAdminLink() {
693 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
694
695 rtn.append( "<table><tr>" ).append( CR );
696 rtn.append( "<td width=\"10px\"/>" ).append( CR );
697 rtn.append( "<td>[<a href=\"admin?COMMAND=infomation\" target=\"RESULT\" >状況表示</a>]</td>" ).append( CR );
698 rtn.append( "<td width=\"10px\"/>" ).append( CR );
699 rtn.append( "<td>[<a href=\"admin?COMMAND=close\" target=\"RESULT\" >?゚ー?削除</a>]</td>" ).append( CR );
700 rtn.append( "<td width=\"10px\"/><td>" ).append( CR );
701 rtn.append( "[<a href=\"admin?COMMAND=loginUser\" target=\"RESULT\" >?ク?イ?ユー??ー</a>]</td>" ).append( CR );
702 rtn.append( "<td width=\"10px\"/><td>" ).append( CR );
703 rtn.append( "[<a href=\"admin?COMMAND=plugin\" target=\"RESULT\" >?゚ラク?イ?情報</a>]</td>" ).append( CR );
704 rtn.append( "<td width=\"10px\"/><td>" ).append( CR );
705 rtn.append( "[<a href=\"admin?COMMAND=taglib\" target=\"RESULT\" >???リブ情報</a>]</td>" ).append( CR );
706 rtn.append( "<td width=\"10px\"/><td>" ).append( CR );
707 rtn.append( "[<a href=\"common/quickReference.html\" target=\"RESULT\" >?????ファ?ンス</a>]</td>" ).append( CR ); // 5.6.3.4 (2013/04/26)
708 rtn.append( "<td width=\"10px\"/><td>" ).append( CR );
709 rtn.append( "[<a href=\"admin?COMMAND=systemResource\" target=\"RESULT\" >????リソ??</a>]</td>" ).append( CR );
710 rtn.append( "<td width=\"10px\"/><td>" ).append( CR );
711 // rtn.append( "[<a href=\"common/gamen/01_ADMIN/parameter.jsp?GAMENID=ADMIN\" target=\"RESULT\" >Parameter</a>]</td>" ).append( CR );
712 rtn.append( "[<a href=\"common/gamen/01_ADMIN/parameter.jsp?GAMENID=01_ADMIN\" target=\"RESULT\" >Parameter</a>]</td>" ).append( CR );
713 rtn.append( "</tr></table>" ).append( CR );
714
715 return rtn.toString();
716 }
717
718 /**
719 * DBTableModel から ??ブルのタグ??を作?して返します?
720 *
721 * @og.rev 3.5.3.1 (2003/10/31) User??の??ブルの設定を、シス?リソース より行う?
722 * @og.rev 5.2.2.0 (2010/11/01) SystemData 見直し漏れの対応?
723 *
724 * @return ??ブルのタグ??
725 */
726 private static String getTableHeaderTag() {
727 Attributes attri = new Attributes();
728 attri.set( "id" ,"viewTable" ); // 3.6.0.5 (2004/10/18)
729 attri.set( "summary" ,"layout" ); // サマリー
730
731 // // 4.0.0 (2005/08/31) ??ブル表示の CSSファイル利用の有無
732 // boolean useCSSfile = HybsSystem.sysBool( "USE_HTML_TABLE_CSS" ) ;
733 //
734 // if( ! useCSSfile ) {
735 // attri.set( "summary" ,"layout" ); // サマリー
736 // attri.set( "border" ,HybsSystem.sys( "HTML_BORDER" ) ) ; // 外枠の太?
737 // attri.set( "width" ,HybsSystem.sys( "HTML_WIDTH" ) ) ; // 表の大きさ(?ピクセルまた?,??
738 // attri.set( "frame" ,HybsSystem.sys( "HTML_FRAME" ) ) ; // 外枠の表示形? void,above,below,lhs,rhs,hsides,vsides,box,border
739 // attri.set( "rules" ,HybsSystem.sys( "HTML_RULES" ) ) ; // セルを区?線?形?none,rows,cols,groups,all
740 // attri.set( "cellspacing" ,HybsSystem.sys( "HTML_CELLSPACING" ) ); // セルの間隔
741 // attri.set( "cellpadding" ,HybsSystem.sys( "HTML_CELLPADDING" ) ); // セル??マ?ジン
742 // }
743
744 return attri.getAttribute();
745 }
746 }