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
This commit is contained in:
Lorenzo Tilve Álvaro 2013-02-22 09:06:05 +01:00
parent 9ba7d7c285
commit bd86dfd183
5 changed files with 70 additions and 47 deletions

View file

@ -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);
}
}

View file

@ -274,49 +274,19 @@ public class OrderCRUDController extends GenericForwardComposer {
filterFinishDate.setValue(endDate);
loadLabels();
FilterUtils.writeProjectPlanningFilterChanged(false);
}
private void loadLabels() {
List<FilterPair> sessionFilterPairs = FilterUtils
List<FilterPair> 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<FilterPair> toOrderFilterEnum(List<FilterPair> filterPairs) {
List<FilterPair> result = new ArrayList<FilterPair>();
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");

View file

@ -637,7 +637,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
result.add(toTasKElementFilterEnum(filterPair));
}
FilterUtils.writeOrderParameters(order, result);
FilterUtils.writeOrderWBSFiltersChanged(order, true);
}
private FilterPair toTasKElementFilterEnum(FilterPair each) {

View file

@ -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<FilterPair> 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<FilterPair> listFilters = (List<FilterPair>) bdFiltersOrderElement
.getSelectedElements();
FilterUtils.writeOrderParameters(order, listFilters);
}
private TaskElementPredicate createPredicate() {
if (FilterUtils.hasOrderWBSFiltersChanged(order)) {
importOrderFiltersFromSession(true);
FilterUtils.writeOrderWBSFiltersChanged(order, false);
}
List<FilterPair> listFilters = (List<FilterPair>) 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"));
}

View file

@ -126,7 +126,6 @@ public class OrdersTabCreator {
protected void afterShowAction() {
if (checkFiltersChanged()) {
orderCRUDController.readSessionFilterDates();
orderCRUDController.onApplyFilter();
setFiltersUnchanged();
}
orderCRUDController.goToList();