/*
* Copyright (C) 2013 Intel Corporation
* All rights reserved.
*/
package com.intel.mtwilson.setup;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.apache.commons.configuration.Configuration;
/**
*
* @author jbuhacoff
*/
public class PropertyHidingConfiguration implements Configuration {
private Configuration base;
private HashSet<String> hidden = new HashSet<String>();
private HashSet<String> nulled = new HashSet<String>();
private HashMap<String,String> replaced = new HashMap<String,String>();
public PropertyHidingConfiguration(Configuration base) {
this.base = base;
}
public void hideProperty(String key) {
hidden.add(key);
if(nulled.contains(key)) { nulled.remove(key); }
if(replaced.containsKey(key)) { replaced.remove(key); }
}
public boolean isHidden(String key) {
return hidden.contains(key);
}
public void nullProperty(String key) {
nulled.add(key);
if(hidden.contains(key)) { hidden.remove(key); }
if(replaced.containsKey(key)) { replaced.remove(key); }
}
public boolean isNulled(String key) {
return nulled.contains(key);
}
public void replaceProperty(String key, String value) {
replaced.put(key, value);
if(hidden.contains(key)) { hidden.remove(key); }
if(nulled.contains(key)) { nulled.remove(key); }
}
public boolean isReplaced(String key) {
return replaced.containsKey(key);
}
@Override
public Configuration subset(String prefix) {
return base.subset(prefix);
}
@Override
public boolean isEmpty() {
return base.isEmpty();
}
@Override
public boolean containsKey(String key) {
return !isHidden(key) && base.containsKey(key);
}
@Override
public void addProperty(String key, Object value) {
if(isHidden(key)) { return; }
if(isNulled(key)) { return; }
base.addProperty(key, value);
}
@Override
public void setProperty(String key, Object value) {
if(isHidden(key)) { return; }
if(isNulled(key)) { return; }
base.setProperty(key, value);
}
@Override
public void clearProperty(String key) {
if(isHidden(key)) { return; }
if(isNulled(key)) { return; }
base.clearProperty(key);
}
@Override
public void clear() {
base.clear();
}
@Override
public Object getProperty(String key) {
if(isHidden(key)) { return null; }
if(isNulled(key)) { return null; }
return base.getProperty(key);
}
@Override
public Iterator<String> getKeys(String prefix) {
return base.getKeys(prefix); // will include hidden properties but they won't be accessible
}
@Override
public Iterator<String> getKeys() {
return base.getKeys(); // will include hidden properties but they won't be accessible
}
@Override
public Properties getProperties(String key) {
if(isHidden(key)) { return null; }
if(isNulled(key)) { return null; }
return base.getProperties(key);
}
@Override
public boolean getBoolean(String key) {
if(isHidden(key)) { return false; }
if(isNulled(key)) { return false; }
return base.getBoolean(key);
}
@Override
public boolean getBoolean(String key, boolean defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return false; }
return base.getBoolean(key, defaultValue);
}
@Override
public Boolean getBoolean(String key, Boolean defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getBoolean(key, defaultValue);
}
@Override
public byte getByte(String key) {
if (isHidden(key)) {
return 0;
}
if(isNulled(key)) { return 0; }
return base.getByte(key);
}
@Override
public byte getByte(String key, byte defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return 0; }
return base.getByte(key, defaultValue);
}
@Override
public Byte getByte(String key, Byte defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getByte(key, defaultValue);
}
@Override
public double getDouble(String key) {
if (isHidden(key)) {
return 0;
}
if(isNulled(key)) { return 0; }
return base.getDouble(key);
}
@Override
public double getDouble(String key, double defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return 0; }
return base.getDouble(key, defaultValue);
}
@Override
public Double getDouble(String key, Double defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getDouble(key, defaultValue);
}
@Override
public float getFloat(String key) {
if (isHidden(key)) {
return 0;
}
if(isNulled(key)) { return 0; }
return base.getFloat(key);
}
@Override
public float getFloat(String key, float defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return 0; }
return base.getFloat(key, defaultValue);
}
@Override
public Float getFloat(String key, Float defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getFloat(key, defaultValue);
}
@Override
public int getInt(String key) {
if (isHidden(key)) {
return 0;
}
if(isNulled(key)) { return 0; }
return base.getInt(key);
}
@Override
public int getInt(String key, int defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return 0; }
return base.getInt(key, defaultValue);
}
@Override
public Integer getInteger(String key, Integer defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getInteger(key, defaultValue);
}
@Override
public long getLong(String key) {
if (isHidden(key)) {
return 0;
}
if(isNulled(key)) { return 0; }
return base.getLong(key);
}
@Override
public long getLong(String key, long defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return 0; }
return base.getLong(key, defaultValue);
}
@Override
public Long getLong(String key, Long defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getLong(key, defaultValue);
}
@Override
public short getShort(String key) {
if (isHidden(key)) {
return 0;
}
if(isNulled(key)) { return 0; }
return base.getShort(key);
}
@Override
public short getShort(String key, short defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return 0; }
return base.getShort(key, defaultValue);
}
@Override
public Short getShort(String key, Short defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getShort(key, defaultValue);
}
@Override
public BigDecimal getBigDecimal(String key) {
if (isHidden(key)) {
return null;
}
if(isNulled(key)) { return null; }
return base.getBigDecimal(key);
}
@Override
public BigDecimal getBigDecimal(String key, BigDecimal defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getBigDecimal(key, defaultValue);
}
@Override
public BigInteger getBigInteger(String key) {
if (isHidden(key)) {
return null;
}
if(isNulled(key)) { return null; }
return base.getBigInteger(key);
}
@Override
public BigInteger getBigInteger(String key, BigInteger defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getBigInteger(key, defaultValue);
}
@Override
public String getString(String key) {
if (isHidden(key)) {
return null;
}
if(isNulled(key)) { return null; }
if(isReplaced(key)) { return replaced.get(key); }
return base.getString(key);
}
@Override
public String getString(String key, String defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
if(isReplaced(key)) { return replaced.get(key); }
return base.getString(key, defaultValue);
}
@Override
public String[] getStringArray(String key) {
if (isHidden(key)) {
return null;
}
if(isNulled(key)) { return null; }
return base.getStringArray(key);
}
@Override
public List<Object> getList(String key) {
if (isHidden(key)) {
return null;
}
if(isNulled(key)) { return null; }
return base.getList(key);
}
@Override
public List<Object> getList(String key, List<Object> defaultValue) {
if (isHidden(key)) {
return defaultValue;
}
if(isNulled(key)) { return null; }
return base.getList(key, defaultValue);
}
}