package ch.elexis.base.ch.ebanking;
import java.text.ParseException;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import ch.elexis.base.ch.ebanking.esr.ESRRecord;
import ch.elexis.data.Rechnung;
import ch.rgw.tools.Money;
public class FilterSearchField extends ViewerFilter {
private static FilterSearchField instance;
private FilterSearchField(){}
public static FilterSearchField getInstance(){
if (null == instance) {
instance = new FilterSearchField();
}
return instance;
}
private String searchString;
@Override
public boolean select(Viewer viewer, Object parentElement, Object element){
if (searchString == null || searchString.length() < 1)
return true;
ESRRecord e = (ESRRecord) element;
char c = searchString.charAt(0);
String useSearchString = searchString.substring(1);
if (useSearchString.length() < 1)
return false;
switch (c) {
case '#':
Rechnung rn = e.getRechnung();
if (rn != null) {
String rgNr = rn.getNr();
if (rgNr.matches(".*" + useSearchString + ".*"))
return true;
}
return false;
case '$':
Money betrag = e.getBetrag();
char d = useSearchString.charAt(0);
Money moreThan;
switch (d) {
case '>':
try {
moreThan = new Money(useSearchString.substring(1));
if (betrag.getCents() >= moreThan.getCents())
return true;
} catch (ParseException e1) {
return false;
}
break;
case '<':
try {
moreThan = new Money(useSearchString.substring(1));
if (betrag.getCents() <= moreThan.getCents())
return true;
} catch (ParseException e1) {
return false;
}
break;
default:
if (betrag.getAmountAsString().matches(".*" + useSearchString + ".*"))
return true;
}
return false;
default:
String patLabel = e.getPatient().getLabel().toLowerCase();
if (patLabel.matches(".*" + useSearchString + ".*"))
return true;
if (e.getEinlesedatatum().matches(".*" + useSearchString + ".*"))
return true;
if (e.getVerarbeitungsdatum().matches(".*" + useSearchString + ".*"))
return true;
return false;
}
}
public void setSearchText(String s){
if (s == null || s.length() == 0)
searchString = null;
else
searchString = s.toLowerCase(); //$NON-NLS-1$ //$NON-NLS-2$
// filter "dirty" characters
if (searchString != null)
searchString = searchString.replaceAll("[^#<>\\.$, a-zA-Z0-9]", "");
}
}