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.db;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.SystemManager;
020    import org.opengion.fukurou.util.Cleanable;
021    
022    import java.util.Map;
023    import java.util.HashMap;
024    import 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     */
039    public 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    }