summaryrefslogtreecommitdiff
path: root/calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java')
-rw-r--r--calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java b/calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java
new file mode 100644
index 0000000..ab111d7
--- /dev/null
+++ b/calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java
@@ -0,0 +1,111 @@
+package io.trygvis.calamus.engine;
+
+import io.trygvis.calamus.engine.domain.Artifact;
+import io.trygvis.calamus.engine.domain.Process;
+import io.trygvis.calamus.engine.domain.ProcessTrigger;
+import org.kie.api.runtime.KieSession;
+import org.slf4j.Logger;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallbackWithoutResult;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.TextMessage;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Map;
+import java.util.Properties;
+
+import static java.util.Collections.singletonMap;
+import static org.slf4j.LoggerFactory.getLogger;
+
+public class NexusNewArtifactMessageListener implements MessageListener {
+ private final Logger log = getLogger(getClass());
+
+ private final TransactionTemplate transactionTemplate;
+ private final EntityManagerFactory entityManagerFactory;
+ private final KieSession session;
+
+ public NexusNewArtifactMessageListener(TransactionTemplate transactionTemplate, EntityManagerFactory entityManagerFactory, KieSession session) {
+ this.transactionTemplate = transactionTemplate;
+ this.entityManagerFactory = entityManagerFactory;
+ this.session = session;
+ }
+
+ @Override
+ public void onMessage(Message message) {
+ if (!(message instanceof TextMessage)) {
+ return;
+ }
+
+ try {
+ TextMessage m = (TextMessage) message;
+ Properties p = new Properties();
+ p.load(new StringReader(m.getText()));
+
+ String repository = p.getProperty("repository");
+ String groupId = p.getProperty("groupId");
+ String artifactId = p.getProperty("artifactId");
+ String version = p.getProperty("version");
+ String classifier = p.getProperty("classifier");
+ String extension = p.getProperty("extension");
+
+ log.info("Artifact event: groupId={}, artifactId={}, version={}, classifier={}, extension={}", groupId, artifactId, version, classifier, extension);
+
+ transactionTemplate.execute(new TransactionCallbackWithoutResult() {
+ @Override
+ protected void doInTransactionWithoutResult(TransactionStatus status) {
+ processMessage(groupId, artifactId, version, classifier, extension);
+ }
+ });
+ } catch (JMSException | IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void processMessage(String groupId, String artifactId, String version, String classifier, String extension) {
+ // Check for any processes that will be started because of this
+ EntityManager entityManager = entityManagerFactory.createEntityManager();
+
+ TypedQuery<Artifact> query = entityManager.createQuery("FROM Artifact WHERE groupId=:groupId AND artifactId=:artifactId AND version=:version AND extension=:extension", Artifact.class);
+ query.setParameter("groupId", groupId);
+ query.setParameter("artifactId", artifactId);
+ query.setParameter("version", version);
+ query.setParameter("extension", extension);
+ Artifact artifact;
+ try {
+ artifact = query.getSingleResult();
+ log.info("Existing artifact: {}", artifact);
+ } catch (NoResultException e) {
+ artifact = new Artifact(groupId, artifactId, version, classifier, extension);
+ log.info("New artifact: {}", artifact);
+ entityManager.persist(artifact);
+ }
+
+ for (Process process : entityManager.createQuery("FROM Process", Process.class).getResultList()) {
+ System.out.println("process.name = " + process.getName());
+
+ for (ProcessTrigger trigger : process.getProcessTriggers()) {
+ System.out.println("trigger.getMvel() = " + trigger.getMvel());
+ boolean match = trigger.matches(artifact);
+ System.out.println("match = " + match);
+
+ Map<String, Object> parameters = singletonMap("artifact", artifact);
+ session.startProcess(process.getJbpmProcessId(), parameters);
+ }
+ }
+
+ /*
+ String type;
+ Object event;
+ long processInstanceId;
+ jbpm.signalEvent(type, event, processInstanceId);
+ */
+ }
+}