package com.idega.builder.business;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;
import com.idega.builder.bean.AdvancedProperty;
import com.idega.idegaweb.IWMainApplication;
import com.idega.presentation.IWContext;
import com.idega.util.CoreUtil;
public class AdvancedPropertyComparator implements Comparator<AdvancedProperty> {
private boolean sortById, descending;
private Boolean sortByName;
private Locale locale = null;
private Collator collator;
public AdvancedPropertyComparator() {
Locale locale = null;
IWContext iwc = CoreUtil.getIWContext();
if (iwc == null) {
locale = IWMainApplication.getDefaultIWMainApplication().getSettings().getDefaultLocale();
}
else {
locale = iwc.getCurrentLocale();
}
if (locale == null) {
locale = Locale.ENGLISH;
}
this.locale = locale;
}
public AdvancedPropertyComparator(Locale locale) {
this.locale = locale;
}
public AdvancedPropertyComparator(Boolean sortByName, Locale locale) {
this(locale);
this.sortByName = sortByName;
}
public AdvancedPropertyComparator(boolean sortById, Locale locale) {
this(locale);
this.sortById = sortById;
}
public AdvancedPropertyComparator(Locale locale, boolean descending) {
this(locale);
this.descending = descending;
}
@Override
public int compare(AdvancedProperty prop1, AdvancedProperty prop2) {
int result = 0;
String value1 = null, value2 = null;;
value1 = prop1.getValue();
value2 = prop2.getValue();
if (sortById) {
value1 = prop1.getId();
value2 = prop2.getId();
if (value1 == null && value2 == null) {
result = 0;
}
else if (value2 == null) {
result = 1;
}
else if (value1 == null) {
result = -1;
}
else {
result = value1.compareTo(value2);
}
return result;
} else if (sortByName != null && sortByName) {
value1 = prop1.getName();
value2 = prop2.getName();
}
result = getCollator().compare(value1, value2);
return descending ? -1 * result : result;
}
private Collator getCollator() {
if (collator == null) {
collator = Collator.getInstance(locale);
}
return collator;
}
}