Extract some data as predefined snapshots from OrdersMultipleFiltersFinder

FEA: ItEr60S04ValidacionEProbasFuncionaisItEr59S04
This commit is contained in:
Óscar González Fernández 2010-09-09 22:08:27 +02:00
parent f8709f32fa
commit 23d80600cd
3 changed files with 83 additions and 54 deletions

View file

@ -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<List<ExternalCompany>> externalCompanies;
public List<ExternalCompany> snapshotExternalCompanies() {
return externalCompanies.getValue();
}
private IAutoUpdatedSnapshot<List<String>> customerReferences;
public List<String> snapshotCustomerReferences() {
return customerReferences.getValue();
}
private IAutoUpdatedSnapshot<List<String>> ordersCodes;
public List<String> 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 <T> IAutoUpdatedSnapshot<T> snapshot(Callable<T> callable,
@ -224,4 +251,49 @@ public class PredefinedDatabaseSnapshots {
};
}
@Autowired
private IExternalCompanyDAO externalCompanyDAO;
private Callable<List<ExternalCompany>> calculateExternalCompanies() {
return new Callable<List<ExternalCompany>>() {
@Override
public List<ExternalCompany> call() throws Exception {
return externalCompanyDAO.getExternalCompaniesAreClient();
}
};
}
@Autowired
private IOrderDAO orderDAO;
private Callable<List<String>> calculateCustomerReferences() {
return new Callable<List<String>>() {
@Override
public List<String> call() throws Exception {
// FIXME replace by a HQL query, for god's sake!
List<String> result = new ArrayList<String>();
for (Order order : orderDAO.getOrders()) {
if ((order.getCustomerReference() != null)
&& (!order.getCustomerReference().isEmpty())) {
result.add(order.getCustomerReference());
}
}
return result;
}
};
}
private Callable<List<String>> calculateOrdersCodes() {
return new Callable<List<String>>() {
@Override
public List<String> call() throws Exception {
List<String> result = new ArrayList<String>();
for (Order order : orderDAO.getOrders()) {
result.add(order.getCode());
}
return result;
}
};
}
}

View file

@ -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<ExternalCompany> externalCompanies = new ArrayList<ExternalCompany>();
private static final List<String> customerReferences = new ArrayList<String>();
private static final List<String> ordersCodes = new ArrayList<String>();
protected OrdersMultipleFiltersFinder() {
}
@Transactional(readOnly = true)
public void init() {
getAdHocTransactionService()
.runOnReadOnlyTransaction(new IOnTransaction<Void>() {
@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<FilterPair> getFirstTenFilters() {
@ -156,6 +107,8 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
}
private List<FilterPair> fillWithFirstTenFiltersCustomer() {
List<ExternalCompany> 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<FilterPair> fillWihtFirstTenFiltersCodes() {
List<String> 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<FilterPair> fillWihtFirstTenFiltersCustomerReferences() {
List<String> 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)) {

View file

@ -45,8 +45,7 @@
<lookup-method name="getTaskElementAdapter" bean="taskElementAdapter"/>
</bean>
<bean id="ordersMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrdersMultipleFiltersFinder" scope="singleton"
init-method="init" />
<bean id="ordersMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrdersMultipleFiltersFinder" scope="singleton" />
<bean id="orderElementsMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrderElementsMultipleFiltersFinder" scope="singleton"/>