// $Header$
/*
 * Copyright 2001-2005 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */

package org.apache.jmeter.protocol.ftp.sampler;

import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.SampleResult;

/**
 * A sampler which understands FTP file requests.
 * 
 * @version $Revision$ last updated $Date$
 */
public class FTPSampler extends AbstractSampler {
	public final static String SERVER = "FTPSampler.server";

	public final static String FILENAME = "FTPSampler.filename";

	public FTPSampler() {
	}

	public String getUsername() {
		return getPropertyAsString(ConfigTestElement.USERNAME);
	}

	public String getPassword() {
		return getPropertyAsString(ConfigTestElement.PASSWORD);
	}

	public void setServer(String newServer) {
		this.setProperty(SERVER, newServer);
	}

	public String getServer() {
		return getPropertyAsString(SERVER);
	}

	public void setFilename(String newFilename) {
		this.setProperty(FILENAME, newFilename);
	}

	public String getFilename() {
		return getPropertyAsString(FILENAME);
	}

	/**
	 * Returns a formatted string label describing this sampler Example output:
	 * ftp://ftp.nowhere.com/pub/README.txt
	 * 
	 * @return a formatted string label describing this sampler
	 */
	public String getLabel() {
		return ("ftp://" + this.getServer() + "/" + this.getFilename());
	}

	public SampleResult sample(Entry e) {
		SampleResult res = new SampleResult();
		boolean isSuccessful = false;
		// FtpConfig ftpConfig = (FtpConfig)e.getConfigElement(FtpConfig.class);
		res.setSampleLabel(getName());
		// LoginConfig loginConfig =
		// (LoginConfig)e.getConfigElement(LoginConfig.class);
		res.sampleStart();
		try {
			FtpClient ftp = new FtpClient();
			ftp.connect(getServer(), getUsername(), getPassword());
			ftp.setPassive(true);
			// this should probably come from the setup dialog
			String s = ftp.get(getFilename());
			res.setResponseData(s.getBytes());
			// TODO set the response code here somewhere
			ftp.disconnect();
			isSuccessful = true;
		} catch (java.net.ConnectException cex) {
			// java.net.ConnectException -- 502 error code?
			// in the future, possibly define and place error codes into the
			// result so we know exactly what happened.
			res.setResponseData(cex.toString().getBytes());
		} catch (Exception ex) {
			// general exception
			res.setResponseData(ex.toString().getBytes());
		}

		res.sampleEnd();

		// Set if we were successful or not
		res.setSuccessful(isSuccessful);

		return res;
	}
}

@@ -1,16 +1,4 @@
-// $Header$%0A
 /*%0A 
@@ -17,17 +17,17 @@
 2001-200
-5
+6
  The Apa
@@ -919,51 +919,8 @@
  * %0A
- * @version $Revision$ last updated $Date$%0A
  */%0A
@@ -1026,16 +1026,31 @@
 server%22;
+ // $NON-NLS-1$
 %0A%0A%09publi
@@ -1104,16 +1104,31 @@
 lename%22;
+ // $NON-NLS-1$
 %0A%0A%09publi
@@ -1948,16 +1948,43 @@
 name());
+ // $NON-NLS-1$ $NON-NLS-2$
 %0A%09%7D%0A%0A%09pu
@@ -2200,16 +2200,56 @@
 ame());%0A
+        res.setSamplerData(getLabel());%0A
 %09%09// Log
@@ -2353,19 +2353,16 @@
 ();%0A
-%09%09try %7B%0A%09%09%09
+        
 FtpC
@@ -2390,16 +2390,24 @@
 ient();%0A
+%09%09try %7B%0A
 %09%09%09ftp.c
@@ -2485,19 +2485,10 @@
 ue);
-%0A%09%09%09// this
+//
  sho
@@ -2607,59 +2607,97 @@
 ));%0A
-%09%09%09// TODO set the r
+            res.setR
 esponse
- code here somewhere%0A%09%09%09
+CodeOK();%0A            res.setResponseMessageOK();%0A            
 ftp.
@@ -2709,16 +2709,28 @@
 nnect();
+            
 %0A%09%09%09isSu
@@ -2783,17 +2783,16 @@
 ception 
-c
 ex) %7B%0A%09%09
@@ -2978,17 +2978,16 @@
 nseData(
-c
 ex.toStr
@@ -3005,16 +3005,78 @@
 tes());%0A
+            res.setResponseMessage(ex.getLocalizedMessage());%0A
 %09%09%7D catc
@@ -3168,18 +3168,86 @@
 tes());%0A
-%09%09
+            res.setResponseMessage(ex.getLocalizedMessage());%0A        
 %7D%0A%0A%09%09res

Set up SampleResult fields