This commit is contained in:
2014-05-31 20:00:52 +02:00
6 changed files with 37 additions and 33 deletions
@@ -8,10 +8,10 @@ public class CzechSortListheader extends Listheader {
@Override
public void setSort(String type) {
if (type.startsWith("auto"))
if (type.startsWith("czech"))
{
// czech(propertyName)
String propertyName = type.substring("auto(".length(), type.length() - 1);
String propertyName = type.substring("czech(".length(), type.length() - 1);
this.setSortAscending(new CzechStringComparator(propertyName, true));
this.setSortDescending(new CzechStringComparator(propertyName, false));
}
@@ -7,6 +7,8 @@ import java.text.ParseException;
import java.text.RuleBasedCollator;
import java.util.Comparator;
import org.zkoss.zk.ui.util.Clients;
public class CzechStringComparator implements Comparator<Object> {
private String m_rule;
private final String m_property;
@@ -16,6 +18,7 @@ public class CzechStringComparator implements Comparator<Object> {
public CzechStringComparator(String property, boolean ascending) {
m_rule = "";
m_rule += "< 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 ";
m_rule += "< A,a < Á,á < Ä,ä ";
m_rule += "< B,b ";
m_rule += "< C,c < Ć,ć < Č,č ";
@@ -50,7 +53,6 @@ public class CzechStringComparator implements Comparator<Object> {
@Override
public int compare(Object argL, Object argR) {
try {
return this.internalCompare(argL, argR);
@@ -87,29 +89,31 @@ public class CzechStringComparator implements Comparator<Object> {
Object valR = m_getter.invoke(argR);
boolean isNullValL = (valL == null);
boolean isNullValR = (valR == null);
int result = 0;
if (isNullValL || isNullValR)
{
if (isNullValL && isNullValR)
{
if (isNullValL || isNullValR) {
if (isNullValL && isNullValR) {
result = 0;
}
else if (isNullValL)
{
} else if (isNullValL) {
result = -1;
}
else
{
} else {
result = 1;
}
} else {
if (valL instanceof String) {
result = m_comparator.compare(valL, valR);
} else {
String className = valL.getClass().getName();
Clients.alert(
"Nepodporovaný datový typ '"
+ className
+ "' pro třídění 'sort=czech(...)'. Použít 'sort=auto(...)'",
"Franta", Clients.NOTIFICATION_TYPE_WARNING);
}
}
else
{
result = m_comparator.compare(valL, valR);
}
return (m_ascending ? result : -result);
}
}