Skip to content

Commit 0eca7d0

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 61c2ecc commit 0eca7d0

3 files changed

Lines changed: 34 additions & 21 deletions

File tree

CHANGELOG.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
- https://github.com/ObeoNetwork/pepper/issues/18[#18] Enhance the ergonomy of contextual menu in Gantt
1919
- https://github.com/ObeoNetwork/pepper/issues/49[#49] Rework the detail views of Task and Workpackage
2020
- https://github.com/ObeoNetwork/pepper/issues/55[#55] Link detail view updates with Gantt view
21+
- https://github.com/ObeoNetwork/pepper/issues/52[#52] Change task creation in Gantt
22+
Change task creation in Gantt from creating a sibling task to a child task.
23+
2124

2225
=== Bug fixes
2326

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
@@ -131,25 +131,35 @@ public void createTask(EObject context) {
131131
Task task = PepperFactory.eINSTANCE.createTask();
132132
task.setName(NEW_TASK);
133133
if (context instanceof AbstractTask abstractTask) {
134-
// The new task follows the context task and has the same duration as the context task.
135-
if (abstractTask.getEndTime() != null && abstractTask.getStartTime() != null) {
136-
if (abstractTask.getEndTime().equals(abstractTask.getStartTime())) {
137-
// If the task is a Milestone
138-
task.setStartTime(abstractTask.getEndTime());
139-
task.setEndTime(Instant.ofEpochSecond(2 * abstractTask.getEndTime().getEpochSecond() - abstractTask.getStartTime().getEpochSecond()));
134+
// The new task follows the last sub-task.
135+
Optional<Task> optionalTask = abstractTask.getSubTasks().stream().reduce((first, second) -> second)
136+
.filter(filteredTask -> filteredTask.getEndTime() != null && filteredTask.getStartTime() != null);
137+
138+
if (optionalTask.isPresent()) {
139+
Task lastTask = optionalTask.get();
140+
if (lastTask.getEndTime().equals(lastTask.getStartTime())) {
141+
// If the last task is a Milestone
142+
task.setStartTime(lastTask.getEndTime());
143+
task.setEndTime(lastTask.getEndTime());
140144
} else {
141-
task.setStartTime(abstractTask.getEndTime().plus(1, ChronoUnit.MINUTES));
142-
task.setEndTime(Instant.ofEpochSecond(2 * abstractTask.getEndTime().getEpochSecond() - abstractTask.getStartTime().getEpochSecond()).plus(1, ChronoUnit.MINUTES));
145+
task.setStartTime(lastTask.getEndTime().plus(1, ChronoUnit.MINUTES));
146+
task.setEndTime(Instant.ofEpochSecond(2 * lastTask.getEndTime().getEpochSecond() - lastTask.getStartTime().getEpochSecond()).plus(1, ChronoUnit.MINUTES));
147+
}
148+
} else {
149+
if (abstractTask.getEndTime() != null && abstractTask.getStartTime() != null) {
150+
task.setStartTime(abstractTask.getStartTime());
151+
task.setEndTime(abstractTask.getEndTime());
143152
}
144153
}
145-
146-
EObject parent = context.eContainer();
147-
if (parent instanceof Workpackage workpackage) {
148-
int index = workpackage.getOwnedTasks().indexOf(context);
149-
workpackage.getOwnedTasks().add(index + 1, task);
150-
} else if (parent instanceof AbstractTask parentTask) {
151-
int index = parentTask.getSubTasks().indexOf(context);
152-
parentTask.getSubTasks().add(index + 1, task);
154+
abstractTask.getSubTasks().add(task);
155+
int levelLayer = 1;
156+
var parent = context.eContainer();
157+
while (!(parent instanceof Workpackage)) {
158+
levelLayer++;
159+
parent = parent.eContainer();
160+
}
161+
if (levelLayer == 4) {
162+
this.feedbackMessageService.addFeedbackMessage(new Message("This view does not display more than 4 levels of tasks.", MessageLevel.WARNING));
153163
}
154164
} else if (context instanceof Workpackage workpackage) {
155165
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)