package io.trygvis.calamus.engine.domain; import org.mvel2.MVEL; import org.mvel2.ParserContext; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.ManyToOne; import java.io.Serializable; import java.util.HashMap; import java.util.Map; @Entity public class ProcessTrigger extends AbstractEntity { @ManyToOne private Process process; @Column(length = 1000) private String mvel; transient Serializable expression; public Process getProcess() { return process; } public String getMvel() { return mvel; } // ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- private Serializable getExpression() { if (expression != null) { return expression; } ParserContext ctx = new ParserContext(); ctx.setStrongTyping(true); ctx.addInput("artifact", Artifact.class); return expression = MVEL.compileExpression(mvel, ctx); } public boolean matches(Artifact artifact) { Map vars = new HashMap<>(); vars.put("artifact", artifact); return MVEL.executeExpression(getExpression(), vars, Boolean.class); } }