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]

Reply via email to