private List<String> getMissingTasks(WorkflowDef workflowDef) {
        List<String> missing = new ArrayList<>();
        workflowDef.collectTasks().stream()
                .filter(workflowTask -> workflowTask.getType().equals(TaskType.TASK_TYPE_SIMPLE))
                .map(WorkflowTask::getName)
                .distinct()
                .parallel()
                .forEach(
                        taskName -> {
                            try {
                                TaskDef taskDef =
                                        workflowExecutor.getMetadataClient().getTaskDef(taskName);
                            } catch (ConductorClientException cce) {
                                if (cce.getStatus() == 404) {
                                    missing.add(taskName);
                                } else {
                                    throw cce;
                                }
                            }
                        });
        return missing;
    }
Generate ConductorWorkflow based on the workflow metadata definition

@param def
@return
java-sdk/src/main/java/com/netflix/conductor/sdk/workflow/def/ConductorWorkflow.java