@Override public void replaceSchemeWithDraft(DraftWorkflowScheme draft) { AssignableWorkflowScheme parentScheme = getParentForDraft(draft.getId()) .builder() .setMappings(draft.getMappings()) .build(); updateWorkflowScheme(parentScheme); deleteWorkflowScheme(draft); }
@Override public DraftWorkflowScheme updateDraftWorkflowScheme(final ApplicationUser user, @Nonnull final DraftWorkflowScheme scheme) { notNull("scheme", scheme); notNull("scheme.id", scheme.getId()); // We lock the parent scheme in case of drafts final Lock lock = getLock(scheme.getParentScheme().getId(), UPDATE_DRAFT_WORKFLOW_SCHEME); return ManagedLocks.manage(lock).withLock(new com.atlassian.util.concurrent.Supplier<DraftWorkflowScheme>() { @Override public DraftWorkflowScheme get() { WorkflowSchemeMigrationTaskAccessor taskAccessor = getTaskAccessor(); if (taskAccessor.getActiveByProjects(scheme, true) != null) { throw new SchemeIsBeingMigratedException(); } DraftWorkflowSchemeStore.DraftState savedState = draftWorkflowSchemeStore.get(scheme.getId()); notNull(format("scheme with id %d does not exist.", scheme.getId()), savedState); DraftWorkflowSchemeStore.DraftState.Builder builder = savedState.builder(); builder.setMappings(scheme.getMappings()); builder.setLastModifiedUser(user == null ? null : user.getKey()); return toWorkflowScheme(draftWorkflowSchemeStore.update(builder.build())); } }); }
@Override public ServiceOutcome<DraftWorkflowScheme> updateWorkflowScheme(final ApplicationUser user, @Nonnull DraftWorkflowScheme scheme) { Assertions.notNull("scheme", scheme); ServiceOutcome<DraftWorkflowScheme> outcome = checkEditPermission(user); if (!outcome.isValid()) { return outcome; } outcome = getDraftSchemeNoPermissionCheck(user, scheme.getId()); if (!outcome.isValid()) { return outcome; } outcome = validateMappings(user, scheme); if (!outcome.isValid()) { return outcome; } try { return ok(workflowSchemeManager.updateDraftWorkflowScheme(user, scheme)); } catch (SchemeIsBeingMigratedException e) { return getSchemeIsBeingMigratedError(user); } }
public DraftState addStateForScheme(DraftWorkflowScheme scheme) { return addState(new MockDraftWorkflowSchemeState.Builder(scheme.getParentScheme().getId()) .setId(scheme.getId()) .setMappings(scheme.getMappings()) .setLastModifiedDate(scheme.getLastModifiedDate()).build()); }
private void cleanUpSchemes(AssignableWorkflowScheme intermediateScheme) { AssignableWorkflowScheme originalScheme = workflowSchemeManager.getParentForDraft(targetScheme.getId()); if (!workflowSchemeManager.isActive(originalScheme)) { workflowSchemeManager.deleteWorkflowScheme(originalScheme); intermediateScheme = intermediateScheme.builder() .setName(originalScheme.getName()) .setDescription(originalScheme.getDescription()) .build(); workflowSchemeManager.updateWorkflowScheme(intermediateScheme); } }