blob: b08deacba518c71637af9229e2cd18117955941f [file] [log] [blame]
/**
* Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.runtime.web.vaadin.components.fields.search.filter;
import java.util.Locale;
import org.eclipse.osbp.runtime.web.vaadin.common.data.filter.Filters;
import com.vaadin.data.Container.Filter;
public class TextFilterProperty extends FilterProperty {
private String value;
private Wildcard wildcard;
private Filters filterProvider = new Filters();
public TextFilterProperty(Object propertyId, Locale locale) {
super(propertyId, locale);
}
/**
* @return the value
*/
public String getValue() {
return value;
}
/**
* @param value
* the value to set
*/
public void setValue(String value) {
this.value = value;
calculateWildcard(value);
notifyFilterChanged();
}
@Override
public Filter getFilter() {
if (filterProvider == null || getValue() == null
|| getValue().equals("")) {
return null;
}
if (wildcard == null || wildcard.equals("")) {
return filterProvider.eq(getPropertyId(), getValue());
} else {
switch (wildcard) {
case GE:
return filterProvider.gteq(getPropertyId(), getValue());
case GT:
return filterProvider.gt(getPropertyId(), getValue());
case LE:
return filterProvider.lteq(getPropertyId(), getValue());
case LT:
return filterProvider.lt(getPropertyId(), getValue());
case NE:
return filterProvider.not(filterProvider.eq(getPropertyId(),
getValue()));
case ANY:
return filterProvider.like(getPropertyId(), getValue(), true);
}
}
throw new IllegalStateException("Not a valid state!");
}
/**
* Calculates the wildcard.
*
* @param value
*/
private void calculateWildcard(String value) {
wildcard = null;
if (value.startsWith(Wildcard.GE.sequence)) {
wildcard = Wildcard.GE;
} else if (value.startsWith(Wildcard.LE.sequence)) {
wildcard = Wildcard.LE;
} else if (value.startsWith(Wildcard.GT.sequence)) {
wildcard = Wildcard.GT;
} else if (value.startsWith(Wildcard.LT.sequence)) {
wildcard = Wildcard.LT;
} else if (value.startsWith(Wildcard.NE.sequence)) {
wildcard = Wildcard.NE;
} else if (value.contains(Wildcard.ANY.sequence)) {
wildcard = Wildcard.ANY;
}
if (wildcard != null) {
// remove the wildcard from the value and change * to %
if (wildcard == Wildcard.ANY) {
this.value = value.replaceAll("\\*", "%").trim();
} else {
this.value = value.replaceAll(wildcard.sequence, "").trim();
}
}
}
/**
* @return the wildcard
*/
public Wildcard getWildcard() {
return wildcard;
}
public static enum Wildcard {
GT(">"), LT("<"), GE(">="), LE("<="), NE("!="), ANY("*");
private String sequence;
Wildcard(String sequence) {
this.sequence = sequence;
}
}
}