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 / java / util / Properties.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  4.9 KB  |  371 lines

  1. package java.util;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.io.PrintStream;
  11. import java.io.PrintWriter;
  12. import java.io.Writer;
  13.  
  14. public class Properties extends Hashtable {
  15.    private static final long serialVersionUID = 4112578634029874840L;
  16.    protected Properties defaults;
  17.    private static final String keyValueSeparators = "=: \t\r\n\f";
  18.    private static final String strictKeyValueSeparators = "=:";
  19.    private static final String specialSaveChars = "=: \t\r\n\f#!";
  20.    private static final String whiteSpaceChars = " \t\r\n\f";
  21.    private static final char[] hexDigit = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  22.  
  23.    public Properties() {
  24.       this((Properties)null);
  25.    }
  26.  
  27.    public Properties(Properties var1) {
  28.       this.defaults = var1;
  29.    }
  30.  
  31.    public synchronized Object setProperty(String var1, String var2) {
  32.       return ((Hashtable)this).put(var1, var2);
  33.    }
  34.  
  35.    public synchronized void load(InputStream var1) throws IOException {
  36.       BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "8859_1"));
  37.  
  38.       while(true) {
  39.          String var3 = var2.readLine();
  40.          if (var3 == null) {
  41.             return;
  42.          }
  43.  
  44.          if (var3.length() > 0) {
  45.             char var4 = var3.charAt(0);
  46.             if (var4 != '#' && var4 != '!') {
  47.                while(this.continueLine(var3)) {
  48.                   String var5 = var2.readLine();
  49.                   if (var5 == null) {
  50.                      var5 = new String("");
  51.                   }
  52.  
  53.                   String var6 = var3.substring(0, var3.length() - 1);
  54.                   int var7 = 0;
  55.  
  56.                   for(var7 = 0; var7 < var5.length() && " \t\r\n\f".indexOf(var5.charAt(var7)) != -1; ++var7) {
  57.                   }
  58.  
  59.                   var5 = var5.substring(var7, var5.length());
  60.                   var3 = new String(var6 + var5);
  61.                }
  62.  
  63.                int var12 = var3.length();
  64.  
  65.                int var13;
  66.                for(var13 = 0; var13 < var12 && " \t\r\n\f".indexOf(var3.charAt(var13)) != -1; ++var13) {
  67.                }
  68.  
  69.                if (var13 != var12) {
  70.                   int var15;
  71.                   for(var15 = var13; var15 < var12; ++var15) {
  72.                      char var8 = var3.charAt(var15);
  73.                      if (var8 == '\\') {
  74.                         ++var15;
  75.                      } else if ("=: \t\r\n\f".indexOf(var8) != -1) {
  76.                         break;
  77.                      }
  78.                   }
  79.  
  80.                   int var16;
  81.                   for(var16 = var15; var16 < var12 && " \t\r\n\f".indexOf(var3.charAt(var16)) != -1; ++var16) {
  82.                   }
  83.  
  84.                   if (var16 < var12 && "=:".indexOf(var3.charAt(var16)) != -1) {
  85.                      ++var16;
  86.                   }
  87.  
  88.                   while(var16 < var12 && " \t\r\n\f".indexOf(var3.charAt(var16)) != -1) {
  89.                      ++var16;
  90.                   }
  91.  
  92.                   String var9 = var3.substring(var13, var15);
  93.                   String var10 = var15 < var12 ? var3.substring(var16, var12) : "";
  94.                   var9 = this.loadConvert(var9);
  95.                   var10 = this.loadConvert(var10);
  96.                   ((Hashtable)this).put(var9, var10);
  97.                }
  98.             }
  99.          }
  100.       }
  101.    }
  102.  
  103.    private boolean continueLine(String var1) {
  104.       int var2 = 0;
  105.  
  106.       for(int var3 = var1.length() - 1; var3 >= 0 && var1.charAt(var3--) == '\\'; ++var2) {
  107.       }
  108.  
  109.       return var2 % 2 == 1;
  110.    }
  111.  
  112.    private String loadConvert(String var1) {
  113.       int var3 = var1.length();
  114.       StringBuffer var4 = new StringBuffer(var3);
  115.       int var5 = 0;
  116.  
  117.       while(var5 < var3) {
  118.          char var2 = var1.charAt(var5++);
  119.          if (var2 == '\\') {
  120.             var2 = var1.charAt(var5++);
  121.             if (var2 == 'u') {
  122.                int var6 = 0;
  123.  
  124.                for(int var7 = 0; var7 < 4; ++var7) {
  125.                   var2 = var1.charAt(var5++);
  126.                   switch (var2) {
  127.                      case '0':
  128.                      case '1':
  129.                      case '2':
  130.                      case '3':
  131.                      case '4':
  132.                      case '5':
  133.                      case '6':
  134.                      case '7':
  135.                      case '8':
  136.                      case '9':
  137.                         var6 = (var6 << 4) + var2 - 48;
  138.                         break;
  139.                      case ':':
  140.                      case ';':
  141.                      case '<':
  142.                      case '=':
  143.                      case '>':
  144.                      case '?':
  145.                      case '@':
  146.                      case 'G':
  147.                      case 'H':
  148.                      case 'I':
  149.                      case 'J':
  150.                      case 'K':
  151.                      case 'L':
  152.                      case 'M':
  153.                      case 'N':
  154.                      case 'O':
  155.                      case 'P':
  156.                      case 'Q':
  157.                      case 'R':
  158.                      case 'S':
  159.                      case 'T':
  160.                      case 'U':
  161.                      case 'V':
  162.                      case 'W':
  163.                      case 'X':
  164.                      case 'Y':
  165.                      case 'Z':
  166.                      case '[':
  167.                      case '\\':
  168.                      case ']':
  169.                      case '^':
  170.                      case '_':
  171.                      case '`':
  172.                      default:
  173.                         throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
  174.                      case 'A':
  175.                      case 'B':
  176.                      case 'C':
  177.                      case 'D':
  178.                      case 'E':
  179.                      case 'F':
  180.                         var6 = (var6 << 4) + 10 + var2 - 65;
  181.                         break;
  182.                      case 'a':
  183.                      case 'b':
  184.                      case 'c':
  185.                      case 'd':
  186.                      case 'e':
  187.                      case 'f':
  188.                         var6 = (var6 << 4) + 10 + var2 - 97;
  189.                   }
  190.                }
  191.  
  192.                var4.append((char)var6);
  193.             } else {
  194.                if (var2 == 't') {
  195.                   var2 = '\t';
  196.                } else if (var2 == 'r') {
  197.                   var2 = '\r';
  198.                } else if (var2 == 'n') {
  199.                   var2 = '\n';
  200.                } else if (var2 == 'f') {
  201.                   var2 = '\f';
  202.                }
  203.  
  204.                var4.append(var2);
  205.             }
  206.          } else {
  207.             var4.append(var2);
  208.          }
  209.       }
  210.  
  211.       return var4.toString();
  212.    }
  213.  
  214.    private String saveConvert(String var1, boolean var2) {
  215.       int var3 = var1.length();
  216.       StringBuffer var4 = new StringBuffer(var3 * 2);
  217.  
  218.       for(int var5 = 0; var5 < var3; ++var5) {
  219.          char var6 = var1.charAt(var5);
  220.          switch (var6) {
  221.             case '\t':
  222.                var4.append('\\');
  223.                var4.append('t');
  224.                break;
  225.             case '\n':
  226.                var4.append('\\');
  227.                var4.append('n');
  228.                break;
  229.             case '\f':
  230.                var4.append('\\');
  231.                var4.append('f');
  232.                break;
  233.             case '\r':
  234.                var4.append('\\');
  235.                var4.append('r');
  236.                break;
  237.             case ' ':
  238.                if (var5 == 0 || var2) {
  239.                   var4.append('\\');
  240.                }
  241.  
  242.                var4.append(' ');
  243.                break;
  244.             case '\\':
  245.                var4.append('\\');
  246.                var4.append('\\');
  247.                break;
  248.             default:
  249.                if (var6 >= ' ' && var6 <= '~') {
  250.                   if ("=: \t\r\n\f#!".indexOf(var6) != -1) {
  251.                      var4.append('\\');
  252.                   }
  253.  
  254.                   var4.append(var6);
  255.                } else {
  256.                   var4.append('\\');
  257.                   var4.append('u');
  258.                   var4.append(toHex(var6 >> 12 & 15));
  259.                   var4.append(toHex(var6 >> 8 & 15));
  260.                   var4.append(toHex(var6 >> 4 & 15));
  261.                   var4.append(toHex(var6 & 15));
  262.                }
  263.          }
  264.       }
  265.  
  266.       return var4.toString();
  267.    }
  268.  
  269.    public synchronized void save(OutputStream var1, String var2) {
  270.       try {
  271.          this.store(var1, var2);
  272.       } catch (IOException var4) {
  273.       }
  274.  
  275.    }
  276.  
  277.    public synchronized void store(OutputStream var1, String var2) throws IOException {
  278.       BufferedWriter var3 = new BufferedWriter(new OutputStreamWriter(var1, "8859_1"));
  279.       if (var2 != null) {
  280.          writeln(var3, "#" + var2);
  281.       }
  282.  
  283.       writeln(var3, "#" + (new Date()).toString());
  284.       Enumeration var4 = ((Hashtable)this).keys();
  285.  
  286.       while(var4.hasMoreElements()) {
  287.          String var5 = (String)var4.nextElement();
  288.          String var6 = (String)((Hashtable)this).get(var5);
  289.          var5 = this.saveConvert(var5, true);
  290.          var6 = this.saveConvert(var6, false);
  291.          writeln(var3, var5 + "=" + var6);
  292.       }
  293.  
  294.       var3.flush();
  295.    }
  296.  
  297.    private static void writeln(BufferedWriter var0, String var1) throws IOException {
  298.       ((Writer)var0).write(var1);
  299.       var0.newLine();
  300.    }
  301.  
  302.    public String getProperty(String var1) {
  303.       Object var2 = super.get(var1);
  304.       String var3 = var2 instanceof String ? (String)var2 : null;
  305.       return var3 == null && this.defaults != null ? this.defaults.getProperty(var1) : var3;
  306.    }
  307.  
  308.    public String getProperty(String var1, String var2) {
  309.       String var3 = this.getProperty(var1);
  310.       return var3 == null ? var2 : var3;
  311.    }
  312.  
  313.    public Enumeration propertyNames() {
  314.       Hashtable var1 = new Hashtable();
  315.       this.enumerate(var1);
  316.       return var1.keys();
  317.    }
  318.  
  319.    public void list(PrintStream var1) {
  320.       var1.println("-- listing properties --");
  321.       Hashtable var2 = new Hashtable();
  322.       this.enumerate(var2);
  323.  
  324.       String var4;
  325.       String var5;
  326.       for(Enumeration var3 = var2.keys(); var3.hasMoreElements(); var1.println(var4 + "=" + var5)) {
  327.          var4 = (String)var3.nextElement();
  328.          var5 = (String)var2.get(var4);
  329.          if (var5.length() > 40) {
  330.             var5 = var5.substring(0, 37) + "...";
  331.          }
  332.       }
  333.  
  334.    }
  335.  
  336.    public void list(PrintWriter var1) {
  337.       var1.println("-- listing properties --");
  338.       Hashtable var2 = new Hashtable();
  339.       this.enumerate(var2);
  340.  
  341.       String var4;
  342.       String var5;
  343.       for(Enumeration var3 = var2.keys(); var3.hasMoreElements(); var1.println(var4 + "=" + var5)) {
  344.          var4 = (String)var3.nextElement();
  345.          var5 = (String)var2.get(var4);
  346.          if (var5.length() > 40) {
  347.             var5 = var5.substring(0, 37) + "...";
  348.          }
  349.       }
  350.  
  351.    }
  352.  
  353.    private synchronized void enumerate(Hashtable var1) {
  354.       if (this.defaults != null) {
  355.          this.defaults.enumerate(var1);
  356.       }
  357.  
  358.       Enumeration var2 = ((Hashtable)this).keys();
  359.  
  360.       while(var2.hasMoreElements()) {
  361.          String var3 = (String)var2.nextElement();
  362.          var1.put(var3, ((Hashtable)this).get(var3));
  363.       }
  364.  
  365.    }
  366.  
  367.    private static char toHex(int var0) {
  368.       return hexDigit[var0 & 15];
  369.    }
  370. }
  371.