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 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 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; }