package org.apache.jmeter.samplers;

import java.io.Serializable;
import java.rmi.RemoteException;

import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

/**
 * The standard remote sample reporting should be more friendly to the main purpose of
 * remote testing - which is scalability.  To increase scalability, this class strips out the 
 * response data before sending.
 * 
 *
 */
public class DataStrippingSampleSender implements SampleSender, Serializable {
	private static final long serialVersionUID = 1;
	private static final Logger log = LoggingManager.getLoggerForClass();
	
	private final RemoteSampleListener listener;
	private final SampleSender decoratedSender;

	DataStrippingSampleSender(RemoteSampleListener listener) {
		this.listener = listener;
		decoratedSender = null;
	}
	
	DataStrippingSampleSender(SampleSender decorate)
	{
		this.decoratedSender = decorate;
        this.listener = null;
	}

	public void testEnded() {
		if(decoratedSender != null) decoratedSender.testEnded();
	}

	public void testEnded(String host) {
		if(decoratedSender != null) decoratedSender.testEnded(host);
	}

	public void sampleOccurred(SampleEvent event) {
		//Strip the response data before writing, but only for a successful request.
	    SampleResult result = event.getResult();
		if(result.isSuccessful()) {
		    result.setResponseData(new byte[0]);
		}
		if(decoratedSender == null)
		{
			try {
				listener.sampleOccurred(event);
			} catch (RemoteException e) {
				log.error("Error sending sample result over network ",e);
			}
		}
		else
		{
			decoratedSender.sampleOccurred(event);
		}
	}

}

@@ -697,16 +697,269 @@
 ender;%0A%0A
+%09/**%0A%09 * @deprecated only for use by test code%0A%09 */%0A    @Deprecated%0A    public DataStrippingSampleSender()%7B%0A        log.warn(%22Constructor only intended for use in testing%22); // $NON-NLS-1$%0A        listener = null;%0A        decoratedSender = null;%0A    %7D%0A%0A
 %09DataStr

Allow test code to test serialisation