From bd86dfd1838cc247c26396b3e373a1016e3f9ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenzo=20Tilve=20=C3=81lvaro?= Date: Fri, 22 Feb 2013 09:06:05 +0100 Subject: [PATCH] Force synchronization of filter changes when switching between loaded perspectives Either in the Company view/Projects list perspectives and the Project Gantt/WBS ones, their filter values are synchronized when shitching between them. All the perspectives were loading the rigth session values when they were loaded for the first time, but needed to be updated after changes in the filter values to actualize the widgets on the sibling perspective. FEA: ItEr77S15FilteringEnhancements --- .../org/libreplan/web/common/FilterUtils.java | 13 ++++ .../web/orders/OrderCRUDController.java | 71 ++++++++++--------- .../orders/OrderElementTreeController.java | 2 +- .../order/OrderPlanningController.java | 30 +++++--- .../web/planner/tabs/OrdersTabCreator.java | 1 - 5 files changed, 70 insertions(+), 47 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java index 0c24a5b4c..eb0f54cbe 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/FilterUtils.java @@ -221,4 +221,17 @@ public class FilterUtils { return Sessions.getCurrent() != null; } + public static boolean hasOrderWBSFiltersChanged(Order order) { + return sessionExists() + && (Sessions.getCurrent().getAttribute( + order.getCode() + "-orderWBSFilterChanged") != null) + && ((Boolean) Sessions.getCurrent().getAttribute( + order.getCode() + "-orderWBSFilterChanged")); + } + + public static void writeOrderWBSFiltersChanged(Order order, boolean changed) { + Sessions.getCurrent().setAttribute( + order.getCode() + "-orderWBSFilterChanged", changed); + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java index d241f45d2..0aae5e922 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java @@ -274,49 +274,19 @@ public class OrderCRUDController extends GenericForwardComposer { filterFinishDate.setValue(endDate); loadLabels(); - + FilterUtils.writeProjectPlanningFilterChanged(false); } private void loadLabels() { - List sessionFilterPairs = FilterUtils + List sessionFilters = FilterUtils .readProjectsParameters(); // Allow labels when list is empty - if (sessionFilterPairs != null) { - for (FilterPair filterPair : sessionFilterPairs) { - - FilterPair toadd; - TaskGroupFilterEnum type = (TaskGroupFilterEnum) filterPair - .getType(); - switch (type) { - case Label: - toadd = new FilterPair(OrderFilterEnum.Label, - filterPair.getPattern(), filterPair.getValue()); - break; - case Criterion: - toadd = new FilterPair(OrderFilterEnum.Criterion, - filterPair.getPattern(), filterPair.getValue()); - break; - case ExternalCompany: - toadd = new FilterPair(OrderFilterEnum.ExternalCompany, - filterPair.getPattern(), filterPair.getValue()); - break; - case State: - toadd = new FilterPair(OrderFilterEnum.State, - filterPair.getPattern(), filterPair.getValue()); - - break; - default: - toadd = new FilterPair(OrderFilterEnum.Label, - filterPair.getPattern(), filterPair.getValue()); - break; - } - bdFilters.addSelectedElement(toadd); - } + if (sessionFilters != null) { + bdFilters.addSelectedElements(toOrderFilterEnum(sessionFilters)); return; } User user = orderModel.getUser(); - // Calculate filter based on user preferences if ((user != null) && (user.getProjectsFilterLabel() != null)) { bdFilters.addSelectedElement(new FilterPair(OrderFilterEnum.Label, @@ -325,6 +295,39 @@ public class OrderCRUDController extends GenericForwardComposer { } } + private List toOrderFilterEnum(List filterPairs) { + List result = new ArrayList(); + for (FilterPair filterPair : filterPairs) { + FilterPair toadd; + TaskGroupFilterEnum type = (TaskGroupFilterEnum) filterPair + .getType(); + switch (type) { + case Label: + toadd = new FilterPair(OrderFilterEnum.Label, + filterPair.getPattern(), filterPair.getValue()); + break; + case Criterion: + toadd = new FilterPair(OrderFilterEnum.Criterion, + filterPair.getPattern(), filterPair.getValue()); + break; + case ExternalCompany: + toadd = new FilterPair(OrderFilterEnum.ExternalCompany, + filterPair.getPattern(), filterPair.getValue()); + break; + case State: + toadd = new FilterPair(OrderFilterEnum.State, + filterPair.getPattern(), filterPair.getValue()); + break; + default: + toadd = new FilterPair(OrderFilterEnum.Label, + filterPair.getPattern(), filterPair.getValue()); + break; + } + result.add(toadd); + } + return result; + } + private void setupGlobalButtons() { Hbox perspectiveButtonsInsertionPoint = (Hbox) page .getFellow("perspectiveButtonsInsertionPoint"); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java index 8c5976f60..ce3874210 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java @@ -637,7 +637,7 @@ public class OrderElementTreeController extends TreeController { result.add(toTasKElementFilterEnum(filterPair)); } FilterUtils.writeOrderParameters(order, result); - + FilterUtils.writeOrderWBSFiltersChanged(order, true); } private FilterPair toTasKElementFilterEnum(FilterPair each) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java index 7d7418381..914118d6c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/order/OrderPlanningController.java @@ -230,7 +230,11 @@ public class OrderPlanningController implements Composer { } } - private void importOrderFiltersFromSession() { + public void importOrderFiltersFromSession() { + importOrderFiltersFromSession(false); + } + + public void importOrderFiltersFromSession(boolean forceReload) { filterNameOrderElement.setValue(FilterUtils.readOrderTaskName(order)); filterStartDateOrderElement.setValue(FilterUtils .readOrderStartDate(order)); @@ -238,11 +242,9 @@ public class OrderPlanningController implements Composer { .readOrderEndDate(order)); List sessionFilterPairs = FilterUtils .readOrderParameters(order); - if (sessionFilterPairs != null - && bdFiltersOrderElement.getSelectedElements().isEmpty()) { - for (Object each : sessionFilterPairs) { - bdFiltersOrderElement.addSelectedElement(each); - } + if ((sessionFilterPairs != null) + && (bdFiltersOrderElement.getSelectedElements().isEmpty() || forceReload)) { + bdFiltersOrderElement.addSelectedElements(sessionFilterPairs); } if (FilterUtils.readOrderInheritance(order) != null) { labelsWithoutInheritance.setChecked(FilterUtils @@ -272,9 +274,18 @@ public class OrderPlanningController implements Composer { public void onApplyFilter() { filterByPredicate(createPredicate()); + List listFilters = (List) bdFiltersOrderElement + .getSelectedElements(); + FilterUtils.writeOrderParameters(order, listFilters); } private TaskElementPredicate createPredicate() { + + if (FilterUtils.hasOrderWBSFiltersChanged(order)) { + importOrderFiltersFromSession(true); + FilterUtils.writeOrderWBSFiltersChanged(order, false); + } + List listFilters = (List) bdFiltersOrderElement .getSelectedElements(); Date startDate = filterStartDateOrderElement.getValue(); @@ -289,10 +300,7 @@ public class OrderPlanningController implements Composer { FilterUtils.writeOrderTaskName(order, name); FilterUtils.writeOrderStartDate(order, startDate); FilterUtils.writeOrderEndDate(order, finishDate); - - // Peding to change FilterUtils.writeOrderInheritance(order, ignoreLabelsInheritance); - FilterUtils.writeOrderParameters(order, listFilters); return new TaskElementPredicate(listFilters, startDate, finishDate, name, ignoreLabelsInheritance); } @@ -354,7 +362,7 @@ public class OrderPlanningController implements Composer { && (filterStartDateOrderElement.getValue() != null) && (finishDate.compareTo(filterStartDateOrderElement .getValue()) < 0)) { - filterFinishDateOrderElement.setValue(null); + filterFinishDateOrderElement.setRawValue(null); throw new WrongValueException(comp, _("must be after start date")); } @@ -373,7 +381,7 @@ public class OrderPlanningController implements Composer { && (filterFinishDateOrderElement.getValue() != null) && (startDate.compareTo(filterFinishDateOrderElement .getValue()) > 0)) { - filterStartDateOrderElement.setValue(null); + filterStartDateOrderElement.setRawValue(null); throw new WrongValueException(comp, _("must be lower than end date")); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java index f2dee5bbe..0d4125839 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/tabs/OrdersTabCreator.java @@ -126,7 +126,6 @@ public class OrdersTabCreator { protected void afterShowAction() { if (checkFiltersChanged()) { orderCRUDController.readSessionFilterDates(); - orderCRUDController.onApplyFilter(); setFiltersUnchanged(); } orderCRUDController.goToList();