@Override
 public NodeList getNodesList(VirtualChannel slaveChannel)
     throws IOException, InterruptedException {
   String nodeListPathRes = Resolver.doResolve(nodeListPath);
   FilePath fp = new FilePath(slaveChannel, nodeListPathRes);
   String nodes = Resolver.doResolve(fp.readToString());
   return ParseUtils.parseNodeList(nodes);
 }
  @Override
  public String parse(State state, String filename) {
    try {
      FilePath file = new FilePath(state.getWorkspace(), filename);
      logger.fine("FILE: " + file);
      return file.readToString().trim();
    } catch (Exception e) {

      logger.fine("E: " + e.getMessage());
      return "?";
    }
  }
  private static String loadLastBuildNr(XTriggerLog xTriggerLog, FilePath lastBuildNrFile) {
    String lastBuildNr = null;

    try {
      if (lastBuildNrFile.exists()) {
        lastBuildNr = lastBuildNrFile.readToString();

        xTriggerLog.info(String.format("Loaded buildNr: %s", lastBuildNr));
      }
    } catch (IOException e) {
      logException(xTriggerLog, e);
    } catch (InterruptedException e) {
      logException(xTriggerLog, e);
    }

    return lastBuildNr;
  }
 @Override
 public String readFileInWorkspace(String relLocation) throws IOException {
   FilePath filePath = locateValidFileInWorkspace(relLocation);
   return filePath.readToString();
 }