Criteria.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.spring.data.gremlin.query.criteria;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.List;
public final class Criteria {
private String subject;
private List<Object> subValues;
private final CriteriaType type;
private final List<Criteria> subCriteria;
private Criteria(CriteriaType type) {
this.type = type;
this.subCriteria = new ArrayList<>();
}
private static boolean isBinaryOperation(CriteriaType type) {
switch (type) {
case AND:
case OR:
return true;
default:
return false;
}
}
private static boolean isUnaryOperation(CriteriaType type) {
switch (type) {
case EXISTS:
case AFTER:
case BEFORE:
case BETWEEN:
case IS_EQUAL:
return true;
default:
return false;
}
}
public static Criteria getUnaryInstance(CriteriaType type, @NonNull String subject, @NonNull List<Object> values) {
Assert.isTrue(isUnaryOperation(type), "type should be Unary operation");
final Criteria criteria = new Criteria(type);
criteria.subject = subject;
criteria.subValues = values;
return criteria;
}
public static Criteria getBinaryInstance(CriteriaType type, @NonNull Criteria left, @NonNull Criteria right) {
Assert.isTrue(isBinaryOperation(type), "type should be Binary operation");
final Criteria criteria = new Criteria(type);
criteria.subCriteria.add(left);
criteria.subCriteria.add(right);
Assert.isTrue(criteria.getSubCriteria().size() == 2, "Binary should contain 2 subCriteria");
return criteria;
}
public String getSubject() {
return subject;
}
public List<Object> getSubValues() {
return subValues;
}
public CriteriaType getType() {
return type;
}
public List<Criteria> getSubCriteria() {
return subCriteria;
}
}