ItEr46S19CUProcuraOrganizacionsTraballoItEr40S22: Made some changes in order to update to last patches related with MultipleFiltersFinder.
This commit is contained in:
parent
611152f28f
commit
9d0b4c7d77
5 changed files with 299 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
||||
|
|
|
|||
|
|
@ -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')}"/>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue