Parcourir la source

initial import

Grega Bremec il y a 2 ans
commit
e97df657b2

+ 8 - 0
.gitignore

@@ -0,0 +1,8 @@
+.*.sw?
+.DS_Store
+.classpath
+.project
+.settings/
+.vscode/
+target/
+tmp/

+ 126 - 0
pom.xml

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>com.redhat.training</groupId>
+  <artifactId>order-offer-staged</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>order-offer-staged</name>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
+    <kie.version>7.59.0.Final-redhat-00010</kie.version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.kie</groupId>
+        <artifactId>kie-bom</artifactId>
+        <version>${kie.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.drools</groupId>
+        <artifactId>drools-bom</artifactId>
+        <version>${kie.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.jbpm</groupId>
+        <artifactId>jbpm-bom</artifactId>
+        <version>${kie.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.kie</groupId>
+      <artifactId>kie-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-mvel</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-decisiontables</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jbpm</groupId>
+      <artifactId>jbpm-bpmn2</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
+      <plugins>
+        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+        </plugin>
+        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.8.0</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.22.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>3.0.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.5.2</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.8.2</version>
+        </plugin>
+        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.7.1</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-project-info-reports-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
+        <!-- <plugin>
+          <groupId>org.kie</groupId>
+          <artifactId>kie-maven-plugin</artifactId>
+          <version>${kie.version}</version>
+        </plugin> -->
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>

+ 57 - 0
src/main/java/com/redhat/training/App.java

@@ -0,0 +1,57 @@
+package com.redhat.training;
+
+import com.redhat.training.orders.Customer;
+import com.redhat.training.orders.Item;
+import com.redhat.training.orders.Order;
+import com.redhat.training.orders.SpecialOffer;
+
+import org.kie.api.KieServices;
+import org.kie.api.runtime.KieSession;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        KieServices ks = KieServices.Factory.get();
+        KieSession s = ks.getKieClasspathContainer().newKieSession();
+
+        Customer c = new Customer();
+        c.setName("John Doe");
+        c.setTotalSpent(15000.00);
+
+        Order o = new Order();
+        o.setCustomer(c);
+
+        Item i1 = new Item();
+        i1.setName("Widget");
+        i1.setPrice(10.00);
+        Item i2 = new Item();
+        i2.setName("Gadget");
+        i2.setPrice(100.00);
+
+        o.addOrderItem(i1, 10);
+        o.addOrderItem(i2, 55);
+
+        SpecialOffer so = new SpecialOffer();
+        so.setDescription("Christmas Discount");
+        so.setDiscount(5);
+
+        s.insert(o);
+        s.insert(so);
+
+        s.startProcess("ruleFlow");
+        s.fireAllRules();
+
+        System.out.println("Customer " + c.getName() + " has loyalty level of " + c.getLoyaltyLevel());
+        System.out.println("Order " + o.toString() + " has a discount of " + o.getOverallDiscount());
+    }
+
+    public static double setFinalPrice(Order o) {
+        o.setTotalPrice(o.calculateTotalPrice() * (double)(1 - (double)o.getOverallDiscount() / 100));
+        return o.getTotalPrice();
+    }
+}

+ 26 - 0
src/main/java/com/redhat/training/orders/Customer.java

@@ -0,0 +1,26 @@
+package com.redhat.training.orders;
+
+public class Customer {
+    private String name;
+    private LoyaltyLevel loyaltyLevel;
+    private double totalSpent;
+
+    public String getName() {
+        return name;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+    public LoyaltyLevel getLoyaltyLevel() {
+        return loyaltyLevel;
+    }
+    public void setLoyaltyLevel(LoyaltyLevel loyalty) {
+        this.loyaltyLevel = loyalty;
+    }
+    public double getTotalSpent() {
+        return totalSpent;
+    }
+    public void setTotalSpent(double totalSpent) {
+        this.totalSpent = totalSpent;
+    }
+}

+ 18 - 0
src/main/java/com/redhat/training/orders/Item.java

@@ -0,0 +1,18 @@
+package com.redhat.training.orders;
+
+public class Item {
+    private double price;
+    private String name;
+    public double getPrice() {
+        return price;
+    }
+    public void setPrice(double price) {
+        this.price = price;
+    }
+    public String getName() {
+        return name;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 8 - 0
src/main/java/com/redhat/training/orders/LoyaltyLevel.java

@@ -0,0 +1,8 @@
+package com.redhat.training.orders;
+
+public enum LoyaltyLevel {
+    NONE,
+    BRONZE,
+    SILVER,
+    GOLD;
+}

+ 61 - 0
src/main/java/com/redhat/training/orders/Order.java

@@ -0,0 +1,61 @@
+package com.redhat.training.orders;
+
+import java.util.HashMap;
+
+public class Order {
+    private Customer customer;
+
+    // Item, quantity
+    private HashMap<Item, Integer> orderItems = new HashMap<>();
+    // private HashMap<Item, Integer> perItemDiscounts;
+
+    private int overallDiscount;
+    private double totalPrice;
+
+    public Customer getCustomer() {
+        return customer;
+    }
+    public void setCustomer(Customer customer) {
+        this.customer = customer;
+    }
+    public HashMap<Item, Integer> getOrderItems() {
+        return orderItems;
+    }
+    public void setOrderItems(HashMap<Item, Integer> orderItems) {
+        this.orderItems = orderItems;
+    }
+    public void addOrderItem(Item item, int quantity) {
+        if (this.orderItems.containsKey(item)) {
+            var qty = this.orderItems.get(item).intValue();
+            qty += quantity;
+            this.orderItems.put(item, qty);
+        } else {
+            this.orderItems.put(item, quantity);
+        }
+    }
+    public int getOverallDiscount() {
+        return overallDiscount;
+    }
+    public void setOverallDiscount(int overallDiscount) {
+        this.overallDiscount = overallDiscount;
+    }
+    public double getTotalPrice() {
+        return totalPrice;
+    }
+    public void setTotalPrice(double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public double calculateTotalPrice() {
+        double total = 0.0;
+        for (Item i : this.orderItems.keySet()) {
+            //        quantity                *  per-item-price
+            total += ((double)this.orderItems.get(i) * i.getPrice());
+        }
+        return total;
+    }
+
+    public static double totalPrice(double totalWoDiscount, int overallDiscount) {
+        return totalWoDiscount * (double)(1 - (double)overallDiscount / 100);
+    }
+}

+ 18 - 0
src/main/java/com/redhat/training/orders/SpecialOffer.java

@@ -0,0 +1,18 @@
+package com.redhat.training.orders;
+
+public class SpecialOffer {
+    private String description;
+    private int discount;
+    public String getDescription() {
+        return description;
+    }
+    public void setDescription(String description) {
+        this.description = description;
+    }
+    public int getDiscount() {
+        return discount;
+    }
+    public void setDiscount(int discount) {
+        this.discount = discount;
+    }
+}

+ 8 - 0
src/main/resources/META-INF/kmodule.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xmlns="http://jboss.org/kie/6.0.0/kmodule">
+
+    <kbase name="orderProcessing" packages="com.redhat.training.orders" default="true">
+        <ksession name="orderSession" default="true"/>
+    </kbase>
+</kmodule>

+ 51 - 0
src/main/resources/com/redhat/training/orders/discount.drl

@@ -0,0 +1,51 @@
+package com.redhat.training.orders
+
+rule "a No Discount for No Loyalty"
+ruleflow-group "discount"
+when
+    o: Order()
+    c: Customer(loyaltyLevel == LoyaltyLevel.NONE) from o.customer
+then
+    o.setOverallDiscount(0);
+    System.out.println("Discount: NONE");
+end
+
+rule "a Discount for Bronze"
+ruleflow-group "discount"
+when
+    o: Order()
+    c: Customer(loyaltyLevel == LoyaltyLevel.BRONZE) from o.customer
+then
+    o.setOverallDiscount(5);
+    System.out.println("Discount: BRONZE (5)");
+end
+
+rule "a Discount for Silver"
+ruleflow-group "discount"
+when
+    o: Order()
+    c: Customer(loyaltyLevel == LoyaltyLevel.SILVER) from o.customer
+then
+    o.setOverallDiscount(10);
+    System.out.println("Discount: SILVER (10)");
+end
+
+rule "a Discount for Gold"
+ruleflow-group "discount"
+when
+    o: Order()
+    c: Customer(loyaltyLevel == LoyaltyLevel.GOLD) from o.customer
+then
+    o.setOverallDiscount(15);
+    System.out.println("Discount: GOLD (15)");
+end
+
+rule "Special Offer Discount"
+ruleflow-group "discount"
+when
+    so: SpecialOffer()
+    o: Order(overallDiscount < so.discount)
+then
+    o.setOverallDiscount(so.getDiscount());
+    System.out.println("Discount: " + so.getDescription() + "! (" + so.getDiscount() + ")");
+end

+ 26 - 0
src/main/resources/com/redhat/training/orders/final-pricing.drl

@@ -0,0 +1,26 @@
+package com.redhat.training.orders
+
+import function com.redhat.training.App.setFinalPrice
+
+rule "Set Order Total"
+ruleflow-group "final-pricing"
+when
+    o: Order(totalPrice == 0.0)
+then
+    double x = setFinalPrice(o);
+    System.out.println("Final: Set total price to " + x);
+    update(o);
+end
+
+rule "Adjust Total Spent"
+ruleflow-group "final-pricing"
+no-loop
+when
+    o: Order(totalPrice > 0.0)
+    c: Customer() from o.customer
+then
+    System.out.println("Final: Old totalSpent: " + c.getTotalSpent());
+    c.setTotalSpent(c.getTotalSpent() + o.getTotalPrice());
+    System.out.println("Final: New totalSpent: " + c.getTotalSpent());
+    update(o);
+end

+ 41 - 0
src/main/resources/com/redhat/training/orders/loyaltylLevel.drl

@@ -0,0 +1,41 @@
+package com.redhat.training.orders
+
+rule "Gold level"
+ruleflow-group "loyalty"
+when
+    o: Order()
+    c: Customer(totalSpent >= 20000) from o.customer
+then
+    c.setLoyaltyLevel(LoyaltyLevel.GOLD);
+    System.out.println("Loyalty: GOLD");
+end
+
+rule "Silver level"
+ruleflow-group "loyalty"
+when
+    o: Order()
+    c: Customer(totalSpent >= 10000, totalSpent < 20000) from o.customer
+then
+    c.setLoyaltyLevel(LoyaltyLevel.SILVER);
+    System.out.println("Loyalty: SILVER");
+end
+
+rule "Bronze level"
+ruleflow-group "loyalty"
+when
+    o: Order()
+    c: Customer(totalSpent >= 5000, totalSpent < 10000) from o.customer
+then
+    c.setLoyaltyLevel(LoyaltyLevel.BRONZE);
+    System.out.println("Loyalty: BRONZE");
+end
+
+rule "No level"
+ruleflow-group "loyalty"
+when
+    o: Order()
+    c: Customer(totalSpent < 5000) from o.customer
+then
+    c.setLoyaltyLevel(LoyaltyLevel.NONE);
+    System.out.println("Loyalty: NONE");
+end

+ 213 - 0
src/main/resources/com/redhat/training/orders/rule-flow.bpmn2

@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpsim="http://www.bpsim.org/schemas/1.0" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:drools="http://www.jboss.org/drools" xmlns:xsi="xsi" id="_NBJhQNOMEDq5KINlO68CJg" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www.jboss.org/drools drools.xsd http://www.bpsim.org/schemas/1.0 bpsim.xsd http://www.omg.org/spec/DD/20100524/DC DC.xsd http://www.omg.org/spec/DD/20100524/DI DI.xsd " exporter="jBPM Process Modeler" exporterVersion="2.0" targetNamespace="http://www.omg.org/bpmn20">
+  <bpmn2:itemDefinition id="__EFD251FE-A9E4-4778-84D2-2D23776B6BEE_namespaceInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__EFD251FE-A9E4-4778-84D2-2D23776B6BEE_modelInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__EFD251FE-A9E4-4778-84D2-2D23776B6BEE_decisionInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__AB87ECC8-D369-4A43-A00B-EE70C8AD3B64_namespaceInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__AB87ECC8-D369-4A43-A00B-EE70C8AD3B64_modelInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__AB87ECC8-D369-4A43-A00B-EE70C8AD3B64_decisionInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__755CF8BC-A303-4EE7-8181-2C2E8020E181_namespaceInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__755CF8BC-A303-4EE7-8181-2C2E8020E181_modelInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__755CF8BC-A303-4EE7-8181-2C2E8020E181_decisionInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB_namespaceInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB_modelInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:itemDefinition id="__AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB_decisionInputXItem" structureRef="java.lang.String"/>
+  <bpmn2:collaboration id="_E96AF999-E189-4555-A806-D7B689D438E6" name="Default Collaboration">
+    <bpmn2:participant id="_EF8D1A93-C7E0-4A1E-BD1C-F656E7F5F156" name="Pool Participant" processRef="ruleFlow"/>
+  </bpmn2:collaboration>
+  <bpmn2:process id="ruleFlow" drools:packageName="com.redhat.training.orders" drools:version="1.0" drools:adHoc="false" name="rule-flow" isExecutable="true" processType="Public">
+    <bpmn2:sequenceFlow id="_B236D665-C4D9-40DA-8CEA-3CB48C5F28D2" sourceRef="_AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB" targetRef="_755CF8BC-A303-4EE7-8181-2C2E8020E181">
+      <bpmn2:extensionElements>
+        <drools:metaData name="isAutoConnection.target">
+          <drools:metaValue><![CDATA[true]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+    </bpmn2:sequenceFlow>
+    <bpmn2:sequenceFlow id="_7BF77305-F355-4E36-86A2-1CC2E79BC1E0" sourceRef="_AB87ECC8-D369-4A43-A00B-EE70C8AD3B64" targetRef="_AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB"/>
+    <bpmn2:sequenceFlow id="_1BA4CDDB-95E7-48D3-994A-211ED41B10A9" sourceRef="_EFD251FE-A9E4-4778-84D2-2D23776B6BEE" targetRef="_AB87ECC8-D369-4A43-A00B-EE70C8AD3B64"/>
+    <bpmn2:sequenceFlow id="_25993DE8-BEE3-4A1C-8F9E-79A8A98C8F0B" sourceRef="_755CF8BC-A303-4EE7-8181-2C2E8020E181" targetRef="_7D87D78E-3B37-4C0F-BF87-3B88ACAD35B5"/>
+    <bpmn2:sequenceFlow id="_E6513DD1-D675-437C-AA9B-A39C7D726EFC" sourceRef="_758143E6-CFDD-483E-A9F5-C2828652DAA8" targetRef="_EFD251FE-A9E4-4778-84D2-2D23776B6BEE"/>
+    <bpmn2:businessRuleTask id="_AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB" drools:ruleFlowGroup="final-pricing" name="Calculate Final Price" implementation="http://www.jboss.org/drools/rule">
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Calculate Final Price]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_7BF77305-F355-4E36-86A2-1CC2E79BC1E0</bpmn2:incoming>
+      <bpmn2:outgoing>_B236D665-C4D9-40DA-8CEA-3CB48C5F28D2</bpmn2:outgoing>
+    </bpmn2:businessRuleTask>
+    <bpmn2:businessRuleTask id="_755CF8BC-A303-4EE7-8181-2C2E8020E181" drools:ruleFlowGroup="loyalty" name="Re-Evaluate Loyalty" implementation="http://www.jboss.org/drools/rule">
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Re-Evaluate Loyalty]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_B236D665-C4D9-40DA-8CEA-3CB48C5F28D2</bpmn2:incoming>
+      <bpmn2:outgoing>_25993DE8-BEE3-4A1C-8F9E-79A8A98C8F0B</bpmn2:outgoing>
+    </bpmn2:businessRuleTask>
+    <bpmn2:businessRuleTask id="_AB87ECC8-D369-4A43-A00B-EE70C8AD3B64" drools:ruleFlowGroup="discount" name="Discounting" implementation="http://www.jboss.org/drools/rule">
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Discounting]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_1BA4CDDB-95E7-48D3-994A-211ED41B10A9</bpmn2:incoming>
+      <bpmn2:outgoing>_7BF77305-F355-4E36-86A2-1CC2E79BC1E0</bpmn2:outgoing>
+    </bpmn2:businessRuleTask>
+    <bpmn2:businessRuleTask id="_EFD251FE-A9E4-4778-84D2-2D23776B6BEE" drools:ruleFlowGroup="loyalty" name="Loyalty Level" implementation="http://www.jboss.org/drools/rule">
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Loyalty Level]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_E6513DD1-D675-437C-AA9B-A39C7D726EFC</bpmn2:incoming>
+      <bpmn2:outgoing>_1BA4CDDB-95E7-48D3-994A-211ED41B10A9</bpmn2:outgoing>
+    </bpmn2:businessRuleTask>
+    <bpmn2:endEvent id="_7D87D78E-3B37-4C0F-BF87-3B88ACAD35B5">
+      <bpmn2:incoming>_25993DE8-BEE3-4A1C-8F9E-79A8A98C8F0B</bpmn2:incoming>
+    </bpmn2:endEvent>
+    <bpmn2:startEvent id="_758143E6-CFDD-483E-A9F5-C2828652DAA8">
+      <bpmn2:outgoing>_E6513DD1-D675-437C-AA9B-A39C7D726EFC</bpmn2:outgoing>
+    </bpmn2:startEvent>
+  </bpmn2:process>
+  <bpmndi:BPMNDiagram>
+    <bpmndi:BPMNPlane bpmnElement="ruleFlow">
+      <bpmndi:BPMNShape id="shape__758143E6-CFDD-483E-A9F5-C2828652DAA8" bpmnElement="_758143E6-CFDD-483E-A9F5-C2828652DAA8">
+        <dc:Bounds height="56" width="56" x="80" y="3"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__7D87D78E-3B37-4C0F-BF87-3B88ACAD35B5" bpmnElement="_7D87D78E-3B37-4C0F-BF87-3B88ACAD35B5">
+        <dc:Bounds height="56" width="56" x="499" y="323"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__EFD251FE-A9E4-4778-84D2-2D23776B6BEE" bpmnElement="_EFD251FE-A9E4-4778-84D2-2D23776B6BEE">
+        <dc:Bounds height="102" width="154" x="216" y="-20"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__AB87ECC8-D369-4A43-A00B-EE70C8AD3B64" bpmnElement="_AB87ECC8-D369-4A43-A00B-EE70C8AD3B64">
+        <dc:Bounds height="102" width="154" x="450" y="-20"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__755CF8BC-A303-4EE7-8181-2C2E8020E181" bpmnElement="_755CF8BC-A303-4EE7-8181-2C2E8020E181">
+        <dc:Bounds height="102" width="154" x="450" y="146"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB" bpmnElement="_AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB">
+        <dc:Bounds height="102" width="154" x="216" y="146"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="edge_shape__758143E6-CFDD-483E-A9F5-C2828652DAA8_to_shape__EFD251FE-A9E4-4778-84D2-2D23776B6BEE" bpmnElement="_E6513DD1-D675-437C-AA9B-A39C7D726EFC">
+        <di:waypoint x="108" y="31"/>
+        <di:waypoint x="293" y="31"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge_shape__755CF8BC-A303-4EE7-8181-2C2E8020E181_to_shape__7D87D78E-3B37-4C0F-BF87-3B88ACAD35B5" bpmnElement="_25993DE8-BEE3-4A1C-8F9E-79A8A98C8F0B">
+        <di:waypoint x="527" y="197"/>
+        <di:waypoint x="527" y="351"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge_shape__EFD251FE-A9E4-4778-84D2-2D23776B6BEE_to_shape__AB87ECC8-D369-4A43-A00B-EE70C8AD3B64" bpmnElement="_1BA4CDDB-95E7-48D3-994A-211ED41B10A9">
+        <di:waypoint x="293" y="31"/>
+        <di:waypoint x="527" y="31"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge_shape__AB87ECC8-D369-4A43-A00B-EE70C8AD3B64_to_shape__AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB" bpmnElement="_7BF77305-F355-4E36-86A2-1CC2E79BC1E0">
+        <di:waypoint x="527" y="31"/>
+        <di:waypoint x="293" y="197"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge_shape__AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB_to_shape__755CF8BC-A303-4EE7-8181-2C2E8020E181" bpmnElement="_B236D665-C4D9-40DA-8CEA-3CB48C5F28D2">
+        <di:waypoint x="293" y="197"/>
+        <di:waypoint x="450" y="197"/>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+  <bpmn2:relationship type="BPSimData">
+    <bpmn2:extensionElements>
+      <bpsim:BPSimData>
+        <bpsim:Scenario id="default" name="Simulationscenario">
+          <bpsim:ScenarioParameters/>
+          <bpsim:ElementParameters elementRef="_758143E6-CFDD-483E-A9F5-C2828652DAA8">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters elementRef="_EFD251FE-A9E4-4778-84D2-2D23776B6BEE">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters elementRef="_AB87ECC8-D369-4A43-A00B-EE70C8AD3B64">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters elementRef="_755CF8BC-A303-4EE7-8181-2C2E8020E181">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters elementRef="_AF4B09DD-4D13-488B-9BFE-45F7BAD60CDB">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+        </bpsim:Scenario>
+      </bpsim:BPSimData>
+    </bpmn2:extensionElements>
+    <bpmn2:source>_NBJhQNOMEDq5KINlO68CJg</bpmn2:source>
+    <bpmn2:target>_NBJhQNOMEDq5KINlO68CJg</bpmn2:target>
+  </bpmn2:relationship>
+</bpmn2:definitions>