home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / naming / NameImpl.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  8.1 KB  |  601 lines

  1. package javax.naming;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.NoSuchElementException;
  5. import java.util.Properties;
  6. import java.util.Vector;
  7.  
  8. class NameImpl {
  9.    private static final byte LEFT_TO_RIGHT = 1;
  10.    private static final byte RIGHT_TO_LEFT = 2;
  11.    private static final byte FLAT = 0;
  12.    private Vector components;
  13.    private byte syntaxDirection;
  14.    private String syntaxSeparator;
  15.    private String syntaxSeparator2;
  16.    private boolean syntaxCaseInsensitive;
  17.    private boolean syntaxTrimBlanks;
  18.    private String syntaxEscape;
  19.    private String syntaxBeginQuote1;
  20.    private String syntaxEndQuote1;
  21.    private String syntaxBeginQuote2;
  22.    private String syntaxEndQuote2;
  23.    private String syntaxAvaSeparator;
  24.    private String syntaxTypevalSeparator;
  25.    private static final int STYLE_NONE = 0;
  26.    private static final int STYLE_QUOTE1 = 1;
  27.    private static final int STYLE_QUOTE2 = 2;
  28.    private static final int STYLE_ESCAPE = 3;
  29.    private int escapingStyle;
  30.  
  31.    private final boolean isA(String var1, int var2, String var3) {
  32.       return var3 != null && var1.startsWith(var3, var2);
  33.    }
  34.  
  35.    private final boolean isMeta(String var1, int var2) {
  36.       return this.isA(var1, var2, this.syntaxEscape) || this.isA(var1, var2, this.syntaxBeginQuote1) || this.isA(var1, var2, this.syntaxBeginQuote2) || this.isSeparator(var1, var2);
  37.    }
  38.  
  39.    private final boolean isSeparator(String var1, int var2) {
  40.       return this.isA(var1, var2, this.syntaxSeparator) || this.isA(var1, var2, this.syntaxSeparator2);
  41.    }
  42.  
  43.    private final int skipSeparator(String var1, int var2) {
  44.       if (this.isA(var1, var2, this.syntaxSeparator)) {
  45.          var2 += this.syntaxSeparator.length();
  46.       } else if (this.isA(var1, var2, this.syntaxSeparator2)) {
  47.          var2 += this.syntaxSeparator2.length();
  48.       }
  49.  
  50.       return var2;
  51.    }
  52.  
  53.    private final int extractComp(String var1, int var2, int var3, Vector var4) throws InvalidNameException {
  54.       boolean var7 = true;
  55.       boolean var8 = false;
  56.  
  57.       StringBuffer var9;
  58.       for(var9 = new StringBuffer(var3); var2 < var3; var7 = false) {
  59.          if (var7 && ((var8 = this.isA(var1, var2, this.syntaxBeginQuote1)) || this.isA(var1, var2, this.syntaxBeginQuote2))) {
  60.             String var13 = var8 ? this.syntaxBeginQuote1 : this.syntaxBeginQuote2;
  61.             String var14 = var8 ? this.syntaxEndQuote1 : this.syntaxEndQuote2;
  62.             if (this.escapingStyle == 0) {
  63.                this.escapingStyle = var8 ? 1 : 2;
  64.             }
  65.  
  66.             for(var2 += var13.length(); var2 < var3 && !var1.startsWith(var14, var2); ++var2) {
  67.                if (this.isA(var1, var2, this.syntaxEscape) && this.isA(var1, var2 + this.syntaxEscape.length(), var14)) {
  68.                   var2 += this.syntaxEscape.length();
  69.                }
  70.  
  71.                var9.append(var1.charAt(var2));
  72.             }
  73.  
  74.             if (var2 >= var3) {
  75.                throw new InvalidNameException(var1 + ": no close quote");
  76.             }
  77.  
  78.             var2 += var14.length();
  79.             if (var2 != var3 && !this.isSeparator(var1, var2)) {
  80.                throw new InvalidNameException(var1 + ": close quote appears before end of component");
  81.             }
  82.             break;
  83.          }
  84.  
  85.          if (this.isSeparator(var1, var2)) {
  86.             break;
  87.          }
  88.  
  89.          if (this.isA(var1, var2, this.syntaxEscape)) {
  90.             if (this.isMeta(var1, var2 + this.syntaxEscape.length())) {
  91.                var2 += this.syntaxEscape.length();
  92.                if (this.escapingStyle == 0) {
  93.                   this.escapingStyle = 3;
  94.                }
  95.             } else if (var2 + this.syntaxEscape.length() >= var3) {
  96.                throw new InvalidNameException(var1 + ": unescaped " + this.syntaxEscape + " at end of component");
  97.             }
  98.          } else if (this.isA(var1, var2, this.syntaxTypevalSeparator) && ((var8 = this.isA(var1, var2 + this.syntaxTypevalSeparator.length(), this.syntaxBeginQuote1)) || this.isA(var1, var2 + this.syntaxTypevalSeparator.length(), this.syntaxBeginQuote2))) {
  99.             String var5 = var8 ? this.syntaxBeginQuote1 : this.syntaxBeginQuote2;
  100.             String var6 = var8 ? this.syntaxEndQuote1 : this.syntaxEndQuote2;
  101.             var2 += this.syntaxTypevalSeparator.length();
  102.             var9.append(this.syntaxTypevalSeparator + var5);
  103.  
  104.             for(var2 += var5.length(); var2 < var3 && !var1.startsWith(var6, var2); ++var2) {
  105.                if (this.isA(var1, var2, this.syntaxEscape) && this.isA(var1, var2 + this.syntaxEscape.length(), var6)) {
  106.                   var2 += this.syntaxEscape.length();
  107.                }
  108.  
  109.                var9.append(var1.charAt(var2));
  110.             }
  111.  
  112.             if (var2 >= var3) {
  113.                throw new InvalidNameException(var1 + ": typeval no close quote");
  114.             }
  115.  
  116.             var2 += var6.length();
  117.             var9.append(var6);
  118.             if (var2 != var3 && !this.isSeparator(var1, var2)) {
  119.                throw new InvalidNameException(var1.substring(var2) + ": typeval close quote appears before end of component");
  120.             }
  121.             break;
  122.          }
  123.  
  124.          var9.append(var1.charAt(var2++));
  125.       }
  126.  
  127.       if (this.syntaxDirection == 2) {
  128.          var4.insertElementAt(var9.toString(), 0);
  129.       } else {
  130.          var4.addElement(var9.toString());
  131.       }
  132.  
  133.       return var2;
  134.    }
  135.  
  136.    private static boolean getBoolean(Properties var0, String var1) {
  137.       return toBoolean(var0.getProperty(var1));
  138.    }
  139.  
  140.    private static boolean toBoolean(String var0) {
  141.       return var0 != null && var0.toLowerCase().equals("true");
  142.    }
  143.  
  144.    private final void recordNamingConvention(Properties var1) {
  145.       String var2 = var1.getProperty("jndi.syntax.direction", "flat");
  146.       if (var2.equals("left_to_right")) {
  147.          this.syntaxDirection = 1;
  148.       } else if (var2.equals("right_to_left")) {
  149.          this.syntaxDirection = 2;
  150.       } else {
  151.          if (!var2.equals("flat")) {
  152.             throw new IllegalArgumentException(var2 + "is not a valid value for the jndi.syntax.direction property");
  153.          }
  154.  
  155.          this.syntaxDirection = 0;
  156.       }
  157.  
  158.       if (this.syntaxDirection != 0) {
  159.          this.syntaxSeparator = var1.getProperty("jndi.syntax.separator");
  160.          this.syntaxSeparator2 = var1.getProperty("jndi.syntax.separator2");
  161.          if (this.syntaxSeparator == null) {
  162.             throw new IllegalArgumentException("jndi.syntax.separator property required for non-flat syntax");
  163.          }
  164.       } else {
  165.          this.syntaxSeparator = null;
  166.       }
  167.  
  168.       this.syntaxEscape = var1.getProperty("jndi.syntax.escape");
  169.       this.syntaxCaseInsensitive = getBoolean(var1, "jndi.syntax.ignorecase");
  170.       this.syntaxTrimBlanks = getBoolean(var1, "jndi.syntax.trimblanks");
  171.       this.syntaxBeginQuote1 = var1.getProperty("jndi.syntax.beginquote");
  172.       this.syntaxEndQuote1 = var1.getProperty("jndi.syntax.endquote");
  173.       if (this.syntaxEndQuote1 == null && this.syntaxBeginQuote1 != null) {
  174.          this.syntaxEndQuote1 = this.syntaxBeginQuote1;
  175.       } else if (this.syntaxBeginQuote1 == null && this.syntaxEndQuote1 != null) {
  176.          this.syntaxBeginQuote1 = this.syntaxEndQuote1;
  177.       }
  178.  
  179.       this.syntaxBeginQuote2 = var1.getProperty("jndi.syntax.beginquote2");
  180.       this.syntaxEndQuote2 = var1.getProperty("jndi.syntax.endquote2");
  181.       if (this.syntaxEndQuote2 == null && this.syntaxBeginQuote2 != null) {
  182.          this.syntaxEndQuote2 = this.syntaxBeginQuote2;
  183.       } else if (this.syntaxBeginQuote2 == null && this.syntaxEndQuote2 != null) {
  184.          this.syntaxBeginQuote2 = this.syntaxEndQuote2;
  185.       }
  186.  
  187.       this.syntaxAvaSeparator = var1.getProperty("jndi.syntax.separator.ava");
  188.       this.syntaxTypevalSeparator = var1.getProperty("jndi.syntax.separator.typeval");
  189.    }
  190.  
  191.    NameImpl(Properties var1) {
  192.       this.syntaxDirection = 1;
  193.       this.syntaxSeparator = "/";
  194.       this.syntaxSeparator2 = null;
  195.       this.syntaxCaseInsensitive = false;
  196.       this.syntaxTrimBlanks = false;
  197.       this.syntaxEscape = "\\";
  198.       this.syntaxBeginQuote1 = "\"";
  199.       this.syntaxEndQuote1 = "\"";
  200.       this.syntaxBeginQuote2 = "'";
  201.       this.syntaxEndQuote2 = "'";
  202.       this.syntaxAvaSeparator = null;
  203.       this.syntaxTypevalSeparator = null;
  204.       this.escapingStyle = 0;
  205.       if (var1 != null) {
  206.          this.recordNamingConvention(var1);
  207.       }
  208.  
  209.       this.components = new Vector();
  210.    }
  211.  
  212.    NameImpl(Properties var1, String var2) throws InvalidNameException {
  213.       this(var1);
  214.       boolean var3 = this.syntaxDirection == 2;
  215.       boolean var4 = true;
  216.       int var5 = var2.length();
  217.       int var6 = 0;
  218.  
  219.       while(var6 < var5) {
  220.          var6 = this.extractComp(var2, var6, var5, this.components);
  221.          String var7 = var3 ? (String)this.components.firstElement() : (String)this.components.lastElement();
  222.          if (var7.length() >= 1) {
  223.             var4 = false;
  224.          }
  225.  
  226.          if (var6 < var5) {
  227.             var6 = this.skipSeparator(var2, var6);
  228.             if (var6 == var5 && !var4) {
  229.                if (var3) {
  230.                   this.components.insertElementAt("", 0);
  231.                } else {
  232.                   this.components.addElement("");
  233.                }
  234.             }
  235.          }
  236.       }
  237.  
  238.    }
  239.  
  240.    NameImpl(Properties var1, Enumeration var2) {
  241.       this(var1);
  242.  
  243.       while(var2.hasMoreElements()) {
  244.          this.components.addElement(var2.nextElement());
  245.       }
  246.  
  247.    }
  248.  
  249.    private final String stringifyComp(String var1) {
  250.       int var2 = var1.length();
  251.       boolean var3 = false;
  252.       boolean var4 = false;
  253.       String var5 = null;
  254.       String var6 = null;
  255.       StringBuffer var7 = new StringBuffer(var2);
  256.       if (this.syntaxSeparator != null && var1.indexOf(this.syntaxSeparator) >= 0) {
  257.          if (this.syntaxBeginQuote1 != null) {
  258.             var5 = this.syntaxBeginQuote1;
  259.             var6 = this.syntaxEndQuote1;
  260.          } else if (this.syntaxBeginQuote2 != null) {
  261.             var5 = this.syntaxBeginQuote2;
  262.             var6 = this.syntaxEndQuote2;
  263.          } else if (this.syntaxEscape != null) {
  264.             var3 = true;
  265.          }
  266.       }
  267.  
  268.       if (this.syntaxSeparator2 != null && var1.indexOf(this.syntaxSeparator2) >= 0) {
  269.          if (this.syntaxBeginQuote1 != null) {
  270.             if (var5 == null) {
  271.                var5 = this.syntaxBeginQuote1;
  272.                var6 = this.syntaxEndQuote1;
  273.             }
  274.          } else if (this.syntaxBeginQuote2 != null) {
  275.             if (var5 == null) {
  276.                var5 = this.syntaxBeginQuote2;
  277.                var6 = this.syntaxEndQuote2;
  278.             }
  279.          } else if (this.syntaxEscape != null) {
  280.             var4 = true;
  281.          }
  282.       }
  283.  
  284.       if (var5 != null) {
  285.          var7 = var7.append(var5);
  286.          int var8 = 0;
  287.  
  288.          while(var8 < var2) {
  289.             if (var1.startsWith(var6, var8)) {
  290.                var7.append(this.syntaxEscape).append(var6);
  291.                var8 += var6.length();
  292.             } else {
  293.                var7.append(var1.charAt(var8++));
  294.             }
  295.          }
  296.  
  297.          var7.append(var6);
  298.       } else {
  299.          boolean var10 = true;
  300.  
  301.          for(int var9 = 0; var9 < var2; var10 = false) {
  302.             if (var10 && this.isA(var1, var9, this.syntaxBeginQuote1)) {
  303.                var7.append(this.syntaxEscape).append(this.syntaxBeginQuote1);
  304.                var9 += this.syntaxBeginQuote1.length();
  305.             } else if (var10 && this.isA(var1, var9, this.syntaxBeginQuote2)) {
  306.                var7.append(this.syntaxEscape).append(this.syntaxBeginQuote2);
  307.                var9 += this.syntaxBeginQuote2.length();
  308.             } else if (this.isA(var1, var9, this.syntaxEscape)) {
  309.                if (var9 + this.syntaxEscape.length() >= var2) {
  310.                   var7.append(this.syntaxEscape);
  311.                } else if (this.isMeta(var1, var9 + this.syntaxEscape.length())) {
  312.                   var7.append(this.syntaxEscape);
  313.                }
  314.  
  315.                var7.append(this.syntaxEscape);
  316.                var9 += this.syntaxEscape.length();
  317.             } else if (var3 && var1.startsWith(this.syntaxSeparator, var9)) {
  318.                var7.append(this.syntaxEscape).append(this.syntaxSeparator);
  319.                var9 += this.syntaxSeparator.length();
  320.             } else if (var4 && var1.startsWith(this.syntaxSeparator2, var9)) {
  321.                var7.append(this.syntaxEscape).append(this.syntaxSeparator2);
  322.                var9 += this.syntaxSeparator2.length();
  323.             } else {
  324.                var7.append(var1.charAt(var9++));
  325.             }
  326.          }
  327.       }
  328.  
  329.       return var7.toString();
  330.    }
  331.  
  332.    public String toString() {
  333.       StringBuffer var1 = new StringBuffer();
  334.       boolean var3 = true;
  335.       int var4 = this.components.size();
  336.  
  337.       for(int var5 = 0; var5 < var4; ++var5) {
  338.          String var2;
  339.          if (this.syntaxDirection == 2) {
  340.             var2 = this.stringifyComp((String)this.components.elementAt(var4 - 1 - var5));
  341.          } else {
  342.             var2 = this.stringifyComp((String)this.components.elementAt(var5));
  343.          }
  344.  
  345.          if (var5 != 0 && this.syntaxSeparator != null) {
  346.             var1.append(this.syntaxSeparator);
  347.          }
  348.  
  349.          if (var2.length() >= 1) {
  350.             var3 = false;
  351.          }
  352.  
  353.          var1 = var1.append(var2);
  354.       }
  355.  
  356.       if (var3 && var4 >= 1 && this.syntaxSeparator != null) {
  357.          var1 = var1.append(this.syntaxSeparator);
  358.       }
  359.  
  360.       return var1.toString();
  361.    }
  362.  
  363.    public boolean equals(Object var1) {
  364.       if (var1 != null && var1 instanceof NameImpl) {
  365.          NameImpl var2 = (NameImpl)var1;
  366.          if (var2.size() == this.size()) {
  367.             Enumeration var3 = this.getAll();
  368.             Enumeration var4 = var2.getAll();
  369.  
  370.             while(var3.hasMoreElements()) {
  371.                String var5 = (String)var3.nextElement();
  372.                String var6 = (String)var4.nextElement();
  373.                if (this.syntaxTrimBlanks) {
  374.                   var5 = var5.trim();
  375.                   var6 = var6.trim();
  376.                }
  377.  
  378.                if (this.syntaxCaseInsensitive) {
  379.                   if (!var5.equalsIgnoreCase(var6)) {
  380.                      return false;
  381.                   }
  382.                } else if (!var5.equals(var6)) {
  383.                   return false;
  384.                }
  385.             }
  386.  
  387.             return true;
  388.          }
  389.       }
  390.  
  391.       return false;
  392.    }
  393.  
  394.    public int compareTo(NameImpl var1) {
  395.       if (this == var1) {
  396.          return 0;
  397.       } else {
  398.          int var2 = this.size();
  399.          int var3 = var1.size();
  400.          int var4 = Math.min(var2, var3);
  401.          int var5 = 0;
  402.          int var6 = 0;
  403.  
  404.          while(var4-- != 0) {
  405.             String var7 = this.get(var5++);
  406.             String var8 = var1.get(var6++);
  407.             if (this.syntaxTrimBlanks) {
  408.                var7 = var7.trim();
  409.                var8 = var8.trim();
  410.             }
  411.  
  412.             if (this.syntaxCaseInsensitive) {
  413.                var7 = var7.toLowerCase();
  414.                var8 = var8.toLowerCase();
  415.             }
  416.  
  417.             int var9 = var7.compareTo(var8);
  418.             if (var9 != 0) {
  419.                return var9;
  420.             }
  421.          }
  422.  
  423.          return var2 - var3;
  424.       }
  425.    }
  426.  
  427.    public int size() {
  428.       return this.components.size();
  429.    }
  430.  
  431.    public Enumeration getAll() {
  432.       return this.components.elements();
  433.    }
  434.  
  435.    public String get(int var1) {
  436.       return (String)this.components.elementAt(var1);
  437.    }
  438.  
  439.    public Enumeration getPrefix(int var1) {
  440.       if (var1 >= 0 && var1 <= this.size()) {
  441.          return new NameImplEnumerator(this.components, 0, var1);
  442.       } else {
  443.          throw new ArrayIndexOutOfBoundsException(var1);
  444.       }
  445.    }
  446.  
  447.    public Enumeration getSuffix(int var1) {
  448.       int var2 = this.size();
  449.       if (var1 >= 0 && var1 <= var2) {
  450.          return new NameImplEnumerator(this.components, var1, var2);
  451.       } else {
  452.          throw new ArrayIndexOutOfBoundsException(var1);
  453.       }
  454.    }
  455.  
  456.    public boolean isEmpty() {
  457.       return this.components.isEmpty();
  458.    }
  459.  
  460.    public boolean startsWith(int var1, Enumeration var2) {
  461.       if (var1 >= 0 && var1 <= this.size()) {
  462.          try {
  463.             Enumeration var3 = this.getPrefix(var1);
  464.  
  465.             while(var3.hasMoreElements()) {
  466.                String var4 = (String)var3.nextElement();
  467.                String var5 = (String)var2.nextElement();
  468.                if (this.syntaxTrimBlanks) {
  469.                   var4 = var4.trim();
  470.                   var5 = var5.trim();
  471.                }
  472.  
  473.                if (this.syntaxCaseInsensitive) {
  474.                   if (!var4.equalsIgnoreCase(var5)) {
  475.                      return false;
  476.                   }
  477.                } else if (!var4.equals(var5)) {
  478.                   return false;
  479.                }
  480.             }
  481.  
  482.             return true;
  483.          } catch (NoSuchElementException var6) {
  484.             return false;
  485.          }
  486.       } else {
  487.          return false;
  488.       }
  489.    }
  490.  
  491.    public boolean endsWith(int var1, Enumeration var2) {
  492.       int var3 = this.size() - var1;
  493.       if (var3 >= 0 && var3 <= this.size()) {
  494.          try {
  495.             Enumeration var4 = this.getSuffix(var3);
  496.  
  497.             while(var4.hasMoreElements()) {
  498.                String var5 = (String)var4.nextElement();
  499.                String var6 = (String)var2.nextElement();
  500.                if (this.syntaxTrimBlanks) {
  501.                   var5 = var5.trim();
  502.                   var6 = var6.trim();
  503.                }
  504.  
  505.                if (this.syntaxCaseInsensitive) {
  506.                   if (!var5.equalsIgnoreCase(var6)) {
  507.                      return false;
  508.                   }
  509.                } else if (!var5.equals(var6)) {
  510.                   return false;
  511.                }
  512.             }
  513.  
  514.             return true;
  515.          } catch (NoSuchElementException var7) {
  516.             return false;
  517.          }
  518.       } else {
  519.          return false;
  520.       }
  521.    }
  522.  
  523.    public boolean addAll(Enumeration var1) throws InvalidNameException {
  524.       boolean var2;
  525.       for(var2 = false; var1.hasMoreElements(); var2 = true) {
  526.          try {
  527.             Object var3 = var1.nextElement();
  528.             if (this.size() > 0 && this.syntaxDirection == 0) {
  529.                throw new InvalidNameException("A flat name can only have a single component");
  530.             }
  531.  
  532.             this.components.addElement(var3);
  533.          } catch (NoSuchElementException var4) {
  534.             break;
  535.          }
  536.       }
  537.  
  538.       return var2;
  539.    }
  540.  
  541.    public boolean addAll(int var1, Enumeration var2) throws InvalidNameException {
  542.       boolean var3 = false;
  543.  
  544.       for(int var4 = var1; var2.hasMoreElements(); ++var4) {
  545.          try {
  546.             Object var5 = var2.nextElement();
  547.             if (this.size() > 0 && this.syntaxDirection == 0) {
  548.                throw new InvalidNameException("A flat name can only have a single component");
  549.             }
  550.  
  551.             this.components.insertElementAt(var5, var4);
  552.             var3 = true;
  553.          } catch (NoSuchElementException var6) {
  554.             break;
  555.          }
  556.       }
  557.  
  558.       return var3;
  559.    }
  560.  
  561.    public void add(String var1) throws InvalidNameException {
  562.       if (this.size() > 0 && this.syntaxDirection == 0) {
  563.          throw new InvalidNameException("A flat name can only have a single component");
  564.       } else {
  565.          this.components.addElement(var1);
  566.       }
  567.    }
  568.  
  569.    public void add(int var1, String var2) throws InvalidNameException {
  570.       if (this.size() > 0 && this.syntaxDirection == 0) {
  571.          throw new InvalidNameException("A flat name can only zero or one component");
  572.       } else {
  573.          this.components.insertElementAt(var2, var1);
  574.       }
  575.    }
  576.  
  577.    public Object remove(int var1) {
  578.       Object var2 = this.components.elementAt(var1);
  579.       this.components.removeElementAt(var1);
  580.       return var2;
  581.    }
  582.  
  583.    public int hashCode() {
  584.       int var1 = 0;
  585.  
  586.       String var3;
  587.       for(Enumeration var2 = this.getAll(); var2.hasMoreElements(); var1 += var3.hashCode()) {
  588.          var3 = (String)var2.nextElement();
  589.          if (this.syntaxTrimBlanks) {
  590.             var3 = var3.trim();
  591.          }
  592.  
  593.          if (this.syntaxCaseInsensitive) {
  594.             var3 = var3.toLowerCase();
  595.          }
  596.       }
  597.  
  598.       return var1;
  599.    }
  600. }
  601.