View Javadoc

1   package org.rundeck.api.parser;
2   
3   import org.apache.commons.lang.StringUtils;
4   import org.dom4j.Node;
5   import org.rundeck.api.domain.RundeckExecution;
6   import org.rundeck.api.domain.RundeckOutput;
7   import org.rundeck.api.domain.RundeckOutputEntry;
8   
9   import java.util.List;
10  
11  
12  public class OutputParser implements XmlNodeParser<RundeckOutput> {
13  
14  
15      private String xpath;
16      XmlNodeParser<RundeckOutputEntry> parser;
17  
18      public OutputParser(String xpath, XmlNodeParser<RundeckOutputEntry> parser) {
19          this.xpath = xpath;
20          if (null != parser) {
21              this.parser = parser;
22          }
23      }
24  
25      @Override
26      public RundeckOutput parseXmlNode(Node node) {
27          Node entryNode = xpath != null ? node.selectSingleNode(xpath) : node;
28  
29          RundeckOutput output = new RundeckOutput();
30  
31          //output.setMessage(StringUtils.trimToNull(entryNode.valueOf("message")));
32          //output.setError(StringUtils.trimToNull(entryNode.valueOf("error")));
33  
34  
35          try {
36              output.setExecutionId(Long.valueOf(entryNode.valueOf("id")));
37          } catch (NumberFormatException e) {
38              output.setExecutionId(null);
39          }
40  
41          try {
42              output.setOffset(Integer.valueOf(entryNode.valueOf("offset")));
43          } catch (NumberFormatException e) {
44              output.setOffset(-1);
45          }
46  
47          output.setCompleted(Boolean.valueOf(entryNode.valueOf("completed")));
48          output.setExecCompleted(Boolean.valueOf(entryNode.valueOf("execCompleted")));
49          output.setHasFailedNodes(Boolean.valueOf(entryNode.valueOf("hasFailedNodes")));
50  
51          try {
52              output.setStatus(RundeckExecution.ExecutionStatus
53                                   .valueOf(StringUtils.upperCase(entryNode.valueOf("execState"))));
54          } catch (IllegalArgumentException e) {
55              output.setStatus(null);
56          }
57  
58          try {
59              output.setLastModified(Long.valueOf(entryNode.valueOf("lastModified")));
60          } catch (NumberFormatException e) {
61              output.setLastModified(null);
62          }
63  
64          try {
65              output.setExecDuration(Long.valueOf(entryNode.valueOf("execDuration")));
66          } catch (NumberFormatException e) {
67              output.setExecDuration(null);
68          }
69  
70          try {
71              output.setPercentLoaded(Float.valueOf(entryNode.valueOf("percentLoaded")));
72          } catch (NumberFormatException e) {
73              output.setPercentLoaded(null);
74          }
75  
76          try {
77              output.setTotalSize(Integer.valueOf(entryNode.valueOf("totalSize")));
78          } catch (NumberFormatException e) {
79              output.setTotalSize(-1);
80          }
81  
82          Node entriesListNode = entryNode.selectSingleNode("entries");
83  
84          if (entriesListNode != null) {
85              @SuppressWarnings("unchecked")
86              List<Node> entries = entriesListNode.selectNodes("entry");
87  
88              for (Node logEntryNode : entries) {
89                  RundeckOutputEntry outputEntry = parser.parseXmlNode(logEntryNode);
90                  output.addLogEntry(outputEntry);
91              }
92          }
93          return output;
94      }
95  
96  }