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.common;
017
018 import java.io.Serializable;
019 import java.sql.Connection;
020 import java.sql.PreparedStatement;
021 import java.sql.SQLException;
022 import java.util.ArrayList;
023 import java.util.Arrays;
024 import java.util.Comparator;
025 import java.util.HashMap;
026 import java.util.List;
027 import java.util.Map;
028 import java.util.Locale;
029
030 import javax.servlet.http.HttpSession;
031
032 import org.opengion.fukurou.db.ConnectionFactory;
033 import org.opengion.fukurou.util.Cleanable;
034 import org.opengion.fukurou.util.Closer;
035 import org.opengion.fukurou.util.LogWriter;
036 import org.opengion.fukurou.db.DBSimpleTable;
037
038 /**
039 * Webアプリケーション全体で使用して?オブジェクト類?ト?タルの管?ラスです?
040 *
041 * SystemManager は?
042 *
043 * session オブジェクト?管?アクセス?開放
044 *
045 * の作業を行います?
046 *
047 * 上記?クラス(staticメソ?)へのアクセスは、もちろん直接呼び出して
048 * 操作することも可能ですが、サーバ?のクリーンシャ??ン時やセ?ョンの
049 * 開放時?初期化??ど、ある種の統合的なトリガを受けて?係するクラスに
050 * イベントを伝えるよ?することで、Webアプリケーションサーバ?との?取り?
051 * ??管?る目?作?されて?す?
052 *
053 * @og.group 初期?
054 *
055 * @version 4.0
056 * @author Kazuhiko Hasegawa
057 * @since JDK5.0,
058 */
059 public final class SystemManager {
060 // 3.1.0.0 (2003/03/20) Hashtable を使用して??で?同期でも構わな??を?HashMap に置換え?
061 private static final Map<String,UserSummary> map = new HashMap<String,UserSummary>( HybsSystem.BUFFER_MIDDLE );
062
063 /** 4.0.0 (2005/01/31) Cleanable インターフェースを実?たオブジェクトを管?ます? */
064 private static final List<Cleanable> clearList = new ArrayList<Cleanable>() ;
065
066 /** 4.3.6.2 (2009/04/15) Context終?のみclear()され?Cleanable ブジェクトを管?ます? */
067 private static final List<Cleanable> contextClearList = new ArrayList<Cleanable>() ;
068
069 // 4.1.0.0 (2008/01/11) GE12クリア用
070 // 4.3.6.6 (2009/05/15) ENGINE_INFOは削除しな?
071 /** エンジン個別(SYSTEM_ID='個別' KBSAKU='0' CONTXT_PATH='自身')パラメータの?削除のクエリー {@value} */
072 private static final String DEL_SYS = "DELETE FROM GE12 WHERE SYSTEM_ID=? AND KBSAKU='0' AND CONTXT_PATH=? AND PARAM_ID != 'ENGINE_INFO'";
073
074 /**
075 * ?ォルトコンストラクターをprivateにして?
076 * オブジェクト?生?をさせな??する?
077 *
078 */
079 private SystemManager() {
080 }
081
082 /**
083 * session を記録します?
084 *
085 * 管??権限で、強制ログアウトさせる場合などに、使用します?
086 * Servlet 2.1 では、HttpSessio#getSessionContext() より取り出した
087 * HttpSessionContextのgetSession(java.lang.String sessionId) で
088 * すべての session を取り?せました?Deprecated になりました?
089 * セキュリ?ー上?好ましくな???す?で,注意して使用してください?
090 * common\session_init.jsp より登録しま?
091 *
092 * @og.rev 5.5.9.1 (2012/12/07) セ?ョン作?時に、規定?キーでセ?ョンIDを保存しておく?
093 *
094 * @param session Httpセ?ョン
095 */
096 public static void addSession( final HttpSession session ) {
097 String sessionID = session.getId();
098
099 UserSummary userInfo = (UserSummary)session.getAttribute( HybsSystem.USERINFO_KEY );
100 if( userInfo != null ) {
101 synchronized( map ) {
102 map.put( sessionID,userInfo );
103 }
104 session.setAttribute( HybsSystem.SESSION_KEY, sessionID ); // 5.5.9.1 (2012/12/07) セ?ョンIDを保?
105 }
106 }
107
108 /**
109 * session を削除します?
110 *
111 * 管??権限で、強制ログアウトさせる場合などに、使用します?
112 * Servlet 2.1 では、HttpSessio#getSessionContext() より取り出した
113 * HttpSessionContextのgetSession(java.lang.String sessionId) で
114 * すべての session を取り?せました?Deprecated になりました?
115 * セキュリ?ー上?好ましくな???す?で,注意して使用してください?
116 *
117 * @og.rev 5.5.9.1 (2012/12/07) セ?ョン作?時に登録した規定?キーで userInfo を削除します?
118 * @og.rev 5.6.6.0 (2013/07/05) セ?ョンの Attribute に SESSION_KEY で登録して? sessionID も削除します?
119 *
120 * @param session Httpセ?ョン
121 */
122 // public static void removeSession( final String sessionID ) {
123 public static void removeSession( final HttpSession session ) {
124
125 String sessionID = (String)session.getAttribute( HybsSystem.SESSION_KEY ); // 5.5.9.1 (2012/12/07) セ?ョンIDを取り??
126
127 // 5.6.6.0 (2013/07/05) userInfo の map からの削除とuserInfo の clear を簡??
128 synchronized( map ) {
129 UserSummary userInfo = map.remove( sessionID );
130 if( userInfo != null ) { userInfo.clear(); }
131 }
132
133 // final UserSummary userInfo ;
134 // synchronized( map ) {
135 // userInfo = map.remove( sessionID );
136 // }
137 // if( userInfo != null ) { userInfo.clear(); }
138
139 // 5.6.6.0 (2013/07/05) セ?ョンの Attribute に SESSION_KEY で登録して? sessionID も削除します?
140 session.removeAttribute( HybsSystem.USERINFO_KEY );
141 session.removeAttribute( HybsSystem.SESSION_KEY );
142 }
143
144 /**
145 * すべてのシス?にログイン中のUserSummary オブジェクトを取得します?
146 *
147 * キーは、UserSummary の Attribute も含めた値が使用できます?
148 * 引数のキーは、?部で大?に変換された?ち、?部キーとして使用されます?
149 *
150 * @og.rev 4.0.0.0 (2005/01/31) ?ロジ?大?更
151 * @og.rev 5.6.6.0 (2013/07/05) Comparator の作り方を?簡?します?キーの??も増やします?
152 *
153 * @param key ソートするキー?を指?
154 * @param direction ソートする方向[true:??/false:降?]
155 *
156 * @return ログイン中のオブジェク?
157 */
158 public static UserSummary[] getRunningUserSummary( final String key,final boolean direction ) {
159 final UserSummary[] users ;
160 synchronized( map ) {
161 users = map.values().toArray( new UserSummary[map.size()] );
162 }
163
164 if( key != null ) {
165 // Comparator<UserSummary> comp = getUserSummaryComparator( key,direction );
166 Comparator<UserSummary> comp = new ATTRI_Comparator( key.toUpperCase( Locale.JAPAN ),direction );
167 Arrays.sort( users,comp );
168 }
169
170 return users ;
171 }
172
173 /**
174 * シス?にログイン中の、すべてのセ?ョン数を?取得します?
175 *
176 * ちなみに、不正な??タが存在した場合?、ここでMapから削除しておきます?
177 *
178 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
179 *
180 * @return ログイン中の有効なすべてのセ?ョン数
181 */
182 public static int getRunningCount() {
183 final int rtnSize;
184 synchronized( map ) {
185 String[] keys = map.keySet().toArray( new String[map.size()] );
186 for( int i=0; i<keys.length; i++ ) {
187 if( map.get( keys[i] ) == null ) {
188 map.remove( keys[i] );
189 }
190 }
191 rtnSize = map.size() ;
192 }
193
194 return rtnSize;
195 }
196
197 /**
198 * contextDestroyed 時に、すべてのセ?ョンを?invalidate()します?
199 * <del>永続化セ?ョン(SESSIONS.ser)対?/del>
200 * 注意:キャ?ュで?管?て?セ?ョンが?すべて無効化されてしま?す?
201 * よって、?部にセ?ョンを管?なくなったため?invalidate() もできません?
202 * 不?合が出るかもしれません?
203 *
204 * @og.rev 3.5.2.1 (2003/10/27) 新規作?
205 * @og.rev 4.0.0.0 (2005/01/31) セ?ョン ?UserSummary に変更
206 */
207 static void sessionDestroyed() {
208 final UserSummary[] users ;
209 synchronized( map ) {
210 users = map.values().toArray( new UserSummary[map.size()] );
211 map.clear();
212 }
213
214 for( int i=0; i<users.length; i++ ) {
215 users[i].clear();
216 }
217 System.out.println( " [" + users.length + "] Session Destroyed " );
218 }
219
220 /**
221 * 初期化したいオブジェクトを登録します?
222 * オブジェクト?、Cleanable インターフェースを実?ておく?があります?
223 * 実際に、clear() する場合?、ここで登録した全てのオブジェクト? clear()
224 * メソ?が呼び出されます?
225 *
226 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
227 * @og.rev 4.3.6.2 (2009/04/15) コン?スト終?のみのclear()対?
228 *
229 * @param obj インターフェースの実?
230 */
231 public static void addCleanable( final Cleanable obj ) {
232 // synchronized( clearList ) {
233 // clearList.add( obj );
234 // }
235 addCleanable( obj, false );
236 }
237
238 /**
239 * 初期化したいオブジェクトを登録します?
240 * オブジェクト?、Cleanable インターフェースを実?ておく?があります?
241 * 実際に、clear() する場合?、ここで登録した全てのオブジェクト? clear()
242 * メソ?が呼び出されます?
243 *
244 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
245 * @og.rev 4.3.6.2 (2009/04/15) コン?スト終?のみのclear()対?
246 *
247 * @param obj インターフェースの実?
248 * @param flag trueの場合?コン?スト停止時?みclear()を呼び出?
249 */
250 public static void addCleanable( final Cleanable obj, final boolean flag ) {
251 if( flag ) {
252 synchronized( contextClearList ) {
253 contextClearList.add( obj );
254 }
255 }
256 else {
257 synchronized( clearList ) {
258 clearList.add( obj );
259 }
260 }
261 }
262
263 /**
264 * addCleanable( final Cleanable ) で登録したすべてのオブジェクトを初期化します?
265 * 処??、Cleanable インターフェースの clear()メソ?を?次呼び出します?
266 *
267 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
268 * @og.rev 4.3.6.2 (2009/04/15) コン?スト終?のみのclear()対?
269 *
270 * @param flag 完?終?に、true
271 */
272 public static void allClear( final boolean flag ) {
273 final Cleanable[] clr ;
274 synchronized( clearList ) {
275 clr = clearList.toArray( new Cleanable[clearList.size()] );
276 if( flag ) { clearList.clear() ; } // contextDestroyed の場合?み実?
277 }
278 // 登録の??で処?て?ます?
279 for( int i=clr.length-1; i>=0; i-- ) {
280 clr[i].clear();
281 }
282
283 // コン?スト停止時?みclear()
284 if( flag ) {
285 final Cleanable[] clr2 ;
286 synchronized( contextClearList ) {
287 clr2 = contextClearList.toArray( new Cleanable[contextClearList.size()] );
288 contextClearList.clear();
289 }
290 // 登録の??で処?て?ます?
291 for( int i=clr2.length-1; i>=0; i-- ) {
292 clr2[i].clear();
293 }
294 }
295 }
296
297 /**
298 * GE12からCONTXT PATHをhost:port/context/で登録して?物を削除します?
299 * (web.xmlにTOMCAT_PORTを指定した?合に上記CONTEXT_PATHで登録されま?
300 *
301 * @og.rev 4.1.0.0 (2007/12/26) 新規作?
302 * @og.rev 5.5.4.5 (2012/07/27) 初期起動時のDB接続?は、RESOURCE_DBID とする?
303 */
304 protected static void clearGE12() {
305 String HOST_URL = HybsSystem.sys( "HOST_URL" );
306 String RESOURCE_DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.4.5 (2012/07/27) 初期起動時のDB接続?
307 if( HOST_URL != null && !"**".equals( HOST_URL ) ) {
308 Connection connection = null;
309 PreparedStatement pstmt = null;
310 try {
311 // connection = ConnectionFactory.connection( null, null );
312 connection = ConnectionFactory.connection( RESOURCE_DBID, null ); // 5.5.4.5 (2012/07/27) 初期起動時のDB接続?は、RESOURCE_DBID とする?
313 pstmt = connection.prepareStatement( DEL_SYS );
314 pstmt.setString( 1, HybsSystem.sys( "SYSTEM_ID" ) );
315 pstmt.setString( 2, HOST_URL );
316 int delCnt = pstmt.executeUpdate();
317 connection.commit();
318 System.out.println( HOST_URL + " DELETE FROM GE12[" + delCnt + "]" );
319 } catch (HybsSystemException e) {
320 LogWriter.log( e );
321 } catch (SQLException e) {
322 Closer.rollback( connection );
323 LogWriter.log( e );
324 }
325 finally {
326 Closer.stmtClose( pstmt );
327 ConnectionFactory.close( connection, null );
328 }
329 }
330 }
331
332 /**
333 * soffice.binをkillする処?callします?
334 *
335 * @og.rev 4.3.0.0 (2008/07/18) 新規作?
336 * @og.rev 5.2.2.0 (2010/11/01) 循環参?解消?ため、SystemManager から ProcessFactory へ移?
337 */
338 // protected static void sofficeKill() {
339 // System.out.println("Kill all soffice.bin");
340 // ProcessFactory.kill();
341 // }
342
343 // deleteGUIAccessInfo() メソ?でしか使用しな??定数宣?
344 private static final int C_DEL_SYSTEM_ID = 0;
345 private static final int C_DEL_DYSET = 1;
346
347 /**
348 * アクセス統計テーブル(GE15)の再編成を行います?
349 * ??タの保存期間につ?は、シス?リソースのACCESS_TOKEI_ALIVE_DAYSで?します?
350 * ??タの作?された日時を基準として、上記?期間よりも古?ータは、物?除されます?
351 * ACCESS_TOKEI_ALIVE_DAYSが指定されて???合???タの削除は行われません?
352 *
353 * @og.rev 5.0.2.0 (2009/11/01) 新規作?
354 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
355 */
356 protected static void deleteGUIAccessInfo() {
357 String aliveDays = HybsSystem.sys( "ACCESS_TOKEI_ALIVE_DAYS" );
358 if( aliveDays == null || aliveDays.length() == 0 ) {
359 return;
360 }
361 String delBaseDate = HybsSystem.getDate( HybsSystem.getDate( "yyyyMMdd" ), -1 * Integer.valueOf( aliveDays ) );
362
363 String[] names = new String[] { "SYSTEM_ID","DYSET" };
364 String[] values = new String[names.length];
365 values[C_DEL_SYSTEM_ID ] = HybsSystem.sys( "SYSTEM_ID" );
366 values[C_DEL_DYSET ] = delBaseDate + "000000";
367
368 String RESOURCE_DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
369 DBSimpleTable dbTable = new DBSimpleTable( names );
370 dbTable.setApplicationInfo( null );
371 dbTable.setConnectionID( RESOURCE_DBID ); // 5.5.5.1 (2012/08/07)
372 dbTable.setTable( "GE15" );
373 dbTable.setWhere( "SYSTEM_ID = [SYSTEM_ID] and DYSET <= [DYSET]" );
374
375 boolean okFlag = false;
376 try {
377 dbTable.startDelete();
378 dbTable.execute( values );
379 okFlag = true;
380 }
381 catch (SQLException ex) {
382 LogWriter.log( " アクセス統計テーブル削除時にエラーが発生しました" );
383 LogWriter.log( ex.getMessage() );
384 }
385 finally {
386 int cnt = dbTable.close( okFlag );
387 System.out.println();
388 System.out.println( " アクセス統計テーブルから、[" + cnt + "]件、削除しました? );
389 }
390 }
391
392 /**
393 * UserSummary の??キーに対応した?目をソートす?Comparator を返します?
394 *
395 * キーは、JNAME,ID,IPADDRESS,LOGINTIME の?のどれかです?
396 *
397 * @og.rev 3.8.5.3 (2006/08/07) 新規追?
398 * @og.rev 5.6.6.0 (2013/07/05) Comparator の作り方を?簡?します?そ?ため、??
399 *
400 * @param key ソートするキー?を指?
401 * @param direction ソートする方向[true:??/false:降?]
402 *
403 * @return ??キーに対応した?目をソートす?Comparator
404 */
405 // public static Comparator<UserSummary> getUserSummaryComparator( final String key,final boolean direction ) {
406 // if( "JNAME,ID,ROLES,IPADDRESS,LOGINTIME".indexOf( key ) < 0 ) {
407 // String errMsg = "ソートキーには、JNAME,ID,ROLES,IPADDRESS,LOGINTIME 以外??できません?
408 // + " Key=" + key ;
409 // throw new HybsSystemException( errMsg );
410 // }
411 //
412 // Comparator<UserSummary> comp = null;
413 //
414 // if( "JNAME".equals( key ) ) {
415 // comp = new JNAME_Comparator( direction );
416 // }
417 // else if( "ID".equals( key ) ) {
418 // comp = new ID_Comparator( direction );
419 // }
420 // else if( "ROLES".equals( key ) ) {
421 // comp = new ROLES_Comparator( direction );
422 // }
423 // else if( "IPADDRESS".equals( key ) ) {
424 // comp = new IPADDRESS_Comparator( direction );
425 // }
426 // else if( "LOGINTIME".equals( key ) ) {
427 // comp = new LOGINTIME_Comparator( direction );
428 // }
429 //
430 // return comp ;
431 // }
432
433 /**
434 * UserSummary の Attribute で比??Comparator ?クラスの定義?
435 *
436 * key が?Attribute のキーになりますが、使用するのは、大?化してからです?
437 *
438 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
439 */
440 private static final class ATTRI_Comparator implements Comparator<UserSummary>, Serializable {
441 private static final long serialVersionUID = 5660 ; // 5.6.6.0 (2013/07/05)
442 private final String key ;
443 private final boolean direct ;
444
445 /**
446 * ソート?方向を引数にとるコンストラクタ?
447 *
448 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
449 *
450 * @param direction ソート?方向[true:??/false:降?]
451 */
452 public ATTRI_Comparator( final String key,final boolean direction ) {
453 this.key = key;
454 direct = direction;
455 }
456
457 /**
458 * getAttribute 比?ソ?
459 * インタフェース Comparable の 実?す?
460 *
461 * キーとして、getAttribute( String ) の取得結果を使用する為、null もあり得ます?そ?場合?equals 整合?は取れませんが?
462 * 処?しては、正常に動作するよ?しておきます?つまり?null はもっとも小さ??とし?比?象がともに null の
463 * 場合?、同じと判断します?
464 *
465 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
466 *
467 * @param o1 比?象の??のオブジェク?
468 * @param o2 比?象の 2 番目のオブジェク?
469 * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
470 */
471 public int compare( final UserSummary o1, final UserSummary o2 ) {
472 String key1 = o1.getAttribute( key );
473 String key2 = o2.getAttribute( key );
474
475 int rtn ;
476 if( key1 == null && key2 == null ) { rtn = 0; }
477 else if( key1 == null ) { rtn = -1; }
478 else if( key2 == null ) { rtn = 1; }
479 else { rtn = key1.compareTo( key2 ) ; }
480
481 return ( direct ) ? rtn : -rtn; // マイナス 0 が気になるが、まあ?良しとする?
482 }
483 }
484
485 // /**
486 // * JNAME で比??Comparator ?クラスの定義?
487 // *
488 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
489 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
490 // */
491 // private static final class JNAME_Comparator implements Comparator<UserSummary>, Serializable {
492 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
493 // private final boolean direct ;
494 //
495 // /**
496 // * ソート?方向を引数にとるコンストラクタ?
497 // *
498 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
499 // *
500 // * @param direction ソート?方向[true:??/false:降?]
501 // */
502 // public JNAME_Comparator( final boolean direction ) {
503 // direct = direction;
504 // }
505 //
506 // /**
507 // * getJname 比?ソ?
508 // * インタフェース Comparable の 実?す?
509 // *
510 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
511 // *
512 // * @param o1 比?象の??のオブジェク?
513 // * @param o2 比?象の 2 番目のオブジェク?
514 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
515 // */
516 // public int compare( final UserSummary o1, final UserSummary o2 ) {
517 // String key1 = o1.getJname();
518 // String key2 = o2.getJname();
519 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
520 // }
521 // }
522 //
523 // /**
524 // * ID で比??Comparator ?クラスの定義?
525 // *
526 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
527 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
528 // */
529 // private static final class ID_Comparator implements Comparator<UserSummary>, Serializable {
530 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
531 // private final boolean direct ;
532 //
533 // /**
534 // * ソート?方向を引数にとるコンストラクタ?
535 // *
536 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
537 // *
538 // * @param direction ソート?方向[true:??/false:降?]
539 // */
540 // public ID_Comparator( final boolean direction ) {
541 // direct = direction;
542 // }
543 //
544 // /**
545 // * getUserID 比?ソ?
546 // * インタフェース Comparable の 実?す?
547 // *
548 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
549 // *
550 // * @param o1 比?象の??のオブジェク?
551 // * @param o2 比?象の 2 番目のオブジェク?
552 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
553 // */
554 // public int compare( final UserSummary o1, final UserSummary o2 ) {
555 // String key1 = o1.getUserID();
556 // String key2 = o2.getUserID();
557 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
558 // }
559 // }
560 //
561 // /**
562 // * ROLES で比??Comparator ?クラスの定義?
563 // *
564 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
565 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
566 // */
567 // private static final class ROLES_Comparator implements Comparator<UserSummary>, Serializable {
568 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
569 // private final boolean direct ;
570 //
571 // /**
572 // * ソート?方向を引数にとるコンストラクタ?
573 // *
574 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
575 // *
576 // * @param direction ソート?方向[true:??/false:降?]
577 // */
578 // public ROLES_Comparator( final boolean direction ) {
579 // direct = direction;
580 // }
581 //
582 // /**
583 // * getRoles 比?ソ?
584 // * インタフェース Comparable の 実?す?
585 // *
586 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
587 // *
588 // * @param o1 比?象の??のオブジェク?
589 // * @param o2 比?象の 2 番目のオブジェク?
590 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
591 // */
592 // public int compare( final UserSummary o1, final UserSummary o2 ) {
593 // String key1 = o1.getRoles();
594 // String key2 = o2.getRoles();
595 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
596 // }
597 // }
598 //
599 // /**
600 // * IPADDRESS で比??Comparator ?クラスの定義?
601 // *
602 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
603 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
604 // */
605 // private static final class IPADDRESS_Comparator implements Comparator<UserSummary>, Serializable {
606 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
607 // private final boolean direct ;
608 //
609 // /**
610 // * ソート?方向を引数にとるコンストラクタ?
611 // *
612 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
613 // *
614 // * @param direction ソート?方向[true:??/false:降?]
615 // */
616 // public IPADDRESS_Comparator( final boolean direction ) {
617 // direct = direction;
618 // }
619 //
620 // /**
621 // * getIPAddress 比?ソ?
622 // * インタフェース Comparable の 実?す?
623 // *
624 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
625 // *
626 // * @param o1 比?象の??のオブジェク?
627 // * @param o2 比?象の 2 番目のオブジェク?
628 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
629 // */
630 // public int compare( final UserSummary o1, final UserSummary o2 ) {
631 // String key1 = o1.getIPAddress();
632 // String key2 = o2.getIPAddress();
633 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
634 // }
635 // }
636 //
637 // /**
638 // * LOGINTIME で比??Comparator ?クラスの定義?
639 // *
640 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
641 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
642 // */
643 // private static final class LOGINTIME_Comparator implements Comparator<UserSummary>, Serializable {
644 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
645 // private final boolean direct ;
646 //
647 // /**
648 // * ソート?方向を引数にとるコンストラクタ?
649 // *
650 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
651 // *
652 // * @param direction ソート?方向[true:??/false:降?]
653 // */
654 // public LOGINTIME_Comparator( final boolean direction ) {
655 // direct = direction;
656 // }
657 //
658 // /**
659 // * getLoginTime 比?ソ?
660 // * インタフェース Comparable の 実?す?
661 // *
662 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
663 // *
664 // * @param o1 比?象の??のオブジェク?
665 // * @param o2 比?象の 2 番目のオブジェク?
666 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
667 // */
668 // public int compare( final UserSummary o1, final UserSummary o2 ) {
669 // long key1 = o1.getLoginTime();
670 // long key2 = o2.getLoginTime();
671 // int rtn = (direct) ? 1:-1 ;
672 // return ( key1 == key2 ) ? 0 : (key1 < key2) ? rtn : -rtn ;
673 // }
674 // }
675 }