Extract labels map as a predefined snapshot

FEA: ItEr60S04ValidacionEProbasFuncionaisItEr59S04
This commit is contained in:
Óscar González Fernández 2010-09-09 12:49:40 +02:00
parent 053850a5d4
commit df885861ca
4 changed files with 50 additions and 66 deletions

View file

@ -29,6 +29,10 @@ import javax.annotation.PostConstruct;
import org.navalplanner.business.common.AdHocTransactionService;
import org.navalplanner.business.common.IAdHocTransactionService;
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.resources.daos.ICriterionDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
@ -58,11 +62,18 @@ public class PredefinedDatabaseSnapshots {
return criterionsMap.getValue();
}
private IAutoUpdatedSnapshot<Map<LabelType, List<Label>>> labelsMap;
public Map<LabelType, List<Label>> snapshotLabelsMap() {
return labelsMap.getValue();
}
@PostConstruct
@SuppressWarnings("unused")
private void postConstruct() {
criterionsMap = snapshot(calculateCriterionsMap(), CriterionType.class,
Criterion.class);
labelsMap = snapshot(calculateLabelsMap(), LabelType.class, Label.class);
}
private <T> IAutoUpdatedSnapshot<T> snapshot(Callable<T> callable,
@ -100,4 +111,25 @@ public class PredefinedDatabaseSnapshots {
};
}
@Autowired
private ILabelTypeDAO labelTypeDAO;
@Autowired
private ILabelDAO labelDAO;
private Callable<Map<LabelType, List<Label>>> calculateLabelsMap() {
return new Callable<Map<LabelType,List<Label>>>() {
@Override
public Map<LabelType, List<Label>> call() throws Exception {
Map<LabelType, List<Label>> result = new HashMap<LabelType, List<Label>>();
for (LabelType labelType : labelTypeDAO.getAll()) {
List<Label> labels = new ArrayList<Label>(
labelDAO.findByType(labelType));
result.put(labelType, labels);
}
return result;
}
};
}
}

View file

@ -20,25 +20,17 @@
package org.navalplanner.web.common.components.finders;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import org.apache.commons.lang.StringUtils;
import org.navalplanner.business.hibernate.notification.IAutoUpdatedSnapshot;
import org.navalplanner.business.hibernate.notification.PredefinedDatabaseSnapshots;
import org.navalplanner.business.hibernate.notification.ReloadOn;
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.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
* Implements all the methods needed to search the criterion to filter the
@ -49,42 +41,14 @@ import org.springframework.transaction.annotation.Transactional;
*/
public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
@Autowired
private ILabelTypeDAO labelTypeDAO;
@Autowired
private ILabelDAO labelDAO;
@Autowired
private PredefinedDatabaseSnapshots databaseSnapshots;
private IAutoUpdatedSnapshot<Map<LabelType, List<Label>>> mapLabels;
protected OrderElementsMultipleFiltersFinder() {
}
@Transactional(readOnly = true)
public void init() {
mapLabels = getSnapshotRefresher().takeSnapshot(
onTransaction(getMapLabelsCallable()),
ReloadOn.onChangeOf(LabelType.class, Label.class));
}
private Callable<Map<LabelType, List<Label>>> getMapLabelsCallable() {
return new Callable<Map<LabelType, List<Label>>>() {
@Override
public Map<LabelType, List<Label>> call() throws Exception {
Map<LabelType, List<Label>> result = new HashMap<LabelType, List<Label>>();
for (LabelType labelType : labelTypeDAO.getAll()) {
List<Label> labels = new ArrayList<Label>(
labelDAO.findByType(labelType));
result.put(labelType, labels);
}
return result;
}
};
}
public List<FilterPair> getFirstTenFilters() {
@ -96,7 +60,7 @@ public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
}
private List<FilterPair> fillWithFirstTenFiltersLabels() {
Map<LabelType, List<Label>> mapLabels = this.mapLabels.getValue();
Map<LabelType, List<Label>> mapLabels = getLabelsMap();
Iterator<LabelType> iteratorLabelType = mapLabels.keySet().iterator();
while (iteratorLabelType.hasNext() && getListMatching().size() < 10) {
LabelType type = iteratorLabelType.next();
@ -112,6 +76,10 @@ public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
return getListMatching();
}
private Map<LabelType, List<Label>> getLabelsMap() {
return databaseSnapshots.snapshotLabelsMap();
}
private List<FilterPair> fillWithFirstTenFiltersCriterions() {
Map<CriterionType, List<Criterion>> mapCriterions = getMapCriterions();
Iterator<CriterionType> iteratorCriterionType = mapCriterions.keySet()
@ -191,7 +159,7 @@ public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
private void searchInLabelTypes(String filter) {
boolean limited = (filter.length() < 3);
for (LabelType type : mapLabels.getValue().keySet()) {
for (LabelType type : getLabelsMap().keySet()) {
String name = StringUtils.deleteWhitespace(type.getName()
.toLowerCase());
if (name.contains(filter)) {
@ -203,7 +171,7 @@ public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
}
private void searchInLabels(LabelType type, String filter) {
for (Label label : mapLabels.getValue().get(type)) {
for (Label label : getLabelsMap().get(type)) {
String name = StringUtils.deleteWhitespace(label.getName()
.toLowerCase());
if (name.contains(filter)) {
@ -216,7 +184,7 @@ public class OrderElementsMultipleFiltersFinder extends MultipleFiltersFinder {
}
private void setFilterPairLabelType(LabelType type, boolean limited) {
for (Label label : mapLabels.getValue().get(type)) {
for (Label label : getLabelsMap().get(type)) {
addLabel(type, label);
if ((limited) && (getListMatching().size() > 9)) {
return;

View file

@ -21,7 +21,6 @@
package org.navalplanner.web.common.components.finders;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@ -31,8 +30,6 @@ 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.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;
@ -54,23 +51,15 @@ import org.springframework.transaction.annotation.Transactional;
public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
@Autowired
private ILabelTypeDAO labelTypeDAO;
@Autowired
private IExternalCompanyDAO externalCompanyDAO;
@Autowired
private ILabelDAO labelDAO;
@Autowired
private IOrderDAO orderDAO;
@Autowired
private PredefinedDatabaseSnapshots databaseSnapshots;
private static final Map<LabelType, List<Label>> mapLabels = new HashMap<LabelType, List<Label>>();
private static final List<ExternalCompany> externalCompanies = new ArrayList<ExternalCompany>();
private static final List<String> customerReferences = new ArrayList<String>();
@ -89,7 +78,6 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
.runOnReadOnlyTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
loadLabels();
loadExternalCompanies();
loadOrdersStatusEnums();
loadOrderCodesAndCustomerReferences();
@ -98,16 +86,6 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
});
}
private void loadLabels() {
mapLabels.clear();
List<LabelType> labelTypes = labelTypeDAO.getAll();
for (LabelType labelType : labelTypes) {
List<Label> labels = new ArrayList<Label>(labelDAO
.findByType(labelType));
mapLabels.put(labelType, labels);
}
}
private void loadExternalCompanies() {
externalCompanies.clear();
externalCompanies.addAll(externalCompanyDAO
@ -145,6 +123,8 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
}
private List<FilterPair> fillWithFirstTenFiltersLabels() {
Map<LabelType, List<Label>> mapLabels = databaseSnapshots
.snapshotLabelsMap();
Iterator<LabelType> iteratorLabelType = mapLabels.keySet().iterator();
while (iteratorLabelType.hasNext() && getListMatching().size() < 10) {
LabelType type = iteratorLabelType.next();
@ -276,6 +256,7 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
}
private void searchInLabelTypes(String filter) {
Map<LabelType, List<Label>> mapLabels = getLabelsMap();
boolean limited = (filter.length() < 3);
for (LabelType type : mapLabels.keySet()) {
String name = StringUtils.deleteWhitespace(type.getName()
@ -288,8 +269,12 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
}
}
private Map<LabelType, List<Label>> getLabelsMap() {
return databaseSnapshots.snapshotLabelsMap();
}
private void searchInLabels(LabelType type, String filter) {
for (Label label : mapLabels.get(type)) {
for (Label label : getLabelsMap().get(type)) {
String name = StringUtils.deleteWhitespace(label.getName()
.toLowerCase());
if (name.contains(filter)) {
@ -302,7 +287,7 @@ public class OrdersMultipleFiltersFinder extends MultipleFiltersFinder {
}
private void setFilterPairLabelType(LabelType type, boolean limited) {
for (Label label : mapLabels.get(type)) {
for (Label label : getLabelsMap().get(type)) {
addLabel(type, label);
if ((limited) && (getListMatching().size() > 9)) {
return;

View file

@ -48,8 +48,7 @@
<bean id="ordersMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrdersMultipleFiltersFinder" scope="singleton"
init-method="init" />
<bean id="orderElementsMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrderElementsMultipleFiltersFinder" scope="singleton"
init-method="init" />
<bean id="orderElementsMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.OrderElementsMultipleFiltersFinder" scope="singleton"/>
<bean id="resourcesMultipleFiltersFinder" class="org.navalplanner.web.common.components.finders.ResourcesMultipleFiltersFinder" scope="singleton"
init-method="init" />