home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / parser.jar / com / sun / xml / parser / Resolver.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-02-23  |  5.1 KB  |  206 lines

  1. package com.sun.xml.parser;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.net.HttpURLConnection;
  8. import java.net.URL;
  9. import java.net.URLConnection;
  10. import java.util.Hashtable;
  11. import org.xml.sax.EntityResolver;
  12. import org.xml.sax.InputSource;
  13. import org.xml.sax.SAXException;
  14.  
  15. public class Resolver implements EntityResolver {
  16.    private boolean ignoringMIME;
  17.    private Hashtable id2uri;
  18.    private Hashtable id2resource;
  19.    private Hashtable id2loader;
  20.    private static final String[] types = new String[]{"application/xml", "text/xml", "text/plain", "text/html", "application/x-netcdf", "content/unknown"};
  21.  
  22.    public static InputSource createInputSource(File var0) throws IOException {
  23.       InputSource var1 = new InputSource(XmlReader.createReader(new FileInputStream(var0)));
  24.       String var2 = var0.getAbsolutePath();
  25.       if (File.separatorChar != '/') {
  26.          var2 = var2.replace(File.separatorChar, '/');
  27.       }
  28.  
  29.       if (!var2.startsWith("/")) {
  30.          var2 = "/" + var2;
  31.       }
  32.  
  33.       if (!var2.endsWith("/") && var0.isDirectory()) {
  34.          var2 = var2 + "/";
  35.       }
  36.  
  37.       var1.setSystemId("file:" + var2);
  38.       return var1;
  39.    }
  40.  
  41.    public static InputSource createInputSource(String var0, InputStream var1, boolean var2, String var3) throws IOException {
  42.       String var5 = null;
  43.       if (var0 != null) {
  44.          var0 = var0.toLowerCase();
  45.          int var6 = var0.indexOf(59);
  46.          if (var6 != -1) {
  47.             String var7 = var0.substring(var6 + 1);
  48.             var0 = var0.substring(0, var6);
  49.             var6 = var7.indexOf("charset");
  50.             if (var6 != -1) {
  51.                var7 = var7.substring(var6 + 7);
  52.                if ((var6 = var7.indexOf(59)) != -1) {
  53.                   var7 = var7.substring(0, var6);
  54.                }
  55.  
  56.                if ((var6 = var7.indexOf(61)) != -1) {
  57.                   var7 = var7.substring(var6 + 1);
  58.                   if ((var6 = var7.indexOf(40)) != -1) {
  59.                      var7 = var7.substring(0, var6);
  60.                   }
  61.  
  62.                   if ((var6 = var7.indexOf(34)) != -1) {
  63.                      var7 = var7.substring(var6 + 1);
  64.                      var7 = var7.substring(0, var7.indexOf(34));
  65.                   }
  66.  
  67.                   var5 = var7.trim();
  68.                }
  69.             }
  70.          }
  71.  
  72.          if (var2) {
  73.             boolean var19 = false;
  74.  
  75.             for(int var8 = 0; var8 < types.length; ++var8) {
  76.                if (types[var8].equals(var0)) {
  77.                   var19 = true;
  78.                   break;
  79.                }
  80.             }
  81.  
  82.             if (!var19) {
  83.                throw new IOException("Not XML: " + var0);
  84.             }
  85.          }
  86.  
  87.          if (var5 == null) {
  88.             var0 = var0.trim();
  89.             if (var0.startsWith("text/") && !"file".equalsIgnoreCase(var3)) {
  90.                var5 = "US-ASCII";
  91.             }
  92.          }
  93.       }
  94.  
  95.       InputSource var4 = new InputSource(XmlReader.createReader(var1, var5));
  96.       var4.setByteStream(var1);
  97.       var4.setEncoding(var5);
  98.       return var4;
  99.    }
  100.  
  101.    public static InputSource createInputSource(URL var0, boolean var1) throws IOException {
  102.       URLConnection var2 = var0.openConnection();
  103.       if (var2 instanceof HttpURLConnection) {
  104.          int var3 = ((HttpURLConnection)var2).getResponseCode();
  105.          if (var3 >= 400 && var3 <= 417 || var3 >= 500 && var3 <= 505) {
  106.             throw new IOException("Error in opening uri " + var0 + "status code=" + var3);
  107.          }
  108.       }
  109.  
  110.       InputSource var5;
  111.       if (var1) {
  112.          String var4 = var2.getContentType();
  113.          var5 = createInputSource(var4, var2.getInputStream(), false, var0.getProtocol());
  114.       } else {
  115.          var5 = new InputSource(XmlReader.createReader(var2.getInputStream()));
  116.       }
  117.  
  118.       var5.setSystemId(var2.getURL().toString());
  119.       return var5;
  120.    }
  121.  
  122.    public boolean isIgnoringMIME() {
  123.       return this.ignoringMIME;
  124.    }
  125.  
  126.    private InputStream mapResource(String var1) {
  127.       if (var1 != null && this.id2resource != null) {
  128.          String var2 = (String)this.id2resource.get(var1);
  129.          ClassLoader var3 = null;
  130.          if (var2 == null) {
  131.             return null;
  132.          } else {
  133.             if (this.id2loader != null) {
  134.                var3 = (ClassLoader)this.id2loader.get(var1);
  135.             }
  136.  
  137.             return var3 == null ? ClassLoader.getSystemResourceAsStream(var2) : var3.getResourceAsStream(var2);
  138.          }
  139.       } else {
  140.          return null;
  141.       }
  142.    }
  143.  
  144.    private String name2uri(String var1) {
  145.       return var1 != null && this.id2uri != null ? (String)this.id2uri.get(var1) : null;
  146.    }
  147.  
  148.    public void registerCatalogEntry(String var1, String var2) {
  149.       if (this.id2uri == null) {
  150.          this.id2uri = new Hashtable(17);
  151.       }
  152.  
  153.       this.id2uri.put(var1, var2);
  154.    }
  155.  
  156.    public void registerCatalogEntry(String var1, String var2, ClassLoader var3) {
  157.       if (this.id2resource == null) {
  158.          this.id2resource = new Hashtable(17);
  159.       }
  160.  
  161.       this.id2resource.put(var1, var2);
  162.       if (var3 != null) {
  163.          if (this.id2loader == null) {
  164.             this.id2loader = new Hashtable(17);
  165.          }
  166.  
  167.          this.id2loader.put(var1, var3);
  168.       }
  169.  
  170.    }
  171.  
  172.    public InputSource resolveEntity(String var1, String var2) throws IOException, SAXException {
  173.       String var4 = this.name2uri(var1);
  174.       InputSource var3;
  175.       InputStream var5;
  176.       if (var4 == null && (var5 = this.mapResource(var1)) != null) {
  177.          var2 = "java:resource:" + (String)this.id2resource.get(var1);
  178.          var3 = new InputSource(XmlReader.createReader(var5));
  179.       } else {
  180.          if (var4 != null) {
  181.             var2 = var4;
  182.          } else if (var2 == null) {
  183.             return null;
  184.          }
  185.  
  186.          URL var6 = new URL(var2);
  187.          URLConnection var7 = var6.openConnection();
  188.          var2 = var7.getURL().toString();
  189.          if (this.ignoringMIME) {
  190.             var3 = new InputSource(XmlReader.createReader(var7.getInputStream()));
  191.          } else {
  192.             String var8 = var7.getContentType();
  193.             var3 = createInputSource(var8, var7.getInputStream(), false, var6.getProtocol());
  194.          }
  195.       }
  196.  
  197.       var3.setSystemId(var2);
  198.       var3.setPublicId(var1);
  199.       return var3;
  200.    }
  201.  
  202.    public void setIgnoringMIME(boolean var1) {
  203.       this.ignoringMIME = var1;
  204.    }
  205. }
  206.