1   package org.opentrafficsim.xml.bindings;
2   
3   import javax.xml.bind.annotation.adapters.XmlAdapter;
4   
5   import org.djutils.logger.CategoryLogger;
6   import org.opentrafficsim.xml.bindings.types.DrivingDirectionType;
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  public class DrivingDirectionAdapter extends XmlAdapter<String, DrivingDirectionType>
17  {
18      
19      @Override
20      public DrivingDirectionType unmarshal(final String field) throws IllegalArgumentException
21      {
22          try
23          {
24              String clean = field.replaceAll("\\s", "");
25              if (clean.equals("FORWARD"))
26              {
27                  return DrivingDirectionType.DIR_PLUS;
28              }
29              if (clean.equals("BACKWARD"))
30              {
31                  return DrivingDirectionType.DIR_MINUS;
32              }
33              if (clean.equals("BOTH"))
34              {
35                  return DrivingDirectionType.DIR_BOTH;
36              }
37              if (clean.equals("NONE"))
38              {
39                  return DrivingDirectionType.DIR_NONE;
40              }
41          }
42          catch (Exception exception)
43          {
44              CategoryLogger.always().error(exception, "Problem parsing DrivingDirection '" + field + "'");
45              throw new IllegalArgumentException("Error parsing DrivingDirection " + field, exception);
46          }
47          CategoryLogger.always().error("Problem parsing DrivingDirextion '" + field + "'");
48          throw new IllegalArgumentException("Error parsing DrivingDirection " + field);
49      }
50  
51      
52      @Override
53      public String marshal(final DrivingDirectionType drivingDirection) throws IllegalArgumentException
54      {
55          if (drivingDirection.equals(DrivingDirectionType.DIR_PLUS))
56              return "FORWARD";
57          if (drivingDirection.equals(DrivingDirectionType.DIR_MINUS))
58              return "BACKWARD";
59          if (drivingDirection.equals(DrivingDirectionType.DIR_BOTH))
60              return "BOTH";
61          return "NONE";
62      }
63  
64  }