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