private UriBuilder getUrlForParent(AssignableWorkflowScheme scheme) { return info.getBaseUriBuilder().path(WorkflowSchemeResource.class) .path(String.valueOf(scheme.getId())); }
@VisibleForTesting void assignSchemeToProjectTemplate(StatefulTaskProgressSink migrationSink) throws GenericEntityException { // need to find the set of workflows that may need their draft workflows to be copied and deleted, since // the parent workflow may no longer be active. workflowSchemeManager.cleanUpSchemeDraft(project, user); schemeManager.removeSchemesFromProject(project); // Check if associating with none - the default workflow if (targetScheme != null && targetScheme.getId() != null) { Scheme scheme = workflowSchemeManager.getSchemeObject(targetScheme.getId()); schemeManager.addSchemeToProject(project, scheme); } }
@Override public <T> T waitForUpdatesToFinishAndExecute(AssignableWorkflowScheme scheme, Callable<T> task) throws Exception { if (scheme == null || scheme.getId() == null) { return task.call(); } final Collection<Lock> locks = Lists.newArrayList(); try { for (final WorkflowAction action : WorkflowAction.values()) { final ClusterLock lock = getLock(scheme.getId(), action); lock.lock(); locks.add(lock); } return task.call(); } finally { unlockAll(locks); } }
MockAssignableWorkflowSchemeState(AssignableWorkflowScheme scheme) { this.id = scheme.getId(); this.mappings = Maps.newHashMap(scheme.getMappings()); this.name = scheme.getName(); this.description = scheme.getDescription(); }
void doDeleteScheme(AssignableWorkflowScheme scheme) { checkMigration(scheme); try { super.deleteScheme(scheme.getId()); } catch (GenericEntityException e) { throw new DataAccessException(e); } draftWorkflowSchemeStore.deleteByParentId(scheme.getId()); eventPublisher.publish(new WorkflowSchemeDeletedEvent(scheme.getId(), scheme.getName())); }
@Override public DraftWorkflowScheme.Builder draftBuilder(AssignableWorkflowScheme parent) { notNull("parent", parent); notNull("parent.id", parent.getId()); return workflowSchemeManager.draftBuilder(parent); }
@Override public DraftWorkflowScheme.Builder draftBuilder(AssignableWorkflowScheme parent) { Assertions.notNull("parent", parent); Assertions.notNull("parent.id", parent.getId()); return new DraftWorkflowSchemeBuilder(parent); }
private void createSchemeEntities(AssignableWorkflowScheme workflowScheme) { // Create all new entities for (Map.Entry<String, String> mappingEntry : workflowScheme.getMappings().entrySet()) { String issueTypeId = mappingEntry.getKey(); if (issueTypeId == null) { issueTypeId = ALL_ISSUE_TYPES; } String workflowName = mappingEntry.getValue(); SchemeEntity schemeEntity = new SchemeEntity(workflowName, issueTypeId); try { createSchemeEntity(workflowScheme.getId(), schemeEntity); } catch (GenericEntityException e) { throw new DataAccessException(e); } } }
private ServiceOutcome<AssignableWorkflowScheme> validateAssignable(ApplicationUser user, AssignableWorkflowScheme scheme, boolean creating) { if (scheme.getName() == null) { return getError(user, Reason.VALIDATION_FAILED, "admin.workflowschemes.service.error.scheme.must.have.name"); } else if (scheme.getName().length() > 255) { return getError(user, Reason.VALIDATION_FAILED, "admin.workflowschemes.service.error.scheme.name.too.big"); } else { AssignableWorkflowScheme oldScheme = workflowSchemeManager.getWorkflowSchemeObj(scheme.getName()); if (oldScheme != null && (creating || !oldScheme.getId().equals(scheme.getId()))) { return getError(user, Reason.VALIDATION_FAILED, "admin.workflowschemes.service.error.scheme.name.duplicate", scheme.getName()); } } return validateMappings(user, scheme); }
@Override public String getReturnUrlForCancelLink() { String url; if (getProject() != null) { url = getProjectReturnUrl(); } else { // cannot use getSchemeId() as that points to the draft that we have since destroyed Long schemeId = getWorkflowSchemeManager().getWorkflowSchemeObj(Iterables.getFirst(getProjects(), getProject())).getId(); url = "/secure/admin/EditWorkflowScheme.jspa?schemeId=" + schemeId; } return url; }
@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 @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); }
ServiceOutcome<DraftRestWorkflowScheme> createDraftScheme() { ServiceOutcome<DraftWorkflowScheme> draftWorkflowScheme = workflowSchemeService.createDraft(user, scheme.getId()); if (!draftWorkflowScheme.isValid()) { return ServiceOutcomeImpl.error(draftWorkflowScheme); } else { return ServiceOutcomeImpl.ok(asDraft(draftWorkflowScheme.getReturnedValue())); } }
@Override public ServiceOutcome<DraftWorkflowScheme> createDraft(ApplicationUser creator, DraftWorkflowScheme draftWorkflowScheme) { notNull("workflowScheme", draftWorkflowScheme); AssignableWorkflowScheme parentScheme = draftWorkflowScheme.getParentScheme(); notNull("workflowScheme.parentScheme", parentScheme); notNull("workflowScheme.parentScheme.id", parentScheme.getId()); ServiceOutcome<AssignableWorkflowScheme> parentOutcome = validateCreateDraft(creator, parentScheme.getId()); if (!parentOutcome.isValid()) { return ServiceOutcomeImpl.error(parentOutcome); } ServiceOutcome<DraftWorkflowScheme> outcome = validateMappings(creator, draftWorkflowScheme); if (!outcome.isValid()) { return outcome; } return ok(workflowSchemeManager.createDraft(creator, draftWorkflowScheme)); }
@Override public ServiceOutcome<AssignableWorkflowScheme> updateWorkflowScheme(ApplicationUser user, @Nonnull AssignableWorkflowScheme scheme) { notNull("scheme", scheme); notNull("scheme.id", scheme.getId()); final ServiceOutcome<Void> outcome = validateUpdateWorkflowScheme(user, scheme); if (!outcome.isValid()) { return error(outcome); } try { return ok(workflowSchemeManager.updateWorkflowScheme(scheme)); } catch (SchemeIsBeingMigratedException e) { return getSchemeIsBeingMigratedError(user); } }
public AssignableState addStateForScheme(AssignableWorkflowScheme scheme) { return addState(new MockAssignableWorkflowSchemeState.Builder() .setId(scheme.getId()) .setName(scheme.getName()) .setDescription(scheme.getDescription()) .setMappings(scheme.getMappings()) .build()); }
public DraftState addStateForScheme(DraftWorkflowScheme scheme) { return addState(new MockDraftWorkflowSchemeState.Builder(scheme.getParentScheme().getId()) .setId(scheme.getId()) .setMappings(scheme.getMappings()) .setLastModifiedDate(scheme.getLastModifiedDate()).build()); }
@Override public ServiceOutcome<Void> validateUpdateWorkflowScheme(ApplicationUser user, @Nonnull AssignableWorkflowScheme scheme) { ServiceOutcome<AssignableWorkflowScheme> outcome = checkEditPermission(user); if (!outcome.isValid()) { return error(outcome); } outcome = getWorkflowSchemeNoPermissionCheck(user, scheme.getId()); if (!outcome.isValid()) { return error(outcome); } AssignableWorkflowScheme currentScheme = outcome.getReturnedValue(); outcome = validateAssignable(user, scheme, false); if (!outcome.isValid()) { return error(outcome); } if (isActive(currentScheme) && !Objects.equal(scheme.getMappings(), currentScheme.getMappings())) { return getError(user, Reason.VALIDATION_FAILED, "admin.workflowschemes.service.error.change.active"); } return error(outcome); }