All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ebay.jetstream.event.processor.esper.EPL Maven / Gradle / Ivy

The newest version!
/*
Pulsar
Copyright (C) 2013-2015 eBay Software Foundation
Licensed under the GPL v2 license.  See LICENSE for full terms.
*/
package com.ebay.jetstream.event.processor.esper;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.jmx.export.annotation.ManagedResource;

import com.ebay.jetstream.config.AbstractNamedBean;
import com.ebay.jetstream.event.JetstreamEvent;
import com.ebay.jetstream.management.Management;
import com.ebay.jetstream.xmlser.Hidden;
import com.ebay.jetstream.xmlser.XSerializable;
import com.espertech.esper.client.EPRuntime;

@ManagedResource(objectName = "Event/Processor", description = "Esper Event Processor Langguage")
public class EPL extends AbstractNamedBean implements Serializable, XSerializable, InitializingBean {

  private static final long serialVersionUID = 1L;

  private final List m_statements = new ArrayList();
  
  private final List m_statementsWithComments = new ArrayList();
  
  private List m_onDemandQueries;

  public void afterPropertiesSet() throws Exception {
    Management.removeBeanOrFolder(getBeanName(), this);
    Management.addBean(getBeanName(), this);
  }

  public List getOnDemandQueries() {
    return m_onDemandQueries;
  }

  /**
   * Gets the EPL statements as a single string block, such as a CDATA block.
   *
   * @return the set of all statements, in order, each separated by semicolon and new-line.
   */
  
  public List getEPLStatements() {
	  return Collections.unmodifiableList(m_statements);
  }

  /**
   * Gets the list of EPL statements. 
   *
   * @return the list of all statements.
   */
  @Hidden
  public List getStatements() {
    return Collections.unmodifiableList(m_statements);
  }

  public void processOnDemandQueries(EPRuntime runtime, int workerId, JetstreamEvent originalEvent) {
    List onDemandQueries = getOnDemandQueries();
    if (onDemandQueries != null) {
      for (OnDemandQuery onDemandQuery : onDemandQueries) {
        onDemandQuery.process(runtime, workerId, originalEvent);
      }
    }
  }

  public void setOnDemandQueries(List onDemandQueries) {
    m_onDemandQueries = onDemandQueries;
    if (onDemandQueries != null) {
      for (OnDemandQuery onDemandQuery : onDemandQueries) {
        if (onDemandQuery == null) {
          throw new IllegalArgumentException("onDemandQueries bean must contain at least one 'OnDemandQuery' bean");
        }
        onDemandQuery.validate();
      }
    }
  }

  /**
   * Parses a single String containing a semicolon delimited list of EPL statements.
   *
   * @param statementBlock
   *          the String containing all statements, with each statement separated by a semicolon.
   */
  
  public void setStatementBlock(String statementBlock) {
	    // TODO: better stmt delimiter parsing (e.g. skip ';' in a string or comment)
	     m_statements.clear();
	     m_statementsWithComments.clear();
	     String noncomment = "";
	     
	     /**
	      * This pattern removes statements with comments. 
	      */
	     if(statementBlock.contains("/*")){
	    	 Pattern p = Pattern.compile("/\\*(.*?)\\*/", Pattern.MULTILINE | Pattern.DOTALL);
	    	 Matcher m = p.matcher(statementBlock);
	    	 while (m.find()) {
	    		 noncomment  = m.replaceAll("");
	    	 }
	     }else {
	    	 noncomment = statementBlock ;
	     }
	     
	     
		 String pattern = "(?s);(?=(?:(?:.*?(? 0) {
	          m_statements.add(trimmed);
	      }
	    }
	  }

  /**
   * Sets the list of EPL statements.
   *
   * @param statements
   *          the list of EPL statements.
   */
  public void setStatements(List statements) {
    m_statements.clear();
    m_statements.addAll(statements);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy