Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 36 additions & 14 deletions pj-create/src/main/java/com/g2forge/project/plan/create/Create.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,22 @@
import java.util.concurrent.ExecutionException;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

import org.slf4j.event.Level;

import com.atlassian.jira.rest.client.api.IssueRestClient;
import com.atlassian.jira.rest.client.api.domain.BasicComponent;
import com.atlassian.jira.rest.client.api.domain.BasicIssue;
import com.atlassian.jira.rest.client.api.domain.Issue;
import com.atlassian.jira.rest.client.api.domain.IssueFieldId;
import com.atlassian.jira.rest.client.api.domain.IssuelinksType;
import com.atlassian.jira.rest.client.api.domain.Transition;
import com.atlassian.jira.rest.client.api.domain.input.ComplexIssueInputFieldValue;
import com.atlassian.jira.rest.client.api.domain.input.FieldInput;
import com.atlassian.jira.rest.client.api.domain.input.IssueInputBuilder;
import com.atlassian.jira.rest.client.api.domain.input.LinkIssuesInput;
import com.atlassian.jira.rest.client.api.domain.input.TransitionInput;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand All @@ -43,6 +47,7 @@
import com.g2forge.gearbox.jira.JIRAServer;
import com.g2forge.project.plan.create.CreateIssue.CreateIssueBuilder;
import com.g2forge.project.plan.create.field.KnownField;
import com.google.common.base.Objects;

import io.atlassian.util.concurrent.Promise;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -288,22 +293,39 @@ protected List<String> implementChanges(Server server, Changes changes) throws I
}
if ((issue.getLabels() != null) && !issue.getLabels().isEmpty()) builder.setFieldInput(new FieldInput(IssueFieldId.LABELS_FIELD, issue.getLabels()));

final List<Throwable> throwables = new ArrayList<>();
for (int i = 0; i < 5; i++) {
final Promise<BasicIssue> promise = issueClient.createIssue(builder.build());
final BasicIssue created;
try {
created = promise.get();
} catch (ExecutionException e) {
throwables.add(e);
continue;
BasicIssue created = null;
{
final List<Throwable> throwables = new ArrayList<>();
for (int i = 0; i < 5; i++) {
final Promise<BasicIssue> promise = issueClient.createIssue(builder.build());
try {
created = promise.get();
} catch (ExecutionException e) {
throwables.add(e);
continue;
}
issues.put(issue.getSummary(), created.getKey());
throwables.clear();
break;
}
issues.put(issue.getSummary(), created.getKey());
throwables.clear();
break;
if (!throwables.isEmpty()) HError.withSuppressed(new RuntimeException(String.format("Failed to create issue: %1$s", issue.getSummary())), throwables).printStackTrace(System.err);
}
if (!throwables.isEmpty()) {
HError.withSuppressed(new RuntimeException(String.format("Failed to create issue: %1$s", issue.getSummary())), throwables).printStackTrace(System.err);

final String transitionName = issue.getTransition();
if (transitionName != null) {
final List<Throwable> throwables = new ArrayList<>();
for (int i = 0; i < 5; i++) {
try {
final Issue actualIssue = issueClient.getIssue(created.getKey()).get();
final Iterable<Transition> transitions = issueClient.getTransitions(actualIssue).get();
final Transition transition = StreamSupport.stream(transitions.spliterator(), false).filter(t -> Objects.equal(t.getName(), transitionName)).findFirst().orElse(null);
issueClient.transition(actualIssue, new TransitionInput(transition.getId())).get();
} catch (ExecutionException e) {
throwables.add(e);
continue;
}
}
if (!throwables.isEmpty()) HError.withSuppressed(new RuntimeException(String.format("Failed to transition issue: %1$s %2$s", created.getKey(), issue.getSummary())), throwables).printStackTrace(System.err);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
@AllArgsConstructor
@Jacksonized
public class CreateConfig implements ICreateConfig {


protected final String project;

protected final String type;
Expand All @@ -51,6 +49,8 @@ public class CreateConfig implements ICreateConfig {

@Singular
protected final Map<String, Boolean> flags;

protected final String transition;

@Getter(lazy = true)
@JsonIgnore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ public class CreateIssue implements ICreateConfig {
@Singular
protected final Set<String> flags;

protected final String transition;

public CreateIssue fallback(ICreateConfig config) {
final CreateIssueBuilder retVal = builder();

Expand Down Expand Up @@ -77,6 +79,7 @@ public CreateIssue fallback(ICreateConfig config) {
retVal.summary(getSummary());
retVal.description(getDescription());
if (getRelationships() != null) retVal.relationships(getRelationships());
retVal.transition(IFunction1.create(ICreateConfig::getTransition).applyWithFallback(this, config));

return retVal.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ public interface ICreateConfig {
public Set<String> getLabels();

public Map<String, Set<String>> getRelationships();

public String getTransition();
}