diff --git a/camunda/camunda.iml b/camunda/camunda.iml index 55e3152042636a4f6cf8fea26e96b8456983d9ba..d78afcbdcb5d085a7a4a519968f0e60c0acfd8ef 100644 --- a/camunda/camunda.iml +++ b/camunda/camunda.iml @@ -14,7 +14,7 @@ </configuration> </facet> </component> - <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> <output url="file://$MODULE_DIR$/target/classes" /> <output-test url="file://$MODULE_DIR$/target/test-classes" /> <content url="file://$MODULE_DIR$"> @@ -126,5 +126,8 @@ <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.9.7" level="project" /> <orderEntry type="library" name="Maven: org.camunda.bpm.webapp:camunda-webapp-webjar:7.10.0" level="project" /> <orderEntry type="library" name="Maven: com.h2database:h2:1.4.197" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.6" level="project" /> + <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.10" level="project" /> + <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" /> </component> </module> \ No newline at end of file diff --git a/camunda/pom.xml b/camunda/pom.xml index 41330787ab30b64e41ffbe86d01f8780085b1da0..9a967b4d8ff36df1639202d15c45c318aa599702 100644 --- a/camunda/pom.xml +++ b/camunda/pom.xml @@ -26,10 +26,24 @@ <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>4.5.6</version> + </dependency> </dependencies> <build> <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.7.0</version> + <configuration> + <source>8</source> + <target>8</target> + </configuration> + </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> diff --git a/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/Application.java b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/Application.java index 14bc26a78f1427eaa004381afe8a0b7cc1de666f..f3792fda8e23845e573ef6ea1a3beec5f208594d 100644 --- a/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/Application.java +++ b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/Application.java @@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { + public static void main(String... args) { SpringApplication.run(Application.class, args); } diff --git a/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/RfidTimerReaderService.java b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/RfidTimerReaderService.java new file mode 100644 index 0000000000000000000000000000000000000000..e4719fe1af640a98b27aef21585896c8ff594ff6 --- /dev/null +++ b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/RfidTimerReaderService.java @@ -0,0 +1,62 @@ +package de.unikoblenz.fgbas.bs.bpm.iot; + +import de.unikoblenz.fgbas.bs.bpm.iot.service.RfidProductService; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.util.EntityUtils; +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.camunda.bpm.engine.impl.util.json.JSONArray; +import org.camunda.bpm.engine.impl.util.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.apache.http.impl.client.HttpClients; + +public class RfidTimerReaderService implements JavaDelegate { + + public static final String GET_HTTP_RFID_API = "http://localhost/postserver/rfidtest.json"; + + private final Logger LOGGER = LoggerFactory.getLogger(RfidTimerReaderService.class); + + public void execute(DelegateExecution delegateExecution) throws Exception { + LOGGER.info("Amazing IoT api call...."); + Optional<HttpResponse> response = sendHTTPRequest(); + if (response.isPresent()) { + String result = EntityUtils.toString(response.get().getEntity()); + LOGGER.info("Response: " + result); + JSONArray listOfRfidTags = new JSONArray(result); + for (int i = 0; i < listOfRfidTags.length(); i++) { + JSONObject jo = listOfRfidTags.getJSONObject(i); + String rfidTag = jo.getString("tagId"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = sdf.parse(jo.getString("timeStamp")); + LOGGER.info("Starting product review with rfid tag {" + rfidTag + "}"); + // Create new Process + Map<String, Object> variables = new HashMap<String, Object>(); + variables.put("rfidTag", rfidTag); + variables.put("product", RfidProductService.getProductByRfidTag(rfidTag)); + delegateExecution.getProcessEngineServices().getRuntimeService() + .startProcessInstanceByKey("Process_2", variables); + + } + } + } + + private Optional<HttpResponse> sendHTTPRequest() { + LOGGER.info("Message send:"); + HttpClient client = HttpClients.createDefault(); + HttpGet get = new HttpGet(GET_HTTP_RFID_API); + get.setHeader("content-type", "application/json"); + try { + return Optional.of(client.execute(get)); + } catch (Exception e) { + return Optional.empty(); + } + } +} diff --git a/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/TestService.java b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/TestService.java deleted file mode 100644 index a23ca4f85c7515b4107ce6c6f1a52489e76a6ca8..0000000000000000000000000000000000000000 --- a/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/TestService.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.unikoblenz.fgbas.bs.bpm.iot; - -import org.camunda.bpm.engine.delegate.DelegateExecution; -import org.camunda.bpm.engine.delegate.JavaDelegate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class TestService implements JavaDelegate { - - private final Logger LOGGER = LoggerFactory.getLogger(TestService.class); - - public void execute(DelegateExecution delegateExecution) throws Exception { - LOGGER.info("Amazing IoT api call...."); - } -} diff --git a/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/service/RfidProductService.java b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/service/RfidProductService.java new file mode 100644 index 0000000000000000000000000000000000000000..c92b570c3fdb28b39b284cf2966a26372faf1ef8 --- /dev/null +++ b/camunda/src/main/java/de/unikoblenz/fgbas/bs/bpm/iot/service/RfidProductService.java @@ -0,0 +1,22 @@ +package de.unikoblenz.fgbas.bs.bpm.iot.service; + +import java.util.HashMap; +import java.util.Map; + +public class RfidProductService { + + private static Map<String, String> rifdProductMap = new HashMap<>(); + + static { + rifdProductMap.put("12345678", "Pizza"); + rifdProductMap.put("87654321", "Doener"); + } + + private RfidProductService() { + // Nothing + } + + public static String getProductByRfidTag(String tagId) { + return rifdProductMap.getOrDefault(tagId, "No product found"); + } +} diff --git a/camunda/src/main/resources/META-INF/diagram_1.bpmn b/camunda/src/main/resources/META-INF/diagram_1.bpmn index 5041e52fceffb305688e0efea4e2f01bb8ad14ab..0ff417326347e674902dc27482a002ccbe0ba95c 100644 --- a/camunda/src/main/resources/META-INF/diagram_1.bpmn +++ b/camunda/src/main/resources/META-INF/diagram_1.bpmn @@ -8,7 +8,7 @@ <bpmn:endEvent id="EndEvent_11c5iyc"> <bpmn:incoming>SequenceFlow_1wfucxl</bpmn:incoming> </bpmn:endEvent> - <bpmn:serviceTask id="Task_1ls08zd" name="Call IoT and do amazing stuff" camunda:class="de.unikoblenz.fgbas.bs.bpm.iot.TestService"> + <bpmn:serviceTask id="Task_1ls08zd" name="Call IoT and do amazing stuff" camunda:class="de.unikoblenz.fgbas.bs.bpm.iot.RfidTimerReaderService"> <bpmn:incoming>SequenceFlow_0nwksx9</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0cblkjr</bpmn:outgoing> </bpmn:serviceTask> @@ -19,7 +19,7 @@ <bpmn:outgoing>SequenceFlow_0nwksx9</bpmn:outgoing> </bpmn:exclusiveGateway> <bpmn:sequenceFlow id="SequenceFlow_0nwksx9" sourceRef="ExclusiveGateway_09r95mp" targetRef="Task_1ls08zd" /> - <bpmn:intermediateCatchEvent id="IntermediateThrowEvent_1hvhn31" name="30 sec"> + <bpmn:intermediateCatchEvent id="IntermediateThrowEvent_1hvhn31" name="1 min"> <bpmn:incoming>SequenceFlow_0cblkjr</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1xiqxap</bpmn:outgoing> <bpmn:timerEventDefinition> @@ -62,7 +62,7 @@ <bpmndi:BPMNShape id="IntermediateCatchEvent_0j8ya9i_di" bpmnElement="IntermediateThrowEvent_1hvhn31"> <dc:Bounds x="553" y="204" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="555" y="247" width="33" height="14" /> + <dc:Bounds x="558" y="247" width="27" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1xiqxap_di" bpmnElement="SequenceFlow_1xiqxap"> diff --git a/camunda/src/main/resources/META-INF/diagram_2.bpmn b/camunda/src/main/resources/META-INF/diagram_2.bpmn new file mode 100644 index 0000000000000000000000000000000000000000..656c1258b652683d3afd6ebbf729adcd74d6d885 --- /dev/null +++ b/camunda/src/main/resources/META-INF/diagram_2.bpmn @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_0m41206" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="2.2.4"> + <bpmn:process id="Process_2" isExecutable="true"> + <bpmn:startEvent id="StartEvent_1"> + <bpmn:outgoing>SequenceFlow_1c5kgwq</bpmn:outgoing> + </bpmn:startEvent> + <bpmn:endEvent id="EndEvent_11c5iyc"> + <bpmn:incoming>SequenceFlow_1mmk7vf</bpmn:incoming> + </bpmn:endEvent> + <bpmn:sequenceFlow id="SequenceFlow_1c5kgwq" sourceRef="StartEvent_1" targetRef="Task_1lt29o9" /> + <bpmn:sequenceFlow id="SequenceFlow_1mmk7vf" sourceRef="Task_1lt29o9" targetRef="EndEvent_11c5iyc" /> + <bpmn:userTask id="Task_1lt29o9" name="Product Review"> + <bpmn:extensionElements> + <camunda:formData> + <camunda:formField id="rfidTag" label="Rfid Tag" type="string" /> + <camunda:formField id="product" label="Product" type="string" /> + <camunda:formField id="productAccept" label="Accept?" type="boolean" defaultValue="false" /> + </camunda:formData> + </bpmn:extensionElements> + <bpmn:incoming>SequenceFlow_1c5kgwq</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_1mmk7vf</bpmn:outgoing> + </bpmn:userTask> + </bpmn:process> + <bpmndi:BPMNDiagram id="BPMNDiagram_1"> + <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_2"> + <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"> + <dc:Bounds x="118" y="117" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_11c5iyc_di" bpmnElement="EndEvent_11c5iyc"> + <dc:Bounds x="397" y="117" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="SequenceFlow_1c5kgwq_di" bpmnElement="SequenceFlow_1c5kgwq"> + <di:waypoint x="154" y="135" /> + <di:waypoint x="223" y="135" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_1mmk7vf_di" bpmnElement="SequenceFlow_1mmk7vf"> + <di:waypoint x="323" y="135" /> + <di:waypoint x="397" y="135" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="UserTask_09tmhqu_di" bpmnElement="Task_1lt29o9"> + <dc:Bounds x="223" y="95" width="100" height="80" /> + </bpmndi:BPMNShape> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</bpmn:definitions>