/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.metamodels.xml.util;
import java.util.Comparator;
import org.teiid.designer.metamodels.xml.XmlDocumentPlugin;
import org.teiid.designer.metamodels.xml.XmlNamespace;
/**
* XmlNamespaceComparator
*
* @since 8.0
*/
public class XmlNamespaceComparator implements Comparator {
/**
* Construct an instance of XmlNamespaceComparator.
*
*/
public XmlNamespaceComparator() {
super();
}
/**
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(final Object o1, final Object o2) {
if ( o1 == o2 ) {
return 0;
}
if ( o1 == null ) {
if ( o2 == null ) {
return 0;
}
return -1;
}
if ( o2 == null ) {
return 1;
}
// Both are non-null
if ( o1 instanceof XmlNamespace && o2 instanceof XmlNamespace ) {
final XmlNamespace n1 = (XmlNamespace)o1;
final XmlNamespace n2 = (XmlNamespace)o2;
final String prefix1 = n1.getPrefix();
final String prefix2 = n2.getPrefix();
if ( prefix1 == null ) {
if ( prefix2 != null ) {
return -1; // no prefix is less than prefix
}
// Otherwise, prefix 2 is also null
}
if ( prefix2 == null ) {
if ( prefix1 != null ) {
return 1; // no prefix is less than prefix
}
}
// Either both prefixes are null, or they are both non-null, so use the URI
final String uri1 = n1.getUri();
final String uri2 = n2.getUri();
if ( uri1 == null ) {
if ( uri2 != null ) {
return -1;
}
// both are null
return 0;
}
if ( uri2 == null ) {
return 1;
}
return uri1.compareTo(uri2);
}
final Object[] params = new Object[]{o1.getClass(),o2.getClass()};
final String msg = XmlDocumentPlugin.Util.getString("XmlNamespaceComparator.Unable_to_compare_instances",params); //$NON-NLS-1$
throw new ClassCastException(msg);
}
}