package sushi.transformation.element;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import sushi.event.collection.SushiTreeElement;
/**
* Representation of a tree node for filter expression elements.
* A filter expressions consists of two expressions that a connected by a filter expression operator
* One of the two expressions may be range- or enumeration-based.
*
* @see FilterExpressionOperatorEnum
*/
@Entity
@DiscriminatorValue("FE")
public class FilterExpressionElement extends SushiTreeElement<Serializable> implements Serializable {
private static final long serialVersionUID = -7712173256600654317L;
@Column(name = "LeftHandSideExpression")
private String leftHandSideExpression;
@Column(name = "RightHandSideExpression")
private String rightHandSideExpression;
@ElementCollection
private List<String> rightHandSideListOfValues;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name="RangeElement_ID")
private RangeElement rightHandSideRangeOfValues;
@Column(name = "RightHandSideRangeBased")
private boolean rightHandSideRangeBased;
public FilterExpressionElement() {
super();
init();
}
/**
* Constructor.
*
* @param id the identifier
* @param content filter expression element
*/
public FilterExpressionElement(int id, FilterExpressionOperatorEnum content) {
super(id, content);
init();
}
/**
* Constructor.
*
* @param parent
* @param id the identifier
* @param content filter expression element
*/
public FilterExpressionElement(SushiTreeElement<Serializable> parent, int id, FilterExpressionOperatorEnum content) {
super(parent, id, content);
init();
}
/**
* Constructor.
*
* @param parent
* @param id the identifier
* @param content filter expression element
* @param leftHandSideExpression expression (reference to the attribute of the parent event type)
* @param rightHandSideExpression expression (e.g. value, calculation, ...)
*/
public FilterExpressionElement(SushiTreeElement<Serializable> parent, int id, FilterExpressionOperatorEnum content, String leftHandSideExpression, String rightHandSideExpression) {
super(parent, id, content);
init();
this.leftHandSideExpression = leftHandSideExpression;
this.rightHandSideExpression = rightHandSideExpression;
}
/**
* Constructor.
*
* @param parent
* @param id the identifier
* @param content filter expression element
* @param leftHandSideExpression expression (reference to the attribute of the parent event type)
* @param rightHandSideListOfValues enumeration of values as list
*/
public FilterExpressionElement(SushiTreeElement<Serializable> parent, int id, FilterExpressionOperatorEnum content, String leftHandSideExpression, ArrayList<String> rightHandSideListOfValues) {
super(parent, id, content);
assert((content == FilterExpressionOperatorEnum.IN) || (content == FilterExpressionOperatorEnum.NOT_IN));
this.leftHandSideExpression = leftHandSideExpression;
this.rightHandSideListOfValues = rightHandSideListOfValues;
}
/**
* Constructor.
*
* @param parent
* @param id the identifier
* @param content filter expression element
* @param leftHandSideExpression expression (reference to the attribute of the parent event type)
* @param rightHandSideRangeOfValues range of values
*/
public FilterExpressionElement(SushiTreeElement<Serializable> parent, int id, FilterExpressionOperatorEnum content, String leftHandSideExpression, RangeElement rightHandSideRangeOfValues) {
super(parent, id, content);
assert((content == FilterExpressionOperatorEnum.IN) || (content == FilterExpressionOperatorEnum.NOT_IN));
this.leftHandSideExpression = leftHandSideExpression;
this.rightHandSideRangeOfValues = rightHandSideRangeOfValues;
}
private void init() {
this.leftHandSideExpression = new String();
this.rightHandSideExpression = new String();
this.rightHandSideListOfValues = new ArrayList<String>();
this.rightHandSideRangeOfValues = new RangeElement();
this.rightHandSideRangeBased = true;
}
public String getLeftHandSideExpression() {
return leftHandSideExpression;
}
public void setLeftHandSideExpression(String leftHandSideExpression) {
this.leftHandSideExpression = leftHandSideExpression;
}
public String getRightHandSideExpression() {
return rightHandSideExpression;
}
public void setRightHandSideExpression(String rightHandSideExpression) {
this.rightHandSideExpression = rightHandSideExpression;
}
public List<String> getRightHandSideListOfValues() {
return rightHandSideListOfValues;
}
public void setRightHandSideListOfValues(List<String> rightHandSideListOfValues) {
this.rightHandSideListOfValues = rightHandSideListOfValues;
}
public RangeElement getRightHandSideRangeOfValues() {
return rightHandSideRangeOfValues;
}
public void setRightHandSideRangeOfValues(RangeElement rightHandSideRangeOfValues) {
this.rightHandSideRangeOfValues = rightHandSideRangeOfValues;
}
public boolean isRightHandSideRangeBased() {
return rightHandSideRangeBased;
}
public void setRightHandSideRangeBased(boolean rightHandSideRangeBased) {
this.rightHandSideRangeBased = rightHandSideRangeBased;
}
}