package org.ibex.js;
import org.ibex.util.*;
-import java.util.*;
import java.io.*;
// FEATURE: support for move
* argument that points to a non-directory File, this class will
* delete that file and create a directory!
*/
-public class Directory extends JS {
+public class Directory extends JS.Immutable {
File f;
public void put(JS key0, JS val) throws JSExn {
try {
if (key0 == null) return;
- String key = toString(key0);
- File f2 = new File(f.getAbsolutePath() + File.separatorChar + FileNameEncoder.encode(key));
+ String key = JSU.toString(key0);
+ File f2 = new File(f.getAbsolutePath() + File.separatorChar + Encode.toFilename(key));
destroy(f2);
if (val == null) return;
if (val instanceof JSPrimitive) {
OutputStream out = new FileOutputStream(f2);
Writer w = new OutputStreamWriter(out);
- w.write(toString(val));
+ w.write(JSU.toString(val));
w.flush();
out.close();
} else {
Directory d2 = new Directory(f2);
JS.Enumeration e = val.keys();
- while(e.hasMoreElements()) {
- JS k = e.nextElement();
+ while(e.hasNext()) {
+ JS k = e.next();
JS v = val.get(k);
d2.put(k, v);
}
public JS get(JS key0) throws JSExn {
try {
if (key0 == null) return null;
- String key = toString(key0);
- File f2 = new File(f.getAbsolutePath() + File.separatorChar + FileNameEncoder.encode(key));
+ String key = JSU.toString(key0);
+ File f2 = new File(f.getAbsolutePath() + File.separatorChar + Encode.toFilename(key));
if (!f2.exists()) return null;
if (f2.isDirectory()) return new Directory(f2);
char[] chars = new char[((int)f2.length()) * 2];
Reader r = new InputStreamReader(new FileInputStream(f2));
while(true) {
int numread = r.read(chars, numchars, chars.length - numchars);
- if (numread == -1) return JS.S(new String(chars, 0, numchars));
+ if (numread == -1) return JSU.S(new String(chars, 0, numchars));
numchars += numread;
}
} catch (IOException ioe) {
}
}
- public Enumeration keys() {
+ public JS.Enumeration keys() {
final String[] elements = f.list();
- return new Enumeration(null) {
+ return new JS.Enumeration(null) {
int i = 0;
- public boolean _hasMoreElements() { return i < elements.length; }
- public JS _nextElement() { return JS.S(FileNameEncoder.decode(elements[i++])); }
+ public boolean _hasNext() { return i < elements.length; }
+ public JS _next() { return JSU.S(Encode.fromFilename(elements[i++])); }
};
}
}