sebb        2003/10/10 09:46:32

  Modified:    src/functions/org/apache/jmeter/functions
                        StringFromFile.java
  Log:
  Improving error handling and logging
  
  Revision  Changes    Path
  1.10      +60 -22    
jakarta-jmeter/src/functions/org/apache/jmeter/functions/StringFromFile.java
  
  Index: StringFromFile.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/functions/org/apache/jmeter/functions/StringFromFile.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- StringFromFile.java       9 Oct 2003 18:13:21 -0000       1.9
  +++ StringFromFile.java       10 Oct 2003 16:46:32 -0000      1.10
  @@ -57,6 +57,7 @@
   
   import java.io.BufferedReader;
   import java.io.FileReader;
  +import java.io.IOException;
   import java.io.Serializable;
   import java.util.Collection;
   import java.util.LinkedList;
  @@ -90,58 +91,90 @@
    * - the file name is resolved at file (re-)open time
    * - the output variable name is resolved every time the function is invoked
    * 
  - * @author default
  + * @author sebb AT apache DOT org
    *
  - * @version $Id$
  + * @version $Revision$ Updated on: $Date$
    */
   public class StringFromFile extends AbstractFunction implements Serializable
   {
       private static Logger log = LoggingManager.getLoggerForClass();
   
       private static final List desc = new LinkedList();
  -    private static final String KEY = "_StringFromFile";
  +    private static final String KEY = "_StringFromFile";//$NON-NLS-1$
       // Function name (only 1 _)
  -
  +    
  +     private static final String ERR_IND = "**ERR**";//$NON-NLS-1$
  +    
       static {
  -        desc.add(JMeterUtils.getResString("string_from_file_file_name"));
  -        desc.add(JMeterUtils.getResString("function_name_param"));
  +        
desc.add(JMeterUtils.getResString("string_from_file_file_name"));//$NON-NLS-1$
  +        desc.add(JMeterUtils.getResString("function_name_param"));//$NON-NLS-1$
       }
   
  -    private String myValue = "<please supply a file>"; // Default value
  -    private String myName = "StringFromFile_"; // Name to store value in
  +    private String myValue = ERR_IND;
  +    private String myName = "StringFromFile_";//$NON-NLS-1$ - Name to store the 
value in
       private Object[] values;
       private BufferedReader myBread; // Buffered reader
  +     private FileReader fis; // keep this round to close it
       private boolean firstTime = false; // should we try to open the file?
       private boolean reopenFile = true; // Set from parameter list one day ...
       private String fileName; // needed for error messages
   
       public StringFromFile()
       {
  +             if (log.isDebugEnabled())
  +             {
  +                     log.debug("++++++++ Construct "+this);
  +             }
       }
   
  +     protected void finalize() throws Throwable{
  +             if (log.isDebugEnabled())
  +             {
  +                 log.debug("-------- Finalize "+this);
  +             }
  +     }
  +
       public Object clone()
       {
           StringFromFile newReader = new StringFromFile();
           if (log.isDebugEnabled())
           { // Skip expensive paramter creation ..
  -            log.debug(this +"::StringFromFile.clone()", new Throwable("debug"));
  +            log.debug(this +"::StringFromFile.clone()", new 
Throwable("debug"));//$NON-NLS-1$
           }
   
           return newReader;
       }
  +    
  +/*
  + * Warning: the file will generally be left open at the end of a test run.
  + * This is because functions don't have any way to find out when a test has
  + * ended ... 
  + */
  +    private void closeFile(){
  +     String tn = Thread.currentThread().getName();
  +     log.info(tn + " closing file " + fileName);//$NON-NLS-1$
  +     try {
  +             myBread.close();
  +                     fis.close();
  +             } catch (IOException e) {
  +                     log.error("closeFile() error: " + e.toString());//$NON-NLS-1$
  +             }
  +    }
   
       private void openFile()
       {
  +             String tn = Thread.currentThread().getName();
           fileName = ((CompoundVariable) values[0]).execute();
  +             log.info(tn + " opening file " + fileName);//$NON-NLS-1$
           try
           {
  -            FileReader fis = new FileReader(fileName);
  +            fis = new FileReader(fileName);
               myBread = new BufferedReader(fis);
  -            log.info("Opened " + fileName);
           }
           catch (Exception e)
           {
  -            log.error("openFile() error: " + e.toString());
  +            log.error("openFile() error: " + e.toString());//$NON-NLS-1$
  +            myBread=null;
           }
       }
   
  @@ -161,7 +194,7 @@
               myName = ((CompoundVariable) values[1]).execute();
           }
   
  -        myValue = "**ERR**";
  +        myValue = ERR_IND;
           
           /*
            * To avoid re-opening the file repeatedly after an error,
  @@ -181,22 +214,27 @@
                   String line = myBread.readLine();
                   if (line == null && reopenFile)
                   { // EOF, re-open file
  -                    log.info("Reached EOF on " + fileName);
  -                    myBread.close();
  +                    log.info("Reached EOF on " + fileName);//$NON-NLS-1$
  +                    closeFile();
                       openFile();
  -                    line = myBread.readLine();
  +                    if (myBread != null) {
  +                                             line = myBread.readLine();
  +                    } else {
  +                     line = ERR_IND;
  +                    }
                   }
                   myValue = line;
               }
               catch (Exception e)
               {
  -                log.error("Error reading file " + e.toString());
  +                             String tn = Thread.currentThread().getName();
  +                log.error(tn + " error reading file " + e.toString());//$NON-NLS-1$
               }
           }
   
           vars.put(myName, myValue);
   
  -        log.debug(this +"::StringFromFile.execute() name:" + myName + " value:" + 
myValue);
  +        log.debug(this +"::StringFromFile.execute() name:" + myName + " value:" + 
myValue);//$NON-NLS-1$
   
           return myValue;
   
  @@ -213,22 +251,22 @@
           throws InvalidVariableException
       {
   
  -        log.debug(this +"::StringFromFile.setParameters()");
  +        log.debug(this +"::StringFromFile.setParameters()");//$NON-NLS-1$
   
           values = parameters.toArray();
   
           if ((values.length > 2) || (values.length < 1))
           {
  -            throw new InvalidVariableException("Wrong number of parameters");
  +            throw new InvalidVariableException("Wrong number of 
parameters");//$NON-NLS-1$
           }
   
                StringBuffer sb = new StringBuffer(40);
  -             sb.append("setParameters(");
  +             sb.append("setParameters(");//$NON-NLS-1$
                for (int i = 0; i< values.length;i++){
                        if (i > 0) sb.append(",");
                        sb.append(((CompoundVariable) values[i]).getRawParameters());
                }
  -             sb.append(")");
  +             sb.append(")");//$NON-NLS-1$
                log.info(sb.toString());
                
                
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to