ItEr29S14ProcuraOrganizacionsTraballo: Move cacheLabels to OrderModel

This commit is contained in:
Diego Pino Garcia 2009-10-13 10:23:43 +02:00 committed by Javier Moran Rua
parent 8860ca1795
commit 4f6709d6a7
5 changed files with 107 additions and 68 deletions

View file

@ -61,8 +61,6 @@ public class AssignedLabelsToOrderElementModel implements
IOrderModel orderModel;
Set<Label> cacheLabels = new HashSet<Label>();
@Override
public OrderElement getOrderElement() {
return orderElement;
@ -76,20 +74,10 @@ public class AssignedLabelsToOrderElementModel implements
@Override
@Transactional(readOnly = true)
public void init(OrderElement orderElement) {
initializeCacheLabels();
this.orderElement = orderElement;
initializeOrderElement(this.orderElement);
}
private void initializeCacheLabels() {
if (cacheLabels.isEmpty()) {
cacheLabels = new HashSet<Label>();
final List<Label> labels = labelDAO.getAll();
initializeLabels(labels);
cacheLabels.addAll(labels);
}
}
private void initializeOrderElement(OrderElement orderElement) {
reattachLabels();
orderDAO.save(orderElement);
@ -100,6 +88,12 @@ public class AssignedLabelsToOrderElementModel implements
initializeLabels(orderElement.getLabels());
}
private void reattachLabels() {
for (Label label : orderModel.getLabels()) {
labelDAO.save(label);
}
}
private void initializeLabels(Collection<Label> labels) {
for (Label label : labels) {
initializeLabel(label);
@ -121,12 +115,6 @@ public class AssignedLabelsToOrderElementModel implements
return result;
}
private void reattachLabels() {
for (Label label : cacheLabels) {
labelDAO.save(label);
}
}
@Override
@Transactional(readOnly = true)
public List<Label> getInheritedLabels() {
@ -147,7 +135,7 @@ public class AssignedLabelsToOrderElementModel implements
public Label createLabel(String labelName, LabelType labelType) {
Label label = Label.create(labelName);
label.setType(labelType);
cacheLabels.add(label);
orderModel.addLabel(label);
return label;
}
@ -171,7 +159,6 @@ public class AssignedLabelsToOrderElementModel implements
Label label = findLabelByNameAndTypeName(labelName, labelType.getName());
if (label != null) {
initializeLabel(label);
cacheLabels.add(label);
}
return label;
}
@ -185,7 +172,7 @@ public class AssignedLabelsToOrderElementModel implements
*/
private Label findLabelByNameAndTypeName(String labelName,
String labelTypeName) {
for (Label label : cacheLabels) {
for (Label label : orderModel.getLabels()) {
if (label.getName().equals(labelName)
&& label.getType().getName().equals(labelTypeName)) {
return label;
@ -206,16 +193,6 @@ public class AssignedLabelsToOrderElementModel implements
return false;
}
@Override
@Transactional(readOnly = true)
public List<Label> getAllLabels() {
reattachLabels();
final List<Label> labels = new ArrayList<Label>();
labels.addAll(cacheLabels);
initializeLabels(labels);
return labels;
}
@Override
@Transactional(readOnly = true)
public void cancel() {
@ -244,4 +221,9 @@ public class AssignedLabelsToOrderElementModel implements
public void setOrderModel(IOrderModel orderModel) {
this.orderModel = orderModel;
}
@Override
public List<Label> getAllLabels() {
return (orderModel != null) ? orderModel.getLabels() : new ArrayList<Label>();
}
}

View file

@ -22,6 +22,8 @@ package org.navalplanner.web.orders;
import java.util.List;
import javax.sql.rowset.Predicate;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.orders.entities.IOrderLineGroup;
@ -31,39 +33,63 @@ import org.navalplanner.business.planner.entities.TaskElement;
/**
* Contract for {@link OrderModel}<br />
*
* @author Óscar González Fernández <ogonzalez@igalia.com>
* @author Diego Pino García <dpino@igalia.com>
*/
public interface IOrderModel {
List<Order> getOrders();
/**
* Adds {@link Label} to list of labels
*
* @param label
*/
void addLabel(Label label);
void prepareEditFor(Order order);
void prepareForCreate();
void save() throws ValidationException;
IOrderLineGroup getOrder();
void remove(Order order);
void prepareForRemove(Order order);
OrderElementTreeModel getOrderElementTreeModel();
IOrderElementModel getOrderElementModel(OrderElement orderElement);
void prepareForSchedule(Order order);
void schedule();
boolean isAlreadyScheduled(Order order);
void setOrder(Order order);
/**
* Adds a {@link Predicate} for filtering orders
*
* This filter is later consider by getOrderElementTreeModel
*
* @param label
*/
void addLabelPredicate(Label label);
TaskElement convertToInitialSchedule(OrderElement order);
void convertToScheduleAndSave(Order order);
void addLabelPredicate(Label label);
/**
* Returns a list of {@link Label}
*
* @return
*/
List<Label> getLabels();
IOrderLineGroup getOrder();
IOrderElementModel getOrderElementModel(OrderElement orderElement);
OrderElementTreeModel getOrderElementTreeModel();
List<Order> getOrders();
boolean isAlreadyScheduled(Order order);
void prepareEditFor(Order order);
void prepareForCreate();
void prepareForRemove(Order order);
void prepareForSchedule(Order order);
void remove(Order order);
void save() throws ValidationException;
void schedule();
void setOrder(Order order);
}

View file

@ -77,6 +77,10 @@ public class OrderElementTreeController extends GenericForwardComposer {
private final OrderElementController orderElementController;
public List<org.navalplanner.business.labels.entities.Label> getLabels() {
return orderModel.getLabels();
}
public OrderElementTreeitemRenderer getRenderer() {
return renderer;
}

View file

@ -23,8 +23,10 @@ package org.navalplanner.web.orders;
import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -101,6 +103,20 @@ public class OrderModel implements IOrderModel {
@Autowired
private IOrderElementDAO orderElementDAO;
Set<Label> cacheLabels = new HashSet<Label>();
@Override
public List<Label> getLabels() {
final List<Label> result = new ArrayList<Label>();
result.addAll(cacheLabels);
return result;
}
@Override
public void addLabel(Label label) {
cacheLabels.add(label);
}
@Override
@Transactional(readOnly = true)
public List<Order> getOrders() {
@ -124,12 +140,33 @@ public class OrderModel implements IOrderModel {
@Transactional(readOnly = true)
public void prepareEditFor(Order order) {
Validate.notNull(order);
initializeCacheLabels();
loadCriterions();
this.order = getFromDB(order);
this.orderElementTreeModel = new OrderElementTreeModel(this.order);
forceLoadAdvanceAssignmentsAndMeasurements(this.order);
}
private void initializeCacheLabels() {
if (cacheLabels.isEmpty()) {
cacheLabels = new HashSet<Label>();
final List<Label> labels = labelDAO.getAll();
initializeLabels(labels);
cacheLabels.addAll(labels);
}
}
private void initializeLabels(Collection<Label> labels) {
for (Label label : labels) {
initializeLabel(label);
}
}
private void initializeLabel(Label label) {
label.getName();
label.getType().getName();
}
private void forceLoadAdvanceAssignmentsAndMeasurements(
OrderElement orderElement) {
for (DirectAdvanceAssignment directAdvanceAssignment : orderElement
@ -245,17 +282,6 @@ public class OrderModel implements IOrderModel {
orderElementDAO.save(orderElement);
}
private void initializeLabels(Set<Label> labels) {
for (Label label : labels) {
initializeLabel(label);
}
}
private void initializeLabel(Label label) {
label.getName();
label.getType().getName();
}
@Override
@Transactional(readOnly = true)
public IOrderElementModel getOrderElementModel(OrderElement orderElement) {

View file

@ -41,7 +41,8 @@
<combobox id="cbFilterType">
<comboitem label="Filter by Label" />
</combobox>
<bandboxSearch id="bdFilter" finder="LabelBandboxFinder" />
<bandboxSearch id="bdFilter" finder="LabelBandboxFinder"
model="@{orderElementTreeController.labels}"/>
<button label="${i18n:_('Filter')}" style="margin-top: -4px"
onClick="orderElementTreeController.onApplyFilter(event)"/>
</hbox>