private AbstractField createField(Object property, Class<?> type) { AbstractField component = null; if (owner.getFilterGenerator() != null) { component = owner.getFilterGenerator().getCustomFilterComponent(property); } if (component != null) { customFields.put(component, property); } else if (type == null) { component = new TextField(); component.setWidth("100%"); return component; } else if (type == boolean.class || type == Boolean.class) { component = createBooleanField(property); } else if (type == Integer.class || type == Long.class || type == Float.class || type == Double.class || type == int.class || type == long.class || type == float.class || type == double.class) { component = createNumericField(type, property); } else if (type.isEnum()) { component = createEnumField(type, property); } else if (type == Date.class || type == Timestamp.class || type == java.sql.Date.class) { component = createDateField(property); } else { component = createTextField(property); } component.setWidth("100%"); component.setImmediate(true); component.addListener(listener); return component; }
void initializeFilterFields() { /* Create new filters only if Filterable */ if (owner.getFilterable() != null) { for (Object property : owner.getVisibleColumns()) { if (owner.getContainerPropertyIds().contains(property)) { AbstractField filter = createField(property, owner.getContainerDataSource().getType(property)); addFilterColumn(property, filter); } else { addFilterColumn(property, createField(null, null)); } } } }
void clearFilterData() { /* Remove all filters from container */ for (Object propertyId : filters.keySet()) { owner.getFilterable().removeContainerFilter(filters.get(propertyId)); if (owner.getFilterGenerator() != null) { owner.getFilterGenerator().filterRemoved(propertyId); } } /* Clear the data related to filters */ customFields.clear(); filters.clear(); texts.clear(); enums.clear(); booleans.clear(); dates.clear(); }
private AbstractField createBooleanField(Object propertyId) { ComboBox booleanSelect = new ComboBox(); booleanSelect.addItem(true); booleanSelect.addItem(false); if (owner.getFilterDecorator() != null) { /* Add possible 'view all' item */ if (owner.getFilterDecorator().getAllItemsVisibleString() != null) { Object nullItem = booleanSelect.addItem(); booleanSelect.setNullSelectionItemId(nullItem); booleanSelect.setItemCaption( nullItem, owner.getFilterDecorator().getAllItemsVisibleString()); } String caption = owner.getFilterDecorator().getBooleanFilterDisplayName(propertyId, true); booleanSelect.setItemCaption(true, caption == null ? "true" : caption); Resource icon = owner.getFilterDecorator().getBooleanFilterIcon(propertyId, true); if (icon != null) { booleanSelect.setItemIcon(true, icon); } caption = owner.getFilterDecorator().getBooleanFilterDisplayName(propertyId, false); booleanSelect.setItemCaption(false, caption == null ? "false" : caption); icon = owner.getFilterDecorator().getBooleanFilterIcon(propertyId, false); if (icon != null) { booleanSelect.setItemIcon(false, icon); } } else { booleanSelect.setItemCaption(true, "true"); booleanSelect.setItemCaption(false, "false"); } booleans.put(booleanSelect, propertyId); return booleanSelect; }
private AbstractField createTextField(Object propertyId) { final TextField textField = new TextField(); if (owner.getFilterDecorator() != null) { if (owner.getFilterDecorator().isTextFilterImmediate(propertyId)) { textField.addListener( new TextChangeListener() { public void textChange(TextChangeEvent event) { textField.setValue(event.getText()); } }); textField.setTextChangeTimeout(owner.getFilterDecorator().getTextChangeTimeout(propertyId)); } if (owner.getFilterDecorator().getAllItemsVisibleString() != null) { textField.setInputPrompt(owner.getFilterDecorator().getAllItemsVisibleString()); } } texts.put(textField, propertyId); return textField; }
@SuppressWarnings({"rawtypes", "unchecked"}) private AbstractField createEnumField(Class<?> type, Object propertyId) { ComboBox enumSelect = new ComboBox(); /* Add possible 'view all' item */ if (owner.getFilterDecorator() != null && owner.getFilterDecorator().getAllItemsVisibleString() != null) { Object nullItem = enumSelect.addItem(); enumSelect.setNullSelectionItemId(nullItem); enumSelect.setItemCaption(nullItem, owner.getFilterDecorator().getAllItemsVisibleString()); } /* Add items from enumeration */ for (Object o : EnumSet.allOf((Class<Enum>) type)) { enumSelect.addItem(o); if (owner.getFilterDecorator() != null) { String caption = owner.getFilterDecorator().getEnumFilterDisplayName(propertyId, o); enumSelect.setItemCaption(o, caption == null ? o.toString() : caption); Resource icon = owner.getFilterDecorator().getEnumFilterIcon(propertyId, o); if (icon != null) { enumSelect.setItemIcon(o, icon); } } else { enumSelect.setItemCaption(o, o.toString()); } } enums.put(enumSelect, propertyId); return enumSelect; }
private Filter generateFilter(Property field, Object propertyId, Object value) { if (field instanceof DateFilterPopup) { /* Handle date filtering */ DateInterval interval = ((DateFilterPopup) field).getDateValue(); if (interval == null) { /* Date interval is empty -> no filter */ return null; } if (owner.getFilterGenerator() != null) { Filter newFilter = owner.getFilterGenerator().generateFilter(propertyId, interval); if (newFilter != null) { return newFilter; } } Date from = interval.getFrom(); Date to = interval.getTo(); if (from != null && to != null) { return new Between(propertyId, from, to); } else if (from != null) { return new Compare.GreaterOrEqual(propertyId, from); } else { return new Compare.LessOrEqual(propertyId, to); } } else if (field instanceof NumberFilterPopup) { /* Handle number filtering */ NumberInterval interval = ((NumberFilterPopup) field).getInterval(); if (interval == null) { /* Number interval is empty -> no filter */ return null; } if (owner.getFilterGenerator() != null) { Filter newFilter = owner.getFilterGenerator().generateFilter(propertyId, interval); if (newFilter != null) { return newFilter; } } String ltValue = interval.getLessThanValue(); String gtValue = interval.getGreaterThanValue(); String eqValue = interval.getEqualsValue(); Class<?> clazz = owner.getContainerDataSource().getType(propertyId); Method valueOf; // We use reflection to get the vaueOf method of the container // datatype try { valueOf = clazz.getMethod("valueOf", String.class); if (eqValue != null) { return new Compare.Equal(propertyId, valueOf.invoke(clazz, eqValue)); } else if (ltValue != null && gtValue != null) { return new And( new Compare.Less(propertyId, valueOf.invoke(clazz, ltValue)), new Compare.Greater(propertyId, valueOf.invoke(clazz, gtValue))); } else if (ltValue != null) { return new Compare.Less(propertyId, valueOf.invoke(clazz, ltValue)); } else if (gtValue != null) { return new Compare.Greater(propertyId, valueOf.invoke(clazz, gtValue)); } else { return null; } } catch (Exception e) { throw new RuntimeException("Creating number filter has failed.", e); } } else if (value != null && !value.equals("")) { /* Handle filtering for other data */ if (owner.getFilterGenerator() != null) { Filter newFilter = owner.getFilterGenerator().generateFilter(propertyId, value); if (newFilter != null) { return newFilter; } } return new SimpleStringFilter(propertyId, String.valueOf(value), true, false); } /* Value is null or empty -> no filter */ return null; }
private AbstractField createNumericField(Class<?> type, Object propertyId) { NumberFilterPopup numberFilterPopup = new NumberFilterPopup(owner.getFilterDecorator(), null); numbers.put(numberFilterPopup, propertyId); return numberFilterPopup; }
private AbstractField createDateField(Object propertyId) { DateFilterPopup dateFilterPopup = new DateFilterPopup(owner.getFilterDecorator(), propertyId); dates.put(dateFilterPopup, propertyId); return dateFilterPopup; }
private void setFilter(Filter filter, Object propertyId) { owner.getFilterable().addContainerFilter(filter); filters.put(propertyId, filter); }
private void removeFilter(Object propertyId) { if (filters.get(propertyId) != null) { owner.getFilterable().removeContainerFilter(filters.get(propertyId)); filters.remove(propertyId); } }
private void addFilterColumn(Object propertyId, Component filter) { owner.getColumnIdToFilterMap().put(propertyId, filter); filter.setParent(owner); owner.requestRepaint(); }