View Javadoc
1   package org.opentrafficsim.road;
2   
3   import java.lang.reflect.Field;
4   import java.util.Set;
5   
6   import org.djutils.reflection.ClassUtil;
7   import org.opentrafficsim.base.parameters.ParameterException;
8   import org.opentrafficsim.base.parameters.ParameterSet;
9   import org.opentrafficsim.base.parameters.ParameterTypeBoolean;
10  import org.opentrafficsim.base.parameters.ParameterTypeDouble;
11  import org.opentrafficsim.base.parameters.ParameterTypeInteger;
12  import org.opentrafficsim.base.parameters.ParameterTypeNumeric;
13  import org.opentrafficsim.base.parameters.ParameterTypes;
14  import org.opentrafficsim.road.gtu.lane.tactical.following.AbstractIdm;
15  import org.opentrafficsim.road.gtu.lane.tactical.util.lmrs.LmrsParameters;
16  
17  /**
18   * Creator of set of parameters with default values.
19   * <p>
20   * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
21   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
22   * </p>
23   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
24   */
25  public final class DefaultTestParameters
26  {
27  
28      /**
29       * Do not create instance.
30       */
31      private DefaultTestParameters()
32      {
33          // Do not instantiate
34      }
35  
36      /**
37       * Returns a default set of parameters.
38       * @return Default set of parameters.
39       */
40      @SuppressWarnings("unchecked")
41      public static ParameterSet create()
42      {
43          ParameterSet params = new ParameterSet();
44  
45          // set all default values using reflection
46          for (Class<?> clazz : new Class[] {ParameterTypes.class, LmrsParameters.class, AbstractIdm.class})
47          {
48              Set<Field> fields = ClassUtil.getAllFields(clazz);
49              try
50              {
51                  for (Field field : fields)
52                  {
53                      try
54                      {
55                          if (ParameterTypeNumeric.class.isAssignableFrom(field.getType()))
56                          {
57                              field.setAccessible(true);
58                              @SuppressWarnings("rawtypes")
59                              ParameterTypeNumeric p = (ParameterTypeNumeric) field.get(ParameterTypes.class);
60                              params.setParameter(p, p.getDefaultValue());
61                          }
62                          else if (ParameterTypeBoolean.class.equals(field.getType()))
63                          {
64                              field.setAccessible(true);
65                              ParameterTypeBoolean p = (ParameterTypeBoolean) field.get(ParameterTypes.class);
66                              params.setParameter(p, p.getDefaultValue());
67                          }
68                          else if (ParameterTypeDouble.class.equals(field.getType()))
69                          {
70                              field.setAccessible(true);
71                              ParameterTypeDouble p = (ParameterTypeDouble) field.get(ParameterTypes.class);
72                              params.setParameter(p, p.getDefaultValue());
73                          }
74                          else if (ParameterTypeInteger.class.equals(field.getType()))
75                          {
76                              field.setAccessible(true);
77                              ParameterTypeInteger p = (ParameterTypeInteger) field.get(ParameterTypes.class);
78                              params.setParameter(p, p.getDefaultValue());
79                          }
80                          // FIXME: add another else to catch any unanticipated cases?
81                      }
82                      catch (ParameterException pe)
83                      {
84                          // FIXME: Explain why this exception can/should be ignored.
85                          // do not set parameter without default value
86                      }
87                  }
88              }
89              catch (IllegalArgumentException iare)
90              {
91                  iare.printStackTrace();
92              }
93              catch (IllegalAccessException iace)
94              {
95                  iace.printStackTrace();
96              }
97          }
98          return params;
99      }
100 
101 }