home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / net / www / MimeTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  7.1 KB  |  299 lines

  1. package sun.net.www;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.net.FileNameMap;
  10. import java.net.URLConnection;
  11. import java.util.Enumeration;
  12. import java.util.Hashtable;
  13. import java.util.Properties;
  14. import java.util.StringTokenizer;
  15.  
  16. public class MimeTable implements FileNameMap {
  17.    private Hashtable entries = new Hashtable();
  18.    private Hashtable extensionMap = new Hashtable();
  19.    private static String tempFileTemplate = System.getProperty("content.types.temp.file.template", "/tmp/%s");
  20.    private static final String filePreamble = "sun.net.www MIME content-types table";
  21.    private static final String fileMagic = "#sun.net.www MIME content-types table";
  22.    private static MimeTable defaultInstance = null;
  23.    protected static String[] mailcapLocations = new String[]{System.getProperty("user.mailcap"), System.getProperty("user.home") + "/.mailcap", "/etc/mailcap", "/usr/etc/mailcap", "/usr/local/etc/mailcap", System.getProperty("hotjava.home", "/usr/local/hotjava") + "/lib/mailcap"};
  24.  
  25.    private MimeTable() {
  26.       this.load();
  27.    }
  28.  
  29.    public static MimeTable getDefaultTable() {
  30.       if (defaultInstance == null) {
  31.          defaultInstance = new MimeTable();
  32.          URLConnection.setFileNameMap(defaultInstance);
  33.       }
  34.  
  35.       return defaultInstance;
  36.    }
  37.  
  38.    public synchronized int getSize() {
  39.       return this.entries.size();
  40.    }
  41.  
  42.    public synchronized String getContentTypeFor(String var1) {
  43.       MimeEntry var2 = this.findByFileName(var1);
  44.       return var2 != null ? var2.getType() : null;
  45.    }
  46.  
  47.    public synchronized void add(MimeEntry var1) {
  48.       this.entries.put(var1.getType(), var1);
  49.       String[] var2 = var1.getExtensions();
  50.       if (var2 != null) {
  51.          for(int var3 = 0; var3 < var2.length; ++var3) {
  52.             this.extensionMap.put(var2[var3], var1);
  53.          }
  54.  
  55.       }
  56.    }
  57.  
  58.    public synchronized MimeEntry remove(String var1) {
  59.       MimeEntry var2 = (MimeEntry)this.entries.get(var1);
  60.       return this.remove(var2);
  61.    }
  62.  
  63.    public synchronized MimeEntry remove(MimeEntry var1) {
  64.       String[] var2 = var1.getExtensions();
  65.       if (var2 != null) {
  66.          for(int var3 = 0; var3 < var2.length; ++var3) {
  67.             this.extensionMap.remove(var2[var3]);
  68.          }
  69.       }
  70.  
  71.       return (MimeEntry)this.entries.remove(var1.getType());
  72.    }
  73.  
  74.    public synchronized MimeEntry find(String var1) {
  75.       MimeEntry var2 = (MimeEntry)this.entries.get(var1);
  76.       if (var2 == null) {
  77.          Enumeration var3 = this.entries.elements();
  78.  
  79.          while(var3.hasMoreElements()) {
  80.             MimeEntry var4 = (MimeEntry)var3.nextElement();
  81.             if (var4.matches(var1)) {
  82.                return var4;
  83.             }
  84.          }
  85.       }
  86.  
  87.       return var2;
  88.    }
  89.  
  90.    public MimeEntry findByFileName(String var1) {
  91.       String var2 = "";
  92.       int var3 = var1.lastIndexOf(35);
  93.       if (var3 > 0) {
  94.          var1 = var1.substring(0, var3 - 1);
  95.       }
  96.  
  97.       var3 = var1.lastIndexOf(46);
  98.       var3 = Math.max(var3, var1.lastIndexOf(47));
  99.       var3 = Math.max(var3, var1.lastIndexOf(63));
  100.       if (var3 != -1 && var1.charAt(var3) == '.') {
  101.          var2 = var1.substring(var3).toLowerCase();
  102.       }
  103.  
  104.       return this.findByExt(var2);
  105.    }
  106.  
  107.    public synchronized MimeEntry findByExt(String var1) {
  108.       return (MimeEntry)this.extensionMap.get(var1);
  109.    }
  110.  
  111.    public synchronized MimeEntry findByDescription(String var1) {
  112.       Enumeration var2 = this.elements();
  113.  
  114.       while(var2.hasMoreElements()) {
  115.          MimeEntry var3 = (MimeEntry)var2.nextElement();
  116.          if (var1.equals(var3.getDescription())) {
  117.             return var3;
  118.          }
  119.       }
  120.  
  121.       return this.find(var1);
  122.    }
  123.  
  124.    String getTempFileTemplate() {
  125.       return tempFileTemplate;
  126.    }
  127.  
  128.    public synchronized Enumeration elements() {
  129.       return this.entries.elements();
  130.    }
  131.  
  132.    public synchronized void load() {
  133.       Properties var1 = new Properties();
  134.       Object var2 = null;
  135.  
  136.       try {
  137.          String var4 = System.getProperty("content.types.user.table");
  138.          File var6;
  139.          if (var4 != null) {
  140.             var6 = new File(var4);
  141.             if (!var6.exists()) {
  142.                var6 = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "content-types.properties");
  143.             }
  144.          } else {
  145.             var6 = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "content-types.properties");
  146.          }
  147.  
  148.          BufferedInputStream var3 = new BufferedInputStream(new FileInputStream(var6));
  149.          var1.load(var3);
  150.          ((InputStream)var3).close();
  151.       } catch (IOException var5) {
  152.          System.err.println("MimeTable.load: file = " + ((File)var2).getPath() + ", " + var5);
  153.          ((Throwable)var5).printStackTrace();
  154.          return;
  155.       }
  156.  
  157.       this.parse(var1);
  158.    }
  159.  
  160.    void parse(Properties var1) {
  161.       String var2 = (String)((Hashtable)var1).get("temp.file.template");
  162.       if (var2 != null) {
  163.          ((Hashtable)var1).remove("temp.file.template");
  164.          tempFileTemplate = var2;
  165.       }
  166.  
  167.       Enumeration var3 = var1.propertyNames();
  168.  
  169.       while(var3.hasMoreElements()) {
  170.          String var4 = (String)var3.nextElement();
  171.          String var5 = var1.getProperty(var4);
  172.          this.parse(var4, var5);
  173.       }
  174.  
  175.    }
  176.  
  177.    void parse(String var1, String var2) {
  178.       MimeEntry var3 = new MimeEntry(var1);
  179.       StringTokenizer var4 = new StringTokenizer(var2, ";");
  180.  
  181.       while(var4.hasMoreTokens()) {
  182.          String var5 = var4.nextToken();
  183.          this.parse(var5, var3);
  184.       }
  185.  
  186.       this.add(var3);
  187.    }
  188.  
  189.    void parse(String var1, MimeEntry var2) {
  190.       String var3 = null;
  191.       String var4 = null;
  192.       boolean var5 = false;
  193.       StringTokenizer var6 = new StringTokenizer(var1, "=");
  194.  
  195.       while(var6.hasMoreTokens()) {
  196.          if (var5) {
  197.             var4 = var6.nextToken().trim();
  198.          } else {
  199.             var3 = var6.nextToken().trim();
  200.             var5 = true;
  201.          }
  202.       }
  203.  
  204.       this.fill(var2, var3, var4);
  205.    }
  206.  
  207.    void fill(MimeEntry var1, String var2, String var3) {
  208.       if ("description".equalsIgnoreCase(var2)) {
  209.          var1.setDescription(var3);
  210.       } else if ("action".equalsIgnoreCase(var2)) {
  211.          var1.setAction(this.getActionCode(var3));
  212.       } else if ("application".equalsIgnoreCase(var2)) {
  213.          var1.setCommand(var3);
  214.       } else if ("icon".equalsIgnoreCase(var2)) {
  215.          var1.setImageFileName(var3);
  216.       } else {
  217.          if ("file_extensions".equalsIgnoreCase(var2)) {
  218.             var1.setExtensions(var3);
  219.          }
  220.  
  221.       }
  222.    }
  223.  
  224.    String[] getExtensions(String var1) {
  225.       StringTokenizer var2 = new StringTokenizer(var1, ",");
  226.       int var3 = var2.countTokens();
  227.       String[] var4 = new String[var3];
  228.  
  229.       for(int var5 = 0; var5 < var3; ++var5) {
  230.          var4[var5] = var2.nextToken();
  231.       }
  232.  
  233.       return var4;
  234.    }
  235.  
  236.    int getActionCode(String var1) {
  237.       for(int var2 = 0; var2 < MimeEntry.actionKeywords.length; ++var2) {
  238.          if (var1.equalsIgnoreCase(MimeEntry.actionKeywords[var2])) {
  239.             return var2;
  240.          }
  241.       }
  242.  
  243.       return 0;
  244.    }
  245.  
  246.    public synchronized boolean save(String var1) {
  247.       if (var1 == null) {
  248.          var1 = System.getProperty("user.home" + File.separator + "lib" + File.separator + "content-types.properties");
  249.       }
  250.  
  251.       return this.saveAsProperties(new File(var1));
  252.    }
  253.  
  254.    public Properties getAsProperties() {
  255.       Properties var1 = new Properties();
  256.       Enumeration var2 = this.elements();
  257.  
  258.       while(var2.hasMoreElements()) {
  259.          MimeEntry var3 = (MimeEntry)var2.nextElement();
  260.          ((Hashtable)var1).put(var3.getType(), var3.toProperty());
  261.       }
  262.  
  263.       return var1;
  264.    }
  265.  
  266.    protected boolean saveAsProperties(File var1) {
  267.       FileOutputStream var2 = null;
  268.  
  269.       boolean var3;
  270.       try {
  271.          var2 = new FileOutputStream(var1);
  272.          Properties var6 = this.getAsProperties();
  273.          ((Hashtable)var6).put("temp.file.template", tempFileTemplate);
  274.          String var8 = System.getProperty("user.name");
  275.          if (var8 != null) {
  276.             String var7 = "; customized for " + var8;
  277.             var6.save(var2, "sun.net.www MIME content-types table" + var7);
  278.          } else {
  279.             var6.save(var2, "sun.net.www MIME content-types table");
  280.          }
  281.  
  282.          return true;
  283.       } catch (IOException var15) {
  284.          ((Throwable)var15).printStackTrace();
  285.          var3 = false;
  286.       } finally {
  287.          if (var2 != null) {
  288.             try {
  289.                var2.close();
  290.             } catch (IOException var14) {
  291.             }
  292.          }
  293.  
  294.       }
  295.  
  296.       return var3;
  297.    }
  298. }
  299.