/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.model.data; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.exec.DBCLogicalOperator; import org.jkiss.dbeaver.model.struct.DBSAttributeBase; import org.jkiss.utils.CommonUtils; /** * Attribute constraint */ public class DBDAttributeConstraint { private final DBSAttributeBase attribute; private int orderPosition; private boolean orderDescending; private String criteria; private DBCLogicalOperator operator; private boolean reverseOperator; private Object value; private boolean visible; private int visualPosition; private final int originalVisualPosition; // USed to generate expressions private transient String entityAlias; public DBDAttributeConstraint(DBDAttributeBinding attribute) { this.attribute = attribute; this.originalVisualPosition = this.visualPosition = attribute.getOrdinalPosition(); } public DBDAttributeConstraint(DBSAttributeBase attribute, int visualPosition) { this.attribute = attribute; this.originalVisualPosition = this.visualPosition = visualPosition; } public DBDAttributeConstraint(DBDAttributeConstraint source) { this.attribute = source.attribute; this.orderPosition = source.orderPosition; this.orderDescending = source.orderDescending; this.criteria = source.criteria; this.operator = source.operator; this.reverseOperator = source.reverseOperator; this.value = source.value; this.visible = source.visible; this.originalVisualPosition = source.originalVisualPosition; this.visualPosition = source.visualPosition; } public DBSAttributeBase getAttribute() { return attribute; } public int getOrderPosition() { return orderPosition; } public void setOrderPosition(int orderPosition) { this.orderPosition = orderPosition; } public boolean isOrderDescending() { return orderDescending; } public void setOrderDescending(boolean orderDescending) { this.orderDescending = orderDescending; } public String getCriteria() { return criteria; } public void setCriteria(@Nullable String criteria) { this.criteria = criteria; this.operator = null; this.reverseOperator = false; this.value = null; } public DBCLogicalOperator getOperator() { return operator; } public void setOperator(DBCLogicalOperator operator) { this.criteria = null; this.operator = operator; } public boolean isReverseOperator() { return reverseOperator; } public void setReverseOperator(boolean reverseOperator) { this.reverseOperator = reverseOperator; } public Object getValue() { return value; } public void setValue(@Nullable Object value) { this.criteria = null; this.value = value; } public boolean hasFilter() { return hasCondition() || orderPosition > 0; } public boolean hasCondition() { return !CommonUtils.isEmpty(criteria) || operator != null; } public boolean isVisible() { return visible; } public void setVisible(boolean visible) { this.visible = visible; } public int getOriginalVisualPosition() { return originalVisualPosition; } public int getVisualPosition() { return visualPosition; } public void setVisualPosition(int visualPosition) { this.visualPosition = visualPosition; } /** * Attribute owner entity alias. * Null by default. Can be set by SQL generation routines after entity alias resolution. */ public String getEntityAlias() { return entityAlias; } public void setEntityAlias(String entityAlias) { this.entityAlias = entityAlias; } public void reset() { this.orderPosition = 0; this.orderDescending = false; this.criteria = null; this.operator = null; this.reverseOperator = false; this.value = null; this.visible = true; this.visualPosition = originalVisualPosition; } public boolean equalFilters(DBDAttributeConstraint obj, boolean compareOrders) { if (compareOrders) { if (this.orderPosition != obj.orderPosition || this.orderDescending != obj.orderDescending) { return false; } } return CommonUtils.equalObjects(this.attribute, obj.attribute) && CommonUtils.equalObjects(this.criteria, obj.criteria) && CommonUtils.equalObjects(this.operator, obj.operator) && CommonUtils.equalObjects(this.reverseOperator, obj.reverseOperator) && CommonUtils.equalObjects(this.value, obj.value); } @Override public int hashCode() { return this.attribute.hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof DBDAttributeConstraint) { DBDAttributeConstraint source = (DBDAttributeConstraint) obj; return CommonUtils.equalObjects(this.attribute, source.attribute) && this.orderPosition == source.orderPosition && this.orderDescending == source.orderDescending && CommonUtils.equalObjects(this.criteria, source.criteria) && CommonUtils.equalObjects(this.operator, source.operator) && this.reverseOperator == source.reverseOperator && CommonUtils.equalObjects(this.value, source.value) && this.visible == source.visible && this.visualPosition == source.visualPosition; } else { return false; } } @Override public String toString() { String clause = operator == null ? (criteria == null ? "" : criteria) : (reverseOperator ? "NOT " : "") + operator.getStringValue() + " " + value; return attribute.getName() + " " + clause; } public boolean matches(DBSAttributeBase attr, boolean matchByName) { return attribute == attr || (attribute instanceof DBDAttributeBinding && ((DBDAttributeBinding) attribute).matches(attr, matchByName)); } }