diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IWorkerDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IWorkerDAO.java index 08fb5c217..a4844d611 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IWorkerDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IWorkerDAO.java @@ -37,6 +37,28 @@ import org.navalplanner.business.resources.entities.Worker; */ public interface IWorkerDAO extends IGenericDAO { + /** + * Returns workers which name/NIF partially matches with name, and complies + * all of the given criterions + * + * @param name + * search worker by name/NIF + * @param criterions + * search worker that matches with criterions + * @return + */ + @SuppressWarnings("unchecked") + List findByNameAndCriterions(String name, List criterions); + + /** + * Returns workers which name/NIF partially matches with name + * + * @param name + * search worker by name(firstname or surname)/NIF + * + */ + List findByNameOrNif(String name); + /** * Finds a {@link Worker} with the NIF param that should be unique. * @@ -55,17 +77,4 @@ public interface IWorkerDAO extends IGenericDAO { * @return */ List getWorkers(); - - /** - * Returns workers which name/NIF partially matches with name, and complies - * all of the given criterions - * - * @param name - * search worker by name/NIF - * @param criterions - * search worker that matches with criterions - * @return - */ - @SuppressWarnings("unchecked") - List findByNameAndCriterions(String name, List criterions); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/WorkerDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/WorkerDAO.java index 2b393df63..dff086c5e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/WorkerDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/WorkerDAO.java @@ -20,10 +20,11 @@ package org.navalplanner.business.resources.daos; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import org.hibernate.Criteria; -import org.hibernate.Query; import org.hibernate.criterion.Restrictions; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -68,29 +69,39 @@ public class WorkerDAO extends GenericDAOHibernate @SuppressWarnings("unchecked") @Override public List findByNameAndCriterions(String name, - List criterionList) { + List criterions) { - // Prepare query - String strQuery = "SELECT worker FROM Worker worker "; - - if (criterionList != null && criterionList.size() > 0) { - strQuery += "JOIN worker.criterionSatisfactions AS satisfaction " - + "JOIN satisfaction.criterion AS criterion "; + // Find workers by name + List workers; + if (name == null || name.isEmpty()) { + workers = getWorkers(); + } else { + workers = findByNameOrNif(name); } - strQuery += "WHERE (UPPER(worker.firstName) LIKE :name OR worker.nif LIKE :name) "; - if (criterionList != null && criterionList.size() > 0) { - strQuery += " AND criterion IN (:criterionList)"; + // If no criterions selected, returned found workers + if (criterions.isEmpty()) { + return workers; } - // Execute query - Query query = getSession().createQuery(strQuery); - query.setParameter("name", "%" + name.toUpperCase() + "%"); - if (criterionList != null && criterionList.size() > 0) { - query.setParameterList("criterionList", criterionList); + // Filter by criterion + final List result = new ArrayList(); + for (Worker worker : workers) { + if (worker.satisfiesCriterions(new HashSet(criterions))) { + result.add(worker); + } } - - // Get result - return query.list(); + return result; } + + @SuppressWarnings("unchecked") + @Override + public List findByNameOrNif(String name) { + name = "%" + name + "%"; + return getSession().createCriteria(Worker.class).add( + Restrictions.or(Restrictions.or(Restrictions.ilike("firstName", + name), Restrictions.ilike("surname", name)), + Restrictions.like("nif", name))).list(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/IWorkerSearchModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/IWorkerSearchModel.java index fef0ab201..3fcc41351 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/IWorkerSearchModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/IWorkerSearchModel.java @@ -36,11 +36,12 @@ import org.navalplanner.business.resources.entities.Worker; public interface IWorkerSearchModel { /** - * Gets all {@link Criterion} and groups then by {@link CriterionType} + * Returns all {@link Worker} matching by name (firstname or surname) * - * @return HashMap> + * @param name + * @return */ - HashMap> getCriterions(); + List findWorkers(String name); /** * Queries database for retrieving all workers that match to the parameters @@ -51,12 +52,19 @@ public interface IWorkerSearchModel { * {@link Worker} that complies all criterions * @return */ - @SuppressWarnings("unchecked") List findWorkers(String name, List criterions); /** + * Returns all workers * * @return */ List getAllWorkers(); + + /** + * Gets all {@link Criterion} and groups then by {@link CriterionType} + * + * @return HashMap> + */ + HashMap> getCriterions(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchController.java index 31456bdc6..4eda28590 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchController.java @@ -125,16 +125,9 @@ public class WorkerSearchController extends GenericForwardComposer { * @param criterions */ private void searchWorkers(String name, List criterions) { - // No text, and no criterions selected - if (criterions.isEmpty() - && (name == null || name.isEmpty())) { - refreshListBoxWorkers(workerSearchModel.getAllWorkers()); - return; - } - - final List listWorkers = workerSearchModel.findWorkers(name, + final List workers = workerSearchModel.findWorkers(name, criterions); - refreshListBoxWorkers(listWorkers); + refreshListBoxWorkers(workers); } /** @@ -154,7 +147,6 @@ public class WorkerSearchController extends GenericForwardComposer { result.add((Criterion) node.getData()); } } - return result; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchModel.java index 3165b7fa3..53e41feb9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchModel.java @@ -71,6 +71,17 @@ public class WorkerSearchModel implements IWorkerSearchModel { return workerDAO.findByNameAndCriterions(name, criterions); } + @Override + @Transactional(readOnly = true) + public List findWorkers(String name) { + return workerDAO.findByNameOrNif(name); + } + + public List findByNameAndCriterions(String name, + List criterions) { + return workerDAO.findByNameAndCriterions(name, criterions); + } + @Override @Transactional(readOnly = true) public List getAllWorkers() {