in org.eclipse.mylyn.github.core/src/org/eclipse/mylyn/internal/github/core/issue/IssueTaskDataHandler.java [320:369]
public RepositoryResponse postTaskData(TaskRepository repository,
TaskData taskData, Set<TaskAttribute> oldAttributes,
IProgressMonitor monitor) throws CoreException {
String taskId = taskData.getTaskId();
Issue issue = createIssue(taskData);
RepositoryId repo = GitHub.getRepository(repository.getRepositoryUrl());
try {
GitHubClient client = IssueConnector.createClient(repository);
boolean collaborator = isCollaborator(client, repo);
if (collaborator)
updateLabels(repo.getOwner(), repo.getName(), client,
repository, taskData, oldAttributes, issue);
IssueService service = new IssueService(client);
if (taskData.isNew()) {
issue.setState(IssueService.STATE_OPEN);
issue = service.createIssue(repo.getOwner(), repo.getName(),
issue);
taskId = Integer.toString(issue.getNumber());
} else {
// Handle new comment
String comment = getAttributeValue(taskData,
IssueAttribute.COMMENT_NEW.getMetadata());
if (comment != null && comment.length() > 0)
service.createComment(repo.getOwner(), repo.getName(),
taskId, comment);
boolean reporter = attributeMatchesUser(client,
IssueAttribute.REPORTER.getMetadata(), taskData);
if (collaborator || reporter) {
// Handle state change
TaskAttribute operationAttribute = taskData.getRoot()
.getAttribute(TaskAttribute.OPERATION);
if (operationAttribute != null) {
IssueOperation operation = IssueOperation
.fromId(operationAttribute.getValue());
if (operation == IssueOperation.REOPEN)
issue.setState(IssueService.STATE_OPEN);
else if (operation == IssueOperation.CLOSE)
issue.setState(IssueService.STATE_CLOSED);
}
service.editIssue(repo.getOwner(), repo.getName(), issue);
}
}
return new RepositoryResponse(
taskData.isNew() ? ResponseKind.TASK_CREATED
: ResponseKind.TASK_UPDATED, taskId);
} catch (IOException e) {
throw new CoreException(GitHub.createWrappedStatus(e));
}
}