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/IResourceSearchModel.java similarity index 70% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/IWorkerSearchModel.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/IResourceSearchModel.java index 3fcc41351..689c34931 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/IResourceSearchModel.java @@ -20,12 +20,14 @@ package org.navalplanner.web.resources.search; -import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; +import org.navalplanner.business.resources.entities.Machine; +import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; /** @@ -33,7 +35,7 @@ import org.navalplanner.business.resources.entities.Worker; * * @author Diego Pino Garcia */ -public interface IWorkerSearchModel { +public interface IResourceSearchModel { /** * Returns all {@link Worker} matching by name (firstname or surname) @@ -41,30 +43,29 @@ public interface IWorkerSearchModel { * @param name * @return */ - List findWorkers(String name); + List findResources(String name); /** - * Queries database for retrieving all workers that match to the parameters - * + * Queries database for retrieving all resources that match to the + * parameters * @param name - * matches name/NIF of {@link Worker} + * matches name/NIF of {@link Worker} or name/code of + * {@link Machine} * @param criterions - * {@link Worker} that complies all criterions + * {@link Resource} that satisfy all criterions * @return */ - List findWorkers(String name, List criterions); + List findResources(String name, List criterions); /** - * Returns all workers - * + * Returns all resources * @return */ - List getAllWorkers(); + List getAllResources(); /** * Gets all {@link Criterion} and groups then by {@link CriterionType} - * * @return HashMap> */ - HashMap> getCriterions(); + Map> getCriterions(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/NewAllocationSelectorController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/NewAllocationSelectorController.java index 76b065a49..19f101f50 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/NewAllocationSelectorController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/NewAllocationSelectorController.java @@ -30,7 +30,7 @@ import java.util.Map.Entry; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; -import org.navalplanner.business.resources.entities.Worker; +import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.web.common.components.NewAllocationSelector.AllocationType; import org.navalplanner.web.planner.allocation.INewAllocationsAdder; import org.springframework.beans.factory.annotation.Autowired; @@ -59,17 +59,15 @@ import org.zkoss.zul.TreeitemRenderer; import org.zkoss.zul.Treerow; /** - * Controller for searching for {@link Worker} - * + * Controller for searching for {@link Resource} * @author Diego Pino Garcia - * */ public class NewAllocationSelectorController extends GenericForwardComposer { @Autowired - private IWorkerSearchModel workerSearchModel; + private IResourceSearchModel resourceSearchModel; - private WorkerListRenderer workerListRenderer = new WorkerListRenderer(); + private ResourceListRenderer resourceListRenderer = new ResourceListRenderer(); private Textbox txtName; @@ -77,7 +75,7 @@ public class NewAllocationSelectorController extends GenericForwardComposer { private Tree criterionsTree; - private Listbox listBoxWorkers; + private Listbox listBoxResources; private CriterionRenderer criterionRenderer = new CriterionRenderer(); @@ -106,17 +104,17 @@ public class NewAllocationSelectorController extends GenericForwardComposer { // is executed, refreshing the results into the workers listbox @Override public void onEvent(Event event) throws Exception { - searchWorkers(txtName.getValue(), getSelectedCriterions()); + searchResources(txtName.getValue(), getSelectedCriterions()); } }); } // Initialize components criterionsTree.setTreeitemRenderer(criterionRenderer); - listBoxWorkers.setItemRenderer(getListitemRenderer()); + listBoxResources.setItemRenderer(getListitemRenderer()); // Show all workers - refreshListBoxWorkers(workerSearchModel.getAllWorkers()); + refreshListBoxResources(resourceSearchModel.getAllResources()); allocationTypeSelector.addEventListener(Events.ON_CHECK, new EventListener() { @@ -128,12 +126,13 @@ public class NewAllocationSelectorController extends GenericForwardComposer { onType(type); } }); - listBoxWorkers.addEventListener(Events.ON_SELECT, new EventListener() { + listBoxResources.addEventListener(Events.ON_SELECT, + new EventListener() { @Override public void onEvent(Event event) throws Exception { if (currentAllocationType == AllocationType.GENERIC) { - clearSelection(listBoxWorkers); + clearSelection(listBoxResources); } } }); @@ -147,9 +146,9 @@ public class NewAllocationSelectorController extends GenericForwardComposer { } private void onType(AllocationType type) { - listBoxWorkers.setDisabled(AllocationType.GENERIC == type); + listBoxResources.setDisabled(AllocationType.GENERIC == type); if (AllocationType.GENERIC == type) { - clearSelection(listBoxWorkers); + clearSelection(listBoxResources); } currentAllocationType = type; } @@ -177,7 +176,7 @@ public class NewAllocationSelectorController extends GenericForwardComposer { * @param event */ public void searchWorkers(InputEvent event) { - searchWorkers(event.getValue(), getSelectedCriterions()); + searchResources(event.getValue(), getSelectedCriterions()); } /** @@ -186,10 +185,11 @@ public class NewAllocationSelectorController extends GenericForwardComposer { * @param name * @param criterions */ - private void searchWorkers(String name, List criterions) { - final List workers = workerSearchModel.findWorkers(name, + private void searchResources(String name, List criterions) { + final List resources = resourceSearchModel.findResources( + name, criterions); - refreshListBoxWorkers(workers); + refreshListBoxResources(resources); } /** @@ -212,12 +212,12 @@ public class NewAllocationSelectorController extends GenericForwardComposer { return result; } - private void refreshListBoxWorkers(List workers) { - listBoxWorkers.setModel(new SimpleListModel(workers)); + private void refreshListBoxResources(List resources) { + listBoxResources.setModel(new SimpleListModel(resources)); } - public WorkerListRenderer getListitemRenderer() { - return workerListRenderer; + public ResourceListRenderer getListitemRenderer() { + return resourceListRenderer; } public void onClose() { @@ -226,39 +226,37 @@ public class NewAllocationSelectorController extends GenericForwardComposer { public void clearAll() { txtName.setValue(""); - refreshListBoxWorkers(workerSearchModel.getAllWorkers()); + refreshListBoxResources(resourceSearchModel.getAllResources()); criterionsTree.setModel(getCriterions()); - clearSelection(listBoxWorkers); + clearSelection(listBoxResources); clearSelection(criterionsTree); doInitialSelection(); } - public List getSelectedWorkers() { + public List getSelectedWorkers() { if(currentAllocationType== AllocationType.GENERIC){ - return allWorkersShown(); + return allResourcesShown(); } else { - return getSelectedWorkersOnListbox(); + return getSelectedResourcesOnListbox(); } } @SuppressWarnings("unchecked") - private List allWorkersShown() { - List result = new ArrayList(); - List selectedItems = listBoxWorkers.getItems(); + private List allResourcesShown() { + List result = new ArrayList(); + List selectedItems = listBoxResources.getItems(); for (Listitem item : selectedItems) { - Worker worker = (Worker) item.getValue(); - result.add(worker); + result.add((Resource) item.getValue()); } return result; } @SuppressWarnings("unchecked") - private List getSelectedWorkersOnListbox() { - List result = new ArrayList(); - Set selectedItems = listBoxWorkers.getSelectedItems(); + private List getSelectedResourcesOnListbox() { + List result = new ArrayList(); + Set selectedItems = listBoxResources.getSelectedItems(); for (Listitem item : selectedItems) { - Worker worker = (Worker) item.getValue(); - result.add(worker); + result.add((Resource) item.getValue()); } return result; } @@ -300,7 +298,7 @@ public class NewAllocationSelectorController extends GenericForwardComposer { * @return */ public TreeModel getCriterions() { - Map> criterions = workerSearchModel + Map> criterions = resourceSearchModel .getCriterions(); List rootList = new ArrayList(); @@ -353,30 +351,24 @@ public class NewAllocationSelectorController extends GenericForwardComposer { } /** - * Render for listBoxWorkers - * + * Render for listBoxResources * @author Diego Pino GarcĂ­a - * */ - private class WorkerListRenderer implements ListitemRenderer { + private class ResourceListRenderer implements ListitemRenderer { @Override public void render(Listitem item, Object data) throws Exception { - item.setValue((Worker) data); + item.setValue((Resource) data); - appendLabelWorker(item); + appendLabelResource(item); } - private void appendLabelWorker(Listitem item) { - Worker worker = (Worker) item.getValue(); + private void appendLabelResource(Listitem item) { + Resource resource = (Resource) item.getValue(); - Listcell listWorker = new Listcell(); - listWorker.appendChild(new Label(worker.getName())); - item.appendChild(listWorker); - - Listcell listName = new Listcell(); - listName.appendChild(new Label(worker.getNif())); - item.appendChild(listName); + Listcell cell = new Listcell(); + cell.appendChild(new Label(resource.getShortDescription())); + item.appendChild(cell); } } 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/ResourceSearchModel.java similarity index 53% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/WorkerSearchModel.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/resources/search/ResourceSearchModel.java index 53e41feb9..fc86955f6 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/ResourceSearchModel.java @@ -20,16 +20,22 @@ package org.navalplanner.web.resources.search; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.navalplanner.business.resources.daos.ICriterionDAO; +import org.navalplanner.business.resources.daos.IMachineDAO; +import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.daos.IWorkerDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; -import org.navalplanner.business.resources.entities.Worker; +import org.navalplanner.business.resources.entities.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -41,17 +47,23 @@ import org.springframework.transaction.annotation.Transactional; /** * @author Diego Pino Garcia */ -public class WorkerSearchModel implements IWorkerSearchModel { +public class ResourceSearchModel implements IResourceSearchModel { @Autowired private IWorkerDAO workerDAO; + @Autowired + private IMachineDAO machineDAO; + + @Autowired + private IResourceDAO resourceDAO; + @Autowired private ICriterionDAO criterionDAO; @Override @Transactional(readOnly = true) - public HashMap> getCriterions() { + public Map> getCriterions() { HashMap> result = new HashMap>(); List criterions = criterionDAO.getAll(); @@ -67,24 +79,54 @@ public class WorkerSearchModel implements IWorkerSearchModel { @Override @Transactional(readOnly = true) - public List findWorkers(String name, List criterions) { - return workerDAO.findByNameAndCriterions(name, criterions); + public List findResources(String name, List criterions) { + return findByNameAndCriterions(name, criterions); } @Override @Transactional(readOnly = true) - public List findWorkers(String name) { - return workerDAO.findByNameOrNif(name); + public List findResources(String name) { + return findByNameAndCriterions(name, Collections + . emptyList()); } - public List findByNameAndCriterions(String name, + private List findByNameAndCriterions(String name, List criterions) { - return workerDAO.findByNameAndCriterions(name, criterions); + final boolean emptyName = StringUtils.isEmpty(name); + if (criterions.isEmpty() && emptyName) { + return resourceDAO.list(Resource.class); + } + Set resourcesMatchingCriterions = null; + if (!criterions.isEmpty()) { + resourcesMatchingCriterions = new HashSet(resourceDAO + .findAllSatisfyingCriterions(criterions)); + if (resourcesMatchingCriterions.isEmpty()) { + return new ArrayList(); + } + } + if (emptyName) { + return new ArrayList(resourcesMatchingCriterions); + } + Set result = intersect(workerDAO.findByNameOrNif(name), + resourcesMatchingCriterions); + result.addAll(intersect(machineDAO.findByNameOrCode(name), + resourcesMatchingCriterions)); + return new ArrayList(result); + } + + private static Set intersect(List all, + Set filteringBy) { + if (filteringBy == null) { + return new HashSet(all); + } + Set result = new HashSet(filteringBy); + result.retainAll(all); + return result; } @Override @Transactional(readOnly = true) - public List getAllWorkers() { - return workerDAO.getWorkers(); + public List getAllResources() { + return resourceDAO.getResources(); } } diff --git a/navalplanner-webapp/src/main/webapp/planner/order.zul b/navalplanner-webapp/src/main/webapp/planner/order.zul index d3fc8f641..149d4c539 100644 --- a/navalplanner-webapp/src/main/webapp/planner/order.zul +++ b/navalplanner-webapp/src/main/webapp/planner/order.zul @@ -89,7 +89,7 @@ - + diff --git a/navalplanner-webapp/src/main/webapp/resources/search/allocation_selector.zul b/navalplanner-webapp/src/main/webapp/resources/search/allocation_selector.zul index 21b106634..2c34f990e 100644 --- a/navalplanner-webapp/src/main/webapp/resources/search/allocation_selector.zul +++ b/navalplanner-webapp/src/main/webapp/resources/search/allocation_selector.zul @@ -49,18 +49,17 @@ -