blob: 48c839069b85bc5ec7e1160541f73401d2b9b9cc [file] [log] [blame]
package org.eclipse.osbp.runtime.web.vaadin.components.fields.filter2;
import java.util.Date;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.osbp.ecview.core.common.context.IViewContext;
import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
import com.vaadin.data.Container.Filter;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.filter.Compare;
import com.vaadin.data.util.filter.Not;
import com.vaadin.server.Resource;
import com.vaadin.server.ThemeResource;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
@SuppressWarnings("serial")
public class CompareDateComponent extends CompareComponent {
private Label captionField;
private ComboBox compareTypeField;
private DateField valueField;
@Inject
public CompareDateComponent(@Named("propertyId") String propertyId, IViewContext viewContext) {
super(propertyId, viewContext);
}
@Override
protected Component createMainLayout() {
HorizontalLayout mainLayout = new HorizontalLayout();
captionField = new Label();
captionField.setValue(propertyId);
compareTypeField = new ComboBox();
valueField = new DateField();
mainLayout.addComponent(captionField);
mainLayout.addComponent(compareTypeField);
mainLayout.addComponent(valueField);
captionField.setWidth("100%");
compareTypeField.setWidth("100%");
valueField.setWidth("100%");
mainLayout.setExpandRatio(captionField, 1.0f);
mainLayout.setExpandRatio(compareTypeField, 0.5f);
mainLayout.setExpandRatio(valueField, 1.5f);
updateContainer();
compareTypeField.setItemCaptionPropertyId("caption");
compareTypeField.setItemIconPropertyId("image");
return mainLayout;
}
protected void updateContainer() {
BeanItemContainer<CompareType> container = new BeanItemContainer<>(CompareType.class);
container
.addBean(new CompareType(CompareTypeEnum.EQ, toLabel(CompareTypeEnum.EQ), toImage(CompareTypeEnum.EQ)));
container
.addBean(new CompareType(CompareTypeEnum.NE, toLabel(CompareTypeEnum.NE), toImage(CompareTypeEnum.NE)));
container
.addBean(new CompareType(CompareTypeEnum.GT, toLabel(CompareTypeEnum.GT), toImage(CompareTypeEnum.GT)));
container
.addBean(new CompareType(CompareTypeEnum.GE, toLabel(CompareTypeEnum.GE), toImage(CompareTypeEnum.GE)));
container
.addBean(new CompareType(CompareTypeEnum.LT, toLabel(CompareTypeEnum.LT), toImage(CompareTypeEnum.LT)));
container
.addBean(new CompareType(CompareTypeEnum.LE, toLabel(CompareTypeEnum.LE), toImage(CompareTypeEnum.LE)));
compareTypeField.setContainerDataSource(container);
}
protected String toLabel(CompareTypeEnum enumx) {
return Util.getCaption(i18nService, enumx.name(), enumx.name(), getLocale());
}
protected Resource toImage(CompareTypeEnum enumx) {
return themeResourceService.getThemeResource(enumx.name(), ThemeResourceType.ICON);
}
public Filter getFilter() {
if (!valueField.isValid() || !compareTypeField.isValid()) {
return null;
}
CompareType compareType = (CompareType) compareTypeField.getValue();
if (compareType == null) {
return null;
}
Date value = valueField.getValue();
if (value == null) {
return null;
}
Filter filter = null;
switch (compareType.typeEnum) {
case EQ:
filter = new Compare.Equal(propertyId, value);
break;
case GE:
filter = new Compare.GreaterOrEqual(propertyId, value);
break;
case GT:
filter = new Compare.Greater(propertyId, value);
break;
case LE:
filter = new Compare.LessOrEqual(propertyId, value);
break;
case LT:
filter = new Compare.Less(propertyId, value);
break;
case NE:
filter = new Not(new Compare.Equal(propertyId, value));
break;
}
return filter;
}
@Override
public void resetAllFilters() {
compareTypeField.setValue(null);
valueField.setValue(null);
}
protected void updateCaptions() {
captionField.setValue(getCaptionInternal());
updateContainer();
}
public static class CompareType {
private CompareTypeEnum typeEnum;
private String caption;
private Resource image;
public CompareType(CompareTypeEnum typeEnum, String caption, Resource image) {
super();
this.typeEnum = typeEnum;
this.caption = caption;
this.image = image;
}
public CompareTypeEnum getTypeEnum() {
return typeEnum;
}
public void setTypeEnum(CompareTypeEnum typeEnum) {
this.typeEnum = typeEnum;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this.caption = caption;
}
public Resource getImage() {
return image;
}
public void setImage(Resource image) {
this.image = image;
}
}
public enum CompareTypeEnum {
EQ, NE, GT, GE, LE, LT;
}
}