/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.client.soda; import com.espertech.esper.type.OuterJoinType; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * Qualifies a join by providing the outer join type (full/left/right) and joined-on properties. */ public class OuterJoinQualifier implements Serializable { private static final long serialVersionUID = 0L; private OuterJoinType type; private Expression left; private Expression right; private List<PropertyValueExpressionPair> additionalProperties; /** * Ctor. */ public OuterJoinQualifier() { } /** * Creates qualifier. * * @param propertyLeft is a property name providing joined-on values * @param type is the type of outer join * @param propertyRight is a property name providing joined-on values * @return qualifier */ public static OuterJoinQualifier create(String propertyLeft, OuterJoinType type, String propertyRight) { return new OuterJoinQualifier(type, new PropertyValueExpression(propertyLeft), new PropertyValueExpression(propertyRight)); } /** * Ctor. * * @param left is a property providing joined-on values * @param type is the type of outer join * @param right is a property providing joined-on values */ public OuterJoinQualifier(OuterJoinType type, PropertyValueExpression left, PropertyValueExpression right) { this(type, left, right, new ArrayList<PropertyValueExpressionPair>()); } /** * Ctor. * * @param left is a property providing joined-on values * @param type is the type of outer join * @param right is a property providing joined-on values * @param additionalProperties for any pairs of additional on-clause properties */ public OuterJoinQualifier(OuterJoinType type, PropertyValueExpression left, PropertyValueExpression right, ArrayList<PropertyValueExpressionPair> additionalProperties) { this.type = type; this.left = left; this.right = right; this.additionalProperties = additionalProperties; } /** * Returns the type of outer join. * * @return outer join type */ public OuterJoinType getType() { return type; } /** * Sets the type of outer join. * * @param type is the outer join type */ public void setType(OuterJoinType type) { this.type = type; } /** * Set join properties. * * @param additionalProperties for outer join */ public void setAdditionalProperties(List<PropertyValueExpressionPair> additionalProperties) { this.additionalProperties = additionalProperties; } /** * Returns property value expression to join on. * * @return expression providing joined-on values */ public Expression getLeft() { return left; } /** * Sets the property value expression to join on. * * @param left expression providing joined-on values */ public void setLeft(Expression left) { this.left = left; } /** * Returns property value expression to join on. * * @return expression providing joined-on values */ public Expression getRight() { return right; } /** * Sets the property value expression to join on. * * @param right expression providing joined-on values */ public void setRight(Expression right) { this.right = right; } /** * Add additional properties to the on-clause, which are logical-and to existing properties * * @param propertyLeft property providing joined-on value * @param propertyRight property providing joined-on value * @return outer join qualifier */ public OuterJoinQualifier add(String propertyLeft, String propertyRight) { additionalProperties.add(new PropertyValueExpressionPair(new PropertyValueExpression(propertyLeft), new PropertyValueExpression(propertyRight))); return this; } /** * Returns optional additional properties in the on-clause of the outer join. * * @return pairs of properties connected via logical-and in an on-clause */ public List<PropertyValueExpressionPair> getAdditionalProperties() { return additionalProperties; } }