package io.trygvis.engine; import io.trygvis.engine.domain.Artifact; import io.trygvis.engine.domain.Process; import io.trygvis.engine.domain.ProcessTrigger; import org.kie.api.runtime.Environment; import org.kie.api.runtime.EnvironmentName; import org.kie.internal.runtime.StatefulKnowledgeSession; import org.slf4j.Logger; 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.EntityTransaction; import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import java.io.IOException; import java.io.StringReader; import java.util.Properties; import static org.slf4j.LoggerFactory.getLogger; public class NexusNewArtifactMessageListener implements MessageListener { private final Logger log = getLogger(getClass()); private final EntityManagerFactory entityManagerFactory; private final StatefulKnowledgeSession session; public NexusNewArtifactMessageListener(EntityManagerFactory entityManagerFactory, StatefulKnowledgeSession session) { 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); // 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(); } catch (NoResultException e) { log.info("New artifact!"); artifact = new Artifact(groupId, artifactId, version, classifier, extension); 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); } } /* String type; Object event; long processInstanceId; jbpm.signalEvent(type, event, processInstanceId); */ } catch (JMSException | IOException e) { e.printStackTrace(); } } }