/*
* Smart GWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* Smart GWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* is published by the Free Software Foundation. Smart GWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.smartgwt.sample.showcase.client.grid.sortfilter;
import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.Criterion;
import com.smartgwt.client.types.OperatorId;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
import com.smartgwt.sample.showcase.client.data.WorldXmlDS;
public class GridExpressionFilter extends ShowcasePanel {
private static final String DESCRIPTION = "<p>DynamicForms and FormItems are capable of parsing simple expressions " +
"entered as part of their values, when allowExpressions is true on either entity. ListGrids use this facility, " +
"when showFilterEditor and allowFilterExpressions are true, to allow expressions to be entered directly into the FormItems displayed in the filterEditor.</p>" +
"<p>Below is a ListGrid with a FilterEditor and allowFilterExpressions: true. Some expression-based filter-criteria have been applied via initialCriteria: " +
"the list displays countries with no 'i's in the country name, with a Capital that starts with a letter "A" through "F" and with a population less than " +
"1 million or more than 100 million.</p>" +
"<p>See the table on the right for the supported expression-symbols. Note that logical "and" and "or" expressions are treated as text in text-based fields and ignored.</p>";
public static class Factory implements PanelFactory {
private String id;
public Canvas create() {
GridExpressionFilter panel = new GridExpressionFilter();
id = panel.getID();
return panel;
}
public String getID() {
return id;
}
public String getDescription() {
return DESCRIPTION;
}
}
public Canvas getViewPanel() {
final ListGrid countryGrid = new ListGrid();
countryGrid.setWidth(500);
countryGrid.setHeight(300);
countryGrid.setDataSource(WorldXmlDS.getInstance());
ListGridField countryCodeField = new ListGridField("countryCode", "Code", 50);
ListGridField nameField = new ListGridField("countryName", "Country");
ListGridField capitalField = new ListGridField("capital", "Capital");
ListGridField continentField = new ListGridField("continent", "Continent");
ListGridField areaField = new ListGridField("area", "Area (km²)");
ListGridField populationField = new ListGridField("population", "Population");
countryGrid.setFields(countryCodeField, nameField, capitalField, continentField, areaField, populationField);
countryGrid.setAutoFetchData(true);
countryGrid.setShowFilterEditor(true);
countryGrid.setAllowFilterExpressions(true);
AdvancedCriteria initialCriteria = new AdvancedCriteria(OperatorId.AND, new Criterion[]{
new Criterion("countryName", OperatorId.INOT_CONTAINS, "i"),
new Criterion("capital", OperatorId.BETWEEN_INCLUSIVE, "A", "F"),
new AdvancedCriteria(OperatorId.OR, new Criterion[]{
new Criterion("population", OperatorId.LESS_THAN, 1000000),
new Criterion("population", OperatorId.GREATER_THAN, 100000000)
})
});
countryGrid.setInitialCriteria(initialCriteria);
Label label = new Label();
label.setAutoHeight();
label.setContents("<table style='font-size:12;font-family:Arial,Verdana'>" +
"<tr><td><b>Prefix</b></td><td><b>Operator</b></td></tr>" +
"<tr><td><</td><td>lessThan</td></tr>" +
"<tr><td>></td><td>greaterThan</td></tr>" +
"<tr><td><=</td><td>lessThanOrEqual</td></tr>" +
"<tr><td>>=</td><td>greaterThanOrEqual</td></tr>" +
"<tr><td>someValue...someValue</td><td>betweenInclusive</td></tr>" +
"<tr><td>!</td><td>notEqual</td></tr>" +
"<tr><td>^</td><td>startsWith</td></tr>" +
"<tr><td>|</td><td>endsWith</td></tr>" +
"<tr><td>!^</td><td>notStartsWith</td></tr>" +
"<tr><td>!@</td><td>notEndsWith</td></tr>" +
"<tr><td>~</td><td>contains</td></tr>" +
"<tr><td>!~</td><td>notContains</td></tr>" +
"<tr><td>=(value1|value2)</td><td>inSet</td></tr>" +
"<tr><td>!=(value1|value2)</td><td>notInSet</td></tr>" +
"<tr><td>#</td><td>isNull</td></tr>" +
"<tr><td>!#</td><td>isNotNull</td></tr>" +
"<tr><td>==</td><td>exact match (for fields where 'contains' is the default)</td></tr>" +
"<tr><td>=.</td><td>matches other field-name or title</td></tr>" +
"</table>");
HLayout layout = new HLayout(20);
layout.setMembers(countryGrid, label);
return layout;
}
protected boolean isTopIntro() {
return true;
}
public String getIntro() {
return DESCRIPTION;
}
}