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 * 注意:キャ?ュで?管?て?セ?ョンが?すべて無効化されてしま?す?
200 * よって、?部にセ?ョンを管?なくなったため?invalidate() もできません?
201 * 不?合が出るかもしれません?
202 *
203 * @og.rev 3.5.2.1 (2003/10/27) 新規作?
204 * @og.rev 4.0.0.0 (2005/01/31) セ?ョン ?UserSummary に変更
205 */
206 static void sessionDestroyed() {
207 final UserSummary[] users ;
208 synchronized( map ) {
209 users = map.values().toArray( new UserSummary[map.size()] );
210 map.clear();
211 }
212
213 for( int i=0; i<users.length; i++ ) {
214 users[i].clear();
215 }
216 System.out.println( " [" + users.length + "] Session Destroyed " );
217 }
218
219 /**
220 * 初期化したいオブジェクトを登録します?
221 * オブジェクト?、Cleanable インターフェースを実?ておく?があります?
222 * 実際に、clear() する場合?、ここで登録した全てのオブジェクト? clear()
223 * メソ?が呼び出されます?
224 *
225 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
226 * @og.rev 4.3.6.2 (2009/04/15) コン?スト終?のみのclear()対?
227 *
228 * @param obj インターフェースの実?
229 */
230 public static void addCleanable( final Cleanable obj ) {
231 // synchronized( clearList ) {
232 // clearList.add( obj );
233 // }
234 addCleanable( obj, false );
235 }
236
237 /**
238 * 初期化したいオブジェクトを登録します?
239 * オブジェクト?、Cleanable インターフェースを実?ておく?があります?
240 * 実際に、clear() する場合?、ここで登録した全てのオブジェクト? clear()
241 * メソ?が呼び出されます?
242 *
243 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
244 * @og.rev 4.3.6.2 (2009/04/15) コン?スト終?のみのclear()対?
245 *
246 * @param obj インターフェースの実?
247 * @param flag trueの場合?コン?スト停止時?みclear()を呼び出?
248 */
249 public static void addCleanable( final Cleanable obj, final boolean flag ) {
250 if( flag ) {
251 synchronized( contextClearList ) {
252 contextClearList.add( obj );
253 }
254 }
255 else {
256 synchronized( clearList ) {
257 clearList.add( obj );
258 }
259 }
260 }
261
262 /**
263 * addCleanable( final Cleanable ) で登録したすべてのオブジェクトを初期化します?
264 * 処??、Cleanable インターフェースの clear()メソ?を?次呼び出します?
265 *
266 * @og.rev 4.0.0.0 (2005/01/31) 新規作?
267 * @og.rev 4.3.6.2 (2009/04/15) コン?スト終?のみのclear()対?
268 *
269 * @param flag 完?終?に、true
270 */
271 public static void allClear( final boolean flag ) {
272 final Cleanable[] clr ;
273 synchronized( clearList ) {
274 clr = clearList.toArray( new Cleanable[clearList.size()] );
275 if( flag ) { clearList.clear() ; } // contextDestroyed の場合?み実?
276 }
277 // 登録の??で処?て?ます?
278 for( int i=clr.length-1; i>=0; i-- ) {
279 clr[i].clear();
280 }
281
282 // コン?スト停止時?みclear()
283 if( flag ) {
284 final Cleanable[] clr2 ;
285 synchronized( contextClearList ) {
286 clr2 = contextClearList.toArray( new Cleanable[contextClearList.size()] );
287 contextClearList.clear();
288 }
289 // 登録の??で処?て?ます?
290 for( int i=clr2.length-1; i>=0; i-- ) {
291 clr2[i].clear();
292 }
293 }
294 }
295
296 /**
297 * GE12からCONTXT PATHをhost:port/context/で登録して?物を削除します?
298 * (web.xmlにTOMCAT_PORTを指定した?合に上記CONTEXT_PATHで登録されま?
299 *
300 * @og.rev 4.1.0.0 (2007/12/26) 新規作?
301 * @og.rev 5.5.4.5 (2012/07/27) 初期起動時のDB接続?は、RESOURCE_DBID とする?
302 */
303 protected static void clearGE12() {
304 String HOST_URL = HybsSystem.sys( "HOST_URL" );
305 String RESOURCE_DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.4.5 (2012/07/27) 初期起動時のDB接続?
306 if( HOST_URL != null && !"**".equals( HOST_URL ) ) {
307 Connection connection = null;
308 PreparedStatement pstmt = null;
309 try {
310 // connection = ConnectionFactory.connection( null, null );
311 connection = ConnectionFactory.connection( RESOURCE_DBID, null ); // 5.5.4.5 (2012/07/27) 初期起動時のDB接続?は、RESOURCE_DBID とする?
312 pstmt = connection.prepareStatement( DEL_SYS );
313 pstmt.setString( 1, HybsSystem.sys( "SYSTEM_ID" ) );
314 pstmt.setString( 2, HOST_URL );
315 int delCnt = pstmt.executeUpdate();
316 connection.commit();
317 System.out.println( HOST_URL + " DELETE FROM GE12[" + delCnt + "]" );
318 } catch (HybsSystemException e) {
319 LogWriter.log( e );
320 } catch (SQLException e) {
321 Closer.rollback( connection );
322 LogWriter.log( e );
323 }
324 finally {
325 Closer.stmtClose( pstmt );
326 ConnectionFactory.close( connection, null );
327 }
328 }
329 }
330
331 /**
332 * soffice.binをkillする処?callします?
333 *
334 * @og.rev 4.3.0.0 (2008/07/18) 新規作?
335 * @og.rev 5.2.2.0 (2010/11/01) 循環参?解消?ため、SystemManager から ProcessFactory へ移?
336 */
337 // protected static void sofficeKill() {
338 // System.out.println("Kill all soffice.bin");
339 // ProcessFactory.kill();
340 // }
341
342 // deleteGUIAccessInfo() メソ?でしか使用しな??定数宣?
343 private static final int C_DEL_SYSTEM_ID = 0;
344 private static final int C_DEL_DYSET = 1;
345
346 /**
347 * アクセス統計テーブル(GE15)の再編成を行います?
348 * ??タの保存期間につ?は、シス?リソースのACCESS_TOKEI_ALIVE_DAYSで?します?
349 * ??タの作?された日時を基準として、上記?期間よりも古?ータは、物?除されます?
350 * ACCESS_TOKEI_ALIVE_DAYSが指定されて???合???タの削除は行われません?
351 *
352 * @og.rev 5.0.2.0 (2009/11/01) 新規作?
353 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
354 */
355 protected static void deleteGUIAccessInfo() {
356 String aliveDays = HybsSystem.sys( "ACCESS_TOKEI_ALIVE_DAYS" );
357 if( aliveDays == null || aliveDays.length() == 0 ) {
358 return;
359 }
360 String delBaseDate = HybsSystem.getDate( HybsSystem.getDate( "yyyyMMdd" ), -1 * Integer.valueOf( aliveDays ) );
361
362 String[] names = new String[] { "SYSTEM_ID","DYSET" };
363 String[] values = new String[names.length];
364 values[C_DEL_SYSTEM_ID ] = HybsSystem.sys( "SYSTEM_ID" );
365 values[C_DEL_DYSET ] = delBaseDate + "000000";
366
367 String RESOURCE_DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
368 DBSimpleTable dbTable = new DBSimpleTable( names );
369 dbTable.setApplicationInfo( null );
370 dbTable.setConnectionID( RESOURCE_DBID ); // 5.5.5.1 (2012/08/07)
371 dbTable.setTable( "GE15" );
372 dbTable.setWhere( "SYSTEM_ID = [SYSTEM_ID] and DYSET <= [DYSET]" );
373
374 boolean okFlag = false;
375 try {
376 dbTable.startDelete();
377 dbTable.execute( values );
378 okFlag = true;
379 }
380 catch (SQLException ex) {
381 LogWriter.log( " アクセス統計テーブル削除時にエラーが発生しました" );
382 LogWriter.log( ex.getMessage() );
383 }
384 finally {
385 int cnt = dbTable.close( okFlag );
386 System.out.println();
387 System.out.println( " アクセス統計テーブルから、[" + cnt + "]件、削除しました? );
388 }
389 }
390
391 /**
392 * UserSummary の??キーに対応した?目をソートす?Comparator を返します?
393 *
394 * キーは、JNAME,ID,IPADDRESS,LOGINTIME の?のどれかです?
395 *
396 * @og.rev 3.8.5.3 (2006/08/07) 新規追?
397 * @og.rev 5.6.6.0 (2013/07/05) Comparator の作り方を?簡?します?そ?ため、??
398 *
399 * @param key ソートするキー?を指?
400 * @param direction ソートする方向[true:??/false:降?]
401 *
402 * @return ??キーに対応した?目をソートす?Comparator
403 */
404 // public static Comparator<UserSummary> getUserSummaryComparator( final String key,final boolean direction ) {
405 // if( "JNAME,ID,ROLES,IPADDRESS,LOGINTIME".indexOf( key ) < 0 ) {
406 // String errMsg = "ソートキーには、JNAME,ID,ROLES,IPADDRESS,LOGINTIME 以外??できません?
407 // + " Key=" + key ;
408 // throw new HybsSystemException( errMsg );
409 // }
410 //
411 // Comparator<UserSummary> comp = null;
412 //
413 // if( "JNAME".equals( key ) ) {
414 // comp = new JNAME_Comparator( direction );
415 // }
416 // else if( "ID".equals( key ) ) {
417 // comp = new ID_Comparator( direction );
418 // }
419 // else if( "ROLES".equals( key ) ) {
420 // comp = new ROLES_Comparator( direction );
421 // }
422 // else if( "IPADDRESS".equals( key ) ) {
423 // comp = new IPADDRESS_Comparator( direction );
424 // }
425 // else if( "LOGINTIME".equals( key ) ) {
426 // comp = new LOGINTIME_Comparator( direction );
427 // }
428 //
429 // return comp ;
430 // }
431
432 /**
433 * UserSummary の Attribute で比??Comparator ?クラスの定義?
434 *
435 * key が?Attribute のキーになりますが、使用するのは、大?化してからです?
436 *
437 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
438 */
439 private static final class ATTRI_Comparator implements Comparator<UserSummary>, Serializable {
440 private static final long serialVersionUID = 5660 ; // 5.6.6.0 (2013/07/05)
441 private final String key ;
442 private final boolean direct ;
443
444 /**
445 * ソート?方向を引数にとるコンストラクタ?
446 *
447 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
448 *
449 * @param direction ソート?方向[true:??/false:降?]
450 */
451 public ATTRI_Comparator( final String key,final boolean direction ) {
452 this.key = key;
453 direct = direction;
454 }
455
456 /**
457 * getAttribute 比?ソ?
458 * インタフェース Comparable の 実?す?
459 *
460 * キーとして、getAttribute( String ) の取得結果を使用する為、null もあり得ます?そ?場合?equals 整合?は取れませんが?
461 * 処?しては、正常に動作するよ?しておきます?つまり?null はもっとも小さ??とし?比?象がともに null の
462 * 場合?、同じと判断します?
463 *
464 * @og.rev 5.6.6.0 (2013/07/05) 新規追?
465 *
466 * @param o1 比?象の??のオブジェク?
467 * @param o2 比?象の 2 番目のオブジェク?
468 * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
469 */
470 public int compare( final UserSummary o1, final UserSummary o2 ) {
471 String key1 = o1.getAttribute( key );
472 String key2 = o2.getAttribute( key );
473
474 int rtn ;
475 if( key1 == null && key2 == null ) { rtn = 0; }
476 else if( key1 == null ) { rtn = -1; }
477 else if( key2 == null ) { rtn = 1; }
478 else { rtn = key1.compareTo( key2 ) ; }
479
480 return ( direct ) ? rtn : -rtn; // マイナス 0 が気になるが、まあ?良しとする?
481 }
482 }
483
484 // /**
485 // * JNAME で比??Comparator ?クラスの定義?
486 // *
487 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
488 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
489 // */
490 // private static final class JNAME_Comparator implements Comparator<UserSummary>, Serializable {
491 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
492 // private final boolean direct ;
493 //
494 // /**
495 // * ソート?方向を引数にとるコンストラクタ?
496 // *
497 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
498 // *
499 // * @param direction ソート?方向[true:??/false:降?]
500 // */
501 // public JNAME_Comparator( final boolean direction ) {
502 // direct = direction;
503 // }
504 //
505 // /**
506 // * getJname 比?ソ?
507 // * インタフェース Comparable の 実?す?
508 // *
509 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
510 // *
511 // * @param o1 比?象の??のオブジェク?
512 // * @param o2 比?象の 2 番目のオブジェク?
513 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
514 // */
515 // public int compare( final UserSummary o1, final UserSummary o2 ) {
516 // String key1 = o1.getJname();
517 // String key2 = o2.getJname();
518 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
519 // }
520 // }
521 //
522 // /**
523 // * ID で比??Comparator ?クラスの定義?
524 // *
525 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
526 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
527 // */
528 // private static final class ID_Comparator implements Comparator<UserSummary>, Serializable {
529 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
530 // private final boolean direct ;
531 //
532 // /**
533 // * ソート?方向を引数にとるコンストラクタ?
534 // *
535 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
536 // *
537 // * @param direction ソート?方向[true:??/false:降?]
538 // */
539 // public ID_Comparator( final boolean direction ) {
540 // direct = direction;
541 // }
542 //
543 // /**
544 // * getUserID 比?ソ?
545 // * インタフェース Comparable の 実?す?
546 // *
547 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
548 // *
549 // * @param o1 比?象の??のオブジェク?
550 // * @param o2 比?象の 2 番目のオブジェク?
551 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
552 // */
553 // public int compare( final UserSummary o1, final UserSummary o2 ) {
554 // String key1 = o1.getUserID();
555 // String key2 = o2.getUserID();
556 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
557 // }
558 // }
559 //
560 // /**
561 // * ROLES で比??Comparator ?クラスの定義?
562 // *
563 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
564 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
565 // */
566 // private static final class ROLES_Comparator implements Comparator<UserSummary>, Serializable {
567 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
568 // private final boolean direct ;
569 //
570 // /**
571 // * ソート?方向を引数にとるコンストラクタ?
572 // *
573 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
574 // *
575 // * @param direction ソート?方向[true:??/false:降?]
576 // */
577 // public ROLES_Comparator( final boolean direction ) {
578 // direct = direction;
579 // }
580 //
581 // /**
582 // * getRoles 比?ソ?
583 // * インタフェース Comparable の 実?す?
584 // *
585 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
586 // *
587 // * @param o1 比?象の??のオブジェク?
588 // * @param o2 比?象の 2 番目のオブジェク?
589 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
590 // */
591 // public int compare( final UserSummary o1, final UserSummary o2 ) {
592 // String key1 = o1.getRoles();
593 // String key2 = o2.getRoles();
594 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
595 // }
596 // }
597 //
598 // /**
599 // * IPADDRESS で比??Comparator ?クラスの定義?
600 // *
601 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
602 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
603 // */
604 // private static final class IPADDRESS_Comparator implements Comparator<UserSummary>, Serializable {
605 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
606 // private final boolean direct ;
607 //
608 // /**
609 // * ソート?方向を引数にとるコンストラクタ?
610 // *
611 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
612 // *
613 // * @param direction ソート?方向[true:??/false:降?]
614 // */
615 // public IPADDRESS_Comparator( final boolean direction ) {
616 // direct = direction;
617 // }
618 //
619 // /**
620 // * getIPAddress 比?ソ?
621 // * インタフェース Comparable の 実?す?
622 // *
623 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
624 // *
625 // * @param o1 比?象の??のオブジェク?
626 // * @param o2 比?象の 2 番目のオブジェク?
627 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
628 // */
629 // public int compare( final UserSummary o1, final UserSummary o2 ) {
630 // String key1 = o1.getIPAddress();
631 // String key2 = o2.getIPAddress();
632 // return ( direct ) ? key1.compareTo( key2 ) : key2.compareTo( key1 );
633 // }
634 // }
635 //
636 // /**
637 // * LOGINTIME で比??Comparator ?クラスの定義?
638 // *
639 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
640 // * @og.rev 5.6.6.0 (2013/07/05) ATTRI_Comparator に統合?ため、?
641 // */
642 // private static final class LOGINTIME_Comparator implements Comparator<UserSummary>, Serializable {
643 // private static final long serialVersionUID = 4000 ; // 4.0.0 (2006/09/31)
644 // private final boolean direct ;
645 //
646 // /**
647 // * ソート?方向を引数にとるコンストラクタ?
648 // *
649 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
650 // *
651 // * @param direction ソート?方向[true:??/false:降?]
652 // */
653 // public LOGINTIME_Comparator( final boolean direction ) {
654 // direct = direction;
655 // }
656 //
657 // /**
658 // * getLoginTime 比?ソ?
659 // * インタフェース Comparable の 実?す?
660 // *
661 // * @og.rev 4.0.0.0 (2006/09/31) 新規追?
662 // *
663 // * @param o1 比?象の??のオブジェク?
664 // * @param o2 比?象の 2 番目のオブジェク?
665 // * @return ??の引数?2 番目の引数より小さ??合???整数、両方が等し??合? 0、最初?引数?2 番目の引数より大きい場合?正の整数
666 // */
667 // public int compare( final UserSummary o1, final UserSummary o2 ) {
668 // long key1 = o1.getLoginTime();
669 // long key2 = o2.getLoginTime();
670 // int rtn = (direct) ? 1:-1 ;
671 // return ( key1 == key2 ) ? 0 : (key1 < key2) ? rtn : -rtn ;
672 // }
673 // }
674 }