ItEr46S19CUProcuraOrganizacionsTraballoItEr40S22: Made some changes in order to update to last patches related with MultipleFiltersFinder.

This commit is contained in:
Manuel Rego Casasnovas 2010-02-04 15:30:38 +01:00 committed by Javier Moran Rua
parent 611152f28f
commit 9d0b4c7d77
5 changed files with 299 additions and 2 deletions

View file

@ -0,0 +1,49 @@
/*
* This file is part of NavalPlan
*
* Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
* Desenvolvemento Tecnolóxico de Galicia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
package org.navalplanner.web.common.components.finders;
import static org.navalplanner.web.I18nHelper._;
import org.navalplanner.business.orders.entities.OrderElement;
/**
* Different filters for {@link OrderElement}.
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
*/
public enum OrderElementFilterEnum implements IFilterEnum {
None("..."), Criterion(_("Criterion")), Label(_("Label"));
private String description;
private OrderElementFilterEnum(String description) {
this.description = description;
}
public String toString() {
return this.description;
}
}

View file

@ -0,0 +1,244 @@
/*
* This file is part of NavalPlan
*
* Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
* Desenvolvemento Tecnolóxico de Galicia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.navalplanner.web.common.components.finders;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.labels.daos.ILabelDAO;
import org.navalplanner.business.labels.daos.ILabelTypeDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
import org.navalplanner.business.orders.entities.OrderStatusEnum;
import org.navalplanner.business.resources.daos.ICriterionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
* Implements all the methods needed to search the criterion to filter the
* orders. Provides multiples criterions to filter like {@link Criterion} and
* {@link Label}.
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
*/
public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
@Autowired
private ICriterionTypeDAO criterionTypeDAO;
@Autowired
private ILabelTypeDAO labelTypeDAO;
@Autowired
private ICriterionDAO criterionDAO;
@Autowired
private ILabelDAO labelDAO;
private static final Map<CriterionType, List<Criterion>> mapCriterions = new HashMap<CriterionType, List<Criterion>>();
private static final Map<LabelType, List<Label>> mapLabels = new HashMap<LabelType, List<Label>>();
private static OrderStatusEnum[] ordersStatusEnums;
protected OrderElementsMultipleFiltersFinder() {
}
@Transactional(readOnly = true)
public void init() {
getAdHocTransactionService()
.runOnReadOnlyTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
loadLabels();
loadCriterions();
return null;
}
});
}
private void loadCriterions() {
mapCriterions.clear();
List<CriterionType> criterionTypes = criterionTypeDAO
.getCriterionTypes();
for (CriterionType criterionType : criterionTypes) {
List<Criterion> criterions = new ArrayList<Criterion>(criterionDAO
.findByType(criterionType));
mapCriterions.put(criterionType, criterions);
}
}
private void loadLabels() {
mapLabels.clear();
List<LabelType> labelTypes = labelTypeDAO.getAll();
for (LabelType labelType : labelTypes) {
List<Label> labels = new ArrayList<Label>(labelDAO
.findByType(labelType));
mapLabels.put(labelType, labels);
}
}
public List<FilterPair> getFirstTenFilters() {
getListMatching().clear();
fillWithFirstTenFiltersLabels();
fillWithFirstTenFiltersCriterions();
getListMatching().add(
new FilterPair(OrderElementFilterEnum.None,
OrderElementFilterEnum.None.toString(), null));
return getListMatching();
}
private List<FilterPair> fillWithFirstTenFiltersLabels() {
Iterator<LabelType> iteratorLabelType = mapLabels.keySet().iterator();
while (iteratorLabelType.hasNext() && getListMatching().size() < 10) {
LabelType type = iteratorLabelType.next();
for (int i = 0; getListMatching().size() < 10
&& i < mapLabels.get(type).size(); i++) {
Label label = mapLabels.get(type).get(i);
String pattern = type.getName() + " :: " + label.getName();
getListMatching().add(
new FilterPair(OrderElementFilterEnum.Label, pattern,
label));
}
}
return getListMatching();
}
private List<FilterPair> fillWithFirstTenFiltersCriterions() {
Iterator<CriterionType> iteratorCriterionType = mapCriterions.keySet()
.iterator();
while (iteratorCriterionType.hasNext() && getListMatching().size() < 10) {
CriterionType type = iteratorCriterionType.next();
for (int i = 0; getListMatching().size() < 10
&& i < mapCriterions.get(type).size(); i++) {
Criterion criterion = mapCriterions.get(type).get(i);
String pattern = type.getName() + " :: " + criterion.getName();
getListMatching().add(
new FilterPair(OrderElementFilterEnum.Criterion,
pattern, criterion));
}
}
return getListMatching();
}
public List<FilterPair> getMatching(String filter) {
getListMatching().clear();
if ((filter != null) && (!filter.isEmpty())) {
filter = filter.toLowerCase();
searchInCriterionTypes(filter);
searchInLabelTypes(filter);
}
addNoneFilter();
return getListMatching();
}
private void searchInCriterionTypes(String filter) {
boolean limited = (filter.length() < 3);
for (CriterionType type : mapCriterions.keySet()) {
if (type.getName().toLowerCase().contains(filter)) {
setFilterPairCriterionType(type, limited);
} else {
searchInCriterions(type, filter);
}
}
}
private void searchInCriterions(CriterionType type, String filter) {
for (Criterion criterion : mapCriterions.get(type)) {
if (criterion.getName().toLowerCase().contains(filter)) {
addCriterion(type, criterion);
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
}
}
private void setFilterPairCriterionType(CriterionType type, boolean limited) {
for (Criterion criterion : mapCriterions.get(type)) {
addCriterion(type, criterion);
if ((limited) && (getListMatching().size() > 9)) {
return;
}
}
}
private void searchInLabelTypes(String filter) {
boolean limited = (filter.length() < 3);
for (LabelType type : mapLabels.keySet()) {
if (type.getName().toLowerCase().contains(filter)) {
setFilterPairLabelType(type, limited);
} else {
searchInLabels(type, filter);
}
}
}
private void searchInLabels(LabelType type, String filter) {
for (Label label : mapLabels.get(type)) {
if (label.getName().toLowerCase().contains(filter)) {
addLabel(type, label);
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
}
}
private void setFilterPairLabelType(LabelType type, boolean limited) {
for (Label label : mapLabels.get(type)) {
addLabel(type, label);
if ((limited) && (getListMatching().size() > 9)) {
return;
}
}
}
private void addCriterion(CriterionType type, Criterion criterion) {
String pattern = type.getName() + " :: " + criterion.getName();
getListMatching().add(
new FilterPair(OrderElementFilterEnum.Criterion, pattern,
criterion));
}
private void addLabel(LabelType type, Label label) {
String pattern = type.getName() + " :: " + label.getName();
getListMatching().add(
new FilterPair(OrderElementFilterEnum.Label, pattern, label));
}
private void addNoneFilter() {
getListMatching().add(
new FilterPair(OrderElementFilterEnum.None,
OrderElementFilterEnum.None.toString(), null));
}
}

View file

@ -29,6 +29,7 @@ import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.web.common.components.finders.FilterPair;
import org.navalplanner.web.common.components.finders.OrderElementFilterEnum;
/**
* Checks if {@link OrderElement} matches with the different filters.
@ -92,7 +93,7 @@ public class OrderElementPredicate implements IPredicate {
}
private boolean acceptFilter(FilterPair filter, OrderElement orderElement) {
switch (filter.getType()) {
switch ((OrderElementFilterEnum) filter.getType()) {
case Criterion:
return acceptCriterion(filter, orderElement);
case Label:

View file

@ -42,6 +42,9 @@
<bean id="ordersMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrdersMultipleFiltersFinder" scope="singleton"
init-method="init" />
<bean id="orderElementsMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrderElementsMultipleFiltersFinder" scope="singleton"
init-method="init" />
<bean id="resourcesMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.ResourcesMultipleFiltersFinder" scope="singleton"
init-method="init" />

View file

@ -2,7 +2,7 @@
<label value="${i18n:_('Filter by')}"
tooltiptext="${i18n:_('Select required criteria set and press filter button')}"/>
<bandboxMultipleSearch id="bdFiltersOrderElement" widthBandbox="385px" widthListbox="400px"
finder="multipleFiltersFinder"/>
finder="orderElementsMultipleFiltersFinder"/>
<label value="${i18n:_('from')}"/>
<datebox id="filterStartDateOrderElement" constraint = "@{treeController.checkConstraintStartDate}"/>
<label value="${i18n:_('to')}"/>