X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FRes.java;h=107c766df9f55f17225a57baf120d092d3d069a2;hb=0373b49c4640afde70d852f2531e46b19260554f;hp=77b502b82e03fce99adeda6a4825e34849832646;hpb=8235361e8601ae7b36ab707058de3b52225d15a2;p=org.ibex.core.git diff --git a/src/org/xwt/Res.java b/src/org/xwt/Res.java index 77b502b..107c766 100644 --- a/src/org/xwt/Res.java +++ b/src/org/xwt/Res.java @@ -6,18 +6,20 @@ import java.util.*; import java.util.zip.*; import org.xwt.js.*; import org.xwt.util.*; +import org.bouncycastle.util.encoders.Base64; /** base class for XWT resources */ public abstract class Res extends JS { - public String getDescriptiveName() { return "FIXME"; } - - /** if this Res corresponds to a Template, it is cached here */ - Template t = null; + public String getDescriptiveName() { return ""; } /** cache of subresources so that the equality operator works on them */ private Hash refCache = null; + public Template t = null; + + public Res getParent() { return null; } + /** returns an InputStream containing the Resource's contents */ public InputStream getInputStream() throws IOException { return getInputStream(""); } public abstract InputStream getInputStream(String path) throws IOException; @@ -51,7 +53,9 @@ public abstract class Res extends JS { if (url.startsWith("https://")) return new HTTP(url); if (url.startsWith("file:") && permitLocalFilesystem) return new File(url.substring(5)); if (url.startsWith("cab:")) return new CAB(stringToRes(url.substring(4))); - throw new JS.Exn("invalid resource specifier"); + if (url.startsWith("data:")) return new ByteArray(Base64.decode(url.substring(5))); + if (url.startsWith("utf8:")) return new ByteArray(url.substring(5).getBytes()); + throw new JS.Exn("invalid resource specifier " + url); } /** HTTP or HTTPS resource */ @@ -108,12 +112,17 @@ public abstract class Res extends JS { Res parent; Object key; Ref(Res parent, Object key) { this.parent = parent; this.key = key; } + public String getDescriptiveName() { + String pdn = parent.getDescriptiveName(); + return pdn.equals("") ? key.toString() : (pdn + "." + key.toString()); + } public Res addExtension(String extension) { return (key instanceof String && ((String)key).endsWith(extension)) ? this : new Ref(parent, key + extension); } public InputStream getInputStream(String path) throws IOException { return parent.getInputStream("/" + key + path); } + public Res getParent() { return parent; } public Res graft(Object newResource) { return new Graft(parent, key, newResource); } } @@ -127,6 +136,8 @@ public abstract class Res extends JS { public int hashCode() { return graftee.hashCode(); } public InputStream getInputStream(String s) throws IOException { return graftee.getInputStream(s); } public Object get(Object key) { return replaced_key.equals(key) ? replaced_val : graftee.get(key); } + public String getDescriptiveName() { return graftee.getDescriptiveName(); } + public Res getParent() { return graftee.getParent(); } } /** unpacks a Microsoft CAB file (possibly embedded in another file; we scan for 'MSCF' */