package sushi.query.bpmn; import sushi.bpmn.decomposition.Component; import sushi.bpmn.element.AbstractBPMNElement; import sushi.query.PatternQueryType; import sushi.query.SushiPatternQuery; import sushi.query.SushiQueryTypeEnum; /** * This query factory creates queries for components with sequential elements. * @author micha */ public class SequenceQueryFactory extends AbstractPatternQueryFactory { /** * Constructor to create sequential queries with a query factory. * @param patternQueryGenerator */ public SequenceQueryFactory(PatternQueryGenerator patternQueryGenerator) { super(patternQueryGenerator); } @Override protected SushiPatternQuery generateQuery(AbstractBPMNElement element, AbstractBPMNElement catchingMonitorableElement, SushiPatternQuery parentQuery) { if(element instanceof Component){ Component component = (Component) element; //Operator: -> SushiPatternQuery query = new SushiPatternQuery(generateQueryName("Sequence"), null, SushiQueryTypeEnum.LIVE, PatternQueryType.SEQUENCE, this.orderElements(component)); String queryString = generateQueryString(component, EsperPatternOperators.SEQUENCE, catchingMonitorableElement, query); query.setQueryString(queryString); addQueryRelationship(parentQuery, query); System.out.println(query.getTitle() + ": " + query.getQueryString()); registerQuery(query); if(query != null && query.getListener() != null){ query.getListener().setCatchingElement(catchingMonitorableElement); } return query; } else { System.err.println("Input element should be a component for a sequential query!"); return null; } } }