ItEr46S17CUListadoRecursosTraballadoresItEr08S08: Refactoring MultipleFiltersFinder class name and adding a new class to contain the common filtered methods.

This commit is contained in:
Susana Montes Pedreira 2010-02-04 13:29:20 +01:00 committed by Javier Moran Rua
parent 7a6e402054
commit e14473a168
5 changed files with 458 additions and 524 deletions

View file

@ -23,390 +23,45 @@ package org.navalplanner.web.common.components.finders;
import static org.navalplanner.web.I18nHelper._;
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.IAdHocTransactionService;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO;
import org.navalplanner.business.externalcompanies.entities.ExternalCompany;
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.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderStatusEnum;
import org.navalplanner.business.qualityforms.entities.QualityForm;
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;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
/**
* Implements all the methods needed to search the criterion to filter the
* orders. Provides multiples criterions to filter like {@link Criterion},
* {@link Label}, {@link OrderStatusEnum},{@link ExternalCompany} object , or
* filter by order code or customer reference.
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class MultipleFiltersFinder implements IMultipleFiltersFinder {
@Autowired
private ICriterionTypeDAO criterionTypeDAO;
@Autowired
private ILabelTypeDAO labelTypeDAO;
@Autowired
private IExternalCompanyDAO externalCompanyDAO;
@Autowired
private ICriterionDAO criterionDAO;
@Autowired
private ILabelDAO labelDAO;
@Autowired
private IOrderDAO orderDAO;
public abstract class MultipleFiltersFinder implements IMultipleFiltersFinder {
@Autowired
private IAdHocTransactionService adHocTransactionService;
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 final List<ExternalCompany> externalCompanies = new ArrayList<ExternalCompany>();
private static final List<String> customerReferences = new ArrayList<String>();
private static OrderStatusEnum[] ordersStatusEnums;
private static boolean updating = false;
private static final List<String> ordersCodes = new ArrayList<String>();
private List<FilterPair> listMatching = new ArrayList<FilterPair>();
private final String headers[] = { _("Filter type"), _("Filter pattern") };
protected MultipleFiltersFinder() {
MultipleFiltersFinder() {
}
@Transactional(readOnly = true)
public void init() {
adHocTransactionService
.runOnReadOnlyTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
loadLabels();
loadCriterions();
loadExternalCompanies();
loadOrdersStatusEnums();
loadOrderCodesAndCustomerReferences();
return null;
}
});
public IAdHocTransactionService getAdHocTransactionService() {
return adHocTransactionService;
}
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);
}
public void setAdHocTransactionService(
IAdHocTransactionService adHocTransactionService) {
this.adHocTransactionService = adHocTransactionService;
}
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);
}
}
private void loadExternalCompanies() {
externalCompanies.clear();
externalCompanies.addAll(externalCompanyDAO
.getExternalCompaniesAreClient());
}
private void loadOrdersStatusEnums() {
ordersStatusEnums = OrderStatusEnum.values();
}
private void loadOrderCodesAndCustomerReferences() {
customerReferences.clear();
ordersCodes.clear();
for (Order order : orderDAO.getOrders()) {
// load customer references
if ((order.getCustomerReference() != null)
&& (!order.getCustomerReference().isEmpty())) {
customerReferences.add(order.getCustomerReference());
}
// load the order codes
ordersCodes.add(order.getCode());
}
}
public List<FilterPair> getFirstTenFilters() {
listMatching.clear();
fillWithFirstTenFiltersLabels();
fillWithFirstTenFiltersCriterions();
fillWithFirstTenFiltersCustomer();
fillWithFirstTenFiltersState();
fillWihtFirstTenFiltersCodes();
fillWihtFirstTenFiltersCustomerReferences();
listMatching.add(new FilterPair(OrderFilterEnum.None,
OrderFilterEnum.None.toString(), null));
public List<FilterPair> getListMatching() {
return listMatching;
}
private List<FilterPair> fillWithFirstTenFiltersLabels() {
Iterator<LabelType> iteratorLabelType = mapLabels.keySet().iterator();
while (iteratorLabelType.hasNext() && listMatching.size() < 10) {
LabelType type = iteratorLabelType.next();
for (int i = 0; listMatching.size() < 10
&& i < mapLabels.get(type).size(); i++) {
Label label = mapLabels.get(type).get(i);
addLabel(type, label);
}
}
return listMatching;
public void setListMatching(List<FilterPair> listMatching) {
this.listMatching = listMatching;
}
private List<FilterPair> fillWithFirstTenFiltersCriterions() {
Iterator<CriterionType> iteratorCriterionType = mapCriterions.keySet()
.iterator();
while (iteratorCriterionType.hasNext() && listMatching.size() < 10) {
CriterionType type = iteratorCriterionType.next();
for (int i = 0; listMatching.size() < 10
&& i < mapCriterions.get(type).size(); i++) {
Criterion criterion = mapCriterions.get(type).get(i);
addCriterion(type, criterion);
}
}
return listMatching;
}
private List<FilterPair> fillWithFirstTenFiltersCustomer() {
for (int i = 0; listMatching.size() < 10
&& i < externalCompanies.size(); i++) {
ExternalCompany externalCompany = externalCompanies.get(i);
addExternalCompany(externalCompany);
}
return listMatching;
}
private List<FilterPair> fillWithFirstTenFiltersState() {
for (int i = 0; listMatching.size() < 10
&& i < OrderStatusEnum.values().length; i++) {
OrderStatusEnum state = OrderStatusEnum.values()[i];
addState(state);
}
return listMatching;
}
private List<FilterPair> fillWihtFirstTenFiltersCodes() {
for (int i = 0; listMatching.size() < 10 && i < ordersCodes.size(); i++) {
String code = ordersCodes.get(i);
addCode(code);
}
return listMatching;
}
private List<FilterPair> fillWihtFirstTenFiltersCustomerReferences() {
for (int i = 0; listMatching.size() < 10
&& i < customerReferences.size(); i++) {
String reference = customerReferences.get(i);
addCustomerReference(reference);
}
return listMatching;
}
public List<FilterPair> getMatching(String filter) {
listMatching.clear();
if ((filter != null) && (!filter.isEmpty())) {
filter = filter.toLowerCase();
if (filter.indexOf("rc:") == 0) {
searchInCustomerReferences(filter);
} else if (filter.indexOf("cod:") == 0) {
this.searchInOrderCodes(filter);
} else {
searchInCriterionTypes(filter);
searchInLabelTypes(filter);
searchInExternalCompanies(filter);
searchInOrderStatus(filter);
}
}
addNoneFilter();
return listMatching;
}
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) && (listMatching.size() > 9)) {
return;
}
}
}
}
private void setFilterPairCriterionType(CriterionType type, boolean limited) {
for (Criterion criterion : mapCriterions.get(type)) {
addCriterion(type, criterion);
if ((limited) && (listMatching.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) && (listMatching.size() > 9)) {
return;
}
}
}
}
private void setFilterPairLabelType(LabelType type, boolean limited) {
for (Label label : mapLabels.get(type)) {
addLabel(type, label);
if ((limited) && (listMatching.size() > 9)) {
return;
}
}
}
private void searchInExternalCompanies(String filter){
for(ExternalCompany externalCompany : externalCompanies){
if ((externalCompany.getName().toLowerCase().contains(filter))
|| (externalCompany.getNif().toLowerCase().contains(filter))) {
addExternalCompany(externalCompany);
if ((filter.length() < 3) && (listMatching.size() > 9)) {
return;
}
}
}
}
private void searchInOrderStatus(String filter) {
for (OrderStatusEnum state : ordersStatusEnums) {
if (state.name().toLowerCase().contains(filter)) {
addState(state);
if ((filter.length() < 3) && (listMatching.size() > 9)) {
return;
}
}
}
}
private void searchInOrderCodes(String filter) {
if (filter.indexOf("cod:") == 0) {
String codeFilter = filter.replaceFirst("cod:", "");
codeFilter = codeFilter.replace(" ", "");
for (String code : ordersCodes) {
if (code.toLowerCase().equals(codeFilter)) {
addCode(code);
return;
}
}
}
}
private void searchInCustomerReferences(String filter) {
if (filter.indexOf("rc:") == 0) {
String referenceFilter = filter.replaceFirst("rc:", "");
referenceFilter = referenceFilter.replace(" ", "");
for (String reference : customerReferences) {
if (reference.toLowerCase().equals(referenceFilter)) {
addCustomerReference(reference);
return;
}
}
}
}
private void addCriterion(CriterionType type, Criterion criterion) {
String pattern = type.getName() + " :: " + criterion.getName();
listMatching.add(new FilterPair(OrderFilterEnum.Criterion, pattern,
criterion));
}
private void addLabel(LabelType type, Label label) {
String pattern = type.getName() + " :: " + label.getName();
listMatching.add(new FilterPair(OrderFilterEnum.Label, pattern, label));
}
private void addExternalCompany(ExternalCompany externalCompany) {
String pattern = externalCompany.getName() + " :: "
+ externalCompany.getNif();
listMatching.add(new FilterPair(OrderFilterEnum.ExternalCompany,
pattern, externalCompany));
}
private void addState(OrderStatusEnum state) {
listMatching.add(new FilterPair(OrderFilterEnum.State, state.name(),
state));
}
private void addCode(String code) {
listMatching.add(new FilterPair(OrderFilterEnum.Code, code, code));
}
private void addCustomerReference(String reference) {
listMatching.add(new FilterPair(OrderFilterEnum.CustomerReference,
reference, reference));
}
private void addNoneFilter() {
listMatching.add(new FilterPair(OrderFilterEnum.None,
OrderFilterEnum.None.toString(), null));
public ListitemRenderer getFilterPairRenderer() {
return filterPairRenderer;
}
public String objectToString(Object obj) {
@ -416,7 +71,6 @@ public class MultipleFiltersFinder implements IMultipleFiltersFinder {
return text;
}
@Override
public String getNewFilterText(String inputText) {
String newFilterText = new String("");
String[] filtersText = inputText.split(",");
@ -467,7 +121,6 @@ public class MultipleFiltersFinder implements IMultipleFiltersFinder {
return true;
}
@Override
public List<FilterPair> updateDeletedFilters(List filterValues, String value) {
String[] values = value.split(",");
List<FilterPair> listFilters = (List<FilterPair>) filterValues;
@ -507,15 +160,15 @@ public class MultipleFiltersFinder implements IMultipleFiltersFinder {
}
/**
* Render for {@link QualityForm}
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
private final ListitemRenderer filterPairRenderer = new ListitemRenderer() {
* Render for {@link FilterPair}
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
private final ListitemRenderer filterPairRenderer = new ListitemRenderer() {
@Override
public void render(Listitem item, Object data) throws Exception {
@Override
public void render(Listitem item, Object data) throws Exception {
FilterPair filterPair = (FilterPair) data;
item.setValue(data);
item.setValue(data);
final Listcell labelType = new Listcell();
labelType.setLabel(filterPair.getType().toString());
@ -525,7 +178,7 @@ public class MultipleFiltersFinder implements IMultipleFiltersFinder {
labelPattern.setLabel(filterPair.getPattern());
labelPattern.setParent(item);
}
};
}
};
}

View file

@ -0,0 +1,409 @@
/*
* This file is part of ###PROJECT_NAME###
*
* 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.externalcompanies.daos.IExternalCompanyDAO;
import org.navalplanner.business.externalcompanies.entities.ExternalCompany;
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.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.Order;
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},
* {@link Label}, {@link OrderStatusEnum},{@link ExternalCompany} object , or
* filter by order code or customer reference.
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
@Autowired
private ICriterionTypeDAO criterionTypeDAO;
@Autowired
private ILabelTypeDAO labelTypeDAO;
@Autowired
private IExternalCompanyDAO externalCompanyDAO;
@Autowired
private ICriterionDAO criterionDAO;
@Autowired
private ILabelDAO labelDAO;
@Autowired
private IOrderDAO orderDAO;
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 final List<ExternalCompany> externalCompanies = new ArrayList<ExternalCompany>();
private static final List<String> customerReferences = new ArrayList<String>();
private static OrderStatusEnum[] ordersStatusEnums;
private static final List<String> ordersCodes = new ArrayList<String>();
protected OrdersMultipleFiltersFinder() {
}
@Transactional(readOnly = true)
public void init() {
getAdHocTransactionService()
.runOnReadOnlyTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
loadLabels();
loadCriterions();
loadExternalCompanies();
loadOrdersStatusEnums();
loadOrderCodesAndCustomerReferences();
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);
}
}
private void loadExternalCompanies() {
externalCompanies.clear();
externalCompanies.addAll(externalCompanyDAO
.getExternalCompaniesAreClient());
}
private void loadOrdersStatusEnums() {
ordersStatusEnums = OrderStatusEnum.values();
}
private void loadOrderCodesAndCustomerReferences() {
customerReferences.clear();
ordersCodes.clear();
for (Order order : orderDAO.getOrders()) {
// load customer references
if ((order.getCustomerReference() != null)
&& (!order.getCustomerReference().isEmpty())) {
customerReferences.add(order.getCustomerReference());
}
// load the order codes
ordersCodes.add(order.getCode());
}
}
public List<FilterPair> getFirstTenFilters() {
getListMatching().clear();
fillWithFirstTenFiltersLabels();
fillWithFirstTenFiltersCriterions();
fillWithFirstTenFiltersCustomer();
fillWithFirstTenFiltersState();
fillWihtFirstTenFiltersCodes();
fillWihtFirstTenFiltersCustomerReferences();
getListMatching().add(
new FilterPair(OrderFilterEnum.None,
OrderFilterEnum.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(OrderFilterEnum.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(OrderFilterEnum.Criterion,
pattern, criterion));
}
}
return getListMatching();
}
private List<FilterPair> fillWithFirstTenFiltersCustomer() {
for (int i = 0; getListMatching().size() < 10
&& i < externalCompanies.size(); i++) {
ExternalCompany externalCompany = externalCompanies.get(i);
addExternalCompany(externalCompany);
}
return getListMatching();
}
private List<FilterPair> fillWithFirstTenFiltersState() {
for (int i = 0; getListMatching().size() < 10
&& i < OrderStatusEnum.values().length; i++) {
OrderStatusEnum state = OrderStatusEnum.values()[i];
addState(state);
}
return getListMatching();
}
private List<FilterPair> fillWihtFirstTenFiltersCodes() {
for (int i = 0; getListMatching().size() < 10 && i < ordersCodes.size(); i++) {
String code = ordersCodes.get(i);
addCode(code);
}
return getListMatching();
}
private List<FilterPair> fillWihtFirstTenFiltersCustomerReferences() {
for (int i = 0; getListMatching().size() < 10
&& i < customerReferences.size(); i++) {
String reference = customerReferences.get(i);
addCustomerReference(reference);
}
return getListMatching();
}
public List<FilterPair> getMatching(String filter) {
getListMatching().clear();
if ((filter != null) && (!filter.isEmpty())) {
filter = filter.toLowerCase();
if (filter.indexOf("rc:") == 0) {
searchInCustomerReferences(filter);
} else if (filter.indexOf("cod:") == 0) {
this.searchInOrderCodes(filter);
} else {
searchInCriterionTypes(filter);
searchInLabelTypes(filter);
searchInExternalCompanies(filter);
searchInOrderStatus(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 searchInExternalCompanies(String filter){
for(ExternalCompany externalCompany : externalCompanies){
if ((externalCompany.getName().toLowerCase().contains(filter))
|| (externalCompany.getNif().toLowerCase().contains(filter))) {
addExternalCompany(externalCompany);
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
}
}
private void searchInOrderStatus(String filter) {
for (OrderStatusEnum state : ordersStatusEnums) {
if (state.name().toLowerCase().contains(filter)) {
addState(state);
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
}
}
private void searchInOrderCodes(String filter) {
if (filter.indexOf("cod:") == 0) {
String codeFilter = filter.replaceFirst("cod:", "");
codeFilter = codeFilter.replace(" ", "");
for (String code : ordersCodes) {
if (code.toLowerCase().equals(codeFilter)) {
addCode(code);
return;
}
}
}
}
private void searchInCustomerReferences(String filter) {
if (filter.indexOf("rc:") == 0) {
String referenceFilter = filter.replaceFirst("rc:", "");
referenceFilter = referenceFilter.replace(" ", "");
for (String reference : customerReferences) {
if (reference.toLowerCase().equals(referenceFilter)) {
addCustomerReference(reference);
return;
}
}
}
}
private void addCriterion(CriterionType type, Criterion criterion) {
String pattern = type.getName() + " :: " + criterion.getName();
getListMatching().add(
new FilterPair(OrderFilterEnum.Criterion, pattern,
criterion));
}
private void addLabel(LabelType type, Label label) {
String pattern = type.getName() + " :: " + label.getName();
getListMatching().add(
new FilterPair(OrderFilterEnum.Label, pattern, label));
}
private void addExternalCompany(ExternalCompany externalCompany) {
String pattern = externalCompany.getName() + " :: "
+ externalCompany.getNif();
getListMatching().add(
new FilterPair(OrderFilterEnum.ExternalCompany,
pattern, externalCompany));
}
private void addState(OrderStatusEnum state) {
getListMatching().add(
new FilterPair(OrderFilterEnum.State, state.name(),
state));
}
private void addCode(String code) {
getListMatching().add(new FilterPair(OrderFilterEnum.Code, code, code));
}
private void addCustomerReference(String reference) {
getListMatching().add(
new FilterPair(OrderFilterEnum.CustomerReference,
reference, reference));
}
private void addNoneFilter() {
getListMatching().add(
new FilterPair(OrderFilterEnum.None,
OrderFilterEnum.None.toString(), null));
}
}

View file

@ -20,28 +20,21 @@
package org.navalplanner.web.common.components.finders;
import static org.navalplanner.web.I18nHelper._;
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.IAdHocTransactionService;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.costcategories.daos.ICostCategoryDAO;
import org.navalplanner.business.costcategories.entities.CostCategory;
import org.navalplanner.business.resources.daos.ICriterionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.daos.IResourceDAO;
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;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
/**
* Implements all the methods needed to search the criterion to filter the
@ -50,7 +43,7 @@ import org.zkoss.zul.ListitemRenderer;
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
public class ResourcesMultipleFiltersFinder extends MultipleFiltersFinder {
@Autowired
private ICriterionTypeDAO criterionTypeDAO;
@ -61,27 +54,18 @@ public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
@Autowired
private ICostCategoryDAO costCategoryDAO;
@Autowired
private IResourceDAO resourceDAO;
@Autowired
private IAdHocTransactionService adHocTransactionService;
private static final Map<CriterionType, List<Criterion>> mapCriterions = new HashMap<CriterionType, List<Criterion>>();
private static final List<CostCategory> costCategories = new ArrayList<CostCategory>();
private List<FilterPair> listMatching = new ArrayList<FilterPair>();
private final String headers[] = { _("Filter type"), _("Filter pattern") };
protected ResourcesMultipleFiltersFinder() {
}
@Override
@Transactional(readOnly = true)
public void init() {
adHocTransactionService
getAdHocTransactionService()
.runOnReadOnlyTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
@ -109,47 +93,50 @@ public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
costCategories.addAll(costCategoryDAO.findActive());
}
@Override
public List<FilterPair> getFirstTenFilters() {
listMatching.clear();
getListMatching().clear();
fillWithFirstTenFiltersCriterions();
fillWithFirstTenFiltersCostCategories();
listMatching.add(new FilterPair(OrderFilterEnum.None,
getListMatching().add(
new FilterPair(OrderFilterEnum.None,
OrderFilterEnum.None.toString(), null));
return listMatching;
return getListMatching();
}
private List<FilterPair> fillWithFirstTenFiltersCriterions() {
Iterator<CriterionType> iteratorCriterionType = mapCriterions.keySet()
.iterator();
while (iteratorCriterionType.hasNext() && listMatching.size() < 10) {
while (iteratorCriterionType.hasNext() && getListMatching().size() < 10) {
CriterionType type = iteratorCriterionType.next();
for (int i = 0; listMatching.size() < 10
for (int i = 0; getListMatching().size() < 10
&& i < mapCriterions.get(type).size(); i++) {
Criterion criterion = mapCriterions.get(type).get(i);
addCriterion(type, criterion);
}
}
return listMatching;
return getListMatching();
}
private List<FilterPair> fillWithFirstTenFiltersCostCategories() {
for (int i = 0; listMatching.size() < 10
for (int i = 0; getListMatching().size() < 10
&& i < costCategories.size(); i++) {
CostCategory costCategory = costCategories.get(i);
addCostCategory(costCategory);
}
return listMatching;
return getListMatching();
}
@Override
public List<FilterPair> getMatching(String filter) {
listMatching.clear();
getListMatching().clear();
if ((filter != null) && (!filter.isEmpty())) {
filter = filter.toLowerCase();
searchInCriterionTypes(filter);
searchInCostCategories(filter);
}
addNoneFilter();
return listMatching;
return getListMatching();
}
private void searchInCriterionTypes(String filter) {
@ -167,7 +154,7 @@ public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
for (Criterion criterion : mapCriterions.get(type)) {
if (criterion.getName().toLowerCase().contains(filter)) {
addCriterion(type, criterion);
if ((filter.length() < 3) && (listMatching.size() > 9)) {
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
@ -177,7 +164,7 @@ public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
private void setFilterPairCriterionType(CriterionType type, boolean limited) {
for (Criterion criterion : mapCriterions.get(type)) {
addCriterion(type, criterion);
if ((limited) && (listMatching.size() > 9)) {
if ((limited) && (getListMatching().size() > 9)) {
return;
}
}
@ -187,7 +174,7 @@ public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
for (CostCategory costCategory : costCategories) {
if (costCategory.getName().toLowerCase().contains(filter)) {
addCostCategory(costCategory);
if ((filter.length() < 3) && (listMatching.size() > 9)) {
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
@ -196,138 +183,23 @@ public class ResourcesMultipleFiltersFinder implements IMultipleFiltersFinder {
private void addCriterion(CriterionType type, Criterion criterion) {
String pattern = type.getName() + " :: " + criterion.getName();
listMatching.add(new FilterPair(ResourceFilterEnum.Criterion, pattern,
getListMatching()
.add(
new FilterPair(ResourceFilterEnum.Criterion, pattern,
criterion));
}
private void addCostCategory(CostCategory costCategory) {
String pattern = costCategory.getName();
listMatching.add(new FilterPair(ResourceFilterEnum.CostCategory,
getListMatching().add(
new FilterPair(ResourceFilterEnum.CostCategory,
pattern, costCategory));
}
private void addNoneFilter() {
listMatching.add(new FilterPair(ResourceFilterEnum.None,
getListMatching().add(
new FilterPair(ResourceFilterEnum.None,
ResourceFilterEnum.None.toString(), null));
}
public String objectToString(Object obj) {
FilterPair filterPair = (FilterPair) obj;
String text = filterPair.getType() + "(" + filterPair.getPattern()
+ "), ";
return text;
}
@Override
public String getNewFilterText(String inputText) {
String newFilterText = new String("");
String[] filtersText = inputText.split(",");
newFilterText = getLastText(filtersText);
newFilterText = newFilterText.replace(" ", "");
newFilterText = newFilterText.trim();
return newFilterText;
}
private String getLastText(String[] texts) {
Integer last = texts.length - 1;
if (texts.length > 0) {
return texts[last];
} else {
return "";
}
}
public boolean isValidNewFilter(Object obj) {
FilterPair filter = (FilterPair) obj;
if (filter.getType().equals(OrderFilterEnum.None)) {
return false;
}
return true;
}
public boolean isValidFormatText(List filterValues, String value) {
if (filterValues.isEmpty()) {
return true;
}
filterValues = updateDeletedFilters(filterValues, value);
value = value.replace(" ", "");
String[] values = value.split(",");
if (values.length != filterValues.size()) {
return false;
}
int i = 0;
for (FilterPair filterPair : (List<FilterPair>) filterValues) {
String filterPairText = filterPair.getType() + "("
+ filterPair.getPattern() + ")";
if (!isFilterAdded(values, filterPairText)) {
return false;
}
i++;
}
return true;
}
@Override
public List<FilterPair> updateDeletedFilters(List filterValues, String value) {
String[] values = value.split(",");
List<FilterPair> listFilters = (List<FilterPair>) filterValues;
List<FilterPair> list = new ArrayList<FilterPair>();
list.addAll(listFilters);
if (values.length < filterValues.size() + 1) {
for (FilterPair filterPair : list) {
String filter = filterPair.getType() + "("
+ filterPair.getPattern() + ")";
if (!isFilterAdded(values, filter)) {
listFilters.remove(filterPair);
}
}
}
return listFilters;
}
private boolean isFilterAdded(String[] values, String filter) {
for (int i = 0; i < values.length; i++) {
String value = values[i].replace(" ", "");
filter = filter.replace(" ", "");
if (filter.equals(value)) {
return true;
}
}
return false;
}
public String[] getHeaders() {
return headers;
}
public ListitemRenderer getItemRenderer() {
return filterPairRenderer;
}
/**
* Render for {@link FilterPair}
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
private final ListitemRenderer filterPairRenderer = new ListitemRenderer() {
@Override
public void render(Listitem item, Object data) throws Exception {
FilterPair filterPair = (FilterPair) data;
item.setValue(data);
final Listcell labelType = new Listcell();
labelType.setLabel(filterPair.getType().toString());
labelType.setParent(item);
final Listcell labelPattern = new Listcell();
labelPattern.setLabel(filterPair.getPattern());
labelPattern.setParent(item);
}
};
}

View file

@ -39,7 +39,7 @@
<lookup-method name="getTaskElementAdapter" bean="taskElementAdapter"/>
</bean>
<bean id="multipleFiltersFinder" class="org.navalplanner.web.common.components.finders.MultipleFiltersFinder" scope="singleton"
<bean id="ordersMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrdersMultipleFiltersFinder" scope="singleton"
init-method="init" />
<bean id="resourcesMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.ResourcesMultipleFiltersFinder" scope="singleton"

View file

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