src/java.xml/share/classes/com/sun/org/apache/xml/internal/utils/StringComparable.java
changeset 47359 e1a6c0168741
parent 47216 71c04702a3d5
child 48409 5ab69533994b
equal deleted inserted replaced
47358:d07d5f7cab35 47359:e1a6c0168741
     1 /*
     1 /*
     2  * reserved comment block
     2  * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT REMOVE OR ALTER!
     3  * @LastModified: Oct 2017
     4  */
     4  */
     5 /*
     5 /*
     6  * Licensed to the Apache Software Foundation (ASF) under one or more
     6  * Licensed to the Apache Software Foundation (ASF) under one or more
     7  * contributor license agreements.  See the NOTICE file distributed with
     7  * contributor license agreements.  See the NOTICE file distributed with
     8  * this work for additional information regarding copyright ownership.
     8  * this work for additional information regarding copyright ownership.
    19  * limitations under the License.
    19  * limitations under the License.
    20  */
    20  */
    21 
    21 
    22 package com.sun.org.apache.xml.internal.utils;
    22 package com.sun.org.apache.xml.internal.utils;
    23 
    23 
    24 import java.util.Vector;
    24 import java.text.CollationElementIterator;
    25 import java.text.Collator;
    25 import java.text.Collator;
    26 import java.text.RuleBasedCollator;
    26 import java.text.RuleBasedCollator;
    27 import java.text.CollationElementIterator;
       
    28 import java.util.Locale;
    27 import java.util.Locale;
    29 import java.text.CollationKey;
       
    30 
    28 
    31 
    29 
    32 /**
    30 /**
    33 * International friendly string comparison with case-order
    31 * International friendly string comparison with case-order
    34  * @author Igor Hersht, igorh@ca.ibm.com
    32  * @author Igor Hersht, igorh@ca.ibm.com
    35 */
    33 */
    36 public class StringComparable implements Comparable  {
    34 public class StringComparable implements Comparable<StringComparable>  {
    37 
    35 
    38      public final static int UNKNOWN_CASE = -1;
    36      public final static int UNKNOWN_CASE = -1;
    39      public final static int UPPER_CASE = 1;
    37      public final static int UPPER_CASE = 1;
    40      public final static int LOWER_CASE = 2;
    38      public final static int LOWER_CASE = 2;
    41 
    39 
    43      private  Locale m_locale;
    41      private  Locale m_locale;
    44      private RuleBasedCollator m_collator;
    42      private RuleBasedCollator m_collator;
    45      private String m_caseOrder;
    43      private String m_caseOrder;
    46      private int m_mask = 0xFFFFFFFF;
    44      private int m_mask = 0xFFFFFFFF;
    47 
    45 
    48     public StringComparable(final String text, final Locale locale, final Collator collator, final String caseOrder){
    46     public StringComparable(final String text, final Locale locale,
       
    47             final Collator collator, final String caseOrder){
    49          m_text =  text;
    48          m_text =  text;
    50          m_locale = locale;
    49          m_locale = locale;
    51          m_collator = (RuleBasedCollator)collator;
    50          m_collator = (RuleBasedCollator)collator;
    52          m_caseOrder = caseOrder;
    51          m_caseOrder = caseOrder;
    53          m_mask = getMask(m_collator.getStrength());
    52          m_mask = getMask(m_collator.getStrength());
    54     }
    53     }
    55 
    54 
    56    public final static Comparable getComparator( final String text, final Locale locale, final Collator collator, final String caseOrder){
    55     @SuppressWarnings({"rawtypes", "unchecked"})
    57        if((caseOrder == null) ||(caseOrder.length() == 0)){// no case-order specified
    56     public final static Comparable getComparator( final String text, final Locale locale,
       
    57             final Collator collator, final String caseOrder){
       
    58         if((caseOrder == null) ||(caseOrder.length() == 0)){// no case-order specified
    58             return  ((RuleBasedCollator)collator).getCollationKey(text);
    59             return  ((RuleBasedCollator)collator).getCollationKey(text);
    59        }else{
    60         }else{
    60             return new StringComparable(text, locale, collator, caseOrder);
    61             return new StringComparable(text, locale, collator, caseOrder);
    61        }
    62         }
    62    }
    63     }
    63 
    64 
    64    public final String toString(){return m_text;}
    65    public final String toString(){return m_text;}
    65 
    66 
    66    public int compareTo(Object o) {
    67      public int compareTo(StringComparable o) {
    67    final String pattern = ((StringComparable)o).toString();
    68      final String pattern = o.toString();
    68    if(m_text.equals(pattern)){//Code-point equals
    69      if(m_text.equals(pattern)){//Code-point equals
    69       return 0;
    70         return 0;
    70    }
    71      }
    71    final int savedStrength = m_collator.getStrength();
    72      final int savedStrength = m_collator.getStrength();
    72    int comp = 0;
    73      int comp = 0;
    73       // Is there difference more significant than case-order?
    74       // Is there difference more significant than case-order?
    74      if(((savedStrength == Collator.PRIMARY) || (savedStrength == Collator.SECONDARY))){
    75      if(((savedStrength == Collator.PRIMARY) || (savedStrength == Collator.SECONDARY))){
    75          comp = m_collator.compare(m_text, pattern );
    76          comp = m_collator.compare(m_text, pattern );
    76      }else{// more than SECONDARY
    77      }else{// more than SECONDARY
    77          m_collator.setStrength(Collator.SECONDARY);
    78          m_collator.setStrength(Collator.SECONDARY);