use of com.revolsys.record.query.BinaryCondition in project com.revolsys.open by revolsys.
the class RecordStoreQueryListModel method getRecords.
protected List<Record> getRecords(final String searchParam) {
if (Property.hasValue(searchParam) && searchParam.length() >= 2) {
final Map<String, Record> allObjects = new TreeMap<>();
for (Query query : this.queries) {
if (allObjects.size() < this.maxResults) {
query = query.clone();
query.setOrderBy(this.displayFieldName);
final Condition whereCondition = query.getWhereCondition();
if (whereCondition instanceof BinaryCondition) {
final BinaryCondition binaryCondition = (BinaryCondition) whereCondition;
if (binaryCondition.getOperator().equalsIgnoreCase("like")) {
final String likeString = "%" + searchParam.toUpperCase().replaceAll("[^A-Z0-9 ]", "%") + "%";
Q.setValue(0, binaryCondition, likeString);
} else {
Q.setValue(0, binaryCondition, searchParam);
}
}
query.setLimit(this.maxResults);
final Reader<Record> reader = this.recordStore.getRecords(query);
try {
final List<Record> objects = reader.toList();
for (final Record object : objects) {
if (allObjects.size() < this.maxResults) {
final String key = object.getString(this.displayFieldName);
if (!allObjects.containsKey(key)) {
if (searchParam.equals(key)) {
this.selectedItem = object;
}
allObjects.put(key, object);
}
}
}
} finally {
reader.close();
}
}
}
return new ArrayList<>(allObjects.values());
} else {
return Collections.emptyList();
}
}
use of com.revolsys.record.query.BinaryCondition in project com.revolsys.open by revolsys.
the class AbstractRecordQueryField method queryDo.
protected void queryDo(final int searchIndex, final String queryText) {
if (searchIndex == this.searchIndex.get()) {
Record selectedRecord = null;
final Map<String, Record> allRecords = new TreeMap<>();
for (Query query : this.queries) {
if (allRecords.size() < this.maxResults) {
query = //
query.clone().addOrderBy(this.displayField);
final Condition whereCondition = query.getWhereCondition();
if (whereCondition instanceof BinaryCondition) {
final BinaryCondition binaryCondition = (BinaryCondition) whereCondition;
if (binaryCondition.getOperator().equalsIgnoreCase("like")) {
final String likeString = "%" + queryText.toUpperCase().replaceAll("[^A-Z0-9 ]", "%") + "%";
Q.setValue(0, binaryCondition, likeString);
} else {
Q.setValue(0, binaryCondition, queryText);
}
}
query.setLimit(this.maxResults);
final List<Record> records = getRecords(query);
for (final Record record : records) {
if (allRecords.size() < this.maxResults) {
final String key = record.getString(this.displayField);
if (!allRecords.containsKey(key)) {
if (queryText.equals(key)) {
selectedRecord = record;
}
allRecords.put(key, record);
}
}
}
}
}
setSearchResults(searchIndex, allRecords.values(), selectedRecord);
}
}
use of com.revolsys.record.query.BinaryCondition in project com.revolsys.open by revolsys.
the class FieldFilterPanel method setFilter.
public void setFilter(final Condition filter) {
if (!this.fieldNames.isEmpty()) {
Invoke.later(() -> {
try (BaseCloseable settingFilter = this.settingFilter.closeable(true)) {
setSearchFilter(filter);
boolean simple = false;
if (Property.isEmpty(filter)) {
final Field searchField = (Field) this.searchField;
if (searchField != null) {
searchField.setFieldValue(null);
}
setSearchOperator("=");
simple = true;
} else if (filter instanceof Not) {
final Not not = (Not) filter;
final QueryValue condition = not.getValue();
if (condition instanceof IsNull) {
final IsNull isNull = (IsNull) condition;
final IsNotNull isNotNull = new IsNotNull(isNull.getValue());
setFilter(isNotNull);
return;
}
} else if (filter instanceof ILike) {
final ILike equal = (ILike) filter;
final QueryValue leftCondition = equal.getLeft();
final QueryValue rightCondition = equal.getRight();
if (leftCondition instanceof Column && rightCondition instanceof Value) {
final Column column = (Column) leftCondition;
final String searchFieldName = column.getName();
setSearchFieldName(searchFieldName);
if (setSearchOperator("Like")) {
final Value value = (Value) rightCondition;
final Object searchValue = value.getValue();
String searchText = DataTypes.toString(searchValue);
if (Property.hasValue(searchText)) {
setSearchField(this.searchTextField);
searchText = searchText.replaceAll("%", "");
final String previousSearchText = this.searchTextField.getText();
if (!DataType.equal(searchText, previousSearchText)) {
this.searchTextField.setFieldValue(searchText);
}
simple = true;
} else {
setSearchFilter(null);
}
}
}
} else if (filter instanceof BinaryCondition) {
final BinaryCondition condition = (BinaryCondition) filter;
final QueryValue leftCondition = condition.getLeft();
final QueryValue rightCondition = condition.getRight();
if (leftCondition instanceof Column && rightCondition instanceof Value) {
final Column column = (Column) leftCondition;
final String searchFieldName = column.getName();
setSearchFieldName(searchFieldName);
final String searchOperator = condition.getOperator();
if (setSearchOperator(searchOperator)) {
final Value value = (Value) rightCondition;
final Object searchValue = value.getValue();
final String searchText = DataTypes.toString(searchValue);
final Field searchField = (Field) this.searchField;
final Object oldValue = searchField.getFieldValue();
if (!searchText.equalsIgnoreCase(DataTypes.toString(oldValue))) {
searchField.setFieldValue(searchText);
}
simple = true;
}
}
} else if (filter instanceof RightUnaryCondition) {
final RightUnaryCondition condition = (RightUnaryCondition) filter;
final String operator = condition.getOperator();
if (filter instanceof IsNull || filter instanceof IsNotNull) {
final QueryValue leftValue = condition.getValue();
if (leftValue instanceof Column) {
final Column column = (Column) leftValue;
final String searchFieldName = column.getName();
setSearchFieldName(searchFieldName);
if (setSearchOperator(operator)) {
simple = true;
}
}
}
}
if (simple) {
this.whereLabel.setVisible(false);
if (this.nameField != null) {
this.nameField.setVisible(true);
}
if (this.operatorField != null) {
this.operatorField.setVisible(true);
}
this.searchFieldPanel.setVisible(true);
} else {
String filterText = filter.toString();
if (filterText.length() > 40) {
filterText = filterText.substring(0, 40) + "...";
}
this.whereLabel.setText(filterText);
this.whereLabel.setToolTipText(filterText);
this.whereLabel.setVisible(true);
if (this.nameField != null) {
this.nameField.setVisible(false);
}
this.operatorField.setVisible(false);
this.searchFieldPanel.setVisible(false);
}
}
});
}
}
use of com.revolsys.record.query.BinaryCondition in project com.revolsys.open by revolsys.
the class FileGdbRecordStore method appendQueryValue.
@Override
public void appendQueryValue(final Query query, final StringBuilder buffer, final QueryValue condition) {
if (condition instanceof Like || condition instanceof ILike) {
final BinaryCondition like = (BinaryCondition) condition;
final QueryValue left = like.getLeft();
final QueryValue right = like.getRight();
buffer.append("UPPER(CAST(");
appendQueryValue(query, buffer, left);
buffer.append(" AS VARCHAR(4000))) LIKE ");
if (right instanceof Value) {
final Value valueCondition = (Value) right;
final Object value = valueCondition.getValue();
buffer.append("'");
if (value != null) {
final String string = DataTypes.toString(value);
buffer.append(string.toUpperCase().replaceAll("'", "''"));
}
buffer.append("'");
} else {
appendQueryValue(query, buffer, right);
}
} else if (condition instanceof LeftUnaryCondition) {
final LeftUnaryCondition unaryCondition = (LeftUnaryCondition) condition;
final String operator = unaryCondition.getOperator();
final QueryValue right = unaryCondition.getValue();
buffer.append(operator);
buffer.append(" ");
appendQueryValue(query, buffer, right);
} else if (condition instanceof RightUnaryCondition) {
final RightUnaryCondition unaryCondition = (RightUnaryCondition) condition;
final QueryValue left = unaryCondition.getValue();
final String operator = unaryCondition.getOperator();
appendQueryValue(query, buffer, left);
buffer.append(" ");
buffer.append(operator);
} else if (condition instanceof BinaryCondition) {
final BinaryCondition binaryCondition = (BinaryCondition) condition;
final QueryValue left = binaryCondition.getLeft();
final String operator = binaryCondition.getOperator();
final QueryValue right = binaryCondition.getRight();
appendQueryValue(query, buffer, left);
buffer.append(" ");
buffer.append(operator);
buffer.append(" ");
appendQueryValue(query, buffer, right);
} else if (condition instanceof AbstractMultiCondition) {
final AbstractMultiCondition multipleCondition = (AbstractMultiCondition) condition;
buffer.append("(");
boolean first = true;
final String operator = multipleCondition.getOperator();
for (final QueryValue subCondition : multipleCondition.getQueryValues()) {
if (first) {
first = false;
} else {
buffer.append(" ");
buffer.append(operator);
buffer.append(" ");
}
appendQueryValue(query, buffer, subCondition);
}
buffer.append(")");
} else if (condition instanceof In) {
final In in = (In) condition;
if (in.isEmpty()) {
buffer.append("1==0");
} else {
final QueryValue left = in.getLeft();
appendQueryValue(query, buffer, left);
buffer.append(" IN (");
appendQueryValue(query, buffer, in.getValues());
buffer.append(")");
}
} else if (condition instanceof Value) {
final Value valueCondition = (Value) condition;
Object value = valueCondition.getValue();
if (value instanceof Identifier) {
final Identifier identifier = (Identifier) value;
value = identifier.getValue(0);
}
appendValue(buffer, value);
} else if (condition instanceof CollectionValue) {
final CollectionValue collectionValue = (CollectionValue) condition;
final List<Object> values = collectionValue.getValues();
boolean first = true;
for (final Object value : values) {
if (first) {
first = false;
} else {
buffer.append(", ");
}
appendValue(buffer, value);
}
} else if (condition instanceof Column) {
final Column column = (Column) condition;
final Object name = column.getName();
buffer.append(name);
} else if (condition instanceof SqlCondition) {
final SqlCondition sqlCondition = (SqlCondition) condition;
final String where = sqlCondition.getSql();
final List<Object> parameters = sqlCondition.getParameterValues();
if (parameters.isEmpty()) {
if (where.indexOf('?') > -1) {
throw new IllegalArgumentException("No arguments specified for a where clause with placeholders: " + where);
} else {
buffer.append(where);
}
} else {
final Matcher matcher = PLACEHOLDER_PATTERN.matcher(where);
int i = 0;
while (matcher.find()) {
if (i >= parameters.size()) {
throw new IllegalArgumentException("Not enough arguments for where clause with placeholders: " + where);
}
final Object argument = parameters.get(i);
final StringBuffer replacement = new StringBuffer();
matcher.appendReplacement(replacement, DataTypes.toString(argument));
buffer.append(replacement);
appendValue(buffer, argument);
i++;
}
final StringBuffer tail = new StringBuffer();
matcher.appendTail(tail);
buffer.append(tail);
}
} else if (condition instanceof EnvelopeIntersects) {
buffer.append("1 = 1");
} else if (condition instanceof WithinDistance) {
buffer.append("1 = 1");
} else {
condition.appendDefaultSql(query, this, buffer);
}
}
use of com.revolsys.record.query.BinaryCondition in project com.revolsys.open by revolsys.
the class OgrRecordStore method appendQueryValue.
@Override
public void appendQueryValue(final Query query, final StringBuilder sql, final QueryValue condition) {
if (condition instanceof Like || condition instanceof ILike) {
final BinaryCondition like = (BinaryCondition) condition;
final QueryValue left = like.getLeft();
final QueryValue right = like.getRight();
sql.append("UPPER(");
appendQueryValue(query, sql, left);
sql.append(") LIKE ");
if (right instanceof Value) {
final Value valueCondition = (Value) right;
final Object value = valueCondition.getValue();
sql.append("'");
if (value != null) {
final String string = DataTypes.toString(value);
sql.append(string.toUpperCase());
}
sql.append("'");
} else {
appendQueryValue(query, sql, right);
}
} else if (condition instanceof LeftUnaryCondition) {
final LeftUnaryCondition unaryCondition = (LeftUnaryCondition) condition;
final String operator = unaryCondition.getOperator();
final QueryValue right = unaryCondition.getValue();
sql.append(operator);
sql.append(" ");
appendQueryValue(query, sql, right);
} else if (condition instanceof RightUnaryCondition) {
final RightUnaryCondition unaryCondition = (RightUnaryCondition) condition;
final QueryValue left = unaryCondition.getValue();
final String operator = unaryCondition.getOperator();
appendQueryValue(query, sql, left);
sql.append(" ");
sql.append(operator);
} else if (condition instanceof BinaryCondition) {
final BinaryCondition binaryCondition = (BinaryCondition) condition;
final QueryValue left = binaryCondition.getLeft();
final String operator = binaryCondition.getOperator();
final QueryValue right = binaryCondition.getRight();
appendQueryValue(query, sql, left);
sql.append(" ");
sql.append(operator);
sql.append(" ");
appendQueryValue(query, sql, right);
} else if (condition instanceof AbstractMultiCondition) {
final AbstractMultiCondition multipleCondition = (AbstractMultiCondition) condition;
sql.append("(");
boolean first = true;
final String operator = multipleCondition.getOperator();
for (final QueryValue subCondition : multipleCondition.getQueryValues()) {
if (first) {
first = false;
} else {
sql.append(" ");
sql.append(operator);
sql.append(" ");
}
appendQueryValue(query, sql, subCondition);
}
sql.append(")");
} else if (condition instanceof Value) {
final Value valueCondition = (Value) condition;
final Object value = valueCondition.getValue();
appendValue(sql, value);
} else if (condition instanceof CollectionValue) {
final CollectionValue collectionValue = (CollectionValue) condition;
final List<Object> values = collectionValue.getValues();
boolean first = true;
for (final Object value : values) {
if (first) {
first = false;
} else {
sql.append(", ");
}
appendValue(sql, value);
}
} else if (condition instanceof Column) {
final Column column = (Column) condition;
final Object name = column.getName();
sql.append(name);
} else if (condition instanceof SqlCondition) {
final SqlCondition sqlCondition = (SqlCondition) condition;
final String where = sqlCondition.getSql();
final List<Object> parameters = sqlCondition.getParameterValues();
if (parameters.isEmpty()) {
if (where.indexOf('?') > -1) {
throw new IllegalArgumentException("No arguments specified for a where clause with placeholders: " + where);
} else {
sql.append(where);
}
} else {
final Matcher matcher = PLACEHOLDER_PATTERN.matcher(where);
int i = 0;
while (matcher.find()) {
if (i >= parameters.size()) {
throw new IllegalArgumentException("Not enough arguments for where clause with placeholders: " + where);
}
final Object argument = parameters.get(i);
final StringBuffer replacement = new StringBuffer();
matcher.appendReplacement(replacement, DataTypes.toString(argument));
sql.append(replacement);
appendValue(sql, argument);
i++;
}
final StringBuffer tail = new StringBuffer();
matcher.appendTail(tail);
sql.append(tail);
}
} else if (condition instanceof EnvelopeIntersects) {
final EnvelopeIntersects envelopeIntersects = (EnvelopeIntersects) condition;
final QueryValue boundingBox1Value = envelopeIntersects.getBoundingBox1Value();
final QueryValue boundingBox2Value = envelopeIntersects.getBoundingBox2Value();
if (boundingBox1Value == null || boundingBox2Value == null) {
sql.append("1 = 0");
} else {
sql.append("Intersects(");
boundingBox1Value.appendSql(query, this, sql);
sql.append(",");
boundingBox2Value.appendSql(query, this, sql);
sql.append(")");
}
} else if (condition instanceof WithinDistance) {
final WithinDistance withinDistance = (WithinDistance) condition;
final QueryValue geometry1Value = withinDistance.getGeometry1Value();
final QueryValue geometry2Value = withinDistance.getGeometry2Value();
final QueryValue distanceValue = withinDistance.getDistanceValue();
if (geometry1Value == null || geometry2Value == null || distanceValue == null) {
sql.append("1 = 0");
} else {
sql.append("Distance(");
geometry1Value.appendSql(query, this, sql);
sql.append(", ");
geometry2Value.appendSql(query, this, sql);
sql.append(") <= ");
distanceValue.appendSql(query, this, sql);
sql.append(")");
}
} else {
condition.appendDefaultSql(query, this, sql);
}
}
Aggregations