public static GsonBuilder addTypeAdapters(GsonBuilder builder) {
return builder
.registerTypeAdapter(Schema.class, new SchemaTypeAdapter())
.registerTypeAdapter(ApplicationSpecification.class, new ApplicationSpecificationCodec())
.registerTypeAdapter(FlowSpecification.class, new FlowSpecificationCodec())
.registerTypeAdapter(FlowletSpecification.class, new FlowletSpecificationCodec())
.registerTypeAdapter(MapReduceSpecification.class, new MapReduceSpecificationCodec())
.registerTypeAdapter(SparkSpecification.class, new SparkSpecificationCodec())
.registerTypeAdapter(WorkflowSpecification.class, new WorkflowSpecificationCodec())
.registerTypeAdapter(WorkflowNode.class, new WorkflowNodeCodec())
.registerTypeAdapter(CustomActionSpecification.class, new CustomActionSpecificationCodec())
.registerTypeAdapter(ConditionSpecification.class, new ConditionSpecificationCodec())
.registerTypeAdapter(ServiceSpecification.class, new ServiceSpecificationCodec())
.registerTypeAdapter(WorkerSpecification.class, new WorkerSpecificationCodec())
.registerTypeAdapter(BasicThrowable.class, new BasicThrowableCodec())
.registerTypeAdapter(Trigger.class, new TriggerCodec())
.registerTypeAdapter(SatisfiableTrigger.class, new TriggerCodec())
.registerTypeAdapter(Constraint.class, new ConstraintCodec())
.registerTypeAdapterFactory(new AppSpecTypeAdapterFactory());
}