com.topologi.diffx.load.AttributeComparator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of docx4j-diffx Show documentation
Show all versions of docx4j-diffx Show documentation
differencing of docx files
/*
* This file is part of the DiffX library.
*
* For licensing information please see the file license.txt included in the release.
* A copy of this licence can also be found at
* http://www.opensource.org/licenses/artistic-license-2.0.php
*/
package com.topologi.diffx.load;
import java.util.Comparator;
import com.topologi.diffx.event.AttributeEvent;
import com.topologi.diffx.event.impl.AttributeEventImpl;
import com.topologi.diffx.event.impl.AttributeEventNSImpl;
/**
* A comparator in order to put attributes in the correct order, that is in the alphabetical order
* of the attribute name and namespace URI.
*
* @author Christophe Lauret
* @version 10 May 2010
*/
final class AttributeComparator implements Comparator {
/**
* Compares two objects if they are attributes.
*
* {@inheritDoc}
*/
@Override
public int compare(AttributeEvent o1, AttributeEvent o2) throws ClassCastException {
if (o1 instanceof AttributeEventImpl && o2 instanceof AttributeEventImpl)
return compare((AttributeEventImpl)o1, (AttributeEventImpl)o2);
else if (o1 instanceof AttributeEventNSImpl && o2 instanceof AttributeEventNSImpl)
return compare((AttributeEventNSImpl)o1, (AttributeEventNSImpl)o2);
else
return 0;
}
/**
* Compares two attribute events using their name.
*
* @param att1 The first attribute to be compared.
* @param att2 The second attribute to be compared.
*
* @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater
* than the second.
*/
public int compare(AttributeEventImpl att1, AttributeEventImpl att2) {
return att1.getName().compareTo(att2.getName());
}
/**
* Compares two simple attribute events using their name and namespace URI.
*
* @param att1 The first attribute to be compared.
* @param att2 The second attribute to be compared.
*
* @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater
* than the second.
*/
public int compare(AttributeEventNSImpl att1, AttributeEventNSImpl att2) {
return toCName(att1).compareTo(toCName(att2));
}
/**
* Returns a comparable name from the given attribute's namespace URI and name.
*
* @param att The attribute.
* @return The comparable name.
*/
private static String toCName(AttributeEventNSImpl att) {
return att.getURI() != null? att.getURI() + ':' + att.getName() : att.getName();
}
}