package org.openstack.atlas.api.resources;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openstack.atlas.api.helpers.ResponseFactory;
import org.openstack.atlas.api.repository.ValidatorRepository;
import org.openstack.atlas.api.resources.providers.CommonDependencyProvider;
import org.openstack.atlas.api.validation.context.HttpRequestType;
import org.openstack.atlas.api.validation.results.ValidatorResult;
import org.openstack.atlas.docs.loadbalancers.api.v1.Meta;
import org.openstack.atlas.service.domain.entities.Node;
import javax.ws.rs.*;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
public class NodeMetaResource extends CommonDependencyProvider {
private final Log LOG = LogFactory.getLog(NodeMetaResource.class);
private HttpHeaders requestHeaders;
private Integer accountId;
private Integer nodeId;
private Integer loadbalancerId;
private Integer id;
@GET
@Produces({APPLICATION_XML, APPLICATION_JSON})
public Response retrieveNodeMeta() {
org.openstack.atlas.service.domain.entities.NodeMeta domainNodeMeta;
Meta Meta;
try {
domainNodeMeta = nodeMetadataService.getNodeMeta(nodeId, id);
Meta = dozerMapper.map(domainNodeMeta, org.openstack.atlas.docs.loadbalancers.api.v1.Meta.class);
return Response.status(Response.Status.OK).entity(Meta).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@PUT
@Consumes({APPLICATION_XML, APPLICATION_JSON})
public Response updateMeta(Meta callNodeMeta) {
ValidatorResult result = ValidatorRepository.getValidatorFor(Meta.class).validate(callNodeMeta, HttpRequestType.PUT);
if (!result.passedValidation()) {
return getValidationFaultResponse(result);
}
callNodeMeta.setId(id);
try {
org.openstack.atlas.service.domain.entities.NodeMeta domainNodeMeta = dozerMapper.map(callNodeMeta, org.openstack.atlas.service.domain.entities.NodeMeta.class);
Meta Meta = dozerMapper.map(nodeMetadataService.updateNodeMeta(accountId, loadbalancerId, nodeId, domainNodeMeta), Meta.class);
return Response.status(Response.Status.OK).entity(Meta).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@DELETE
public Response deleteMeta() {
List<Integer> ids = new ArrayList<Integer>();
Node node;
ids.add(id);
try {
node = nodeService.getNodeByAccountIdLoadBalancerIdNodeId(accountId, loadbalancerId, nodeId);
nodeMetadataService.prepareForNodeMetadataDeletion(accountId, loadbalancerId, nodeId, ids);
nodeMetadataService.deleteNodeMetadata(node, ids);
return Response.status(Response.Status.OK).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
public void setRequestHeaders(HttpHeaders requestHeaders) {
this.requestHeaders = requestHeaders;
}
public void setAccountId(Integer accountId) {
this.accountId = accountId;
}
public void setLoadbalancerId(Integer loadbalancerId) {
this.loadbalancerId = loadbalancerId;
}
public void setNodeId(Integer nodeId) {
this.nodeId = nodeId;
}
public void setId(Integer id) {
this.id = id;
}
}