@Inject
public DefaultCompleters(Injector injector) {
this.completers = ImmutableMap.<String, Completer>builder()
.put(ArgumentName.APP.getName(), injector.getInstance(AppIdCompleter.class))
.put(ArgumentName.ARTIFACT_NAME.getName(), injector.getInstance(ArtifactNameCompleter.class))
.put(ArgumentName.DATASET_MODULE.getName(), injector.getInstance(DatasetModuleNameCompleter.class))
.put(ArgumentName.DATASET.getName(), injector.getInstance(DatasetNameCompleter.class))
.put(ArgumentName.DATASET_TYPE.getName(), injector.getInstance(DatasetTypeNameCompleter.class))
.put(ArgumentName.STREAM.getName(), injector.getInstance(StreamIdCompleter.class))
.put(ArgumentName.LOCAL_FILE_PATH.getName(), new FileNameCompleter())
.put(ArgumentName.APP_JAR_FILE.getName(), new FileNameCompleter())
.put(ArgumentName.DATASET_MODULE_JAR_FILE.getName(), new FileNameCompleter())
.put(ArgumentName.ARTIFACT_CONFIG_FILE.getName(), new FileNameCompleter())
.put(ArgumentName.APP_CONFIG_FILE.getName(), new FileNameCompleter())
.put(ArgumentName.HTTP_METHOD.getName(), new EndpointCompleter())
.put(ArgumentName.ENDPOINT.getName(), new EndpointCompleter())
.put(ArgumentName.RUN_STATUS.getName(), new EnumCompleter(ProgramRunStatus.class))
.put(ArgumentName.NAMESPACE_NAME.getName(), injector.getInstance(NamespaceNameCompleter.class))
.put(ArgumentName.COMMAND_CATEGORY.getName(), new EnumCompleter(CommandCategory.class))
.put(ArgumentName.TABLE_RENDERER.getName(), new EnumCompleter(RenderAsCommand.Type.class))
.put(ArgumentName.WORKFLOW_TOKEN_SCOPE.getName(), new EnumCompleter(WorkflowToken.Scope.class))
.put(ArgumentName.TARGET_TYPE.getName(), new EnumCompleter(EntityTypeSimpleName.class))
.put(ArgumentName.METADATA_SCOPE.getName(), new EnumCompleter(MetadataScope.class))
.put(ArgumentName.FORMAT.getName(), new StringsCompleter(Formats.ALL))
.put(ArgumentName.PRINCIPAL_TYPE.getName(), new EnumCompleter(Principal.PrincipalType.class))
.putAll(generateProgramIdCompleters(injector)).build();
}