package sushi.transformation.element; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; 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 pattern operators. * A range element is required for REPEAT and UNTIL pattern operators. * Distinct attributes are required for the EVERY-DISTINCT pattern operator. * * @see PatternOperatorEnum */ @Entity @DiscriminatorValue("PO") public class PatternOperatorElement extends SushiTreeElement<Serializable> implements Serializable { private static final long serialVersionUID = -9184705192436364035L; @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name="RangeElement_ID") private RangeElement rangeElement; @ElementCollection @CollectionTable(name = "DistinctAttributes", joinColumns = @JoinColumn(name = "PatternOperatorElement_ID")) @Column(name = "attribute") private List<String> distinctAttributes; public PatternOperatorElement() { super(); this.rangeElement = new RangeElement(); this.distinctAttributes = new ArrayList<String>(); } /** * Constructor. * * @param id the identifier * @param content pattern operator */ public PatternOperatorElement(int id, PatternOperatorEnum content) { super(id, content); this.rangeElement = new RangeElement(); this.distinctAttributes = new ArrayList<String>(); } /** * Constructor. * * @param parent * @param id the identifier * @param content pattern operator */ public PatternOperatorElement(SushiTreeElement<Serializable> parent, int id, PatternOperatorEnum content) { super(parent, id, content); this.rangeElement = new RangeElement(); this.distinctAttributes = new ArrayList<String>(); } public RangeElement getRangeElement() { return rangeElement; } public void setRangeElement(RangeElement rangeElement) { this.rangeElement = rangeElement; } public List<String> getDistinctAttributes() { return distinctAttributes; } public void setDistinctAttributes(List<String> distinctAttributes) { this.distinctAttributes = distinctAttributes; } }