class RunRecipeTask extends Task {

  JsonObject merge(JsonObject origObj, JsonObject paramObj) {
    Set<Map.Entry<String, JsonElement>> original = origObj.entrySet();

    for (Map.Entry<String, JsonElement> entry : paramObj.entrySet()) {
      boolean exists = false;
      String pKey = entry.getKey();
      JsonElement pValue = entry.getValue();
      for (Map.Entry<String, JsonElement> o : original) {
        if (o.getKey().compareToIgnoreCase(pKey) == 0) {
          if (o.getValue().isJsonObject() && pValue.isJsonObject()) {
            merge(o.getValue().getAsJsonObject(), pValue.getAsJsonObject());
            exists = true;
          }
        }
      }
      if (exists == false) {
        origObj.add(pKey, pValue);
      }
    }
    return origObj;
  }

  public  RunRecipeTask(MachineRuntime machine, ClusterStats clusterStats, String recipe, String json,
      TaskSubmitter submitter, String cookbookId, String cookbookName, List<KaramelizedCookbook> rookCookbooks);

}