@Override
  public String createTask(Graph<Operation, EdgeType> graph, String hostname) {
    logger.info("create task script for host:" + hostname);
    List<ByteSource> byteSources = Lists.newArrayList();
    TreeSet<Operation> imports =
        Sets.newTreeSet(
            new Comparator<Operation>() {
              @Override
              public int compare(Operation o1, Operation o2) {
                return o1.getName().compareTo(o2.getName());
              }
            });
    StringBuilder builder = new StringBuilder();
    String changeLine = System.getProperty("line.separator");

    builder.append(changeLine + "node '" + hostname + "'{" + changeLine);
    String definedContent = opBuilder.createDefineContent(graph, imports, null);
    builder.append(definedContent);
    builder.append(changeLine + "}");

    logger.debug(builder.toString());

    imports.addAll(dependedOperation(imports));
    try {
      for (Operation operation : imports) {
        if (operation.getDefineMd5() != null) {
          byteSources.add(fileService.findFile(operation.getDefineMd5()));
        }
      }
      byteSources.add(ByteSource.wrap(builder.toString().getBytes()));
      String md5Key = fileService.saveFile(ByteSource.concat(byteSources));
      logger.info("the md5key of this task script is" + md5Key);
      logger.info("create task script successful");
      return md5Key;
    } catch (IOException e) {
      logger.error("store task script file failed");
      e.printStackTrace();
    }
    return null;
  }
 @SuppressWarnings({"rawtypes", "unchecked"})
 @Override
 public Operation createOperation(
     Graph<Node, EdgeType> graph, String operationName, Map extractParams) {
   return opBuilder.createNewOperation(graph, operationName, extractParams);
 }
 public String createClassDefinefile(
     Node node, String defineName, Map<String, ParamValue> extractParams) {
   return opBuilder.createClassDefineFileByNode(node, defineName, extractParams).get();
 }