You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2005/11/20 19:38:56 UTC
svn commit: r345771 -
/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/services/FileServer.java
Author: sebb
Date: Sun Nov 20 10:38:52 2005
New Revision: 345771
URL: http://svn.apache.org/viewcvs?rev=345771&view=rev
Log:
Allow FileServer files to be absolute
Modified:
jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/services/FileServer.java
Modified: jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/services/FileServer.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/services/FileServer.java?rev=345771&r1=345770&r2=345771&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/services/FileServer.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/core/org/apache/jmeter/services/FileServer.java Sun Nov 20 10:38:52 2005
@@ -53,25 +53,33 @@
* test plans to execute on unknown boxes that only have Java installed.
*/
public class FileServer {
- static Logger log = LoggingManager.getLoggerForClass();
+ private static final Logger log = LoggingManager.getLoggerForClass();
- File base;
+ private static final String DEFAULT_BASE = JMeterUtils.getProperty("user.dir");
+
+ private File base;
+
+ //TODO - make "files" and "random" static as the class is a singleton?
+
+ private final Map files = new HashMap();
+
+ private static final FileServer server = new FileServer();
- Map files = new HashMap();
-
- private static FileServer server = new FileServer();
-
- private Random random = new Random();
+ private final Random random = new Random();
private FileServer() {
- base = new File(JMeterUtils.getProperty("user.dir"));
+ base = new File(DEFAULT_BASE);
}
public static FileServer getFileServer() {
return server;
}
- public void setBasedir(String basedir) throws IOException {
+ public void resetBase() throws IOException{
+ setBasedir(DEFAULT_BASE);
+ }
+
+ public synchronized void setBasedir(String basedir) throws IOException {
if (filesOpen()) {
throw new IOException("Files are still open, cannot change base directory");
}
@@ -84,13 +92,22 @@
}
}
- public String getBaseDir() {
+ public synchronized String getBaseDir() {
return base.getAbsolutePath();
}
+ /**
+ * 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
+ */
public synchronized void reserveFile(String filename) {
if (!files.containsKey(filename)) {
- Object[] file = new Object[] { new File(base, filename), null };
+ File f = new File(filename);
+ FileEntry file =
+ new FileEntry(f.isAbsolute() ? f : new File(base, filename),null);
+ log.info("Stored: "+filename);
files.put(filename, file);
}
}
@@ -103,42 +120,49 @@
* @throws IOException
*/
public synchronized String readLine(String filename) throws IOException {
- Object[] file = (Object[]) files.get(filename);
- if (file != null) {
- if (file[1] == null) {
- BufferedReader r = new BufferedReader(new FileReader((File) file[0]));
- file[1] = r;
- }
- BufferedReader reader = (BufferedReader) file[1];
+ FileEntry fileEntry = (FileEntry) files.get(filename);
+ if (fileEntry != null) {
+ if (fileEntry.inputOutputObject == null) {
+ BufferedReader r = new BufferedReader(new FileReader(fileEntry.file));
+ fileEntry.inputOutputObject = r;
+ } else if (!(fileEntry.inputOutputObject instanceof Reader)) {
+ throw new IOException("File " + filename + " already in use");
+ }
+ BufferedReader reader = (BufferedReader) fileEntry.inputOutputObject;
String line = reader.readLine();
if (line == null) {
reader.close();
- reader = new BufferedReader(new FileReader((File) file[0]));
- file[1] = reader;
+ reader = new BufferedReader(new FileReader(fileEntry.file));
+ fileEntry.inputOutputObject = reader;
line = reader.readLine();
}
+ if (log.isDebugEnabled()) log.debug("Read:"+line);
return line;
}
- throw new IOException("File never reserved");
+ throw new IOException("File never reserved: "+filename);
}
public synchronized void write(String filename, String value) throws IOException {
- Object[] file = (Object[]) files.get(filename);
- if (file != null) {
- if (file[1] == null) {
- file[1] = new BufferedWriter(new FileWriter((File) file[0]));
- } else if (!(file[1] instanceof Writer)) {
+ FileEntry fileEntry = (FileEntry) files.get(filename);
+ if (fileEntry != null) {
+ if (fileEntry.inputOutputObject == null) {
+ fileEntry.inputOutputObject = new BufferedWriter(new FileWriter(fileEntry.file));
+ } else if (!(fileEntry.inputOutputObject instanceof Writer)) {
throw new IOException("File " + filename + " already in use");
}
- BufferedWriter writer = (BufferedWriter) file[1];
+ BufferedWriter writer = (BufferedWriter) fileEntry.inputOutputObject;
+ if (log.isDebugEnabled()) log.debug("Write:"+value);
writer.write(value);
- }
+ } else {
+ throw new IOException("File never reserved: "+filename);
+ }
}
public void closeFiles() throws IOException {
- Iterator iter = files.keySet().iterator();
+ Iterator iter = files.entrySet().iterator();
while (iter.hasNext()) {
- closeFile((String) iter.next());
+ Map.Entry me = (Map.Entry) iter.next();
+ closeFile((String)me.getKey(),(FileEntry)me.getValue() );
}
files.clear();
}
@@ -148,19 +172,23 @@
* @throws IOException
*/
public synchronized void closeFile(String name) throws IOException {
- Object[] file = (Object[]) files.get(name);
- if (file != null && file.length == 2 && file[1] != null) {
- ((Reader) file[1]).close();
- file[1] = null;
- }
+ FileEntry fileEntry = (FileEntry) files.get(name);
+ closeFile(name, fileEntry);
}
+ private void closeFile(String name, FileEntry fileEntry) throws IOException {
+ if (fileEntry != null && fileEntry.inputOutputObject != null) {
+ log.info("Close: "+name);
+ ((Reader) fileEntry.inputOutputObject).close();
+ fileEntry.inputOutputObject = null;
+ }
+ }
+
protected boolean filesOpen() {
- Iterator iter = files.keySet().iterator();
+ Iterator iter = files.values().iterator();
while (iter.hasNext()) {
- String name = (String) iter.next();
- Object[] file = (Object[]) files.get(name);
- if (file[1] != null) {
+ FileEntry fileEntry = (FileEntry) iter.next();
+ if (fileEntry.inputOutputObject != null) {
return true;
}
}
@@ -187,4 +215,13 @@
}
return input;
}
+
+ private static class FileEntry{
+ private File file;
+ private Object inputOutputObject; // Reader/Writer
+ FileEntry(File f, Object o){
+ file=f;
+ inputOutputObject=o;
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org