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 */ 016package org.opengion.hayabusa.db; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.SystemManager; 020import org.opengion.fukurou.util.Cleanable; 021 022import java.util.Map; 023import java.util.HashMap; 024import java.util.Locale ; 025 026/** 027 * DBCellRenderer/DBCellEditor オブジェクトを取得する為に使用する,ファクトリクラスです。 028 * 029 * DBCell オブジェクト の識別ID を元に、DBCellFactory.newInstance( String id ) 030 * メソッドで,DBCell オブジェクトを取得します。 031 * 032 * @og.group データ表示 033 * @og.group データ編集 034 * 035 * @version 4.0 036 * @author Kazuhiko Hasegawa 037 * @since JDK5.0, 038 */ 039public final class DBCellFactory { 040 private static final String DEFAULT_RENDERER = "LABEL"; 041 private static final String DEFAULT_EDITOR = "TEXT"; 042 private static final Map<String,CellRenderer> rMap = new HashMap<String,CellRenderer>(); 043 private static final Map<String,CellEditor> eMap = new HashMap<String,CellEditor>(); 044 045 // 4.0.0 (2005/01/31) Cleanable インターフェースによる初期化処理 046 static { 047 Cleanable clr = new Cleanable() { 048 public void clear() { 049 DBCellFactory.clear(); 050 } 051 }; 052 053 SystemManager.addCleanable( clr ); 054 } 055 056 /** 057 * デフォルトコンストラクターをprivateにして、 058 * オブジェクトの生成をさせないようにする。 059 * 060 */ 061 private DBCellFactory() { 062 } 063 064 /** 065 * 識別id に応じた DBCell オブジェクトを取得します。 066 * 067 * @og.rev 2.1.2.1 (2002/11/27) id が指定されていない場合の デフォルトを指定するように変更。 068 * @og.rev 3.1.1.1 (2003/04/03) DBCell のファクトリクラスに DBColumn オブジェクトを渡す。 069 * @og.rev 3.1.2.1 (2003/04/10) synchronized の方法を修正。 070 * @og.rev 3.5.6.0 (2004/06/18) 各種プラグイン関連付け設定を、システムパラメータ に記述します。 071 * @og.rev 4.0.0.0 (2005/01/31) キーの指定を、Renderer. から、Renderer_ に変更します。 072 * 073 * @param id DBCell インターフェースを実装したサブクラスの識別id 074 * @param clm DBColumnオブジェクト 075 * 076 * @return DBCellオブジェクト 077 */ 078 public static CellRenderer newRenderer( final String id,final DBColumn clm ) { 079 String type = ( id == null ) ? DEFAULT_RENDERER : id.toUpperCase(Locale.JAPAN) ; 080 String cls = HybsSystem.sys( "Renderer_" + type ); // 4.0.0 (2005/01/31) 081 082 CellRenderer cell; 083 synchronized( rMap ) { 084 cell = rMap.get( type ); 085 if( cell == null ) { 086 cell = (CellRenderer)HybsSystem.newInstance( cls ); // 3.5.5.3 (2004/04/09) 087 rMap.put( type,cell ); 088 } 089 } 090 return cell.newInstance( clm ); 091 } 092 093 /** 094 * 識別id に応じた DBCell オブジェクトを取得します。 095 * 096 * @og.rev 2.1.2.1 (2002/11/27) id が指定されていない場合の デフォルトを指定するように変更。 097 * @og.rev 3.1.1.1 (2003/04/03) DBCell のファクトリクラスに DBColumn オブジェクトを渡す。 098 * @og.rev 3.1.2.1 (2003/04/10) synchronized の方法を修正。 099 * @og.rev 3.5.6.0 (2004/06/18) 各種プラグイン関連付け設定を、システムパラメータ に記述します。 100 * @og.rev 4.0.0.0 (2005/01/31) キーの指定を、Editor. から、Editor_ に変更します。 101 * 102 * @param id DBCell インターフェースを実装したサブクラスの識別id 103 * @param clm DBColumnオブジェクト 104 * 105 * @return DBCellオブジェクト 106 */ 107 public static CellEditor newEditor( final String id,final DBColumn clm ) { 108 String type = ( id == null ) ? DEFAULT_EDITOR : id.toUpperCase(Locale.JAPAN) ; 109 String cls = HybsSystem.sys( "Editor_" + type ); // 4.0.0 (2005/01/31) 110 111 CellEditor cell; 112 synchronized( eMap ) { 113 cell = eMap.get( type ); 114 if( cell == null ) { 115 cell = (CellEditor)HybsSystem.newInstance( cls ); // 3.5.5.3 (2004/04/09) 116 eMap.put( type,cell ); 117 } 118 } 119 return cell.newInstance( clm ); 120 } 121 122 /** 123 * DBCell オブジェクトをプールからすべて削除します。 124 * システム全体を初期化するときや、動作が不安定になったときに行います。 125 * プールの方法自体が,一種のキャッシュ的な使いかたしかしていない為, 126 * 実行中でも、いつでもプールを初期化できます。 127 * 128 * @og.rev 3.1.1.1 (2003/04/03) キャッシュクリアメソッドを新規追加。 129 * @og.rev 3.1.2.1 (2003/04/10) synchronized の方法を修正。 130 */ 131 public static void clear() { 132 synchronized( rMap ) { rMap.clear(); } 133 synchronized( eMap ) { eMap.clear(); } 134 } 135}