From 2874cf913546921dd9c143b65f6576d483bab51a Mon Sep 17 00:00:00 2001 From: Greg Gibeling Date: Thu, 11 Sep 2025 21:21:44 -0700 Subject: [PATCH] G2-1775 Plan sprint tool --- .../java/com/g2forge/project/plan/Plan.java | 1 + .../com/g2forge/project/plan/Sprints.java | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 pj-plan/src/main/java/com/g2forge/project/plan/Sprints.java diff --git a/pj-plan/src/main/java/com/g2forge/project/plan/Plan.java b/pj-plan/src/main/java/com/g2forge/project/plan/Plan.java index b8f8b8b..ea14cc8 100644 --- a/pj-plan/src/main/java/com/g2forge/project/plan/Plan.java +++ b/pj-plan/src/main/java/com/g2forge/project/plan/Plan.java @@ -7,6 +7,7 @@ public class Plan implements IStructuredCommand { public static void main(String[] args) throws Throwable { final DispatchCommand.ManualBuilder builder = new DispatchCommand.ManualBuilder(); builder.command(new Download(), "download"); + builder.command(new Sprints(), "sprints"); builder.main(args); } } diff --git a/pj-plan/src/main/java/com/g2forge/project/plan/Sprints.java b/pj-plan/src/main/java/com/g2forge/project/plan/Sprints.java new file mode 100644 index 0000000..a33ddf3 --- /dev/null +++ b/pj-plan/src/main/java/com/g2forge/project/plan/Sprints.java @@ -0,0 +1,39 @@ +package com.g2forge.project.plan; + +import java.io.InputStream; +import java.io.PrintStream; + +import org.joda.time.DateTime; + +import com.g2forge.alexandria.command.command.IStandardCommand; +import com.g2forge.alexandria.command.exit.IExit; +import com.g2forge.alexandria.command.invocation.CommandInvocation; +import com.g2forge.gearbox.jira.ExtendedJiraRestClient; +import com.g2forge.gearbox.jira.JiraAPI; +import com.g2forge.gearbox.jira.sprint.Sprint; +import com.g2forge.gearbox.jira.sprint.SprintRestClient; + +public class Sprints implements IStandardCommand { + public static void main(String[] args) throws Throwable { + IStandardCommand.main(args, new Sprints()); + } + + @Override + public IExit invoke(CommandInvocation invocation) throws Throwable { + if (invocation.getArguments().size() != 2) throw new IllegalArgumentException(); + final long initialSprintId = Long.parseLong(invocation.getArguments().get(0)); + final int sprintDuration = Integer.parseInt(invocation.getArguments().get(1)); + + try (final ExtendedJiraRestClient client = JiraAPI.load().connect(true)) { + final SprintRestClient sprintClient = client.getSprintClient(); + DateTime previousEnd = sprintClient.getSprintById(initialSprintId - 1).get().getEndDate(); + for (long sprintId = initialSprintId; true; sprintId++) { + final DateTime currentEnd = previousEnd.plusDays(sprintDuration); + final Sprint sprint = Sprint.builder().id(sprintId).startDate(previousEnd).endDate(currentEnd).build(); + invocation.getIo().getStandardError().append(sprintClient.getSprintById(sprintId).get().toString()).append(" -> ").println(sprint); + sprintClient.updateSprint(sprint).get(); + previousEnd = currentEnd; + } + } + } +}