/** * Project: EnTiMid * Copyright: INRIA/IRISA 2011 * Contributor(s) : * Author: barais */ package org.kevoree.library.esper; import org.kevoree.annotation.*; import org.kevoree.framework.AbstractComponentType; import org.kevoree.framework.MessagePort; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * This Kevoree component encapsulates JS. * * @author Olivier Barais * @copyright INRIA */ @Provides({@ProvidedPort(name = "inport", type = PortType.MESSAGE)}) @Requires({@RequiredPort(name = "outport", type = PortType.MESSAGE, needCheckDependency = false), @RequiredPort(name = "booleanoutport", type = PortType.MESSAGE, needCheckDependency = false) }) @DictionaryType({@DictionaryAttribute(name = "code")}) @Library(name = "JavaSE") @ComponentType public class JavaScriptComponent extends AbstractComponentType { private static final Logger logger = LoggerFactory.getLogger(JavaScriptComponent.class); private String code; private ScriptEngine jsEngine; @Start public void start () { code = (String) this.getDictionary().get("code").toString(); ScriptEngineManager mgr = new ScriptEngineManager(); jsEngine = mgr.getEngineByName("JavaScript"); } @Stop public void stop () { } @Update public void update () { } @Port(name = "inport") public void port1 (Object msg) { try { jsEngine.put("msg", msg); Object o = jsEngine.eval(code); out(o); booleanout(o); } catch (ScriptException ex) { // ex.printStackTrace(); logger.warn("Unable to evaluate the received message", ex); } } public void out (Object o) { if (this.isPortBinded("outport")) { this.getPortByName("outport", MessagePort.class).process(o); } } public void booleanout (Object o) { if (Boolean.TRUE.equals(o)) { if (this.isPortBinded("booleanoutport")) { this.getPortByName("booleanoutport", MessagePort.class) .process(true); } } } }