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
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> disabledSummaries = config.getDisabledIssues().stream().map(CreateIssue::getSummary).collect(Collectors.toSet());
for (CreateIssue raw : config.getEnabledIssues()) {
Expand All @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<String> components;
Expand All @@ -58,14 +60,19 @@ public class CreateConfig implements ICreateConfig {
@JsonIgnore
private final Set<String> disabledFlags = getSpecifiedFlags().entrySet().stream().filter(entry -> !entry.getValue()).map(Map.Entry::getKey).collect(Collectors.toSet());

@JsonIgnore
public List<CreateIssue> getDisabledIssues() {
return getIssues().stream().filter(issue -> !issue.isEnabled(this)).collect(Collectors.toList());
}

@JsonIgnore
public List<CreateIssue> getEnabledIssues() {
return getIssues().stream().filter(issue -> issue.isEnabled(this)).collect(Collectors.toList());
}

@JsonIgnore
public List<CreateIssue> 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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public class CreateIssue implements ICreateConfig {
@Singular
protected final Set<String> flags;

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

// Configurable fields
Expand Down
Original file line number Diff line number Diff line change
@@ -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());
}
}