diff options
Diffstat (limited to 'calamus-engine/src/main/java/io/trygvis/calamus/engine/domain/ProcessTrigger.java')
-rw-r--r-- | calamus-engine/src/main/java/io/trygvis/calamus/engine/domain/ProcessTrigger.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/calamus-engine/src/main/java/io/trygvis/calamus/engine/domain/ProcessTrigger.java b/calamus-engine/src/main/java/io/trygvis/calamus/engine/domain/ProcessTrigger.java new file mode 100644 index 0000000..b26f6ca --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/calamus/engine/domain/ProcessTrigger.java @@ -0,0 +1,51 @@ +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<String, Object> vars = new HashMap<>(); + vars.put("artifact", artifact); + return MVEL.executeExpression(getExpression(), vars, Boolean.class); + } +} |