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         * ここでの追加はあくまでメモリ上での登録になります。
044         * 登録した内容を永続的に登録する場合は、別途DBへの登録が必要になります。
045         *
046         * @param guikey 画面ID
047         * @param editName エディット名
048         * @param config エディット設定オブジェクト
049         */
050        public void addEditConfig( final String guikey, final String editName, final DBEditConfig config ) {
051                if( guikey == null || guikey.length() == 0 ) { return; }
052                if( editName == null || editName.length() == 0 ) { return; }
053                if( config == null ) { return; }
054
055                synchronized( editConfigMap ) {
056                        Map<String,DBEditConfig> map = editConfigMap.get( guikey );
057                        if( map == null ) {
058                                map = new HashMap<String, DBEditConfig>();
059                        }
060                        map.put( editName, config );
061
062                        editConfigMap.put( guikey, map );
063                }
064        }
065
066        /**
067         * エディット設定オブジェクトを削除します。
068         *
069         * ここでの追加はあくまでメモリ上での削除になります。
070         * 登録した内容を永続的に削除する場合は、別途DBへの登録が必要になります。
071         *
072         * @param guikey 画面ID
073         * @param editName エディット名
074         *
075         * @return エディット設定オブジェクト
076         */
077        public DBEditConfig deleteEditConfig( final String guikey, final String editName ) {
078                if( guikey == null || guikey.length() == 0 ) { return null; }
079                if( editName == null || editName.length() == 0 ) { return null; }
080
081                DBEditConfig config = null;
082                synchronized( editConfigMap ) {
083                        Map<String,DBEditConfig> map = editConfigMap.get( guikey );
084                        if( map == null ) { return null; }
085                        config = map.remove( editName );
086                        editConfigMap.put( guikey, map );
087                }
088                return config;
089        }
090
091        /**
092         * エディット設定オブジェクトを取得します。
093         *
094         * @param guikey 画面ID
095         * @param editName エディット名
096         *
097         * @return エディット設定オブジェクト
098         */
099        public DBEditConfig getEditConfig( final String guikey, final String editName ) {
100                if( guikey == null || guikey.length() == 0 ) { return null; }
101                if( editName == null || editName.length() == 0 ) { return null; }
102
103                synchronized( editConfigMap ) {
104                        Map<String,DBEditConfig> map = editConfigMap.get( guikey );
105                        if( map == null ) { return null; }
106                        return map.get( editName );
107                }
108        }
109
110        /**
111         * 画面IDをキーにエディット設定の一覧(配列)を返します。
112         * 返される配列は、エディット名順にソートされた状態で返されます。
113         *
114         * @param guikey 画面ID
115         *
116         * @return エディット設定一覧(配列)
117         */
118        public DBEditConfig[] getEditConfigs( final String guikey ) {
119                if( guikey == null || guikey.length() == 0 ) { return null; }
120
121                Map<String,DBEditConfig> map = editConfigMap.get( guikey );
122                if( map == null ) { return null; }
123
124                DBEditConfig[] configs = map.values().toArray( new DBEditConfig[0] );
125                Arrays.sort( configs
126                                , new Comparator<DBEditConfig> (){
127                                        public int compare( final DBEditConfig c1, final DBEditConfig c2 ) {
128                                                return c1 == null ? -1 : c1.getEditName().compareTo( c2.getEditName() ) ;
129                                        }
130                                }
131                );
132
133                return configs;
134        }
135}