05-19-2013 04:26 AM
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.bpmnwithactiviti.org/loanrequest">
<process id="loanrequest" name="Process to handle a loan request" isExecutable="true">
<extensionElements>
<activiti:executionListener class="org.bpmnwithactiviti.chapter5.listener.ProcessStartExecutionListener" event="start" />
<activiti:executionListener class="org.bpmnwithactiviti.chapter5.listener.ProcessEndExecutionListener" event="end" />
</extensionElements>
<startEvent id="theStart" >
<extensionElements>
<activiti:formProperty id="name" name="Name" type="string" required="true"></activiti:formProperty>
<activiti:formProperty id="emailAddress" name="Email address" type="string" required="true"></activiti:formProperty>
<activiti:formProperty id="income" name="Income" type="long" required="true"></activiti:formProperty>
<activiti:formProperty id="loanAmount" name="Loan amount" type="long" required="true" ></activiti:formProperty>
</extensionElements>
</startEvent>
<sequenceFlow id="sequenceFlow-d450f4a5-4e6f-4b3e-8451-07228a5b1b0d" sourceRef="theStart" targetRef="checkCredit"></sequenceFlow>
<scriptTask id="checkCredit" scriptFormat="groovy" activiti:autoStoreVariables="true">
<script>
out:println "Checking credit for " + name;
creditCheckOk = false;
if((income / 2) > loanAmount){
creditCheckOk = true;
}
out:println "Checked credit for " + name + " outcome is " + creditCheckOk;
</script>
</scriptTask>
<sequenceFlow id="sequenceFlow-b5777c55-420a-426c-9245-44fcb83e4df4" sourceRef="checkCredit" targetRef="createApplication"></sequenceFlow>
<serviceTask id="createApplication" activiti:class="org.bpmnwithactiviti.chapter5.CreateApplicationTask"></serviceTask>
<sequenceFlow id="sequenceFlow-a205db56-b336-492d-92b1-3c7996441546" sourceRef="createApplication" targetRef="evaluateLoanRequest"></sequenceFlow>
<userTask id="evaluateLoanRequest" name="Evaluate loan request" activiti:assignee="fozzie">
<extensionElements>
<activiti:formProperty id="customerName" name="Customer name" expression="${loanApplication.customerName}" writable="false"></activiti:formProperty>
<activiti:formProperty id="income" name="Income of customer" expression="${loanApplication.income}" writable="false"></activiti:formProperty>
<activiti:formProperty id="requestedAmount" name="Requested loan amount" expression="${loanApplication.requestedAmount}" writable="false"></activiti:formProperty>
<activiti:formProperty id="creditCheckOk" name="Outcome of credit check" expression="${loanApplication.creditCheckOk}" writable="false"></activiti:formProperty>
<activiti:formProperty id="requestApproved" name="Do you approve the request?" type="enum" required="true">
<activiti:value id="true" name="Yes"></activiti:value>
<activiti:value id="false" name="No"></activiti:value>
</activiti:formProperty>
<activiti:formProperty id="explanation" name="Explanation"></activiti:formProperty>
</extensionElements>
</userTask>
<sequenceFlow id="sequenceFlow-bb80e463-aeaa-400f-b4e0-93411ebf9d03" sourceRef="evaluateLoanRequest" targetRef="approvalGateway"></sequenceFlow>
<boundaryEvent id="escalationTimer" attachedToRef="evaluateLoanRequest" cancelActivity="true">
<timerEventDefinition>
<timeDuration>PT1M</timeDuration>
</timerEventDefinition>
</boundaryEvent>
<sequenceFlow id="sequenceFlow-e77d6d4d-9c90-4abe-979b-55562296a412" sourceRef="escalationTimer" targetRef="evaluateRequestByManager"></sequenceFlow>
<userTask id="evaluateRequestByManager" name="Evaluate loan request by manager" activiti:candidateGroups="management">
<extensionElements>
<activiti:formProperty id="customerName" name="Customer name" expression="${loanApplication.customerName}" writable="false"></activiti:formProperty>
<activiti:formProperty id="income" name="Income of customer" expression="${loanApplication.income}" writable="false"></activiti:formProperty>
<activiti:formProperty id="requestedAmount" name="Requested loan amount" expression="${loanApplication.requestedAmount}" writable="false"></activiti:formProperty>
<activiti:formProperty id="creditCheckOk" name="Outcome of credit check" expression="${loanApplication.creditCheckOk}" writable="false"></activiti:formProperty>
<activiti:formProperty id="requestApproved" name="Do you approve the request?" type="enum" required="true">
<activiti:value id="true" name="Yes"></activiti:value>
<activiti:value id="false" name="No"></activiti:value>
</activiti:formProperty>
<activiti:formProperty id="explanation" name="Explanation"></activiti:formProperty>
</extensionElements>
</userTask>
<sequenceFlow id="sequenceFlow-d94c0587-5717-4229-a236-c861b3cfcf36" sourceRef="evaluateRequestByManager" targetRef="approvalGateway"></sequenceFlow>
<exclusiveGateway id="approvalGateway"></exclusiveGateway>
<sequenceFlow id="sequenceFlow-8146a86e-12d1-4a93-9e2d-a48daa266830" sourceRef="approvalGateway" targetRef="informCustomer">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${requestApproved == false}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sequenceFlow-298593fc-ef06-49cc-8714-e4d8cf9de075" sourceRef="approvalGateway" targetRef="processRequest">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${requestApproved == true}]]></conditionExpression>
</sequenceFlow>
<serviceTask id="informCustomer" activiti:type="mail">
<extensionElements>
<activiti:field name="to">
<activiti:expression>${loanApplication.emailAddress}</activiti:expression>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Loan Request Denied</activiti:string>
</activiti:field>
<activiti:field name="html">
<activiti:expression><html>
<body>
Hello ${loanApplication.customerName},<br/><br/>
Your loan request has been denied for the following reason: ${explanation}.<br/><br/>
Kind regards,<br/>
The Loan Sharks Company.
</body>
</html></activiti:expression>
</activiti:field>
</extensionElements>
</serviceTask>
<sequenceFlow id="sequenceFlow-d47de415-a158-43f4-8a68-6c28a92011c2" sourceRef="informCustomer" targetRef="theEnd"></sequenceFlow>
<userTask id="processRequest" name="Process the loan request" activiti:assignee="fozzie"></userTask>
<sequenceFlow id="sequenceFlow-7c3caf15-06b9-4a7b-880a-a19977c7c4c8" sourceRef="processRequest" targetRef="theEnd"></sequenceFlow>
<endEvent id="theEnd"></endEvent>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_loanrequest">
<bpmndi:BPMNPlane bpmnElement="loanrequest" id="BPMNPlane_loanrequest">
<bpmndi:BPMNShape bpmnElement="escalationTimer" id="BPMNShape_escalationTimer">
<omgdc:Bounds height="30.0" width="30.0" x="445.0" y="45.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="createApplication" id="BPMNShape_createApplication">
<omgdc:Bounds height="60.0" width="100.0" x="230.0" y="4.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="processRequest" id="BPMNShape_processRequest">
<omgdc:Bounds height="60.0" width="100.0" x="620.0" y="0.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="evaluateRequestByManager" id="BPMNShape_evaluateRequestByManager">
<omgdc:Bounds height="60.0" width="140.0" x="340.0" y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="informCustomer" id="BPMNShape_informCustomer">
<omgdc:Bounds height="60.0" width="100.0" x="620.0" y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="evaluateLoanRequest" id="BPMNShape_evaluateLoanRequest">
<omgdc:Bounds height="60.0" width="100.0" x="380.0" y="0.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="approvalGateway" id="BPMNShape_approvalGateway">
<omgdc:Bounds height="40.0" width="40.0" x="530.0" y="90.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="theEnd" id="BPMNShape_theEnd">
<omgdc:Bounds height="35.0" width="35.0" x="770.0" y="95.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="checkCredit" id="BPMNShape_checkCredit">
<omgdc:Bounds height="60.0" width="100.0" x="80.0" y="6.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="theStart" id="BPMNShape_theStart">
<omgdc:Bounds height="35.0" width="35.0" x="0.0" y="21.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-298593fc-ef06-49cc-8714-e4d8cf9de075" id="BPMNEdge_sequenceFlow-298593fc-ef06-49cc-8714-e4d8cf9de075">
<omgdi:waypoint x="570.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="582.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="582.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="620.0" y="30.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-b5777c55-420a-426c-9245-44fcb83e4df4" id="BPMNEdge_sequenceFlow-b5777c55-420a-426c-9245-44fcb83e4df4">
<omgdi:waypoint x="180.0" y="36.0"></omgdi:waypoint>
<omgdi:waypoint x="192.0" y="36.0"></omgdi:waypoint>
<omgdi:waypoint x="192.0" y="34.0"></omgdi:waypoint>
<omgdi:waypoint x="230.0" y="34.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-d450f4a5-4e6f-4b3e-8451-07228a5b1b0d" id="BPMNEdge_sequenceFlow-d450f4a5-4e6f-4b3e-8451-07228a5b1b0d">
<omgdi:waypoint x="35.0" y="38.0"></omgdi:waypoint>
<omgdi:waypoint x="42.0" y="36.0"></omgdi:waypoint>
<omgdi:waypoint x="42.0" y="36.0"></omgdi:waypoint>
<omgdi:waypoint x="80.0" y="36.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-e77d6d4d-9c90-4abe-979b-55562296a412" id="BPMNEdge_sequenceFlow-e77d6d4d-9c90-4abe-979b-55562296a412">
<omgdi:waypoint x="460.0" y="75.0"></omgdi:waypoint>
<omgdi:waypoint x="460.0" y="117.0"></omgdi:waypoint>
<omgdi:waypoint x="490.0" y="117.0"></omgdi:waypoint>
<omgdi:waypoint x="490.0" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="430.0" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="410.0" y="220.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-8146a86e-12d1-4a93-9e2d-a48daa266830" id="BPMNEdge_sequenceFlow-8146a86e-12d1-4a93-9e2d-a48daa266830">
<omgdi:waypoint x="570.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="582.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="582.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="620.0" y="190.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-d47de415-a158-43f4-8a68-6c28a92011c2" id="BPMNEdge_sequenceFlow-d47de415-a158-43f4-8a68-6c28a92011c2">
<omgdi:waypoint x="720.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="732.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="732.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="770.0" y="112.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-d94c0587-5717-4229-a236-c861b3cfcf36" id="BPMNEdge_sequenceFlow-d94c0587-5717-4229-a236-c861b3cfcf36">
<omgdi:waypoint x="480.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="492.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="492.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="530.0" y="110.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-bb80e463-aeaa-400f-b4e0-93411ebf9d03" id="BPMNEdge_sequenceFlow-bb80e463-aeaa-400f-b4e0-93411ebf9d03">
<omgdi:waypoint x="480.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="492.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="492.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="530.0" y="110.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-a205db56-b336-492d-92b1-3c7996441546" id="BPMNEdge_sequenceFlow-a205db56-b336-492d-92b1-3c7996441546">
<omgdi:waypoint x="330.0" y="34.0"></omgdi:waypoint>
<omgdi:waypoint x="342.0" y="34.0"></omgdi:waypoint>
<omgdi:waypoint x="342.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-7c3caf15-06b9-4a7b-880a-a19977c7c4c8" id="BPMNEdge_sequenceFlow-7c3caf15-06b9-4a7b-880a-a19977c7c4c8">
<omgdi:waypoint x="720.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="732.0" y="30.0"></omgdi:waypoint>
<omgdi:waypoint x="732.0" y="110.0"></omgdi:waypoint>
<omgdi:waypoint x="770.0" y="112.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
public class LoanApplication implements Serializable {
private static final long serialVersionUID = 1L;
private String customerName;
private long income;
private long requestedAmount;
private boolean creditCheckOk;
private String explanation;
private String emailAddress;
private long loanAmount;
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public long getIncome() {
return income;
}
public void setloanAmount(long loanamount) {
this.loanAmount = loanamount;
}
public long getloanAmount() {
return loanAmount;
}
public void setIncome(long income) {
this.income = income;
}
public long getRequestedAmount() {
return requestedAmount;
}
public void setRequestedAmount(long requestedAmount) {
this.requestedAmount = requestedAmount;
}
public boolean isCreditCheckOk() {
return creditCheckOk;
}
public void setCreditCheckOk(boolean creditCheckOk) {
this.creditCheckOk = creditCheckOk;
}
public String getExplanation() {
return explanation;
}
public void setExplanation(String explanation) {
this.explanation = explanation;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
}
public class CreateApplicationTask implements JavaDelegate {
public void execute(DelegateExecution execution) {
LoanApplication la = new LoanApplication();
la.setCreditCheckOk((Boolean) execution.getVariable("creditCheckOk"));
la.setCustomerName((String) execution.getVariable("name"));
la.setIncome((Long) execution.getVariable("income"));
la.setRequestedAmount((Long) execution.getVariable("loanAmount"));
la.setEmailAddress((String) execution.getVariable("emailAddress"));
execution.setVariable("loanApplication", la);
}
}
public class ProcessStartExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) throws Exception {
LoanRequestReceivedEvent event = new LoanRequestReceivedEvent(
execution.getId(),
new Date().getTime(),
(Integer) execution.getVariable("loanAmount"));
EventSender.send(event);
}
}
public class ProcessEndExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) throws Exception {
LoanRequestProcessedEvent event = new LoanRequestProcessedEvent (
execution.getId(),
new Date().getTime(),
(Boolean) execution.getVariable("requestApproved"),
10);
EventSender.send(event);
}
}
05-22-2013 05:42 AM
05-23-2013 02:09 PM
05-24-2013 04:20 AM
05-24-2013 01:12 PM
05-28-2013 05:51 AM
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.