home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / net / www / MimeTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.0 KB  |  322 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.security.AccessController;
  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;
  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;
  23.    protected static String[] mailcapLocations;
  24.  
  25.    MimeTable() {
  26.       this.load();
  27.    }
  28.  
  29.    public static MimeTable getDefaultTable() {
  30.       if (defaultInstance == null) {
  31.          AccessController.doPrivileged(new 2());
  32.       }
  33.  
  34.       return defaultInstance;
  35.    }
  36.  
  37.    public static FileNameMap loadTable() {
  38.       MimeTable var0 = getDefaultTable();
  39.       return var0;
  40.    }
  41.  
  42.    public synchronized int getSize() {
  43.       return this.entries.size();
  44.    }
  45.  
  46.    public synchronized String getContentTypeFor(String var1) {
  47.       MimeEntry var2 = this.findByFileName(var1);
  48.       return var2 != null ? var2.getType() : null;
  49.    }
  50.  
  51.    public synchronized void add(MimeEntry var1) {
  52.       this.entries.put(var1.getType(), var1);
  53.       String[] var2 = var1.getExtensions();
  54.       if (var2 != null) {
  55.          for(int var3 = 0; var3 < var2.length; ++var3) {
  56.             this.extensionMap.put(var2[var3], var1);
  57.          }
  58.  
  59.       }
  60.    }
  61.  
  62.    public synchronized MimeEntry remove(String var1) {
  63.       MimeEntry var2 = (MimeEntry)this.entries.get(var1);
  64.       return this.remove(var2);
  65.    }
  66.  
  67.    public synchronized MimeEntry remove(MimeEntry var1) {
  68.       String[] var2 = var1.getExtensions();
  69.       if (var2 != null) {
  70.          for(int var3 = 0; var3 < var2.length; ++var3) {
  71.             this.extensionMap.remove(var2[var3]);
  72.          }
  73.       }
  74.  
  75.       return (MimeEntry)this.entries.remove(var1.getType());
  76.    }
  77.  
  78.    public synchronized MimeEntry find(String var1) {
  79.       MimeEntry var2 = (MimeEntry)this.entries.get(var1);
  80.       if (var2 == null) {
  81.          Enumeration var3 = this.entries.elements();
  82.  
  83.          while(var3.hasMoreElements()) {
  84.             MimeEntry var4 = (MimeEntry)var3.nextElement();
  85.             if (var4.matches(var1)) {
  86.                return var4;
  87.             }
  88.          }
  89.       }
  90.  
  91.       return var2;
  92.    }
  93.  
  94.    public MimeEntry findByFileName(String var1) {
  95.       String var2 = "";
  96.       int var3 = var1.lastIndexOf(35);
  97.       if (var3 > 0) {
  98.          var1 = var1.substring(0, var3 - 1);
  99.       }
  100.  
  101.       var3 = var1.lastIndexOf(46);
  102.       var3 = Math.max(var3, var1.lastIndexOf(47));
  103.       var3 = Math.max(var3, var1.lastIndexOf(63));
  104.       if (var3 != -1 && var1.charAt(var3) == '.') {
  105.          var2 = var1.substring(var3).toLowerCase();
  106.       }
  107.  
  108.       return this.findByExt(var2);
  109.    }
  110.  
  111.    public synchronized MimeEntry findByExt(String var1) {
  112.       return (MimeEntry)this.extensionMap.get(var1);
  113.    }
  114.  
  115.    public synchronized MimeEntry findByDescription(String var1) {
  116.       Enumeration var2 = this.elements();
  117.  
  118.       while(var2.hasMoreElements()) {
  119.          MimeEntry var3 = (MimeEntry)var2.nextElement();
  120.          if (var1.equals(var3.getDescription())) {
  121.             return var3;
  122.          }
  123.       }
  124.  
  125.       return this.find(var1);
  126.    }
  127.  
  128.    String getTempFileTemplate() {
  129.       return tempFileTemplate;
  130.    }
  131.  
  132.    public synchronized Enumeration elements() {
  133.       return this.entries.elements();
  134.    }
  135.  
  136.    public synchronized void load() {
  137.       Properties var1 = new Properties();
  138.       Object var2 = null;
  139.  
  140.       try {
  141.          String var4 = System.getProperty("content.types.user.table");
  142.          File var6;
  143.          if (var4 != null) {
  144.             var6 = new File(var4);
  145.             if (!var6.exists()) {
  146.                var6 = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "content-types.properties");
  147.             }
  148.          } else {
  149.             var6 = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "content-types.properties");
  150.          }
  151.  
  152.          BufferedInputStream var3 = new BufferedInputStream(new FileInputStream(var6));
  153.          var1.load(var3);
  154.          ((InputStream)var3).close();
  155.       } catch (IOException var5) {
  156.          System.err.println("Warning: default mime table not found: " + ((File)var2).getPath());
  157.          return;
  158.       }
  159.  
  160.       this.parse(var1);
  161.    }
  162.  
  163.    void parse(Properties var1) {
  164.       String var2 = (String)((Hashtable)var1).get("temp.file.template");
  165.       if (var2 != null) {
  166.          ((Hashtable)var1).remove("temp.file.template");
  167.          tempFileTemplate = var2;
  168.       }
  169.  
  170.       Enumeration var3 = var1.propertyNames();
  171.  
  172.       while(var3.hasMoreElements()) {
  173.          String var4 = (String)var3.nextElement();
  174.          String var5 = var1.getProperty(var4);
  175.          this.parse(var4, var5);
  176.       }
  177.  
  178.    }
  179.  
  180.    void parse(String var1, String var2) {
  181.       MimeEntry var3 = new MimeEntry(var1);
  182.       StringTokenizer var4 = new StringTokenizer(var2, ";");
  183.  
  184.       while(var4.hasMoreTokens()) {
  185.          String var5 = var4.nextToken();
  186.          this.parse(var5, var3);
  187.       }
  188.  
  189.       this.add(var3);
  190.    }
  191.  
  192.    void parse(String var1, MimeEntry var2) {
  193.       String var3 = null;
  194.       String var4 = null;
  195.       boolean var5 = false;
  196.       StringTokenizer var6 = new StringTokenizer(var1, "=");
  197.  
  198.       while(var6.hasMoreTokens()) {
  199.          if (var5) {
  200.             var4 = var6.nextToken().trim();
  201.          } else {
  202.             var3 = var6.nextToken().trim();
  203.             var5 = true;
  204.          }
  205.       }
  206.  
  207.       this.fill(var2, var3, var4);
  208.    }
  209.  
  210.    void fill(MimeEntry var1, String var2, String var3) {
  211.       if ("description".equalsIgnoreCase(var2)) {
  212.          var1.setDescription(var3);
  213.       } else if ("action".equalsIgnoreCase(var2)) {
  214.          var1.setAction(this.getActionCode(var3));
  215.       } else if ("application".equalsIgnoreCase(var2)) {
  216.          var1.setCommand(var3);
  217.       } else if ("icon".equalsIgnoreCase(var2)) {
  218.          var1.setImageFileName(var3);
  219.       } else if ("file_extensions".equalsIgnoreCase(var2)) {
  220.          var1.setExtensions(var3);
  221.       }
  222.  
  223.    }
  224.  
  225.    String[] getExtensions(String var1) {
  226.       StringTokenizer var2 = new StringTokenizer(var1, ",");
  227.       int var3 = var2.countTokens();
  228.       String[] var4 = new String[var3];
  229.  
  230.       for(int var5 = 0; var5 < var3; ++var5) {
  231.          var4[var5] = var2.nextToken();
  232.       }
  233.  
  234.       return var4;
  235.    }
  236.  
  237.    int getActionCode(String var1) {
  238.       for(int var2 = 0; var2 < MimeEntry.actionKeywords.length; ++var2) {
  239.          if (var1.equalsIgnoreCase(MimeEntry.actionKeywords[var2])) {
  240.             return var2;
  241.          }
  242.       }
  243.  
  244.       return 0;
  245.    }
  246.  
  247.    public synchronized boolean save(String var1) {
  248.       if (var1 == null) {
  249.          var1 = System.getProperty("user.home" + File.separator + "lib" + File.separator + "content-types.properties");
  250.       }
  251.  
  252.       return this.saveAsProperties(new File(var1));
  253.    }
  254.  
  255.    public Properties getAsProperties() {
  256.       Properties var1 = new Properties();
  257.       Enumeration var2 = this.elements();
  258.  
  259.       while(var2.hasMoreElements()) {
  260.          MimeEntry var3 = (MimeEntry)var2.nextElement();
  261.          ((Hashtable)var1).put(var3.getType(), var3.toProperty());
  262.       }
  263.  
  264.       return var1;
  265.    }
  266.  
  267.    protected boolean saveAsProperties(File var1) {
  268.       FileOutputStream var2 = null;
  269.  
  270.       boolean var4;
  271.       try {
  272.          var2 = new FileOutputStream(var1);
  273.          Properties var3 = this.getAsProperties();
  274.          ((Hashtable)var3).put("temp.file.template", tempFileTemplate);
  275.          String var5 = System.getProperty("user.name");
  276.          if (var5 != null) {
  277.             String var17 = "; customized for " + var5;
  278.             var3.save(var2, "sun.net.www MIME content-types table" + var17);
  279.          } else {
  280.             var3.save(var2, "sun.net.www MIME content-types table");
  281.          }
  282.  
  283.          return true;
  284.       } catch (IOException var15) {
  285.          ((Throwable)var15).printStackTrace();
  286.          var4 = false;
  287.       } finally {
  288.          if (var2 != null) {
  289.             try {
  290.                var2.close();
  291.             } catch (IOException var14) {
  292.             }
  293.          }
  294.  
  295.       }
  296.  
  297.       return var4;
  298.    }
  299.  
  300.    // $FF: synthetic method
  301.    static String access$002(String var0) {
  302.       tempFileTemplate = var0;
  303.       return var0;
  304.    }
  305.  
  306.    // $FF: synthetic method
  307.    static MimeTable access$102(MimeTable var0) {
  308.       defaultInstance = var0;
  309.       return var0;
  310.    }
  311.  
  312.    // $FF: synthetic method
  313.    static MimeTable access$100() {
  314.       return defaultInstance;
  315.    }
  316.  
  317.    static {
  318.       AccessController.doPrivileged(new 1());
  319.       defaultInstance = null;
  320.    }
  321. }
  322.