package org.opentrafficsim.road;
import java.lang.reflect.Field;
import java.util.Set;
import org.djutils.reflection.ClassUtil;
import org.opentrafficsim.base.parameters.ParameterException;
import org.opentrafficsim.base.parameters.ParameterSet;
import org.opentrafficsim.base.parameters.ParameterTypeBoolean;
import org.opentrafficsim.base.parameters.ParameterTypeDouble;
import org.opentrafficsim.base.parameters.ParameterTypeInteger;
import org.opentrafficsim.base.parameters.ParameterTypeNumeric;
import org.opentrafficsim.base.parameters.ParameterTypes;
/**
* Creator of set of parameters with default values.
*
* Copyright (c) 2013-2021 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See OpenTrafficSim License.
*
* @version $Revision$, $LastChangedDate$, by $Author$, initial version Apr 15, 2016
* @author Wouter Schakel
*/
public final class DefaultTestParameters
{
/**
* Do not create instance.
*/
private DefaultTestParameters()
{
// Do not instantiate
}
/**
* Returns a default set of parameters.
* @return Default set of parameters.
*/
@SuppressWarnings("unchecked")
public static ParameterSet create()
{
ParameterSet params = new ParameterSet();
// set all default values using reflection
Set fields = ClassUtil.getAllFields(ParameterTypes.class);
try
{
for (Field field : fields)
{
try
{
if (ParameterTypeNumeric.class.isAssignableFrom(field.getType()))
{
field.setAccessible(true);
@SuppressWarnings("rawtypes")
ParameterTypeNumeric p = (ParameterTypeNumeric) field.get(ParameterTypes.class);
params.setParameter(p, p.getDefaultValue());
}
else if (ParameterTypeBoolean.class.equals(field.getType()))
{
field.setAccessible(true);
ParameterTypeBoolean p = (ParameterTypeBoolean) field.get(ParameterTypes.class);
params.setParameter(p, p.getDefaultValue());
}
else if (ParameterTypeDouble.class.equals(field.getType()))
{
field.setAccessible(true);
ParameterTypeDouble p = (ParameterTypeDouble) field.get(ParameterTypes.class);
params.setParameter(p, p.getDefaultValue());
}
else if (ParameterTypeInteger.class.equals(field.getType()))
{
field.setAccessible(true);
ParameterTypeInteger p = (ParameterTypeInteger) field.get(ParameterTypes.class);
params.setParameter(p, p.getDefaultValue());
}
// FIXME: add another else to catch any unanticipated cases?
}
catch (ParameterException pe)
{
// FIXME: Explain why this exception can/should be ignored.
// do not set parameter without default value
}
}
}
catch (IllegalArgumentException iare)
{
iare.printStackTrace();
}
catch (IllegalAccessException iace)
{
iace.printStackTrace();
}
return params;
}
}