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.resources.providers.CommonDependencyProvider; import org.openstack.atlas.docs.loadbalancers.api.v1.Errorpage; import org.openstack.atlas.service.domain.exceptions.EntityNotFoundException; import org.openstack.atlas.service.domain.exceptions.ImmutableEntityException; import org.openstack.atlas.service.domain.exceptions.UnprocessableEntityException; import org.openstack.atlas.service.domain.operations.Operation; import org.openstack.atlas.service.domain.pojos.MessageDataContainer; import org.openstack.atlas.service.domain.util.Constants; import javax.jms.JMSException; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.core.Response; public class ErrorpageResource extends CommonDependencyProvider{ private final Log LOG = LogFactory.getLog(ErrorpageResource.class); private int loadBalancerId; private int accountId; @GET public Response retrieveErrorpage() { Errorpage errorpage = new Errorpage(); String errorcontent; try { errorcontent = loadBalancerService.getErrorPage(loadBalancerId, accountId); if(errorcontent == null){ errorcontent = loadBalancerService.getDefaultErrorPage(); } } catch (Exception ex) { return ResponseFactory.getErrorResponse(ex, null,null); } errorpage.setContent(errorcontent); Response resp = Response.status(200).entity(errorpage).build(); return resp; } @DELETE public Response deleteErrorpage() { try { loadBalancerService.removeErrorPage(loadBalancerId, accountId); } catch (EntityNotFoundException ex) { return ResponseFactory.getErrorResponse(ex, null, null); } catch (UnprocessableEntityException ex) { return ResponseFactory.getErrorResponse(ex, null, null); } catch (ImmutableEntityException ex) { return ResponseFactory.getErrorResponse(ex, null, null); } MessageDataContainer container = new MessageDataContainer(); container.setAccountId(accountId); container.setLoadBalancerId(loadBalancerId); try { asyncService.callAsyncLoadBalancingOperation(Operation.DELETE_ERRORFILE, container); } catch (JMSException e) { return ResponseFactory.getErrorResponse(e, null, null); } Response resp = Response.status(202).build(); return resp; } @PUT public Response setErrorPage(Errorpage errorpage){ MessageDataContainer dataContainer; String content = errorpage.getContent(); if(content == null){ return getValidationFaultResponse("You must provide Content to set ErrorPage"); }else if(content.length() > Constants.MAX_ERRORPAGE_CONTENT_LENGTH){ String msg = String.format("Your content length must be less than %d bytes\n",Constants.MAX_ERRORPAGE_CONTENT_LENGTH); return getValidationFaultResponse(msg); } try { loadBalancerService.setErrorPage(loadBalancerId, accountId, content); } catch (Exception ex) { return ResponseFactory.getErrorResponse(ex, null,null); } dataContainer = new MessageDataContainer(); dataContainer.setAccountId(accountId); dataContainer.setLoadBalancerId(loadBalancerId); //QuickFix for V1-D-12106 // content = "\n" + content; dataContainer.setErrorFileContents(content); try { asyncService.callAsyncLoadBalancingOperation(Operation.UPDATE_ERRORFILE, dataContainer); } catch (Exception ex) { return ResponseFactory.getErrorResponse(ex, null,null); } return Response.status(202).build(); } public Log getLOG() { return LOG; } public int getLoadBalancerId() { return loadBalancerId; } public void setLoadBalancerId(int loadBalancerId) { this.loadBalancerId = loadBalancerId; } public int getAccountId() { return accountId; } public void setAccountId(int accountId) { this.accountId = accountId; } }