Author: sebb
Date: Sat Mar 10 13:58:10 2007
New Revision: 516795
URL: http://svn.apache.org/viewvc?view=rev&rev=516795
Log:
Bug 41704 - Allow charset encoding to be specified for CSV DataSet
Modified:
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSet.java
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetBeanInfo.java
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetResources.properties
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/services/FileServer.java
jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
Modified:
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSet.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSet.java?view=diff&rev=516795&r1=516794&r2=516795
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSet.java
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSet.java
Sat Mar 10 13:58:10 2007
@@ -45,6 +45,8 @@
private transient String filename;
+ private transient String fileEncoding;
+
private transient String variableNames;
private transient String delimiter;
@@ -66,7 +68,7 @@
FileServer server = FileServer.getFileServer();
String _fileName = getFilename();
if (vars == null) {
- server.reserveFile(_fileName);
+ server.reserveFile(_fileName, getFileEncoding());
vars = JOrphanUtils.split(getVariableNames(), ","); //
$NON-NLS-1$
}
try {
@@ -104,6 +106,21 @@
*/
public void setFilename(String filename) {
this.filename = filename;
+ }
+
+ /**
+ * @return Returns the file encoding.
+ */
+ public String getFileEncoding() {
+ return fileEncoding;
+ }
+
+ /**
+ * @param fileEncoding
+ * The fileEncoding to set.
+ */
+ public void setFileEncoding(String fileEncoding) {
+ this.fileEncoding = fileEncoding;
}
/**
Modified:
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetBeanInfo.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetBeanInfo.java?view=diff&rev=516795&r1=516794&r2=516795
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetBeanInfo.java
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetBeanInfo.java
Sat Mar 10 13:58:10 2007
@@ -25,13 +25,12 @@
/**
* @author mstover
*
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
*/
public class CSVDataSetBeanInfo extends BeanInfoSupport {
// These names must agree case-wise with the variable and property names
private static final String FILENAME = "filename";
//$NON-NLS-1$
+ private static final String FILE_ENCODING = "fileEncoding";
//$NON-NLS-1$
private static final String VARIABLE_NAMES = "variableNames";
//$NON-NLS-1$
private static final String DELIMITER = "delimiter";
//$NON-NLS-1$
private static final String RECYCLE = "recycle";
//$NON-NLS-1$
@@ -42,13 +41,18 @@
public CSVDataSetBeanInfo() {
super(CSVDataSet.class);
createPropertyGroup("csv_data", //$NON-NLS-1$
- new String[] { FILENAME, VARIABLE_NAMES, DELIMITER, RECYCLE });
+ new String[] { FILENAME, FILE_ENCODING, VARIABLE_NAMES,
DELIMITER, RECYCLE });
PropertyDescriptor p = property(FILENAME);
p.setValue(NOT_UNDEFINED, Boolean.TRUE);
p.setValue(DEFAULT, ""); //$NON-NLS-1$
p.setValue(NOT_EXPRESSION, Boolean.TRUE);
+ p = property(FILE_ENCODING);
+ p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+ p.setValue(DEFAULT, ""); //$NON-NLS-1$
+ p.setValue(NOT_EXPRESSION, Boolean.TRUE);
+
p = property(VARIABLE_NAMES);
p.setValue(NOT_UNDEFINED, Boolean.TRUE);
p.setValue(DEFAULT, ""); //$NON-NLS-1$
Modified:
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetResources.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetResources.properties?view=diff&rev=516795&r1=516794&r2=516795
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetResources.properties
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/config/CSVDataSetResources.properties
Sat Mar 10 13:58:10 2007
@@ -2,6 +2,8 @@
csv_data.displayName=Configure the CSV Data Source
filename.displayName=Filename
filename.shortDescription=Name of the file that holds the cvs data (relative
or absolute filename)
+fileEncoding.displayName=File encoding
+fileEncoding.shortDescription=The character set encoding used in the file
variableNames.displayName=Variable Names (comma-delimited)
variableNames.shortDescription=List your variable names in order to match the
order of columns in your csv data. Separate by commas.
delimiter.displayName=Delimiter (use '\\t' for tab)
Modified:
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/services/FileServer.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/services/FileServer.java?view=diff&rev=516795&r1=516794&r2=516795
==============================================================================
---
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/services/FileServer.java
(original)
+++
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/services/FileServer.java
Sat Mar 10 13:58:10 2007
@@ -24,9 +24,11 @@
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.HashMap;
@@ -104,10 +106,21 @@
* @param filename - relative (to base) or absolute file name
*/
public synchronized void reserveFile(String filename) {
+ reserveFile(filename,null);
+ }
+
+ /**
+ * Creates an association between a filename and a File inputOutputObject,
+ * and stores it for later use - unless it is already stored.
+ *
+ * @param filename - relative (to base) or absolute file name
+ * @param charsetName - the character set encoding to use for the file
+ */
+ public synchronized void reserveFile(String filename, String
charsetName) {
if (!files.containsKey(filename)) {
File f = new File(filename);
FileEntry file =
- new FileEntry(f.isAbsolute() ? f : new File(base,
filename),null);
+ new FileEntry(f.isAbsolute() ? f : new File(base,
filename),null,charsetName);
log.info("Stored: "+filename);
files.put(filename, file);
}
@@ -136,8 +149,7 @@
FileEntry fileEntry = (FileEntry) files.get(filename);
if (fileEntry != null) {
if (fileEntry.inputOutputObject == null) {
- BufferedReader r = new BufferedReader(new
FileReader(fileEntry.file));
- fileEntry.inputOutputObject = r;
+ fileEntry.inputOutputObject =
createBufferedReader(fileEntry, filename);
} else if (!(fileEntry.inputOutputObject instanceof Reader)) {
throw new IOException("File " + filename + " already in use");
}
@@ -145,7 +157,7 @@
String line = reader.readLine();
if (line == null && recycle) {
reader.close();
- reader = new BufferedReader(new
FileReader(fileEntry.file));
+ reader = createBufferedReader(fileEntry,
filename);
fileEntry.inputOutputObject = reader;
line = reader.readLine();
}
@@ -154,12 +166,25 @@
}
throw new IOException("File never reserved: "+filename);
}
+
+ private BufferedReader createBufferedReader(FileEntry fileEntry, String
filename) throws IOException {
+ FileInputStream fis = new FileInputStream(fileEntry.file);
+ InputStreamReader isr = null;
+ // If file encoding is specified, read using that encoding, otherwise
use default platform encoding
+ String charsetName = fileEntry.charSetEncoding;
+ if(charsetName != null && charsetName.trim().length() > 0) {
+ isr = new InputStreamReader(fis, charsetName);
+ } else {
+ isr = new InputStreamReader(fis);
+ }
+ return new BufferedReader(isr);
+ }
public synchronized void write(String filename, String value) throws
IOException {
FileEntry fileEntry = (FileEntry) files.get(filename);
if (fileEntry != null) {
if (fileEntry.inputOutputObject == null) {
- fileEntry.inputOutputObject = new
BufferedWriter(new FileWriter(fileEntry.file));
+ fileEntry.inputOutputObject =
createBufferedWriter(fileEntry, filename);
} else if (!(fileEntry.inputOutputObject instanceof
Writer)) {
throw new IOException("File " + filename + "
already in use");
}
@@ -171,6 +196,19 @@
}
}
+ private BufferedWriter createBufferedWriter(FileEntry fileEntry, String
filename) throws IOException {
+ FileOutputStream fos = new FileOutputStream(fileEntry.file);
+ OutputStreamWriter osw = null;
+ // If file encoding is specified, write using that encoding, otherwise
use default platform encoding
+ String charsetName = fileEntry.charSetEncoding;
+ if(charsetName != null && charsetName.trim().length() > 0) {
+ osw = new OutputStreamWriter(fos, charsetName);
+ } else {
+ osw = new OutputStreamWriter(fos);
+ }
+ return new BufferedWriter(osw);
+ }
+
public void closeFiles() throws IOException {
Iterator iter = files.entrySet().iterator();
while (iter.hasNext()) {
@@ -238,9 +276,11 @@
private static class FileEntry{
private File file;
private Object inputOutputObject; // Reader/Writer
- FileEntry(File f, Object o){
+ private String charSetEncoding;
+ FileEntry(File f, Object o, String e){
file=f;
inputOutputObject=o;
+ charSetEncoding=e;
}
}
}
Modified: jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?view=diff&rev=516795&r1=516794&r2=516795
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Sat Mar 10 13:58:10 2007
@@ -30,7 +30,7 @@
<h3>Version 2.2.1</h3>
<h4>Summary of changes (for more details, see below)</h4>
<p>
-The main enhancements are:
+Some of the main enhancements are:
</p>
<ul>
<li>Htmlparser 2.0 now used for parsing</li>
@@ -109,6 +109,7 @@
<li>Bug 40369 (partial) Equals Response Assertion</li>
<li>Bug 41705 - add content-encoding option to HTTP samplers for POST
requests</li>
<li>Bug 40933, 40945 - optional matching of embedded resource URLs</li>
+<li>Bug 41704 - Allow charset encoding to be specified for CSV DataSet</li>
</ul>
<h4>Non-functional improvements:</h4>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]