/*
* Copyright (c) 2013, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
package com.marshalchen.common.uimodule.rebound;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* class for maintaining a registry of all spring configs
*/
public class SpringConfigRegistry {
private static SpringConfigRegistry instance;
public static SpringConfigRegistry getInstance() {
if (instance == null) {
instance = new SpringConfigRegistry(true);
}
return instance;
}
private final Map<SpringConfig, String> mSpringConfigMap;
/**
* constructor for the SpringConfigRegistry
*/
SpringConfigRegistry(boolean includeDefaultEntry) {
mSpringConfigMap = new HashMap<SpringConfig, String>();
if (includeDefaultEntry) {
addSpringConfig(SpringConfig.defaultConfig, "default config");
}
}
/**
* add a SpringConfig to the registry
*
* @param springConfig SpringConfig to add to the registry
* @param configName name to give the SpringConfig in the registry
* @return true if the SpringConfig was added, false if a config with that name is already
* present.
*/
public boolean addSpringConfig(SpringConfig springConfig, String configName) {
if (springConfig == null) {
throw new IllegalArgumentException("springConfig is required");
}
if (configName == null) {
throw new IllegalArgumentException("configName is required");
}
if (mSpringConfigMap.containsKey(springConfig)) {
return false;
}
mSpringConfigMap.put(springConfig, configName);
return true;
}
/**
* remove a specific SpringConfig from the registry
* @param springConfig the of the SpringConfig to remove
* @return true if the SpringConfig was removed, false if it was not present.
*/
public boolean removeSpringConfig(SpringConfig springConfig) {
if (springConfig == null) {
throw new IllegalArgumentException("springConfig is required");
}
return mSpringConfigMap.remove(springConfig) != null;
}
/**
* retrieve all SpringConfig in the registry
* @return a list of all SpringConfig
*/
public Map<SpringConfig, String> getAllSpringConfig() {
return Collections.unmodifiableMap(mSpringConfigMap);
}
/**
* clear all SpringConfig in the registry
*/
public void removeAllSpringConfig() {
mSpringConfigMap.clear();
}
}