diff options
Diffstat (limited to 'calamus-engine/src/main/java/io/trygvis/engine/domain')
3 files changed, 83 insertions, 0 deletions
diff --git a/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java b/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java index 922376b..2fb9beb 100644 --- a/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java +++ b/calamus-engine/src/main/java/io/trygvis/engine/domain/Artifact.java @@ -26,6 +26,17 @@ public class Artifact extends AbstractEntity { @Column(length = 100, nullable = false) private String extension; + protected Artifact() { + } + + public Artifact(String groupId, String artifactId, String version, String classifier, String extension) { + this.groupId = groupId; + this.artifactId = artifactId; + this.version = version; + this.classifier = classifier; + this.extension = extension; + } + public String getGroupId() { return groupId; } diff --git a/calamus-engine/src/main/java/io/trygvis/engine/domain/Process.java b/calamus-engine/src/main/java/io/trygvis/engine/domain/Process.java new file mode 100644 index 0000000..16192f2 --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/domain/Process.java @@ -0,0 +1,25 @@ +package io.trygvis.engine.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Process extends AbstractEntity { + + @Column(length = 100, nullable = false) + private String name; + + @OneToMany + private List<ProcessTrigger> processTriggers = new ArrayList<>(); + + public String getName() { + return name; + } + + public List<ProcessTrigger> getProcessTriggers() { + return processTriggers; + } +} diff --git a/calamus-engine/src/main/java/io/trygvis/engine/domain/ProcessTrigger.java b/calamus-engine/src/main/java/io/trygvis/engine/domain/ProcessTrigger.java new file mode 100644 index 0000000..00b1603 --- /dev/null +++ b/calamus-engine/src/main/java/io/trygvis/engine/domain/ProcessTrigger.java @@ -0,0 +1,47 @@ +package io.trygvis.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 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); + } +} |