@Override
public JsonElement serialize(ApplicationSpecification src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jsonObj = new JsonObject();
jsonObj.add("name", new JsonPrimitive(src.getName()));
jsonObj.add("appVersion", new JsonPrimitive(src.getAppVersion()));
if (src.getConfiguration() != null) {
jsonObj.add("configuration", new JsonPrimitive(src.getConfiguration()));
}
jsonObj.add("artifactId", context.serialize(src.getArtifactId()));
jsonObj.add("description", new JsonPrimitive(src.getDescription()));
jsonObj.add("streams", serializeMap(src.getStreams(), context, StreamSpecification.class));
jsonObj.add("datasetModules", serializeMap(src.getDatasetModules(), context, String.class));
jsonObj.add("datasetInstances", serializeMap(src.getDatasets(), context, DatasetCreationSpec.class));
jsonObj.add("flows", serializeMap(src.getFlows(), context, FlowSpecification.class));
jsonObj.add("mapReduces", serializeMap(src.getMapReduce(), context, MapReduceSpecification.class));
jsonObj.add("sparks", serializeMap(src.getSpark(), context, SparkSpecification.class));
jsonObj.add("workflows", serializeMap(src.getWorkflows(), context, WorkflowSpecification.class));
jsonObj.add("services", serializeMap(src.getServices(), context, ServiceSpecification.class));
jsonObj.add("programSchedules", serializeMap(src.getProgramSchedules(), context, ScheduleCreationSpec.class));
jsonObj.add("workers", serializeMap(src.getWorkers(), context, WorkerSpecification.class));
jsonObj.add("plugins", serializeMap(src.getPlugins(), context, Plugin.class));
return jsonObj;
}