ItEr39S16CUConfiguracionMaquinasItEr35S09: Searching on all resources not just workers
This commit is contained in:
parent
6947ee03c7
commit
1b87d3d8d0
5 changed files with 116 additions and 82 deletions
|
|
@ -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 <dpino@igalia.com>
|
||||
*/
|
||||
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<Worker> findWorkers(String name);
|
||||
List<Resource> 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<Worker> findWorkers(String name, List<Criterion> criterions);
|
||||
List<Resource> findResources(String name, List<Criterion> criterions);
|
||||
|
||||
/**
|
||||
* Returns all workers
|
||||
*
|
||||
* Returns all resources
|
||||
* @return
|
||||
*/
|
||||
List<Worker> getAllWorkers();
|
||||
List<Resource> getAllResources();
|
||||
|
||||
/**
|
||||
* Gets all {@link Criterion} and groups then by {@link CriterionType}
|
||||
*
|
||||
* @return HashMap<CriterionType, Set<Criterion>>
|
||||
*/
|
||||
HashMap<CriterionType, Set<Criterion>> getCriterions();
|
||||
Map<CriterionType, Set<Criterion>> getCriterions();
|
||||
}
|
||||
|
|
@ -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 <dpino@igalia.com>
|
||||
*
|
||||
*/
|
||||
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<Criterion> criterions) {
|
||||
final List<Worker> workers = workerSearchModel.findWorkers(name,
|
||||
private void searchResources(String name, List<Criterion> criterions) {
|
||||
final List<Resource> resources = resourceSearchModel.findResources(
|
||||
name,
|
||||
criterions);
|
||||
refreshListBoxWorkers(workers);
|
||||
refreshListBoxResources(resources);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -212,12 +212,12 @@ public class NewAllocationSelectorController extends GenericForwardComposer {
|
|||
return result;
|
||||
}
|
||||
|
||||
private void refreshListBoxWorkers(List<Worker> workers) {
|
||||
listBoxWorkers.setModel(new SimpleListModel(workers));
|
||||
private void refreshListBoxResources(List<? extends Resource> 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<Worker> getSelectedWorkers() {
|
||||
public List<Resource> getSelectedWorkers() {
|
||||
if(currentAllocationType== AllocationType.GENERIC){
|
||||
return allWorkersShown();
|
||||
return allResourcesShown();
|
||||
} else {
|
||||
return getSelectedWorkersOnListbox();
|
||||
return getSelectedResourcesOnListbox();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<Worker> allWorkersShown() {
|
||||
List<Worker> result = new ArrayList<Worker>();
|
||||
List<Listitem> selectedItems = listBoxWorkers.getItems();
|
||||
private List<Resource> allResourcesShown() {
|
||||
List<Resource> result = new ArrayList<Resource>();
|
||||
List<Listitem> 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<Worker> getSelectedWorkersOnListbox() {
|
||||
List<Worker> result = new ArrayList<Worker>();
|
||||
Set<Listitem> selectedItems = listBoxWorkers.getSelectedItems();
|
||||
private List<Resource> getSelectedResourcesOnListbox() {
|
||||
List<Resource> result = new ArrayList<Resource>();
|
||||
Set<Listitem> 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<CriterionType, Set<Criterion>> criterions = workerSearchModel
|
||||
Map<CriterionType, Set<Criterion>> criterions = resourceSearchModel
|
||||
.getCriterions();
|
||||
|
||||
List<CriterionTreeNode> rootList = new ArrayList<CriterionTreeNode>();
|
||||
|
|
@ -353,30 +351,24 @@ public class NewAllocationSelectorController extends GenericForwardComposer {
|
|||
}
|
||||
|
||||
/**
|
||||
* Render for listBoxWorkers
|
||||
*
|
||||
* Render for listBoxResources
|
||||
* @author Diego Pino García <dpino@igalia.com>
|
||||
*
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 <dpino@igalia.com>
|
||||
*/
|
||||
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<CriterionType, Set<Criterion>> getCriterions() {
|
||||
public Map<CriterionType, Set<Criterion>> getCriterions() {
|
||||
HashMap<CriterionType, Set<Criterion>> result = new HashMap<CriterionType, Set<Criterion>>();
|
||||
|
||||
List<Criterion> criterions = criterionDAO.getAll();
|
||||
|
|
@ -67,24 +79,54 @@ public class WorkerSearchModel implements IWorkerSearchModel {
|
|||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Worker> findWorkers(String name, List<Criterion> criterions) {
|
||||
return workerDAO.findByNameAndCriterions(name, criterions);
|
||||
public List<Resource> findResources(String name, List<Criterion> criterions) {
|
||||
return findByNameAndCriterions(name, criterions);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Worker> findWorkers(String name) {
|
||||
return workerDAO.findByNameOrNif(name);
|
||||
public List<Resource> findResources(String name) {
|
||||
return findByNameAndCriterions(name, Collections
|
||||
.<Criterion> emptyList());
|
||||
}
|
||||
|
||||
public List<Worker> findByNameAndCriterions(String name,
|
||||
private List<Resource> findByNameAndCriterions(String name,
|
||||
List<Criterion> criterions) {
|
||||
return workerDAO.findByNameAndCriterions(name, criterions);
|
||||
final boolean emptyName = StringUtils.isEmpty(name);
|
||||
if (criterions.isEmpty() && emptyName) {
|
||||
return resourceDAO.list(Resource.class);
|
||||
}
|
||||
Set<Resource> resourcesMatchingCriterions = null;
|
||||
if (!criterions.isEmpty()) {
|
||||
resourcesMatchingCriterions = new HashSet<Resource>(resourceDAO
|
||||
.findAllSatisfyingCriterions(criterions));
|
||||
if (resourcesMatchingCriterions.isEmpty()) {
|
||||
return new ArrayList<Resource>();
|
||||
}
|
||||
}
|
||||
if (emptyName) {
|
||||
return new ArrayList<Resource>(resourcesMatchingCriterions);
|
||||
}
|
||||
Set<Resource> result = intersect(workerDAO.findByNameOrNif(name),
|
||||
resourcesMatchingCriterions);
|
||||
result.addAll(intersect(machineDAO.findByNameOrCode(name),
|
||||
resourcesMatchingCriterions));
|
||||
return new ArrayList<Resource>(result);
|
||||
}
|
||||
|
||||
private static Set<Resource> intersect(List<? extends Resource> all,
|
||||
Set<Resource> filteringBy) {
|
||||
if (filteringBy == null) {
|
||||
return new HashSet<Resource>(all);
|
||||
}
|
||||
Set<Resource> result = new HashSet<Resource>(filteringBy);
|
||||
result.retainAll(all);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Worker> getAllWorkers() {
|
||||
return workerDAO.getWorkers();
|
||||
public List<Resource> getAllResources() {
|
||||
return resourceDAO.getResources();
|
||||
}
|
||||
}
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
<tabbox mold="accordion">
|
||||
<tabs>
|
||||
<tab id="tbResourceAllocation" label="${i18n:_('Resource allocation')}" image="common/img/collapse.gif" />
|
||||
<tab id="workerSearchTab" label="${i18n:_('Worker search')}" image="common/img/collapse.gif"/>
|
||||
<tab id="workerSearchTab" label="${i18n:_('Resources search')}" image="common/img/collapse.gif"/>
|
||||
</tabs>
|
||||
<tabpanels>
|
||||
<tabpanel>
|
||||
|
|
|
|||
|
|
@ -49,18 +49,17 @@
|
|||
|
||||
<vbox style="margin-right: 3px">
|
||||
<!-- Name -->
|
||||
<label value="${i18n:_('Name/NIF')}" />
|
||||
<label value="${i18n:_('Name/Code')}" />
|
||||
<textbox id="txtName" width="200px" style="margin-bottom: 5px"
|
||||
onChanging="selectorController.searchWorkers(event)" />
|
||||
|
||||
<!--Matchings -->
|
||||
<label value="${i18n:_('Found workers')}"/>
|
||||
<listbox id="listBoxWorkers" width="270px" rows="18"
|
||||
<listbox id="listBoxResources" width="270px" rows="18"
|
||||
vflex="true" multiple="true"
|
||||
itemRenderer="@{selectorController.listitemRenderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Name')}" sort="auto" />
|
||||
<listheader label="${i18n:_('NIF')}" sort="auto" />
|
||||
<listheader label="${i18n:_('Description')}" sort="auto" />
|
||||
</listhead>
|
||||
</listbox>
|
||||
</vbox>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue