diff --git a/pj-create/src/main/java/com/g2forge/project/plan/create/Create.java b/pj-create/src/main/java/com/g2forge/project/plan/create/Create.java index 00333c6..15608b5 100644 --- a/pj-create/src/main/java/com/g2forge/project/plan/create/Create.java +++ b/pj-create/src/main/java/com/g2forge/project/plan/create/Create.java @@ -160,7 +160,9 @@ protected static class LinkType { protected static final Pattern PATTERN_KEY = Pattern.compile("([A-Z0-9]{2,5}-[0-9]+)(\\s.*)?"); protected static Changes computeChanges(Server server, CreateConfig config) { - final int sprintOffset = (((server == null) || (server.getSprintOffset() == null)) ? 0 : server.getSprintOffset()) + ((config.getSprintOffset() == null) ? 0 : config.getSprintOffset()); + final SprintConfig sprintWithDefault = config.getSprintConfig() == null ? SprintConfig.getDEFAULT() : config.getSprintConfig().fallback(SprintConfig.getDEFAULT()); + final SprintConfig sprintWithOffset = ((server == null) || (server.getSprintOffset() == null)) ? sprintWithDefault : sprintWithDefault.toBuilder().offset(sprintWithDefault.getOffset() + server.getSprintOffset()).build(); + final Changes.ChangesBuilder retVal = Changes.builder(); final Set disabledSummaries = config.getDisabledIssues().stream().map(CreateIssue::getSummary).collect(Collectors.toSet()); for (CreateIssue raw : config.getEnabledIssues()) { @@ -169,7 +171,7 @@ protected static Changes computeChanges(Server server, CreateConfig config) { final CreateIssue issueWithServer; { final CreateIssueBuilder builder = issueWithFallback.toBuilder(); - if (sprintOffset != 0) builder.sprint(issueWithFallback.getSprint() + sprintOffset); + builder.sprint(sprintWithOffset.modify(issueWithFallback.getSprint())); if ((server != null) && (server.getUsers() != null)) builder.assignee(server.getUsers().getOrDefault(issueWithFallback.getAssignee(), issueWithFallback.getAssignee())); issueWithServer = builder.build(); } diff --git a/pj-create/src/main/java/com/g2forge/project/plan/create/CreateConfig.java b/pj-create/src/main/java/com/g2forge/project/plan/create/CreateConfig.java index 784109a..ed2c39a 100644 --- a/pj-create/src/main/java/com/g2forge/project/plan/create/CreateConfig.java +++ b/pj-create/src/main/java/com/g2forge/project/plan/create/CreateConfig.java @@ -16,11 +16,15 @@ import lombok.Data; import lombok.Getter; import lombok.Singular; +import lombok.extern.jackson.Jacksonized; @Data -@Builder +@Builder(toBuilder = true) @AllArgsConstructor +@Jacksonized public class CreateConfig implements ICreateConfig { + + protected final String project; protected final String type; @@ -31,9 +35,7 @@ public class CreateConfig implements ICreateConfig { protected final String assignee; - protected final Integer sprint; - - protected final Integer sprintOffset; + protected final SprintConfig sprintConfig; @Singular protected final Set components; @@ -58,14 +60,19 @@ public class CreateConfig implements ICreateConfig { @JsonIgnore private final Set disabledFlags = getSpecifiedFlags().entrySet().stream().filter(entry -> !entry.getValue()).map(Map.Entry::getKey).collect(Collectors.toSet()); + @JsonIgnore + public List getDisabledIssues() { + return getIssues().stream().filter(issue -> !issue.isEnabled(this)).collect(Collectors.toList()); + } + @JsonIgnore public List getEnabledIssues() { return getIssues().stream().filter(issue -> issue.isEnabled(this)).collect(Collectors.toList()); } - @JsonIgnore - public List getDisabledIssues() { - return getIssues().stream().filter(issue -> !issue.isEnabled(this)).collect(Collectors.toList()); + @Override + public Integer getSprint() { + return getSprintConfig() == null ? null : sprintConfig.getSprint(); } public void validateFlags() { diff --git a/pj-create/src/main/java/com/g2forge/project/plan/create/CreateIssue.java b/pj-create/src/main/java/com/g2forge/project/plan/create/CreateIssue.java index 115b1e3..eafe286 100644 --- a/pj-create/src/main/java/com/g2forge/project/plan/create/CreateIssue.java +++ b/pj-create/src/main/java/com/g2forge/project/plan/create/CreateIssue.java @@ -48,7 +48,7 @@ public class CreateIssue implements ICreateConfig { @Singular protected final Set flags; - public CreateIssue fallback(CreateConfig config) { + public CreateIssue fallback(ICreateConfig config) { final CreateIssueBuilder retVal = builder(); // Configurable fields diff --git a/pj-create/src/main/java/com/g2forge/project/plan/create/SprintConfig.java b/pj-create/src/main/java/com/g2forge/project/plan/create/SprintConfig.java new file mode 100644 index 0000000..9d08426 --- /dev/null +++ b/pj-create/src/main/java/com/g2forge/project/plan/create/SprintConfig.java @@ -0,0 +1,40 @@ +package com.g2forge.project.plan.create; + +import com.g2forge.alexandria.java.function.IFunction1; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.extern.jackson.Jacksonized; + +@Data +@Builder(toBuilder = true) +@AllArgsConstructor +@Jacksonized +public class SprintConfig { + @Getter(lazy = true) + private static final SprintConfig DEFAULT = new SprintConfig(null, 0, 1, Integer.MAX_VALUE); + + protected final Integer sprint; + + protected final Integer offset; + + protected final Integer min; + + protected final Integer max; + + public SprintConfig fallback(SprintConfig that) { + final SprintConfigBuilder retVal = builder(); + retVal.sprint(IFunction1.create(SprintConfig::getSprint).applyWithFallback(this, that)); + retVal.offset(IFunction1.create(SprintConfig::getOffset).applyWithFallback(this, that)); + retVal.min(IFunction1.create(SprintConfig::getMin).applyWithFallback(this, that)); + retVal.max(IFunction1.create(SprintConfig::getMax).applyWithFallback(this, that)); + return retVal.build(); + } + + public Integer modify(Integer sprint) { + if (sprint == null) return null; + return Integer.min(Integer.max(sprint + getOffset(), getMin()), getMax()); + } +}