package net.bootsfaces.listeners; import java.util.Comparator; import javax.faces.component.UIComponent; public class ResourceFileComparator implements Comparator<UIComponent> { @Override public int compare(UIComponent o1, UIComponent o2) { String name1 = (String) o1.getAttributes().get("name"); String name2 = (String) o2.getAttributes().get("name"); if (name1 == null) return 1; if (name2 == null) return -1; if (name1.endsWith(".js") && (!(name2.endsWith(".js")))) return 1; if (name2.endsWith(".js") && (!(name1.endsWith(".js")))) return -1; if (name1.endsWith(".js")) { name1 = renameJSFile(name1); } if (name2.endsWith(".js")) { name2 = renameJSFile(name2); } int result = name1.compareTo(name2); return result; } private String renameJSFile(String name) { name = name.toLowerCase(); String libname = name; int pos = name.lastIndexOf("/"); if (pos >= 0) { libname = name.substring(pos+1); } if (libname.contains("jquery-ui")) name = "2" + libname.replace(".js", ""); // make it the second JS file, while still distinguishing between jquery-ui.js and jquery-ui-plugins.js else if (libname.contains("jquery")) { name = "1" + libname.replace(".js", ""); // make it the first JS file, while still distinguishing between jquery.js and jquery-plugins.js } else if (name.contains("ui/core.js")) name = "3.js"; // make it the third JS file else if (name.contains("ui/widget.js")) name = "4.js"; // make it the second last JS file else if (name.contains("bsf.js")) name = "zzz.js"; // make it the last JS file else name = "keep.js"; // don't move it return name; } }