package sushi.transformation.element.externalknowledge; import java.util.HashMap; import java.util.Map; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.MapKeyColumn; import javax.persistence.Table; import sushi.event.SushiEventType; import sushi.event.attribute.SushiAttribute; import sushi.persistence.Persistable; /** * An external knowledge expression determines the value to be fetched from the database. * External knowledge must be stored in an event format before usage. * Values from occurred events may be retrieved by a external knowledge expression as well. * The value is determined by a event type, the attribute of the value and criteria attributes and values * to find the right value. * */ @Entity @Table(name = "ExternalKnowledgeExpression") public class ExternalKnowledgeExpression extends Persistable { private static final long serialVersionUID = -7637140960882882120L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int ID; @ManyToOne @JoinColumn(name = "EventType") private SushiEventType eventType; @ManyToOne @JoinColumn(name = "DesiredAttribute") private SushiAttribute desiredAttribute; @ElementCollection @MapKeyColumn(name = "attribute") @Column(name = "value") @CollectionTable(name="criteriaAttributesAndValues", joinColumns = @JoinColumn(name="criteriaAttributesAndValuesID")) private Map<String, String> criteriaAttributesAndValues; public ExternalKnowledgeExpression() { this.ID = 0; this.eventType = null; this.desiredAttribute = null; this.criteriaAttributesAndValues = new HashMap<String, String>(); } /** * Constructor. * * @param eventType the events of the event type serve as external knowledge * @param desiredAttribute the value of the desired attribute belonging to the event type will be fetched * @param criteriaAttributesAndValues pairs of attributes and values that narrow down the choice of events from which the value can be fetched */ public ExternalKnowledgeExpression(SushiEventType eventType, SushiAttribute desiredAttribute, Map<String, String> criteriaAttributesAndValues) { this(); this.eventType = eventType; this.desiredAttribute = desiredAttribute; this.criteriaAttributesAndValues = criteriaAttributesAndValues; } public int getID() { return ID; } public void setID(int iD) { ID = iD; } public SushiEventType getEventType() { return eventType; } public void setEventType(SushiEventType eventType) { this.eventType = eventType; } public SushiAttribute getDesiredAttribute() { return desiredAttribute; } public void setDesiredAttribute(SushiAttribute desiredAttribute) { this.desiredAttribute = desiredAttribute; } public Map<String, String> getCriteriaAttributesAndValues() { return criteriaAttributesAndValues; } public void setCriteriaAttributesAndValues(Map<String, String> criteriaAttributesAndValues) { this.criteriaAttributesAndValues = criteriaAttributesAndValues; } @Override public ExternalKnowledgeExpression save() { return (ExternalKnowledgeExpression) super.save(); } @Override public ExternalKnowledgeExpression remove() { return (ExternalKnowledgeExpression) super.remove(); } }