summaryrefslogtreecommitdiff
path: root/calamus-engine/src/main/java/io/trygvis/calamus/engine/domain/ProcessTrigger.java
diff options
context:
space:
mode:
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.java51
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);
+ }
+}