/********************************************************************** * Copyright (c) 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html  * * Contributors: * IBM - Initial API and implementation **********************************************************************/ package net.sourceforge.phpdt.monitor.core.internal; import java.util.Date; import java.util.Properties; import net.sourceforge.phpdt.monitor.core.IProtocolAdapter; import net.sourceforge.phpdt.monitor.core.IRequest; /** * A single TCP/IP request/response pair. */ public class Request implements IRequest { protected Date date; protected long responseTime = -1; protected int localPort; protected String remoteHost; protected int remotePort; protected byte[] request; protected byte[] response; protected String label; protected IProtocolAdapter type; protected Properties properties; /** * RequestResponse constructor comment. */ public Request(IProtocolAdapter type, int localPort, String remoteHost, int remotePort) { super(); this.type = type; this.localPort = localPort; this.remoteHost = remoteHost; this.remotePort = remotePort; date = new Date(); properties = new Properties(); MonitorManager.getInstance().addRequest(this); } public IProtocolAdapter getType() { return type; } /** * Add to the request. * * @param addRequest byte[] */ public void addToRequest(byte[] addRequest) { if (addRequest == null || addRequest.length == 0) return; if (request == null || request.length == 0) { setRequest(addRequest); return; } int size = request.length + addRequest.length; byte[] b = new byte[size]; System.arraycopy(request, 0, b, 0, request.length); System.arraycopy(addRequest, 0, b, request.length, addRequest.length); request = b; } /** * Add to the response. * * @param addResponse byte[] */ public void addToResponse(byte[] addResponse) { if (addResponse == null || addResponse.length == 0) return; if (response == null || response.length == 0) { setResponse(addResponse); return; } int size = response.length + addResponse.length; byte[] b = new byte[size]; System.arraycopy(response, 0, b, 0, response.length); System.arraycopy(addResponse, 0, b, response.length, addResponse.length); response = b; } /** * Return the date/time of this request. * * @return java.util.Date */ public Date getDate() { return date; } /** * Returns the local port. * * @return int */ public int getLocalPort() { return localPort; } /** * Returns the remote host. * * @return java.lang.String */ public String getRemoteHost() { return remoteHost; } /** * Returns the remote port. * * @return int */ public int getRemotePort() { return remotePort; } /** * Returns the request as a byte array. * * @return byte[] */ public byte[] getRequest(byte type2) { return request; } /** * Returns the response as a byte array. * * @return byte[] */ public byte[] getResponse(byte type2) { return response; } /** * Returns the response time in milliseconds. * * @return long */ public long getResponseTime() { return responseTime; } /** * Returns the title, if one exists. * * @return java.lang.String */ public String getLabel() { if (label == null) return getRemoteHost() + ":" + getRemotePort(); else return label; } /** * Set the request. * * @param request byte[] */ protected void setRequest(byte[] request) { if (request == null || request.length == 0) return; this.request = request; MonitorManager.getInstance().requestChanged(this); } /** * Set the response. * * @param response byte[] */ protected void setResponse(byte[] response) { if (response == null || response.length == 0) return; this.response = response; responseTime = System.currentTimeMillis() - date.getTime(); MonitorManager.getInstance().requestChanged(this); } /** * Sets the title. * * @param s java.lang.String */ public void setLabel(String s) { // property can only be set once if (label != null) return; label = s; MonitorManager.getInstance().requestChanged(this); } /** * */ public void addProperty(String key, Object value) { try { if (properties.containsKey(key)) properties.remove(key); properties.put(key, value); } catch (Exception e) { Trace.trace(Trace.SEVERE, "Could not add property", e); } } /** * */ public String getStringProperty(String key) { try { return (String) properties.get(key); } catch (Exception e) { return ""; } } /** * */ public Integer getIntegerProperty(String key) { try { return (Integer) properties.get(key); } catch (Exception e) { return null; } } /** * */ public Object getObjectProperty(String key) { try { return properties.get(key); } catch (Exception e) { return null; } } public void fireChangedEvent() { MonitorManager.getInstance().requestChanged(this); } }