From: adam Date: Sun, 9 May 2004 23:27:08 +0000 (+0000) Subject: added org.ibex.js.Directory: simple JS filesystem interface X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=58c5bead1007713bd7e003d3d1729f3f83d554f2;p=org.ibex.core.git added org.ibex.js.Directory: simple JS filesystem interface darcs-hash:20040509232708-5007d-7bb9bb2a6ceff2121ff652bd66aa2164b1f9c951.gz --- diff --git a/src/org/ibex/js/Directory.java b/src/org/ibex/js/Directory.java new file mode 100644 index 0000000..5f5ac38 --- /dev/null +++ b/src/org/ibex/js/Directory.java @@ -0,0 +1,117 @@ +// Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL] +package org.ibex.js; + +import org.ibex.util.*; +import java.util.*; +import java.io.*; + +// FEATURE: support for move +// FEATURE: support for bytestreams +// FEATURE: cache directories so we can do equality checking on them? +// FEATURE: autoconvert "true" to true and "0.3" to 0.3 on readback + +/** + * A crude mechanism for using a filesystem as object storage. + * + * This object represents a directory; writing a string, number, or + * boolean to any of its properties will create a file with the + * (encoded) property name as its filename and the "stringified" + * value as its contents. + * + * Writing 'null' to one of this object's properties will + * [recursively if necessary] delete the corresponding directory + * entry. + * + * Writing any other object to one of this object's properties will + * create a new Directory object and copy the other object's keys() + * into the new Directory. This means that assigning one directory + * to a property of another directory will copy the directory, + * not move it. There is currently no way to move directories. + * + * If an object is written to a property that already has an entry, + * the old one is deleted (equivalent to writing 'null') first. + * + * WARNING: when instantiating a Directory object with a file + * argument that points to a non-directory File, this class will + * delete that file and create a directory! + */ +public class Directory extends JS { + + File f; + + /** + * Create the directory object. Existing directories will be + * preserved; if a file is present it will be obliterated. + */ + public Directory(File f) throws IOException { + this.f = f; + if (!f.exists()) new Directory(new File(f.getParent())); + if (!f.isDirectory()) destroy(f); + f.mkdirs(); + } + + private static void destroy(File f) throws IOException { + if (!f.exists()) return; + if (f.isDirectory()) { + String[] entries = f.list(); + for(int i=0; i