diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/IncompatibleTypeException.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/IncompatibleTypeException.java new file mode 100644 index 000000000..c3df59bcd --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/api/IncompatibleTypeException.java @@ -0,0 +1,39 @@ +package org.navalplanner.ws.common.api; + +/** + * {@link Exception} used in update process when two types are not compatible. + * + * @author Fernando Bellas Permuy + * @author Manuel Rego Casasnovas + */ +@SuppressWarnings(value = { "serial", "unchecked" }) +public class IncompatibleTypeException extends Exception { + + private Object identifier; + private Class expectedType; + private Class actualType; + + public IncompatibleTypeException(Object identifier, Class expectedType, + Class actualType) { + super("Incompatible type (identifier = '" + identifier + + "' - expectedType = '" + expectedType.getName() + + "' - actualType = '" + actualType.getName() + "')"); + + this.identifier = identifier; + this.expectedType = expectedType; + this.actualType = actualType; + } + + public Object getIdentifier() { + return identifier; + } + + public Class getExpectedType() { + return expectedType; + } + + public Class getActualType() { + return actualType; + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/IncompatibleTypeExceptionMapper.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/IncompatibleTypeExceptionMapper.java new file mode 100644 index 000000000..237b1a41f --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/common/impl/IncompatibleTypeExceptionMapper.java @@ -0,0 +1,47 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.ws.common.impl; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.navalplanner.ws.common.api.IncompatibleTypeException; +import org.navalplanner.ws.common.api.InternalErrorDTO; +import org.springframework.stereotype.Component; + +/** + * Exception mapper for {@link IncompatibleTypeException}. + * + * @author Manuel Rego Casasnovas + */ +@Provider +@Component("incompatibleTypeExceptionMapper") +public class IncompatibleTypeExceptionMapper implements + ExceptionMapper { + + public Response toResponse(IncompatibleTypeException e) { + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity( + new InternalErrorDTO(e.getMessage(), Util.getStackTrace(e))) + .type("application/xml").build(); + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/IOrderElementService.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/IOrderElementService.java index d56e6378c..bb84aa787 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/IOrderElementService.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/api/IOrderElementService.java @@ -22,6 +22,7 @@ package org.navalplanner.ws.orders.api; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.ws.common.api.IncompatibleTypeException; import org.navalplanner.ws.common.api.InstanceConstraintViolationsListDTO; /** @@ -36,4 +37,7 @@ public interface IOrderElementService { InstanceConstraintViolationsListDTO addOrder(OrderDTO order); + InstanceConstraintViolationsListDTO updateOrder(OrderDTO orderDTO) + throws InstanceNotFoundException, IncompatibleTypeException; + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementServiceREST.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementServiceREST.java index e38658dbf..0d62b548b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementServiceREST.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementServiceREST.java @@ -26,6 +26,7 @@ import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -33,7 +34,9 @@ import javax.ws.rs.Produces; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.daos.IOrderElementDAO; +import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.ws.common.api.IncompatibleTypeException; import org.navalplanner.ws.common.api.InstanceConstraintViolationsDTO; import org.navalplanner.ws.common.api.InstanceConstraintViolationsListDTO; import org.navalplanner.ws.common.impl.ConstraintViolationConverter; @@ -97,4 +100,23 @@ public class OrderElementServiceREST implements IOrderElementService { instanceConstraintViolationsList); } + @Override + @PUT + @Consumes("application/xml") + @Transactional + public InstanceConstraintViolationsListDTO updateOrder(OrderDTO orderDTO) + throws InstanceNotFoundException, IncompatibleTypeException { + OrderElement orderElement = orderElementDAO + .findUniqueByCode(orderDTO.code); + if (!(orderElement instanceof Order)) { + throw new IncompatibleTypeException(orderElement.getCode(), + Order.class, orderElement.getClass()); + } + + List instanceConstraintViolationsList = new ArrayList(); + // TODO + return new InstanceConstraintViolationsListDTO( + instanceConstraintViolationsList); + } + } 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 0433300aa..b8b87c566 100644 --- a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml +++ b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml @@ -52,6 +52,7 @@ + +