    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}