ItEr20S04ArquitecturaServidorItEr19S04: Removing use of OrderService.

Javier Moran Rua <jmoran@igalia.com>: Some fixings in OrderModel.java
This commit is contained in:
Manuel Rego Casasnovas 2009-08-06 17:58:36 +02:00 committed by Javier Moran Rua
parent 84252a3216
commit ec7922d4db
8 changed files with 80 additions and 24 deletions

View file

@ -0,0 +1,21 @@
package org.navalplanner.business.common;
import org.navalplanner.business.common.exceptions.ValidationException;
/**
* Entities implementing this interface have a method <code>checkValid</code>.
* This method validates the business rules of the entity.
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
*/
public interface IValidable {
/**
* Checks if an entity is or not valid.
*
* @throws ValidationException
* if entity is not valid.
*/
void checkValid() throws ValidationException;
}

View file

@ -1,5 +1,7 @@
package org.navalplanner.business.orders.daos;
import java.util.List;
import org.navalplanner.business.common.daos.IGenericDAO;
import org.navalplanner.business.orders.entities.Order;
@ -9,4 +11,11 @@ import org.navalplanner.business.orders.entities.Order;
*/
public interface IOrderDAO extends IGenericDAO<Order, Long> {
}
/**
* Gets all the orders.
*
* @return A {@link List} of {@link Order} objects
*/
List<Order> getOrders();
}

View file

@ -1,5 +1,7 @@
package org.navalplanner.business.orders.daos;
import java.util.List;
import org.navalplanner.business.common.daos.GenericDAOHibernate;
import org.navalplanner.business.orders.entities.Order;
import org.springframework.beans.factory.config.BeanDefinition;
@ -14,4 +16,10 @@ import org.springframework.stereotype.Repository;
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class OrderDAO extends GenericDAOHibernate<Order, Long> implements
IOrderDAO {
@Override
public List<Order> getOrders() {
return list(Order.class);
}
}

View file

@ -8,13 +8,15 @@ import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.common.IValidable;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.planner.entities.TaskElement;
/**
* It represents an {@link Order} with its related information. <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public class Order extends BaseEntity implements IOrderLineGroup {
public class Order extends BaseEntity implements IOrderLineGroup, IValidable {
private static Date copy(Date date) {
return date != null ? new Date(date.getTime()) : date;
@ -143,4 +145,18 @@ public class Order extends BaseEntity implements IOrderLineGroup {
return false;
}
@Override
public void checkValid() throws ValidationException {
if (this.isEndDateBeforeStart()) {
throw new ValidationException("endDate must be after startDate");
}
for (OrderElement orderElement : this.getOrderElements()) {
if (!orderElement.checkAtLeastOneHoursGroup()) {
throw new ValidationException(
"At least one HoursGroup is needed for each OrderElement");
}
}
}
}

View file

@ -18,12 +18,12 @@ import org.junit.Test;
import org.junit.matchers.JUnitMatchers;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.entities.Dependency;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
@ -51,7 +51,7 @@ public class TaskElementServiceTest {
private SessionFactory sessionFactory;
@Autowired
private IOrderService orderService;
private IOrderDAO orderDAO;
private HoursGroup associatedHoursGroup;
@ -87,7 +87,8 @@ public class TaskElementServiceTest {
order.setInitDate(new Date());
order.add(orderLine);
try {
orderService.save(order);
order.checkValid();
orderDAO.save(order);
sessionFactory.getCurrentSession().flush();
} catch (ValidationException e) {
throw new RuntimeException(e);

View file

@ -1,12 +1,13 @@
package org.navalplanner.web.common.converters;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.services.IOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* A {@link IConverter} for {@link Order} <br />
@ -17,12 +18,13 @@ import org.springframework.stereotype.Component;
public class OrderConverter implements IConverter<Order> {
@Autowired
private IOrderService orderService;
private IOrderDAO orderDAO;
@Override
@Transactional(readOnly = true)
public Order asObject(String stringRepresentation) {
try {
return orderService.find(Long.parseLong(stringRepresentation));
return orderDAO.find(Long.parseLong(stringRepresentation));
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}

View file

@ -11,10 +11,10 @@ import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.IOrderLineGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.services.ITaskElementService;
import org.navalplanner.business.resources.daos.ICriterionDAO;
import org.navalplanner.business.resources.entities.Criterion;
@ -45,7 +45,8 @@ public class OrderModel implements IOrderModel {
private static final Map<CriterionType, List<Criterion>> mapCriterions = new HashMap<CriterionType, List<Criterion>>();
private final IOrderService orderService;
@Autowired
private IOrderDAO orderDAO;
private Order order;
@ -57,24 +58,22 @@ public class OrderModel implements IOrderModel {
@Autowired
private IOrderElementModel orderElementModel;
private final ITaskElementService taskElementService;
@Autowired
private ICriterionDAO criterionDAO;
@Autowired
public OrderModel(IOrderService orderService,
ITaskElementService taskElementService) {
Validate.notNull(orderService);
private ITaskElementService taskElementService;
@Autowired
public OrderModel(ITaskElementService taskElementService) {
Validate.notNull(taskElementService);
this.orderService = orderService;
this.taskElementService = taskElementService;
}
@Override
@Transactional(readOnly = true)
public List<Order> getOrders() {
return orderService.getOrders();
return orderDAO.getOrders();
}
private void loadCriterions() {
@ -99,7 +98,7 @@ public class OrderModel implements IOrderModel {
private Order getFromDB(Order order) {
try {
return orderService.find(order.getId());
return orderDAO.find(order.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
@ -121,8 +120,7 @@ public class OrderModel implements IOrderModel {
InvalidValue[] invalidValues = orderValidator.getInvalidValues(order);
if (invalidValues.length > 0)
throw new ValidationException(invalidValues);
this.orderService.save(order);
this.orderDAO.save(order);
}
private void reattachCriterions() {
@ -139,9 +137,10 @@ public class OrderModel implements IOrderModel {
}
@Override
@Transactional
public void remove(Order order) {
try {
this.orderService.remove(order);
this.orderDAO.remove(order.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}

View file

@ -7,8 +7,8 @@ import java.util.List;
import java.util.Set;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.entities.TaskElement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
@ -26,7 +26,7 @@ import org.zkoss.ganttz.adapters.PlannerConfiguration;
public abstract class OrderPlanningModel implements IOrderPlanningModel {
@Autowired
private IOrderService orderService;
private IOrderDAO orderDAO;
private PlanningState planningState;
@ -160,7 +160,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
private Order reload(Order order) {
try {
return orderService.find(order.getId());
return orderDAO.find(order.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}