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}