public void validateParams(OperationContext operationContext, ErrorCollection errorCollection, I18nHelper i18n, Issue issue, FieldScreenRenderLayoutItem fieldScreenRenderLayoutItem) { IssueLinkingValue value = (IssueLinkingValue) operationContext.getFieldValuesHolder().get(getId()); if (isIssueLinkingEnabled() && value != null && !value.getLinkedIssues().isEmpty()) { IssueLinkService.AddIssueLinkValidationResult issueLinkValidationResult = issueLinkService.validateAddIssueLinks(authenticationContext.getUser(), issue, value.getLinkDescription(), value.getLinkedIssues()); // if we were returned an updated value, that signifies that we must update the TimeTrackingValue in the FieldValuesHolder if (issueLinkValidationResult.isValid()) { //noinspection unchecked operationContext.getFieldValuesHolder().put(getId(), new IssueLinkingValue.Builder(issueLinkValidationResult).build()); } else { transferErrorMessages(errorCollection, issueLinkValidationResult.getErrorCollection().getErrorMessages()); transferErrorMessages(errorCollection, issueLinkValidationResult.getErrorCollection().getErrors().values()); } } }
@Override public AddIssueLinkValidationResult validateAddIssueLinks(ApplicationUser user, Issue issue, String linkName, Collection<String> linkKeys) { IssueLinkType linkType = matchToIssueLinkType(linkName); if (null == linkType) { ErrorCollection errors = new SimpleErrorCollection(); errors.addErrorMessage(beanFactory.getInstance(user).getText("issuelinking.service.error.invalid.link.name", linkName)); return new AddIssueLinkValidationResult(user, errors, null, null, null, null); } Direction direction = linkName.equals(linkType.getInward()) ? Direction.IN : Direction.OUT; return validateAddIssueLinks(user, issue, linkType, direction, linkKeys, true); }
if (!result.isValid()) IssueLinkType linkType = result.getLinkType(); if (linkType == null) throw new IllegalArgumentException("Cant find issue link type '" + result.getLinkType().getName() + "'"); final Issue sourceIssue = result.getIssue(); for (String targetIssueKey : result.getLinkKeys()) if (result.getDirection() == Direction.OUT) issueLinkManager.createIssueLink(sourceIssue.getId(), destinationIssue.getId(), linkType.getId(), null, result.getUser()); issueLinkManager.createIssueLink(destinationIssue.getId(), sourceIssue.getId(), linkType.getId(), null, result.getUser()); userHistoryManager.addItemToHistory(UserHistoryItem.ISSUELINKTYPE, result.getUser(), String.valueOf(linkType.getId()), result.getLinkName());
/** * This is called after the issue has been stored on disk and allows us a chance to create change records for the * update. * * @param fieldLayoutItem for this field within this context. * @param issue Issue this field is part of. * @param modifiedValue new value to set field to. Cannot be null. * @param issueChangeHolder an object to record any changes made to the issue by this method. */ public void updateValue(FieldLayoutItem fieldLayoutItem, Issue issue, ModifiedValue modifiedValue, IssueChangeHolder issueChangeHolder) { Object newValue = modifiedValue.getNewValue(); if (newValue != null) { if (isIssueLinkingEnabled()) { IssueLinkingValue issueLinkingValue = (IssueLinkingValue) newValue; IssueLinkService.AddIssueLinkValidationResult validationResult = issueLinkingValue.getValidationResult(); if (validationResult != null && validationResult.isValid()) { issueLinkService.addIssueLinks(authenticationContext.getUser(), validationResult); } } } }
private void createIssueLink(final ApplicationUser user, final Issue fromIssue, final Issue toIssue, final String relationship) throws IssueLinkCreationException { IssueLinkType issueLinkType = findIssueLinkTypeByNames(relationship); if(issueLinkType == null){ String message = authenticationContext.getI18nHelper().getText("cpji.link.type.doesnt.exist.link.wasnt.copied", relationship, fromIssue, toIssue); throw new CannotFindIssueLinkTypeException(message); } final IssueLinkService.AddIssueLinkValidationResult addIssueLinkValidationResult = issueLinkService.validateAddIssueLinks( user, fromIssue, relationship, ImmutableList.<String>of(toIssue.getKey())); if (addIssueLinkValidationResult.isValid()) { issueLinkService.addIssueLinks(user, addIssueLinkValidationResult); } else { log.warn("Error creating local link from " + fromIssue.getKey() + " to " + toIssue.getKey() + ". " + addIssueLinkValidationResult.getErrorCollection()); throw new IssueLinkCreationException(addIssueLinkValidationResult.getErrorCollection()); } }
private AddIssueLinkValidationResult validateAddIssueLinks(ApplicationUser user, Issue issue, IssueLinkType linkType, Direction direction, Collection<String> linkKeys, boolean excludeSystemLinks) { Assertions.notNull("issue", issue); Assertions.notNull("linkKeys", linkKeys); ErrorCollection errorCollection = validateIssuePermission(user, issue, Permissions.LINK_ISSUE); if (!errorCollection.hasAnyErrors()) { validateLinkInput(user, errorCollection, issue, linkType, linkKeys, excludeSystemLinks); } return new AddIssueLinkValidationResult(user, errorCollection, issue, linkType, direction, linkKeys); }
public void createValue(Issue issue, IssueLinkingValue value) { if (isIssueLinkingEnabled()) { IssueLinkingValue issueLinkingValue = value; IssueLinkService.AddIssueLinkValidationResult validationResult = issueLinkingValue.getValidationResult(); if (validationResult != null && validationResult.isValid()) { issueLinkService.addIssueLinks(authenticationContext.getUser(), validationResult); } } }
@Override public AddIssueLinkValidationResult validateAddIssueLinks(ApplicationUser user, Issue issue, Long issueLinkTypeId, Direction direction, Collection<String> linkKeys, boolean excludeSystemLinks) { IssueLinkType linkType = issueLinkTypeManager.getIssueLinkType(issueLinkTypeId); if (null == linkType) { ErrorCollection errors = new SimpleErrorCollection(); errors.addErrorMessage(beanFactory.getInstance(user).getText("issuelinking.service.error.invalid.link.id", issueLinkTypeId)); return new AddIssueLinkValidationResult(user, errors, null, null, null, null); } return validateAddIssueLinks(user, issue, linkType, direction, linkKeys, excludeSystemLinks); }