@@ -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 ();
0 commit comments