package org.bouncycastle.util;
import java.math.BigInteger;
import java.security.AccessControlException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
Utility method for accessing system properties.
/**
* Utility method for accessing system properties.
*/
public class Properties
{
private Properties()
{
}
private static final ThreadLocal threadProperties = new ThreadLocal();
Return whether a particular override has been set to true.
Params: - propertyName – the property name for the override.
Returns: true if the property is set to "true", false otherwise.
/**
* Return whether a particular override has been set to true.
*
* @param propertyName the property name for the override.
* @return true if the property is set to "true", false otherwise.
*/
public static boolean isOverrideSet(String propertyName)
{
try
{
String p = fetchProperty(propertyName);
if (p != null)
{
return "true".equals(Strings.toLowerCase(p));
}
return false;
}
catch (AccessControlException e)
{
return false;
}
}
Enable the specified override property for the current thread only.
Params: - propertyName – the property name for the override.
- enable – true if the override should be enabled, false if it should be disabled.
Returns: true if the override was already set, false otherwise.
/**
* Enable the specified override property for the current thread only.
*
* @param propertyName the property name for the override.
* @param enable true if the override should be enabled, false if it should be disabled.
* @return true if the override was already set, false otherwise.
*/
public static boolean setThreadOverride(String propertyName, boolean enable)
{
boolean isSet = isOverrideSet(propertyName);
Map localProps = (Map)threadProperties.get();
if (localProps == null)
{
localProps = new HashMap();
}
localProps.put(propertyName, enable ? "true" : "false");
threadProperties.set(localProps);
return isSet;
}
Enable the specified override property in the current thread only.
Params: - propertyName – the property name for the override.
Returns: true if the override set true in thread local, false otherwise.
/**
* Enable the specified override property in the current thread only.
*
* @param propertyName the property name for the override.
* @return true if the override set true in thread local, false otherwise.
*/
public static boolean removeThreadOverride(String propertyName)
{
boolean isSet = isOverrideSet(propertyName);
Map localProps = (Map)threadProperties.get();
if (localProps == null)
{
return false;
}
localProps.remove(propertyName);
if (localProps.isEmpty())
{
threadProperties.remove();
}
else
{
threadProperties.set(localProps);
}
return isSet;
}
public static BigInteger asBigInteger(String propertyName)
{
String p = fetchProperty(propertyName);
if (p != null)
{
return new BigInteger(p);
}
return null;
}
public static Set<String> asKeySet(String propertyName)
{
Set<String> set = new HashSet<String>();
String p = fetchProperty(propertyName);
if (p != null)
{
StringTokenizer sTok = new StringTokenizer(p, ",");
while (sTok.hasMoreElements())
{
set.add(Strings.toLowerCase(sTok.nextToken()).trim());
}
}
return Collections.unmodifiableSet(set);
}
private static String fetchProperty(final String propertyName)
{
return (String)AccessController.doPrivileged(new PrivilegedAction()
{
public Object run()
{
Map localProps = (Map)threadProperties.get();
if (localProps != null)
{
return localProps.get(propertyName);
}
return System.getProperty(propertyName);
}
});
}
}