From fd681e2c6663652be02a31f7b40da4cd283ab37e Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 21 Apr 2014 09:01:00 +0200 Subject: wip --- .../engine/NexusNewArtifactMessageListener.java | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java (limited to 'calamus-engine/src/main/java/io/trygvis/calamus/engine/NexusNewArtifactMessageListener.java') 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 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 parameters = singletonMap("artifact", artifact); + session.startProcess(process.getJbpmProcessId(), parameters); + } + } + + /* + String type; + Object event; + long processInstanceId; + jbpm.signalEvent(type, event, processInstanceId); + */ + } +} -- cgit v1.2.3