83 lines
4.2 KiB
Java
83 lines
4.2 KiB
Java
package org.gcube.informationsystem.resourceregistry.queries.operators;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
import org.gcube.informationsystem.types.PropertyTypeName.BaseTypeGroup;
|
|
|
|
/**
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
* See https://www.orientdb.com/docs/3.0.x/sql/SQL-Where.html
|
|
*/
|
|
public enum ConditionalOperator {
|
|
|
|
EQ("_eq", " = ", BaseTypeGroup.ANY, "Matches values that are equal to a specified value. E.g. `name = 'Luke'`"),
|
|
GT("_gt", " > ", BaseTypeGroup.ANY, "Matches values that are greater than a specified value. "),
|
|
GTE("_gte", " >= ", BaseTypeGroup.ANY, "Matches values that are greater than or equal to a specified value."),
|
|
LT("_lt", " < ", BaseTypeGroup.ANY, "Matches values that are less than a specified value."),
|
|
LTE("_lte", " <= ", BaseTypeGroup.ANY, "Matches values that are less than or equal to a specified value."),
|
|
NE("_ne", " <> ", BaseTypeGroup.ANY, "Matches all values that are not equal to a specified value."),
|
|
BETWEEN("_between", " BETWEEN ", BaseTypeGroup.ANY, "The value is between a range. E.g. `price BETWEEN 10 AND 30`. It's equivalent to `price >= 10 AND price <= 30`."),
|
|
IS("_is", " IS ", BaseTypeGroup.ANY, "Used to test if a value is NULL"),
|
|
|
|
LIKE("_like", " LIKE ", BaseTypeGroup.STRING, "Similar to equals, but allow the wildcard '%' that means 'any'. E.g. `name LIKE 'Luk%'`"),
|
|
CONTAINS_TEXT("_containsText", " CONTAINSTEXT ", BaseTypeGroup.STRING, "The string contains such text. E.g. `text CONTAINSTEXT 'jay'`"),
|
|
MATCHES("_matches", " MATCHES ", BaseTypeGroup.STRING, "Matches the string using a Regular Expression. E.g. `text MATCHES '\b[A-Z0-9.%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b'`"),
|
|
|
|
IN("_in", " IN ", BaseTypeGroup.COLLECTION, "Matches any of the values specified in an array. E.g. `name in ['European','Asiatic']`"),
|
|
CONTAINS("_contains", " CONTAINS ", BaseTypeGroup.COLLECTION, "True if the collection contains at least one element that satisfy the next condition. Condition can be a single item: in this case the behaviour is like the IN operator. E.g. `children contains (name = 'Luke')` - `map.values() contains (name = 'Luke')`"),
|
|
CONTAINS_ALL("_containsAll", " CONTAINSALL ", BaseTypeGroup.COLLECTION, "True if all the elements of the collection satisfy the next condition. E.g. `children CONTAINSALL (name = 'Luke')`"),
|
|
CONTAINS_ANY("_containsAny", " CONTAINSANY ", BaseTypeGroup.COLLECTION, "True if all the elements of the collection satisfy the next condition. E.g. `children CONTAINSANY (name = 'Luke')`"),
|
|
|
|
CONTAINS_KEY("_containsKey", " CONTAINSKEY ", BaseTypeGroup.MAP, "True if the map contains at least one key equals to the requested. You can also use map.keys() CONTAINS in place of it. E.g. `connections CONTAINSKEY 'Luke'`"),
|
|
CONTAINS_VALUE("_containsValue", " CONTAINSVALUE ", BaseTypeGroup.MAP , "True if the map contains at least one value equals to the requested. You can also use map.values() CONTAINS in place of it. E.g. `connections containsValue 10:3`");
|
|
|
|
|
|
protected final String operator;
|
|
protected final String conditionalOperator;
|
|
protected final BaseTypeGroup allowed;
|
|
protected final String description;
|
|
|
|
private ConditionalOperator(String operator, String conditionalOperator, BaseTypeGroup allowed, String description) {
|
|
this.operator = operator;
|
|
this.conditionalOperator = conditionalOperator;
|
|
this.allowed = allowed;
|
|
this.description = description;
|
|
}
|
|
|
|
public String getOperator() {
|
|
return operator;
|
|
}
|
|
|
|
public String getConditionalOperator() {
|
|
return conditionalOperator;
|
|
}
|
|
|
|
public String getDescription() {
|
|
return description;
|
|
}
|
|
|
|
private static Set<String> operators;
|
|
private static Map<String,ConditionalOperator> operatorByKey;
|
|
|
|
static {
|
|
ConditionalOperator.operators = new HashSet<>();
|
|
ConditionalOperator.operatorByKey = new HashMap<>();
|
|
|
|
for(ConditionalOperator queryComparisonOperator : ConditionalOperator.values()) {
|
|
ConditionalOperator.operators.add(queryComparisonOperator.getOperator());
|
|
ConditionalOperator.operatorByKey.put(queryComparisonOperator.getOperator(), queryComparisonOperator);
|
|
}
|
|
}
|
|
|
|
public static Set<String> getOperators() {
|
|
return ConditionalOperator.operators;
|
|
}
|
|
|
|
public static ConditionalOperator getQueryComparisonOperator(String key) {
|
|
return operatorByKey.get(key);
|
|
}
|
|
}
|