EMMA Coverage Report (generated Tue Jun 21 05:51:52 EDT 2011)
[all classes][org.jclouds.cloudservers.handlers]

COVERAGE SUMMARY FOR SOURCE FILE [ParseCloudServersErrorFromHttpResponse.java]

nameclass, %method, %block, %line, %
ParseCloudServersErrorFromHttpResponse.java0%   (0/1)0%   (0/4)0%   (0/137)0%   (0/29)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ParseCloudServersErrorFromHttpResponse0%   (0/1)0%   (0/4)0%   (0/137)0%   (0/29)
<static initializer> 0%   (0/1)0%   (0/4)0%   (0/1)
ParseCloudServersErrorFromHttpResponse (): void 0%   (0/1)0%   (0/6)0%   (0/2)
handleError (HttpCommand, HttpResponse): void 0%   (0/1)0%   (0/105)0%   (0/21)
parseErrorFromContentOrNull (HttpCommand, HttpResponse): String 0%   (0/1)0%   (0/22)0%   (0/5)

1/**
2 *
3 * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
4 *
5 * ====================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 * ====================================================================
18 */
19package org.jclouds.cloudservers.handlers;
20 
21import static org.jclouds.http.HttpUtils.releasePayload;
22 
23import java.io.IOException;
24import java.util.regex.Matcher;
25import java.util.regex.Pattern;
26 
27import javax.annotation.Resource;
28 
29import org.jclouds.http.HttpCommand;
30import org.jclouds.http.HttpErrorHandler;
31import org.jclouds.http.HttpResponse;
32import org.jclouds.http.HttpResponseException;
33import org.jclouds.logging.Logger;
34import org.jclouds.rest.AuthorizationException;
35import org.jclouds.rest.ResourceNotFoundException;
36import org.jclouds.util.Strings2;
37 
38/**
39 * This will parse and set an appropriate exception on the command object.
40 * 
41 * @author Adrian Cole
42 * 
43 */
44public class ParseCloudServersErrorFromHttpResponse implements HttpErrorHandler {
45   @Resource
46   protected Logger logger = Logger.NULL;
47   public static final Pattern RESOURCE_PATTERN = Pattern
48            .compile("^/v1[^/]*/[0-9]+/([^/]+)/([0-9]+)");
49 
50   public void handleError(HttpCommand command, HttpResponse response) {
51      Exception exception = new HttpResponseException(command, response);
52      try {
53         String content = parseErrorFromContentOrNull(command, response);
54         exception = content != null ? new HttpResponseException(command, response, content) : exception;
55         switch (response.getStatusCode()) {
56            case 401:
57               exception = new AuthorizationException(exception.getMessage(), exception);
58               break;
59            case 404:
60               if (!command.getCurrentRequest().getMethod().equals("DELETE")) {
61                  String path = command.getCurrentRequest().getEndpoint().getPath();
62                  Matcher matcher = RESOURCE_PATTERN.matcher(path);
63                  String message;
64                  if (matcher.find()) {
65                     message = String.format("%s %s not found", matcher.group(1), matcher.group(2));
66                  } else {
67                     message = path;
68                  }
69                  exception = new ResourceNotFoundException(message);
70               }
71               break;
72            case 409:
73               exception = new IllegalStateException(content);
74               break;
75            default:
76               exception = new HttpResponseException(command, response, content);
77               break;
78         }
79      } finally {
80         releasePayload(response);
81         command.setException(exception);
82      }
83   }
84 
85   String parseErrorFromContentOrNull(HttpCommand command, HttpResponse response) {
86      if (response.getPayload() != null) {
87         try {
88            return Strings2.toStringAndClose(response.getPayload().getInput());
89         } catch (IOException e) {
90            logger.warn(e, "exception reading error from response", response);
91         }
92      }
93      return null;
94   }
95}

[all classes][org.jclouds.cloudservers.handlers]
EMMA 2.0.5312 (C) Vladimir Roubtsov