From 86acf99c74abbe31cd8c048ce32c79fd0cd76e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Thu, 9 Sep 2010 13:02:05 +0200 Subject: [PATCH] Extract workers list as a predefined snapshot FEA: ItEr60S04ValidacionEProbasFuncionaisItEr59S04 --- .../PredefinedDatabaseSnapshots.java | 22 +++++++++++++ .../finders/WorkerMultipleFiltersFinder.java | 32 +++++-------------- .../navalplanner-webapp-spring-config.xml | 3 +- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/hibernate/notification/PredefinedDatabaseSnapshots.java b/navalplanner-business/src/main/java/org/navalplanner/business/hibernate/notification/PredefinedDatabaseSnapshots.java index 4d7ad674e..cfc221741 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/hibernate/notification/PredefinedDatabaseSnapshots.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/hibernate/notification/PredefinedDatabaseSnapshots.java @@ -35,8 +35,10 @@ import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.labels.entities.LabelType; import org.navalplanner.business.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; +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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -68,12 +70,19 @@ public class PredefinedDatabaseSnapshots { return labelsMap.getValue(); } + private IAutoUpdatedSnapshot> listWorkers; + + public List snapshotListWorkers() { + return listWorkers.getValue(); + } + @PostConstruct @SuppressWarnings("unused") private void postConstruct() { criterionsMap = snapshot(calculateCriterionsMap(), CriterionType.class, Criterion.class); labelsMap = snapshot(calculateLabelsMap(), LabelType.class, Label.class); + listWorkers = snapshot(calculateWorkers(), Worker.class); } private IAutoUpdatedSnapshot snapshot(Callable callable, @@ -132,4 +141,17 @@ public class PredefinedDatabaseSnapshots { }; } + @Autowired + private IWorkerDAO workerDAO; + + private Callable> calculateWorkers() { + return new Callable>() { + + @Override + public List call() throws Exception { + return workerDAO.getAll(); + } + }; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/WorkerMultipleFiltersFinder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/WorkerMultipleFiltersFinder.java index fd9d9b0e5..1fa725301 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/WorkerMultipleFiltersFinder.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/WorkerMultipleFiltersFinder.java @@ -22,23 +22,18 @@ package org.navalplanner.web.common.components.finders; import static org.navalplanner.web.I18nHelper._; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; -import org.navalplanner.business.common.IOnTransaction; -import org.navalplanner.business.resources.daos.IWorkerDAO; +import org.navalplanner.business.hibernate.notification.PredefinedDatabaseSnapshots; import org.navalplanner.business.resources.entities.Worker; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; public class WorkerMultipleFiltersFinder extends MultipleFiltersFinder { @Autowired - private IWorkerDAO workerDAO; - - private static final List workerList = new ArrayList(); + private PredefinedDatabaseSnapshots databaseSnapshots; private IFilterEnum workerFilterEnum = new IFilterEnum() { @Override @@ -47,27 +42,12 @@ public class WorkerMultipleFiltersFinder extends MultipleFiltersFinder { } }; - @Transactional(readOnly = true) public void init() { - getAdHocTransactionService() - .runOnReadOnlyTransaction(new IOnTransaction() { - @Override - public Void execute() { - loadWorkers(); - return null; - } - }); - } - - @Transactional(readOnly = true) - private void loadWorkers() { - workerList.clear(); - workerList.addAll(workerDAO.getAll()); } @Override public List getFirstTenFilters() { - Iterator iteratorWorker = workerList.iterator(); + Iterator iteratorWorker = getListWorkers().iterator(); while(iteratorWorker.hasNext() && getListMatching().size() < 10) { Worker worker = iteratorWorker.next(); getListMatching().add(new FilterPair( @@ -77,6 +57,10 @@ public class WorkerMultipleFiltersFinder extends MultipleFiltersFinder { return getListMatching(); } + private List getListWorkers() { + return databaseSnapshots.snapshotListWorkers(); + } + @Override public List getMatching(String filter) { getListMatching().clear(); @@ -90,7 +74,7 @@ public class WorkerMultipleFiltersFinder extends MultipleFiltersFinder { } private void searchInWorkers(String filter) { boolean limited = (filter.length() < 3); - for(Worker worker : workerList) { + for (Worker worker : getListWorkers()) { String name = StringUtils.deleteWhitespace( worker.getShortDescription().toLowerCase()); if(name.contains(filter)) { diff --git a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml index b96539692..1dbee376a 100644 --- a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml +++ b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml @@ -59,8 +59,7 @@ - +