public MockDraftWorkflowScheme(DraftWorkflowScheme ws) { super(ws); this.lastModifiedUser = ws.getLastModifiedUser(); this.lastModifiedDate = ws.getLastModifiedDate(); this.parentScheme = ws.getParentScheme(); }
public DraftState addStateForScheme(DraftWorkflowScheme scheme) { return addState(new MockDraftWorkflowSchemeState.Builder(scheme.getParentScheme().getId()) .setId(scheme.getId()) .setMappings(scheme.getMappings()) .setLastModifiedDate(scheme.getLastModifiedDate()).build()); }
private String getIntermediateSchemeDescription() { StringBuilder sb = new StringBuilder(); if (isNotBlank(targetScheme.getDescription())) { sb.append(targetScheme.getDescription()).append(" "); } sb.append(i18nHelper.getText("admin.selectworkflowscheme.migration.draft.auto.generated", targetScheme.getName())); return sb.toString(); }
@Override public TaskDescriptor<WorkflowMigrationResult> getActiveByProjects(@Nonnull DraftWorkflowScheme scheme, boolean onlyDraftMigrations, boolean onlyNonSafeToDelete) { List<Project> projectsUsing = manager.getProjectsUsing(scheme.getParentScheme()); if (projectsUsing.isEmpty()) { return null; } Project primaryProject = projectsUsing.get(0); TaskDescriptor<WorkflowMigrationResult> task = findSchemeMigrationTask(new ProjectMigrationTaskMatcher(scheme, projectsUsing, primaryProject, onlyDraftMigrations, onlyNonSafeToDelete)); if (task == null) { // Check parent scheme migrations. task = getActive(scheme.getParentScheme()); } return task; }
@Nonnull @Override public DraftWorkflowScheme createDraft(ApplicationUser creator, @Nonnull DraftWorkflowScheme workflowScheme) { notNull("workflowScheme", workflowScheme); AssignableWorkflowScheme parentScheme = workflowScheme.getParentScheme(); notNull("workflowScheme.parentScheme", parentScheme); notNull("workflowScheme.parentScheme.id", parentScheme.getId()); Assertions.not("scheme already has draft.", hasDraft(parentScheme)); final DraftWorkflowSchemeStore.DraftState.Builder builder = draftWorkflowSchemeStore.builder(parentScheme.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 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())); } }); }
private ServiceOutcome<DraftRestWorkflowScheme> doUpdateMappings(DraftWorkflowScheme build) { if (build.getMappings().equals(child.getMappings())) { return ServiceOutcomeImpl.ok(this); } final ServiceOutcome<DraftWorkflowScheme> outcome = workflowSchemeService.updateWorkflowScheme(user, build); if (!outcome.isValid()) { return ServiceOutcomeImpl.error(outcome); } else { child = outcome.getReturnedValue(); return ServiceOutcomeImpl.ok(this); } } }
@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); } }
ServiceOutcome<? extends RestWorkflowScheme> removeIssueType(String issueType) { final DraftWorkflowScheme.Builder builder = child.builder(); builder.removeMapping(issueType); return doUpdateMappings(builder.build()); }
@Override void quickMigrate() throws GenericEntityException { workflowSchemeManager.replaceSchemeWithDraft(targetScheme); // Clear the active workflow name cache workflowSchemeManager.clearWorkflowCache(); copyAndDeleteDraftsForInactiveWorkflowsIn(targetScheme.getParentScheme()); }
@Override public AssignableWorkflowScheme copyDraft(DraftWorkflowScheme draft, ApplicationUser user, String newDescription) { AssignableWorkflowScheme.Builder copyOfDraftBuilder = new AssignableWorkflowSchemeBuilder() .setName(getNameForCopy(draft)) .setDescription(newDescription) .setMappings(draft.getMappings()); return createScheme(copyOfDraftBuilder.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); } }
ServiceOutcome<? extends RestWorkflowScheme> updateIssueTypeMappings(IssueTypeMappingBean bean) { final DraftWorkflowScheme.Builder builder = child.builder(); mergeIssueTypeMapping(builder, bean); return doUpdateMappings(builder.build()); }
DraftWorkflowSchemeBuilder(DraftWorkflowScheme draftWorkflowScheme) { super(draftWorkflowScheme); this.lastModifiedUser = draftWorkflowScheme.getLastModifiedUser(); this.lastModifiedTime = draftWorkflowScheme.getLastModifiedDate(); this.parent = draftWorkflowScheme.getParentScheme(); }
copyAndDeleteDraftsForInactiveWorkflowsIn(targetScheme.getParentScheme());
@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; }
ServiceOutcome<DraftRestWorkflowScheme> deleteWorkflow(String workflowName) { final DraftWorkflowScheme build = child.builder().removeWorkflow(workflowName).build(); return doUpdateMappings(build); }
bean.setLastModifiedUser(beanForUser(child.getLastModifiedUser())); bean.setLastModified(formatter.forLoggedInUser().format(child.getLastModifiedDate())); bean.setOriginalIssueTypeMappings(asIssueTypeMap(parent)); bean.setSelf(getUrlForParent(parent).path("draft").build()); bean.setOriginalDefaultWorkflow(child.getParentScheme().getActualDefaultWorkflow());
if (scheme.isDraft()) lockSchemeId = ((DraftWorkflowScheme) scheme).getParentScheme().getId();