You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by ge...@apache.org on 2002/09/28 10:47:37 UTC
cvs commit: xml-security/src/org/apache/xml/security/c14n/helper AttrCompare.java
geuerp 2002/09/28 01:47:37
Modified: src/org/apache/xml/security/c14n/helper AttrCompare.java
Log:
AttrCompare now substitutes NSAttrCompare and NonNSAttrCompare
Revision Changes Path
1.6 +69 -27 xml-security/src/org/apache/xml/security/c14n/helper/AttrCompare.java
Index: AttrCompare.java
===================================================================
RCS file: /home/cvs/xml-security/src/org/apache/xml/security/c14n/helper/AttrCompare.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AttrCompare.java 29 Aug 2002 16:05:46 -0000 1.5
+++ AttrCompare.java 28 Sep 2002 08:47:37 -0000 1.6
@@ -1,3 +1,4 @@
+
/*
* The Apache Software License, Version 1.1
*
@@ -62,7 +63,6 @@
import org.w3c.dom.*;
import org.apache.log4j.*;
-import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.utils.Constants;
@@ -84,6 +84,9 @@
*/
public class AttrCompare implements java.util.Comparator {
+ private final int ATTR0_BEFORE_ATTR1 = -1;
+ private final int ATTR1_BEFORE_ATTR0 = 1;
+
/**
* Compares two attributes based on the C14n specification.
*
@@ -104,44 +107,83 @@
*/
public int compare(Object obj0, Object obj1) {
- throw new RuntimeException("Not yet fully written");
-
- /*
Attr attr0 = (Attr) obj0;
Attr attr1 = (Attr) obj1;
+ boolean isNamespaceAttr0 =
+ Constants.NamespaceSpecNS.equals(attr0.getNamespaceURI());
+ boolean isNamespaceAttr1 =
+ Constants.NamespaceSpecNS.equals(attr1.getNamespaceURI());
- String namespaceURI0 = attr0.getNamespaceURI();
- String namespaceURI1 = attr1.getNamespaceURI();
+ if (isNamespaceAttr0) {
+ if (isNamespaceAttr1) {
- if ((namespaceURI0 == null) && (namespaceURI1 == null)) {
- String localName0 = attr0.getLocalName();
- String localName1 = attr1.getLocalName();
-
- return localName0.compareTo(localName1);
- } else if ((namespaceURI0 == null) && (namespaceURI1 != null)) {
- if (namespaceURI1.equals(Constants.NamespaceSpecNS)) {
- return 1;
+ // both are namespaces
+ return this.nsAttrCompare(attr0, attr1);
} else {
- return -1;
+
+ // attr0 is a namespace, attr1 is not
+ return ATTR0_BEFORE_ATTR1;
}
- } else if ((namespaceURI0 != null) && (namespaceURI1 == null)) {
- if (namespaceURI0.equals(Constants.NamespaceSpecNS)) {
- return -1;
+ } else {
+ if (isNamespaceAttr1) {
+
+ // attr1 is a namespace, attr0 is not
+ return ATTR1_BEFORE_ATTR0;
} else {
- return 1;
+
+ // none is a namespae
+ return this.nonNSAttrCompare(attr0, attr1);
}
- } else {
- int a = namespaceURI0.compareTo(namespaceURI1);
+ }
+ }
+
+ private int nsAttrCompare(Attr attr0, Attr attr1) {
+ String localname0 = attr0.getLocalName();
+ String localname1 = attr1.getLocalName();
+
+ if (localname0.equals("xmlns")) {
+ localname0 = "";
+ }
- if (a != 0) {
- return a;
+ if (localname1.equals("xmlns")) {
+ localname1 = "";
+ }
+
+ return localname0.compareTo(localname1);
+ }
+
+ private int nonNSAttrCompare(Attr attr0, Attr attr1) {
+
+ String namespaceURI0 = attr0.getNamespaceURI();
+ String namespaceURI1 = attr1.getNamespaceURI();
+
+ if (namespaceURI0 == null) {
+ if (namespaceURI1 == null) {
+
+ // if the namespaceURI of *both* attributes is null, there MUST be a localName.
+ // so if the namespaceURIs are null *and* any of the localNames is null, a NullPointer is created...
+ String localName0 = attr0.getLocalName();
+ String localName1 = attr1.getLocalName();
+
+ return localName0.compareTo(localName1);
+ } else {
+ return ATTR0_BEFORE_ATTR1;
}
+ } else {
+ if (namespaceURI1 == null) {
+ return ATTR1_BEFORE_ATTR0;
+ } else {
+ int a = namespaceURI0.compareTo(namespaceURI1);
+
+ if (a != 0) {
+ return a;
+ }
- String localName0 = attr0.getLocalName();
- String localName1 = attr1.getLocalName();
+ String localName0 = attr0.getLocalName();
+ String localName1 = attr1.getLocalName();
- return localName0.compareTo(localName1);
+ return localName0.compareTo(localName1);
+ }
}
- */
}
}