package sushi.bpmn.monitoringpoint;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Query;
import javax.persistence.Table;
import sushi.bpmn.element.AbstractBPMNElement;
import sushi.event.SushiEventType;
import sushi.persistence.Persistable;
import sushi.persistence.Persistor;
/**
* A monitoring point is a binding between a monitorable {@link AbstractBPMNElement}
* and a {@link SushiEventType} to monitor the execution of a BPMN process with Esper.
* @author micha
*/
@Entity
@Table(name = "MonitoringPoint")
public class MonitoringPoint extends Persistable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
protected int ID;
@Column(name = "stateTransitionType")
private MonitoringPointStateTransition monitoringPointstateTransitionType;
@ManyToOne(cascade = CascadeType.PERSIST)
private SushiEventType eventType;
@Column(name = "eventTypeCondition")
private String condition;
public MonitoringPoint(){
ID = 0;
}
public MonitoringPoint(SushiEventType eventType, MonitoringPointStateTransition stateTransitionType, String condition){
this.eventType = eventType;
this.monitoringPointstateTransitionType = stateTransitionType;
this.condition = condition;
}
public MonitoringPointStateTransition getStateTransitionType() {
return monitoringPointstateTransitionType;
}
public void setStateTransitionType(MonitoringPointStateTransition stateTransitionType) {
this.monitoringPointstateTransitionType = stateTransitionType;
}
public SushiEventType getEventType() {
return eventType;
}
public void setEventType(SushiEventType eventType) {
this.eventType = eventType;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public int getID() {
return ID;
}
@Override
public String toString(){
return "MonitoringPoint: " + getStateTransitionType();
}
/**
* Returns all monitoring points from the database, which belong to the given event type.
* @param eventType
* @return
*/
@SuppressWarnings("unchecked")
public static List<MonitoringPoint> findByEventType(SushiEventType eventType){
Query query = Persistor.getEntityManager().createNativeQuery("SELECT * FROM MonitoringPoint WHERE EVENTTYPE_ID = '" + eventType.getID() + "'", MonitoringPoint.class);
return query.getResultList();
}
}