package org.wiztools.restclient.bean; import java.util.Arrays; import org.wiztools.commons.CollectionsUtil; import org.wiztools.commons.MultiValueMap; import org.wiztools.commons.MultiValueMapArrayList; import org.wiztools.restclient.util.HttpUtil; import org.wiztools.restclient.util.Util; /** * * @author schandran */ public final class ResponseBean implements Response{ private int statusCode; private String statusLine; private MultiValueMap<String, String> headers; private byte[] responseBody; private TestResult testResult; private long executionTime; @Override public long getExecutionTime() { return executionTime; } public void setExecutionTime(long executionTime) { this.executionTime = executionTime; } @Override public int getStatusCode() { return statusCode; } public void setStatusCode(int statusCode) { this.statusCode = statusCode; } @Override public MultiValueMap<String, String> getHeaders() { return CollectionsUtil.unmodifiableMultiValueMap(headers); } /*public void setHeaders(Map<String, String> headers) { this.headers = headers; }*/ public void addHeader(final String key, final String value){ this.headers.put(key, value); } @Override public ContentType getContentType() { if(headers != null) { return HttpUtil.getContentType(headers); } return null; } @Override public byte[] getResponseBody() { return responseBody; } public void setResponseBody(byte[] responseBody) { this.responseBody = responseBody; } @Override public String getStatusLine() { return statusLine; } public void setStatusLine(String statusLine) { this.statusLine = statusLine; } @Override public TestResult getTestResult() { return testResult; } public void setTestResult(TestResult testResult) { this.testResult = testResult; } public ResponseBean(){ headers = new MultiValueMapArrayList<String, String>(); } @Override public Object clone(){ ResponseBean response = new ResponseBean(); response.executionTime = executionTime; response.statusCode = statusCode; response.statusLine = statusLine; response.responseBody = responseBody; if(!headers.isEmpty()){ for(String header: headers.keySet()){ for(String value: headers.get(header)) { response.addHeader(header, value); } } } return response; } @Override public boolean equals(Object o){ if(this == o){ return true; } if(o instanceof Response){ final Response bean = (Response)o; boolean isEqual = true; // Do not check executionTime: because when constructing ResponseBean // from the UI, it is not possible to get this value: // isEqual = isEqual && (this.executionTime == bean.executionTime); isEqual = isEqual && (this.statusCode == bean.getStatusCode()); isEqual = isEqual && (this.statusLine == null? bean.getStatusLine() == null: this.statusLine.equals(bean.getStatusLine())); isEqual = isEqual && (this.headers == null? bean.getHeaders() == null: this.headers.equals(bean.getHeaders())); isEqual = isEqual && (this.responseBody == null? bean.getResponseBody() == null: Arrays.equals(this.responseBody, bean.getResponseBody())); isEqual = isEqual && (this.testResult == null? bean.getTestResult() == null: this.testResult.equals(bean.getTestResult())); return isEqual; } return false; } @Override public int hashCode() { int hash = 7; // hash = 53 * hash + (int)this.executionTime; hash = 53 * hash + this.statusCode; hash = 53 * hash + (this.statusLine != null ? this.statusLine.hashCode() : 0); hash = 53 * hash + (this.headers != null ? this.headers.hashCode() : 0); hash = 53 * hash + (this.responseBody != null ? this.responseBody.hashCode() : 0); hash = 53 * hash + (this.testResult != null ? this.testResult.hashCode() : 0); return hash; } @Override public String toString(){ StringBuilder sb = new StringBuilder(); sb.append("@Response["); sb.append(statusLine) .append(", ") .append(headers) .append(", ") .append(Util.base64encode(responseBody)) .append(", ") .append(testResult); sb.append("]"); return sb.toString(); } }