View Javadoc

1   package org.lcsim.detector.converter.compact;
2   
3   import org.jdom.Element;
4   import org.jdom.JDOMException;
5   import org.lcsim.detector.IParameters;
6   import org.lcsim.detector.Parameters;
7   import org.lcsim.detector.ParametersStore;
8   import org.lcsim.detector.converter.XMLConverter;
9   
10  /**
11   * Converts parameters from XML to {@link org.lcsim.detector.IParameters}.
12   * 
13   * Handles the following XML elements.
14   * 
15   * <ul>
16   * <li>intParameter</li>
17   * <li>intArrayParameter</li>
18   * <li>doubleParameter</li>
19   * <li>doubleArrayParameter</li>
20   * <li>stringParameter</li>
21   * <li>stringArrayParameter</li>
22   * </ul>
23   * 
24   * All of these must have an attribute called <tt>name</tt> and valid content.
25   * 
26   * @author Jeremy McCormick
27   * @version $Id: ParametersConverter.java,v 1.2 2010/11/30 00:16:27 jeremy Exp $
28   */
29  
30  public class ParametersConverter implements XMLConverter
31  {
32      public void convert( Element element ) throws JDOMException
33      {
34          if ( element.getAttribute( "name" ) == null )
35          {
36              throw new RuntimeException( "Top element doesn't have a name attribute." );
37          }
38  
39          IParameters param = new Parameters( element.getAttributeValue( "name" ) );
40  
41          for ( Object o : element.getChildren() )
42          {
43              Element e = ( Element ) o;
44              String elementName = e.getName();
45              if ( elementName.contains( "Parameter" ) )
46              {
47                  if ( e.getAttribute( "name" ) == null )
48                  {
49                      System.out.println( "Parameter is missing the name attribute." );
50                  }
51  
52                  String paramName = e.getAttributeValue( "name" );
53                  String value = e.getValue();
54  
55                  if ( value == null )
56                  {
57                      System.out.println( "Parameter <" + paramName + "> is missing a value." );
58                  }
59  
60                  String[] values = value.split( " " );
61  
62                  if ( elementName.equals( "integerParameter" ) )
63                  {
64                      param.addIntegerParameter( paramName, Integer.parseInt( value ) );
65                  }
66                  else if ( elementName.equals( "integerArrayParameter" ) )
67                  {
68                      int[] intValues = new int[ values.length ];
69                      for ( int i = 0; i < values.length; i++ )
70                      {
71                          if ( values[ i ] != null && !values[ i ].equals( "" ) )
72                              intValues[ i ] = Integer.parseInt( values[ i ] );
73                      }
74                      param.addIntegerArrayParameter( paramName, intValues );
75                  }
76                  else if ( elementName.equals( "doubleParameter" ) )
77                  {
78                      param.addDoubleParameter( paramName, Double.parseDouble( value ) );
79                  }
80                  else if ( elementName.equals( "doubleArrayParameter" ) )
81                  {
82                      double[] doubleValues = new double[ values.length ];
83                      for ( int i = 0; i < values.length; i++ )
84                      {
85                          if ( values[ i ] != null && !values[ i ].equals( "" ) )
86                              doubleValues[ i ] = Double.parseDouble( values[ i ] );
87                      }
88                      param.addDoubleArrayParameter( paramName, doubleValues );
89                  }
90                  else if ( elementName.equals( "stringParameter" ) )
91                  {
92                      param.addStringParameter( paramName, value );
93                  }
94                  else if ( elementName.equals( "stringArrayParameter" ) )
95                  {
96                      String[] stringValues = new String[ values.length ];
97                      for ( int i = 0; i < values.length; i++ )
98                      {
99                          if ( values[ i ] != null && !values[ i ].equals( "" ) )
100                             stringValues[ i ] = values[ i ];
101                     };
102                     param.addStringArrayParameter( paramName, stringValues );
103                 }
104                 else if ( elementName.equals( "booleanParameter" ) )
105                 {
106                     param.addBooleanParameter( paramName, Boolean.parseBoolean( value ) );
107                 }
108                 else if ( elementName.equals( "booleanArrayParameter" ) )
109                 {
110                     boolean[] booleanValues = new boolean[ values.length ];
111                     for ( int i = 0; i < values.length; i++ )
112                     {
113                         if ( values[ i ] != null && !values[ i ].equals( "" ) )
114                             booleanValues[ i ] = Boolean.parseBoolean( values[ i ] );
115                     }
116                     param.addBooleanArrayParameter( paramName, booleanValues );
117                 }
118             }
119         }
120 
121         ParametersStore.getInstance().add( param );
122     }
123 }