    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 java.util.Arrays;
    019import java.util.Comparator;
    020import java.util.HashMap;
    021import java.util.Map;
    022
    023/**
    024 * ユーザー単位のエディット設定情報を管理するためのクラスです。
    025 *
    026 * 画面ID+エディット名をキーとしてエディット設定オブジェクトの
    027 * 追加、削除、参照を行います。
    028 *
    029 * @og.rev 5.3.6.0 (2011/06/01) 新規追加
    030 *
    031 * @version  5.0
    032 * @author   Hiroki Nakamura
    033 * @since    JDK6.0,
    034 */
    035public class DBEditConfigManager  {
    036
    037        // エディット設定情報の管理オブジェクト(画面ID+エディット名単位で管理)
    038        private final Map<String,Map<String,DBEditConfig>> editConfigMap = new HashMap<String,Map<String,DBEditConfig>>();
    039
    040        /**
    041         * デフォルトコンストラクターです。
    042         */
    043//      public DBEditConfigManager() {
    044//      }
    045
    046        /**
    047         * エディット設定オブジェクトを追加します。
    048         *
    049         * ここでの追加はあくまでメモリ上での登録になります。
    050         * 登録した内容を永続的に登録する場合は、別途DBへの登録が必要になります。
    051         *
    052         * @param guikey 画面ID
    053         * @param editName エディット名
    054         * @param config エディット設定オブジェクト
    055         */
    056        public void addEditConfig( final String guikey, final String editName, final DBEditConfig config ) {
    057                if( guikey == null || guikey.length() == 0 ) { return; }
    058                if( editName == null || editName.length() == 0 ) { return; }
    059                if( config == null ) { return; }
    060
    061                synchronized( editConfigMap ) {
    062                        Map<String,DBEditConfig> map = editConfigMap.get( guikey );
    063                        if( map == null ) {
    064                                map = new HashMap<String, DBEditConfig>();
    065                        }
    066                        map.put( editName, config );
    067
    068                        editConfigMap.put( guikey, map );
    069                }
    070        }
    071
    072        /**
    073         * エディット設定オブジェクトを削除します。
    074         *
    075         * ここでの追加はあくまでメモリ上での削除になります。
    076         * 登録した内容を永続的に削除する場合は、別途DBへの登録が必要になります。
    077         *
    078         * @param guikey 画面ID
    079         * @param editName エディット名
    080         *
    081         * @return エディット設定オブジェクト
    082         */
    083        public DBEditConfig deleteEditConfig( final String guikey, final String editName ) {
    084                if( guikey == null || guikey.length() == 0 ) { return null; }
    085                if( editName == null || editName.length() == 0 ) { return null; }
    086
    087                DBEditConfig config = null;
    088                synchronized( editConfigMap ) {
    089                        Map<String,DBEditConfig> map = editConfigMap.get( guikey );
    090                        if( map == null ) { return null; }
    091                        config = map.remove( editName );
    092                        editConfigMap.put( guikey, map );
    093                }
    094                return config;
    095        }
    096
    097        /**
    098         * エディット設定オブジェクトを取得します。
    099         *
    100         * @param guikey 画面ID
    101         * @param editName エディット名
    102         *
    103         * @return エディット設定オブジェクト
    104         */
    105        public DBEditConfig getEditConfig( final String guikey, final String editName ) {
    106                if( guikey == null || guikey.length() == 0 ) { return null; }
    107                if( editName == null || editName.length() == 0 ) { return null; }
    108
    109                synchronized( editConfigMap ) {
    110                        Map<String,DBEditConfig> map = editConfigMap.get( guikey );
    111                        if( map == null ) { return null; }
    112                        return map.get( editName );
    113                }
    114        }
    115
    116        /**
    117         * 画面IDをキーにエディット設定の一覧(配列)を返します。
    118         * 返される配列は、エディット名順にソートされた状態で返されます。
    119         *
    120         * @param guikey 画面ID
    121         *
    122         * @return エディット設定一覧(配列)
    123         */
    124        public DBEditConfig[] getEditConfigs( final String guikey ) {
    125                if( guikey == null || guikey.length() == 0 ) { return null; }
    126
    127                Map<String,DBEditConfig> map = editConfigMap.get( guikey );
    128                if( map == null ) { return null; }
    129
    130                DBEditConfig[] configs = map.values().toArray( new DBEditConfig[0] );
    131                Arrays.sort( configs
    132                                , new Comparator<DBEditConfig> (){
    133                                        public int compare( final DBEditConfig c1, final DBEditConfig c2 ) {
    134                                                return ( c1 == null ? -1 : c1.getEditName().compareTo( c2.getEditName() ) );
    135                                        }
    136                                }
    137                );
    138
    139                return configs;
    140        }
    141}