public MockAssignableWorkflowScheme(AssignableWorkflowScheme scheme) { super(scheme); this.name = scheme.getName(); this.description = scheme.getDescription(); this.defaultScheme = scheme.isDefault(); }
@Override public ServiceOutcome<DraftWorkflowScheme> getDraftWorkflowScheme(ApplicationUser user, @Nonnull AssignableWorkflowScheme parentScheme) { Assertions.notNull("scheme", parentScheme); return ok(!parentScheme.isDefault() ? workflowSchemeManager.getDraftForParent(parentScheme) : null); }
@Override public boolean hasDraft(@Nonnull AssignableWorkflowScheme scheme) { notNull("scheme", scheme); return !scheme.isDefault() && scheme.getId() != null && draftWorkflowSchemeStore.hasDraftForParent(scheme.getId()); }
@Nonnull @Override public List<Project> getProjectsUsing(@Nonnull AssignableWorkflowScheme workflowScheme) { Assertions.notNull("workflowScheme", workflowScheme); ImmutableList.Builder<Project> projects = new ImmutableList.Builder<Project>(); for (Project project : projectManager.getProjectObjects()) { final GenericValue schemeForProject = getSchemeForProject(project); if (schemeForProject == null) { if (workflowScheme.isDefault()) { projects.add(project); } } else { final Long id = schemeForProject.getLong("id"); if (id != null && id.equals(workflowScheme.getId())) { projects.add(project); } } } return projects.build(); }
@Override public DraftWorkflowScheme getDraftForParent(@Nonnull AssignableWorkflowScheme scheme) { notNull("scheme", scheme); if (scheme.isDefault() || scheme.getId() == null) { return null; } else { return getDraftForParent(scheme.getId()); } }
@Override @Nonnull public DraftWorkflowScheme createDraftOf(ApplicationUser creator, @Nonnull AssignableWorkflowScheme workflowScheme) { notNull("workflowScheme", workflowScheme); Assertions.not("workflowScheme.default", workflowScheme.isDefault()); notNull("workflowScheme.id", workflowScheme.getId()); Assertions.not("scheme already has draft.", hasDraft(workflowScheme)); final DraftWorkflowSchemeStore.DraftState.Builder builder = draftWorkflowSchemeStore.builder(workflowScheme.getId()); builder.setMappings(workflowScheme.getMappings()); builder.setLastModifiedUser(creator != null ? creator.getKey() : null); final DraftWorkflowSchemeStore.DraftState state = draftWorkflowSchemeStore.create(builder.build()); return toWorkflowScheme(state); }
@Override public AssignableWorkflowScheme cleanUpSchemeDraft(Project project, ApplicationUser user) { AssignableWorkflowScheme workflowScheme = getWorkflowSchemeObj(project); if (workflowScheme.isDefault()) { return null; } List<Project> projectsUsing = getProjectsUsing(workflowScheme); if (projectsUsing.size() > 1) { return null; } DraftWorkflowScheme draft = getDraftForParent(workflowScheme); if (draft == null) { return null; } AssignableWorkflowScheme.Builder copyOfDraftBuilder = new AssignableWorkflowSchemeBuilder() .setName(getNameForCopy(draft)) .setDescription(getDescriptionForCopy(user, workflowScheme)) .setMappings(draft.getMappings()); AssignableWorkflowScheme scheme = createScheme(copyOfDraftBuilder.build()); deleteWorkflowScheme(draft); return scheme; }