<#3303 [flytekit-java] Remove duplication of workf...
# flyte-github
a
#3303 [flytekit-java] Remove duplication of workflow inputs and outputs Issue created by narape After #3260 and #3251 were done, currently, flytekit-java users need to define outputs and inputs twice through SdkWorkflow<InputT, OutputT> and in builder.inputOf() and builder.output() which forces users to specify duplicate information which is error prone. This issue is for removing the ability to specify inputs/outputs through the builder. Before
Copy code
@AutoService(SdkWorkflow.class)
public class WelcomeWorkflow extends SdkWorkflow<WelcomeWorkflow.Input, WelcomeWorkflow.Output> {

  @AutoValue
  public abstract static class Input {
    public abstract SdkBindingData<String> name();
    public static WelcomeWorkflow.Input create(SdkBindingData<String> name) {
      return new AutoValue_WelcomeWorkflow_Input(name);
    }
  }
  
  @AutoValue
  public abstract static class Output {
    public abstract SdkBindingData<String> greeting();
    public static WelcomeWorkflow.Output create(SdkBindingData<String> greeting) {
      return new AutoValue_WelcomeWorkflow_Output(name);
    }
  }
  
  public WelcomeWorkflow() {
    super(
        JacksonSdkType.of(WelcomeWorkflow.Input.class),
        JacksonSdkType.of(WelcomeWorkflow.Output.class));
  }

  @Override
  public void expand(SdkWorkflowBuilder builder) {
    SdkBindingData<String> name = builder.inputOfString("name", "Name to be greeted");

    SdkBindingData<String> greeting =
        builder
            .apply("greet", new GreetTask(), GreetTask.Input.create(name))
            .getOutputs()
            .greeting();

    builder.output("greeting", greeting, "Welcome message");
  }
}
After
Copy code
@AutoService(SdkWorkflow.class)
public class WelcomeWorkflow extends SdkWorkflow<WelcomeWorkflow.Input, WelcomeWorkflow.Output> {

  @AutoValue
  public abstract static class Input {
    @Description("Name to be greeted")
    public abstract SdkBindingData<String> name();
    public static WelcomeWorkflow.Input create(SdkBindingData<String> name) {
      return new AutoValue_WelcomeWorkflow_Input(name);
    }
  }
  
  @AutoValue
  public abstract static class Output {
    @Description("Welcome message")
    public abstract SdkBindingData<String> greeting();
    public static WelcomeWorkflow.Output create(SdkBindingData<String> greeting) {
      return new AutoValue_WelcomeWorkflow_Output(name);
    }
  }
  
  public WelcomeWorkflow() {
    super(
        JacksonSdkType.of(WelcomeWorkflow.Input.class),
        JacksonSdkType.of(WelcomeWorkflow.Output.class));
  }

  @Override
  public Output expand(SdkWorkflowBuilder builder, Input input) {
    SdkBindingData<String> greeting =
        builder
            .apply("greet", new GreetTask(), GreetTask.Input.create(input.name()))
            .getOutputs()
            .greeting();

   return Output.create(greeting);
  }
}
Also there is the need to add descriptions to autovalue/case classes as the builder methods were the only place to set that up flyteorg/flyte