/******************************************************************************* * Copyright (c) 2011 Subgraph. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.ui.http.intercept; import java.net.URISyntaxException; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import com.subgraph.vega.api.http.requests.IHttpRequestBuilder; import com.subgraph.vega.api.http.requests.IHttpRequestEngine; import com.subgraph.vega.api.http.requests.IHttpResponseBuilder; /** * Provides a modifiable snapshot of the transaction held by the TransactionManager. */ public class TransactionInfo { private int requestTransactionSerial; private IHttpRequestBuilder requestBuilder; private boolean requestHasContent; private TransactionManager.TransactionStatus requestStatus; private String requestStatusMessage; private int requestSerial; private int responseTransactionSerial; private IHttpResponseBuilder responseBuilder; private boolean responseHasContent; private TransactionManager.TransactionStatus responseStatus; private String responseStatusMessage; private int responseSerial; public TransactionInfo(IHttpRequestEngine requestEngine) { requestTransactionSerial = -1; requestBuilder = requestEngine.createRequestBuilder(); requestHasContent = false; setRequestStatus(TransactionManager.TransactionStatus.STATUS_INACTIVE); requestSerial = -1; responseBuilder = requestEngine.createResponseBuilder(); responseHasContent = false; setResponseStatus(TransactionManager.TransactionStatus.STATUS_INACTIVE); responseSerial = -1; } public void setRequestTransactionSerial(int requestTransactionSerial) { this.requestTransactionSerial = requestTransactionSerial; } public int getRequestTransactionSerial() { return requestTransactionSerial; } public void setFromRequest(HttpRequest request) throws URISyntaxException { requestBuilder.setFromRequest(request); } public IHttpRequestBuilder getRequestBuilder() { return requestBuilder; } public void setRequestHasContent(boolean requestHasContent) { this.requestHasContent = requestHasContent; } public boolean requestHasContent() { return requestHasContent; } public void setRequestStatus(TransactionManager.TransactionStatus requestStatus) { this.requestStatus = requestStatus; switch (requestStatus) { case STATUS_INACTIVE: requestStatusMessage = "No request pending"; break; case STATUS_PENDING: requestStatusMessage = "Request pending to " + getRequestHostPart(); break; case STATUS_SENT: requestStatusMessage = "Request sent, awaiting response"; break; } } private String getRequestHostPart() { final StringBuilder buf = new StringBuilder(); buf.append(requestBuilder.getScheme()); buf.append("://"); buf.append(requestBuilder.getHost()); if (requestBuilder.getHostPort() != -1) { buf.append(':'); buf.append(Integer.toString(requestBuilder.getHostPort())); } return buf.toString(); } public TransactionManager.TransactionStatus getRequestStatus() { return requestStatus; } public boolean requestIsPending() { return (requestStatus == TransactionManager.TransactionStatus.STATUS_PENDING); } public String getRequestStatusMessage() { return requestStatusMessage; } public void setRequestSerial(int serial) { this.requestSerial = serial; } public int getRequestSerial() { return requestSerial; } public void setResponseTransactionSerial(int responseTransactionSerial) { this.responseTransactionSerial = responseTransactionSerial; } public int getResponseTransactionSerial() { return responseTransactionSerial; } public void setFromResponse(HttpResponse response) throws URISyntaxException { responseBuilder.setFromResponse(response); } public IHttpResponseBuilder getResponseBuilder() { return responseBuilder; } public void setResponseHasContent(boolean responseHasContent) { this.responseHasContent = responseHasContent; } public boolean responseHasContent() { return responseHasContent; } public void setResponseStatus(TransactionManager.TransactionStatus responseStatus) { this.responseStatus = responseStatus; switch (responseStatus) { case STATUS_INACTIVE: responseStatusMessage = "No response pending"; break; case STATUS_PENDING: responseStatusMessage = "Response pending"; break; } } public TransactionManager.TransactionStatus getResponseStatus() { return responseStatus; } public boolean responseIsPending() { return (responseStatus == TransactionManager.TransactionStatus.STATUS_PENDING); } public String getResponseStatusMessage() { return responseStatusMessage; } public void setResponseSerial(int serial) { this.responseSerial = serial; } public int getResponseSerial() { return responseSerial; } }