Skip to content

Commit c835ee8

Browse files
committed
[52] Change task creation in Gantt
Change task creation in Gantt from creating a sibling task to a child task. Issue: #52
1 parent a301109 commit c835ee8

3 files changed

Lines changed: 47 additions & 21 deletions

File tree

CHANGELOG.adoc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
= Changelog
22

3+
== v2026.X.X
4+
5+
=== Dependency update
6+
7+
8+
=== New features
9+
10+
11+
=== Improvements
12+
- https://github.com/ObeoNetwork/pepper/issues/52[#52] Change task creation in Gantt
13+
Change task creation in Gantt from creating a sibling task to a child task.
14+
15+
=== Bug fixes
16+
17+
318
== v2026.6.1
419

520
=== Dependency update
@@ -35,6 +50,7 @@
3550
- https://github.com/ObeoNetwork/pepper/issues/49[#49] Rework the detail views of Task and Workpackage
3651
- https://github.com/ObeoNetwork/pepper/issues/55[#55] Link detail view updates with Gantt view
3752

53+
3854
=== Bug fixes
3955

4056
- https://github.com/ObeoNetwork/pepper/issues/50[#50] Stop extending DefaultLabelService

backend/pepper-starter/src/main/java/pepper/starter/services/view/PepperMMJavaService.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -163,25 +163,35 @@ public void createTask(EObject context) {
163163
Task task = PepperFactory.eINSTANCE.createTask();
164164
task.setName(NEW_TASK);
165165
if (context instanceof AbstractTask abstractTask) {
166-
// The new task follows the context task and has the same duration as the context task.
167-
if (abstractTask.getEndTime() != null && abstractTask.getStartTime() != null) {
168-
if (abstractTask.getEndTime().equals(abstractTask.getStartTime())) {
169-
// If the task is a Milestone
170-
task.setStartTime(abstractTask.getEndTime());
171-
task.setEndTime(Instant.ofEpochSecond(2 * abstractTask.getEndTime().getEpochSecond() - abstractTask.getStartTime().getEpochSecond()));
166+
// The new task follows the last sub-task.
167+
Optional<Task> optionalTask = abstractTask.getSubTasks().stream().reduce((first, second) -> second)
168+
.filter(filteredTask -> filteredTask.getEndTime() != null && filteredTask.getStartTime() != null);
169+
170+
if (optionalTask.isPresent()) {
171+
Task lastTask = optionalTask.get();
172+
if (lastTask.getEndTime().equals(lastTask.getStartTime())) {
173+
// If the last task is a Milestone
174+
task.setStartTime(lastTask.getEndTime());
175+
task.setEndTime(lastTask.getEndTime());
172176
} else {
173-
task.setStartTime(abstractTask.getEndTime().plus(1, ChronoUnit.MINUTES));
174-
task.setEndTime(Instant.ofEpochSecond(2 * abstractTask.getEndTime().getEpochSecond() - abstractTask.getStartTime().getEpochSecond()).plus(1, ChronoUnit.MINUTES));
177+
task.setStartTime(lastTask.getEndTime().plus(1, ChronoUnit.MINUTES));
178+
task.setEndTime(Instant.ofEpochSecond(2 * lastTask.getEndTime().getEpochSecond() - lastTask.getStartTime().getEpochSecond()).plus(1, ChronoUnit.MINUTES));
179+
}
180+
} else {
181+
if (abstractTask.getEndTime() != null && abstractTask.getStartTime() != null) {
182+
task.setStartTime(abstractTask.getStartTime());
183+
task.setEndTime(abstractTask.getEndTime());
175184
}
176185
}
177-
178-
EObject parent = context.eContainer();
179-
if (parent instanceof Workpackage workpackage) {
180-
int index = workpackage.getOwnedTasks().indexOf(context);
181-
workpackage.getOwnedTasks().add(index + 1, task);
182-
} else if (parent instanceof AbstractTask parentTask) {
183-
int index = parentTask.getSubTasks().indexOf(context);
184-
parentTask.getSubTasks().add(index + 1, task);
186+
abstractTask.getSubTasks().add(task);
187+
int levelLayer = 1;
188+
var parent = context.eContainer();
189+
while (!(parent instanceof Workpackage)) {
190+
levelLayer++;
191+
parent = parent.eContainer();
192+
}
193+
if (levelLayer == 4) {
194+
this.feedbackMessageService.addFeedbackMessage(new Message("This view does not display more than 4 levels of tasks.", MessageLevel.WARNING));
185195
}
186196
} else if (context instanceof Workpackage workpackage) {
187197
long epochSecondStartTime = Instant.now().getEpochSecond();

backend/pepper-starter/src/test/java/pepper/starter/configuration/view/PepperMMJavaServiceTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -313,14 +313,14 @@ public void createTask() {
313313
assertThat(workpackage.getOwnedTasks()).hasSize(2);
314314

315315
service.createTask(task1);
316-
assertThat(workpackage.getOwnedTasks()).hasSize(3);
317-
assertThat(workpackage.getOwnedTasks().get(1).getStartTime()).isEqualTo(Instant.parse(DATE2024_01_02_T00_00_00));
318-
assertThat(workpackage.getOwnedTasks().get(1).getEndTime()).isEqualTo(Instant.parse(DATE2024_01_02_T23_59_00));
319-
320-
service.createTask(task11);
321316
assertThat(task1.getSubTasks()).hasSize(2);
322317
assertThat(task1.getSubTasks().get(1).getStartTime()).isEqualTo(Instant.parse(DATE2024_01_02_T00_00_00));
323318
assertThat(task1.getSubTasks().get(1).getEndTime()).isEqualTo(Instant.parse(DATE2024_01_02_T23_59_00));
319+
320+
service.createTask(task11);
321+
assertThat(task11.getSubTasks()).hasSize(1);
322+
assertThat(task11.getSubTasks().get(0).getStartTime()).isEqualTo(task11.getStartTime());
323+
assertThat(task11.getSubTasks().get(0).getEndTime()).isEqualTo(task11.getEndTime());
324324
}
325325

326326
@Test

0 commit comments

Comments
 (0)