From eb34ee7e144fd8e235f75574c8d76f1cdc511fa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 29 Sep 2009 22:59:13 +0200 Subject: [PATCH] ItEr27S07CUVistaRecursosTempoPorProxectoItEr26S08: Refactoring algorithm and fixing bug. --- .../web/resourceload/LoadPeriodGenerator.java | 2 +- .../web/resourceload/ResourceLoadModel.java | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java index 106470a04..d29153d3f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/LoadPeriodGenerator.java @@ -134,7 +134,7 @@ abstract class LoadPeriodGenerator { allocationsOnInterval); } - private boolean overlaps(LoadPeriodGenerator other) { + boolean overlaps(LoadPeriodGenerator other) { return (start.compareTo(other.end) < 0 && other.start .compareTo(this.end) < 0); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java index f92e03509..7c7964ac3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java @@ -237,15 +237,14 @@ class PeriodsBuilder { ListIterator iterator = loadPeriodsGenerators .listIterator(); while (iterator.hasNext()) { - LoadPeriodGenerator current = iterator.next(); - if (iterator.hasNext()) { + final LoadPeriodGenerator current = findNextOneOverlapping(iterator); + if (current != null) { + rewind(iterator, current); iterator.remove(); LoadPeriodGenerator next = iterator.next(); iterator.remove(); List generated = current.join(next); - final LoadPeriodGenerator nextOne = generated.size() > 1 ? generated - .get(1) - : generated.get(0); + final LoadPeriodGenerator positionToComeBack = generated.get(0); List sortedByStartDate = mergeListsKeepingByStartSortOrder( generated, loadPeriodsGenerators.subList(iterator .nextIndex(), loadPeriodsGenerators.size())); @@ -253,11 +252,26 @@ class PeriodsBuilder { - generated.size(); removeNextElements(iterator, takenFromRemaining); addAtCurrentPosition(iterator, sortedByStartDate); - rewind(iterator, nextOne); + rewind(iterator, positionToComeBack); } } } + private LoadPeriodGenerator findNextOneOverlapping( + ListIterator iterator) { + while (iterator.hasNext()) { + LoadPeriodGenerator current = iterator.next(); + if (!iterator.hasNext()) { + return null; + } + LoadPeriodGenerator next = peekNext(iterator); + if (current.overlaps(next)) { + return current; + } + } + return null; + } + private void addAtCurrentPosition( ListIterator iterator, List sortedByStartDate) {