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 2a56c5c2b..af2742d4f 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 @@ -31,10 +31,14 @@ import org.navalplanner.business.common.AdHocTransactionService; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.costcategories.daos.ICostCategoryDAO; import org.navalplanner.business.costcategories.entities.CostCategory; +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.resources.daos.ICriterionDAO; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.daos.IResourceDAO; @@ -100,6 +104,24 @@ public class PredefinedDatabaseSnapshots { return mapResources.getValue(); } + private IAutoUpdatedSnapshot> externalCompanies; + + public List snapshotExternalCompanies() { + return externalCompanies.getValue(); + } + + private IAutoUpdatedSnapshot> customerReferences; + + public List snapshotCustomerReferences() { + return customerReferences.getValue(); + } + + private IAutoUpdatedSnapshot> ordersCodes; + + public List snapshotOrdersCodes() { + return ordersCodes.getValue(); + } + @PostConstruct @SuppressWarnings("unused") private void postConstruct() { @@ -112,6 +134,11 @@ public class PredefinedDatabaseSnapshots { listCriterion = snapshot(calculateListCriterion(), Criterion.class); mapResources = snapshot(calculateMapResources(), Resource.class, Worker.class, Machine.class, VirtualWorker.class); + externalCompanies = snapshot(calculateExternalCompanies(), + ExternalCompany.class); + customerReferences = snapshot(calculateCustomerReferences(), + Order.class); + ordersCodes = snapshot(calculateOrdersCodes(), Order.class); } private IAutoUpdatedSnapshot snapshot(Callable callable, @@ -224,4 +251,49 @@ public class PredefinedDatabaseSnapshots { }; } + @Autowired + private IExternalCompanyDAO externalCompanyDAO; + + private Callable> calculateExternalCompanies() { + return new Callable>() { + @Override + public List call() throws Exception { + return externalCompanyDAO.getExternalCompaniesAreClient(); + } + }; + } + + @Autowired + private IOrderDAO orderDAO; + + private Callable> calculateCustomerReferences() { + return new Callable>() { + @Override + public List call() throws Exception { + // FIXME replace by a HQL query, for god's sake! + List result = new ArrayList(); + for (Order order : orderDAO.getOrders()) { + if ((order.getCustomerReference() != null) + && (!order.getCustomerReference().isEmpty())) { + result.add(order.getCustomerReference()); + } + } + return result; + } + }; + } + + private Callable> calculateOrdersCodes() { + return new Callable>() { + @Override + public List call() throws Exception { + List result = new ArrayList(); + for (Order order : orderDAO.getOrders()) { + result.add(order.getCode()); + } + return result; + } + }; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/OrdersMultipleFiltersFinder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/OrdersMultipleFiltersFinder.java index 5eac6219f..c644f4e01 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/OrdersMultipleFiltersFinder.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/OrdersMultipleFiltersFinder.java @@ -20,25 +20,19 @@ package org.navalplanner.web.common.components.finders; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; -import org.navalplanner.business.common.IOnTransaction; -import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.hibernate.notification.PredefinedDatabaseSnapshots; 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.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; /** @@ -51,56 +45,13 @@ import org.springframework.transaction.annotation.Transactional; public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { - @Autowired - private IExternalCompanyDAO externalCompanyDAO; - - @Autowired - private IOrderDAO orderDAO; - @Autowired private PredefinedDatabaseSnapshots databaseSnapshots; - private static final List externalCompanies = new ArrayList(); - - private static final List customerReferences = new ArrayList(); - - private static final List ordersCodes = new ArrayList(); - protected OrdersMultipleFiltersFinder() { - } - @Transactional(readOnly = true) public void init() { - getAdHocTransactionService() - .runOnReadOnlyTransaction(new IOnTransaction() { - @Override - public Void execute() { - loadExternalCompanies(); - loadOrderCodesAndCustomerReferences(); - return null; - } - }); - } - - private void loadExternalCompanies() { - externalCompanies.clear(); - externalCompanies.addAll(externalCompanyDAO - .getExternalCompaniesAreClient()); - } - - 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 getFirstTenFilters() { @@ -156,6 +107,8 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { } private List fillWithFirstTenFiltersCustomer() { + List externalCompanies = databaseSnapshots + .snapshotExternalCompanies(); for (int i = 0; getListMatching().size() < 10 && i < externalCompanies.size(); i++) { ExternalCompany externalCompany = externalCompanies.get(i); @@ -174,6 +127,7 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { } private List fillWihtFirstTenFiltersCodes() { + List ordersCodes = databaseSnapshots.snapshotOrdersCodes(); for (int i = 0; getListMatching().size() < 10 && i < ordersCodes.size(); i++) { String code = ordersCodes.get(i); addCode(code); @@ -182,6 +136,8 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { } private List fillWihtFirstTenFiltersCustomerReferences() { + List customerReferences = databaseSnapshots + .snapshotCustomerReferences(); for (int i = 0; getListMatching().size() < 10 && i < customerReferences.size(); i++) { String reference = customerReferences.get(i); @@ -289,7 +245,8 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { } private void searchInExternalCompanies(String filter){ - for(ExternalCompany externalCompany : externalCompanies){ + for(ExternalCompany externalCompany : databaseSnapshots + .snapshotExternalCompanies()){ String name = StringUtils.deleteWhitespace(externalCompany .getName().toLowerCase()); String nif = StringUtils.deleteWhitespace(externalCompany.getNif() @@ -319,7 +276,7 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { private void searchInOrderCodes(String filter) { if (filter.indexOf("cod:") == 0) { String codeFilter = filter.replaceFirst("cod:", ""); - for (String code : ordersCodes) { + for (String code : databaseSnapshots.snapshotOrdersCodes()) { code = StringUtils.deleteWhitespace(code.toLowerCase()); if (code.equals(codeFilter)) { addCode(code); @@ -332,7 +289,8 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder { private void searchInCustomerReferences(String filter) { if (filter.indexOf("rc:") == 0) { String referenceFilter = filter.replaceFirst("rc:", ""); - for (String reference : customerReferences) { + for (String reference : databaseSnapshots + .snapshotCustomerReferences()) { reference = StringUtils.deleteWhitespace(reference .toLowerCase()); if (reference.equals(referenceFilter)) { 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 42893538d..002570bd6 100644 --- a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml +++ b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml @@ -45,8 +45,7 @@ - +