FileDocCategorySizeDatePackage
AttrCompare.javaAPI DocJava SE 6 API4429Tue Jun 10 00:23:00 BST 2008com.sun.org.apache.xml.internal.security.c14n.helper

AttrCompare

public class AttrCompare extends Object implements Comparator
Compares two attributes based on the C14n specification.
  • Namespace nodes have a lesser document order position than attribute nodes.
  • An element's namespace nodes are sorted lexicographically by local name (the default namespace node, if one exists, has no local name and is therefore lexicographically least).
  • An element's attribute nodes are sorted lexicographically with namespace URI as the primary key and local name as the secondary key (an empty namespace URI is lexicographically least).
$todo$ Should we implement java.util.Comparator and import java.util.Arrays to use Arrays.sort(intarray);
author
Christian Geuer-Pollmann

Fields Summary
private final int
ATTR0_BEFORE_ATTR1
private final int
ATTR1_BEFORE_ATTR0
private static final String
XMLNS
Constructors Summary
Methods Summary
public intcompare(java.lang.Object obj0, java.lang.Object obj1)
Compares two attributes based on the C14n specification.
  • Namespace nodes have a lesser document order position than attribute nodes.
  • An element's namespace nodes are sorted lexicographically by local name (the default namespace node, if one exists, has no local name and is therefore lexicographically least).
  • An element's attribute nodes are sorted lexicographically with namespace URI as the primary key and local name as the secondary key (an empty namespace URI is lexicographically least).

param
obj0 casted Attr
param
obj1 casted Attr
return
returns a negative integer, zero, or a positive integer as obj0 is less than, equal to, or greater than obj1

                                                                                                                         
         

      Attr attr0 = (Attr) obj0;
      Attr attr1 = (Attr) obj1;
      String namespaceURI0 = attr0.getNamespaceURI();      
      String namespaceURI1 = attr1.getNamespaceURI();
      
      boolean isNamespaceAttr0 =
      	XMLNS.equals(namespaceURI0);
      boolean isNamespaceAttr1 =
      	XMLNS.equals(namespaceURI1);

      if (isNamespaceAttr0) {
         if (isNamespaceAttr1) {

            // both are namespaces
            String localname0 = attr0.getLocalName();
            String localname1 = attr1.getLocalName();

            if (localname0.equals("xmlns")) {
               localname0 = "";
            }

            if (localname1.equals("xmlns")) {
               localname1 = "";
            }

            return localname0.compareTo(localname1);
         }
         // attr0 is a namespace, attr1 is not
         return ATTR0_BEFORE_ATTR1;
         
      } 
      if (isNamespaceAttr1) {

            // attr1 is a namespace, attr0 is not
            return ATTR1_BEFORE_ATTR0;
      } 

      // none is a namespae
      
      if (namespaceURI0 == null) {
      	if (namespaceURI1 == null) {
      		/*
      		 String localName0 = attr0.getLocalName();
      		 String localName1 = attr1.getLocalName();
      		 return localName0.compareTo(localName1);
      		 */
      		
      		String name0 = attr0.getName();
      		String name1 = attr1.getName();
      		return name0.compareTo(name1);
      	}
      	return ATTR0_BEFORE_ATTR1;
      	
      } 
      if (namespaceURI1 == null) {
      		return ATTR1_BEFORE_ATTR0;
      } 
      int a = namespaceURI0.compareTo(namespaceURI1);
      		
      if (a != 0) {
      	return a;
      }
      /*
      String localName0 = ;
      String localName1 =;*/
      
      return (attr0.getLocalName())
      				.compareTo( attr1.getLocalName());