package org.jboss.deployment.scanner;
import java.util.Comparator;
import java.net.URL;
import org.jboss.deployment.DeploymentSorter;
import org.jboss.deployment.DefaultDeploymentSorter;
public class PrefixDeploymentSorter implements Comparator, DefaultDeploymentSorter
{
private DeploymentSorter sorter = new DeploymentSorter();
public String[] getSuffixOrder()
{
return sorter.getSuffixOrder();
}
public void setSuffixOrder(String[] suffixOrder)
{
sorter.setSuffixOrder(suffixOrder);
}
public int compare(Object o1, Object o2) {
int comp = getPrefixValue((URL)o1) - getPrefixValue((URL)o2);
return comp == 0 ? sorter.compare(o1, o2) : comp;
}
private int getPrefixValue(URL url) {
String path = url.getPath();
int nameEnd = path.length() - 1;
if (nameEnd <= 0) {
return 0;
}
if (path.charAt(nameEnd) == '/') {
nameEnd--;
}
int nameStart = path.lastIndexOf('/', nameEnd) + 1;
int prefixEnd = nameStart;
while (prefixEnd <= nameEnd && Character.isDigit(path.charAt(prefixEnd))) {
prefixEnd++;
}
if (prefixEnd == nameStart) {
return -1;
}
while (nameStart < prefixEnd && path.charAt(nameStart) == '0') {
nameStart++;
}
return (nameStart == prefixEnd) ? 0 : Integer.parseInt(path.substring(nameStart, prefixEnd));
}
}