Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0" encoding="UTF-8"?>
- <mule xmlns:core="http://www.mulesoft.org/schema/mule/core"
- xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"
- xmlns:db="http://www.mulesoft.org/schema/mule/db"
- xmlns="http://www.mulesoft.org/schema/mule/core"
- xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
- xmlns:spring="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tools="http://www.springframework.org/schema/tool"
- xmlns:os-core="http://www.openspaces.org/schema/core"
- xmlns:os-events="http://www.openspaces.org/schema/events"
- xmlns:os-remoting="http://www.openspaces.org/schema/remoting"
- xmlns:os-eventcontainer="http://www.openspaces.org/schema/mule/os-eventcontainer"
- xmlns:os-queue="http://www.openspaces.org/schema/mule/os-queue"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:json="http://www.mulesoft.org/schema/mule/json"
- xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
- xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz"
- xmlns:mongo="http://www.mulesoft.org/schema/mule/mongo"
- xmlns:esper="http://www.mulesoft.org/schema/mule/esper"
- xmlns:objectstore="http://www.mulesoft.org/schema/mule/objectstore"
- xmlns:validation="http://www.mulesoft.org/schema/mule/validation"
- xmlns:ws="http://www.mulesoft.org/schema/mule/ws"
- xmlns:http="http://www.mulesoft.org/schema/mule/http"
- xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf"
- xmlns:schemadoc="http://www.mulesoft.org/schema/mule/schemadoc"
- xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core file:///opt/schemas/mule37/mule.xsd
- http://www.mulesoft.org/schema/mule/db file:///opt/schemas/mule37/mule-db.xsd
- http://www.springframework.org/schema/beans file:///opt/schemas/Spring4/beans/spring-beans-4.0.xsd
- http://www.springframework.org/schema/context file:///opt/schemas/Spring4/context/spring-context-4.0.xsd
- http://www.springframework.org/schema/tool file:///opt/schemas/Spring4/tool/spring-tool-4.0.xsd
- http://www.openspaces.org/schema/events file:///opt/schemas/openspaces-10.2/events/config/openspaces-events.xsd
- http://www.openspaces.org/schema/core file:///opt/schemas/openspaces-10.2/core/config/openspaces-core.xsd
- http://www.openspaces.org/schema/remoting file:///opt/schemas/openspaces-10.2/remoting/config/openspaces-remoting.xsd
- http://www.openspaces.org/schema/mule/os-eventcontainer file:///opt/schemas/openspaces-10.2/esb/mule/eventcontainer/config/mule-os-eventcontainer.xsd
- http://www.openspaces.org/schema/mule/os-queue file:///opt/schemas/openspaces-10.2/esb/mule/queue/config/mule-os-queue.xsd
- http://www.mulesoft.org/schema/mule/scripting file:///opt/schemas/mule37/mule-scripting.xsd
- http://www.springframework.org/schema/aop file:///opt/schemas/Spring4/aop/spring-aop-4.0.xsd
- http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/3.7/mule-json.xsd
- http://www.mulesoft.org/schema/mule/mongo file:///opt/schemas/mule33/mule-module-mongo-2.2.xsd
- http://www.mulesoft.org/schema/mule/esper file:///opt/schemas/esper/mule-esper.xsd
- http://www.mulesoft.org/schema/mule/quartz file:///home/opt/schemas/mule37/mule-quartz.xsd
- http://www.mulesoft.org/schema/mule/objectstore http://www.mulesoft.org/schema/mule/objectstore/current/mule-objectstore.xsd
- http://www.mulesoft.org/schema/mule/validation http://www.mulesoft.org/schema/mule/validation/current/mule-validation.xsd
- http://www.mulesoft.org/schema/mule/schemadoc http://www.mulesoft.org/schema/mule/schemadoc/3.7/mule-schemadoc.xsd
- http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/3.7/mule-cxf.xsd
- http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/3.7/mule-http.xsd
- http://www.mulesoft.org/schema/mule/ws http://www.mulesoft.org/schema/mule/ws/3.7/mule-ws.xsd
- http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/3.7/mule-jms.xsd ">
- <configuration>
- <default-dispatcher-threading-profile
- maxThreadsActive="50" maxThreadsIdle="25" threadTTL="60000" />
- <default-receiver-threading-profile
- maxThreadsActive="50" maxThreadsIdle="25" threadTTL="60000" />
- <default-service-threading-profile
- maxThreadsActive="50" maxThreadsIdle="25" threadTTL="60000" />
- <expression-language>
- <import name="sys" class="java.lang.System" />
- <import name="uiMessage" class="com.inspired.ui.message.UiMessage"/>
- <import name="objectMapper" class="org.codehaus.jackson.map.ObjectMapper"/>
- <import name="stringUtils" class="com.inspired.comms.utils.StringUtils"/>
- <import class="com.inspired.logistics.utils.Day"/>
- <import class="org.jboss.netty.buffer.ChannelBuffer"/>
- <import class="com.inspired.maths.MathUtils"/>
- <import class="java.util.UUID"/>
- <import class="org.joda.time.DateTimeUtils"/>
- <import class="org.joda.time.DateTime"/>
- <import class="com.espertech.esper.event.map.MapEventBean"/>
- <import class="com.inspired.geospatial.location.Point"/>
- <import class="com.espertech.esper.collection.Pair"/>
- <import class="com.espertech.esper.event.bean.BeanEventBean"/>
- <import class="com.espertech.esper.client.EventBean"/>
- <import class="java.math.BigDecimal"/>
- <import class="com.inspired.time.utils.StoreObjectInSpaceProcessor"/>
- <import class="com.gigaspaces.client.WriteModifiers"/>
- <import class="org.openspaces.core.GigaSpace"/>
- <import class="org.joda.time.DateTime"/>
- <import class="com.hazelcast.core.IMap"/>
- <import class="net.sf.json.JSONObject"/>
- <import class="com.inspired.national.id.exchange.BulkIdentityDataTransportObject"/>
- <import class="com.inspired.national.id.NationalIdentityPersonData"/>
- <import class="com.inspired.national.id.AgencyBiometricsDataExchObject"/>
- <import class="com.inspired.national.id.AgencyIdentityDataType"/>
- <import class="com.inspired.national.id.NimcPersonObjectState"/>
- <import class="com.inspired.national.id.NimcAgyRegisteredPerson"/>
- <import class="com.inspired.national.id.NINUpdatePackage"/>
- <import class="com.inspired.national.id.NINAssignmentUpdateState"/>
- <import class="com.inspired.national.id.ImageExchangeObject"/>
- <import class="com.inspired.national.id.PersonBiometricsMetaData"/>
- <import class="com.inspired.national.id.PersonBiometricDetails"/>
- <import class="com.espertech.esper.collection.Pair"/>
- <import class="com.inspired.national.id.BiometricsQualityIndicator"/>
- <import class="com.inspired.image.utils.ImageUtils"/>
- <import class="com.inspired.time.utils.AgeCalculator"/>
- <import class="com.inspired.comms.utils.TelephoneNumberUtils"/>
- <import class="org.jnbis.api.Jnbis"/>
- <import class="org.jnbis.api.model.Bitmap"/>
- <import class="com.inspired.national.id.exchange.NIMCAcceptedIdentityObject"/>
- <import class="com.inspired.national.id.exchange.NIMCFingerprintObjects"/>
- <import class="com.inspired.national.id.exchange.NIMCAcceptedPersonBiometrics"/>
- <alias name="i" expression="message.inboundProperties" />
- <!-- <global-functions file="shared-functions.mel"> -->
- <global-functions>
- def now(){
- dateFormat = new java.text.SimpleDateFormat("HH:mm:ss dd/MM/yyyy");
- dateFormat.format(new Date());
- }
- def addTax(d){
- d * 1.2
- }
- def randomBoolean(){
- r = new java.util.Random();
- r.nextBoolean()
- }
- def randomDiscount(){
- r = new java.util.Random();
- r.nextInt(20)/100
- }
- def formatPrice(price){
- df = java.text.NumberFormat.getCurrencyInstance();
- df.format((double)price)
- }
- def getUniqueId(){
- UUID.randomUUID().toString();
- }
- def getCurrentMonth(){
- Integer.valueOf(Day.today().getMonth());
- }
- def getDefaultRate(){
- 6.80;
- }
- def minNumAcceptableFingers(){
- 4;
- }
- def minAgeForAdultRegistration(){
- 16
- }
- </global-functions>
- </expression-language>
- </configuration>
- <!-- <mongo:connection-pooling-profile maxActive="10" maxIdle="10" exhaustedAction="WHEN_EXHAUSTED_GROW" maxWait="120"/>-->
- <mongo:config name="identitiesStoreMongoDbConfig" username="sco"
- password="inspired"
- database="nimcCentralIdentitiesMongoDb"
- host="${mongdb.server}"
- autoConnectRetry="true" >
- <mongo:connection-pooling-profile maxActive="100" maxIdle="30"
- initialisationPolicy="INITIALISE_ONE"
- exhaustedAction="WHEN_EXHAUSTED_GROW" maxWait="120"/>
- </mongo:config>
- <!--<os-eventcontainer:connector name="gigaSpacesConnector" />-->
- <!-- <os-queue:connector name="queueConnectorNIMCSpace"
- giga-space="nimcWanIdentitiesGSpace"
- fifo="false"
- persistent="true"
- timeout="35000"/>-->
- <!-- <queued-asynchronous-processing-strategy name="queued-120-threads-processor"
- maxThreads="120"
- doc:name="Queued Asynchronous Processing Strategy"/> -->
- <spring:beans>
- <spring:import resource="classpath:META-INF/cxf/cxf.xml"/>
- <spring:import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
- <spring:import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
- <spring:bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
- <spring:property name="connectionFactory">
- <spring:bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
- <spring:property name="brokerURL" value="tcp://localhost:61616"/>
- </spring:bean>
- </spring:property>
- </spring:bean>
- <os-events:polling-container id="IdentityServicesExportingPollingContainer"
- giga-space="nimcWanIdentitiesGSpace"
- concurrent-consumers="10"
- max-concurrent-consumers="15">
- <os-events:tx-support tx-manager="distribTransactionManager"
- tx-timeout="150000"
- tx-isolation="READ_COMMITTED"/>
- <os-events:receive-operation-handler>
- <spring:bean class="org.openspaces.events.polling.receive.MultiTakeReceiveOperationHandler">
- <spring:property name="nonBlocking" value="true" />
- <spring:property name="nonBlockingFactor" value="10" />
- </spring:bean>
- </os-events:receive-operation-handler>
- <os-events:listener ref="identityServicesExporter"/>
- </os-events:polling-container>
- <os-remoting:service-exporter id="identityServicesExporter" >
- <!-- <os-remoting:service ref="mongoDbAuthenticationProvider"/>
- <os-remoting:service ref="jdbcUserDetailsManager"/>
- <os-remoting:service ref="pooledJdbcDaoProxyBean"/> -->
- </os-remoting:service-exporter>
- <os-events:polling-container id="NIMCWanSpaceBiometricsImageObjPollContainerOne"
- giga-space="nimcWanIdentitiesGSpace"
- concurrent-consumers="7"
- max-concurrent-consumers="7"
- receive-timeout="75000"
- auto-start="false"
- pass-array-as-is="true">
- <os-events:tx-support tx-manager="distribTransactionManager"
- tx-isolation="READ_COMMITTED"
- tx-timeout="75000"/>
- <os-core:sql-query where="destinationAgency='NIMC_CENTRAL'"
- class="com.inspired.national.id.ImageExchangeObject"/>
- <os-events:receive-operation-handler>
- <spring:bean class="org.openspaces.events.polling.receive.MultiTakeReceiveOperationHandler">
- <spring:property name="nonBlocking" value="true" />
- <spring:property name="nonBlockingFactor" value="10" />
- <spring:property name="maxEntries" value="10" />
- </spring:bean>
- </os-events:receive-operation-handler>
- </os-events:polling-container>
- <os-events:polling-container id="NIMCWanSpaceBiometricsImageObjPollContainerTwo"
- giga-space="nimcWanIdentitiesGSpace"
- concurrent-consumers="7"
- max-concurrent-consumers="7"
- receive-timeout="75000"
- auto-start="false"
- pass-array-as-is="true" >
- <os-events:tx-support tx-manager="distribTransactionManager"
- tx-isolation="READ_COMMITTED"
- tx-timeout="75000"/>
- <os-core:sql-query where="destinationAgency='NIMC_CENTRAL'"
- class="com.inspired.national.id.ImageExchangeObject"/>
- <os-events:receive-operation-handler>
- <spring:bean class="org.openspaces.events.polling.receive.MultiTakeReceiveOperationHandler">
- <spring:property name="nonBlocking" value="true" />
- <spring:property name="nonBlockingFactor" value="10" />
- <spring:property name="maxEntries" value="100" />
- </spring:bean>
- </os-events:receive-operation-handler>
- </os-events:polling-container>
- <os-events:polling-container id="NIMCWanSpaceBiometricsImageObjPollContainerThree"
- giga-space="nimcWanIdentitiesGSpace"
- concurrent-consumers="7"
- max-concurrent-consumers="7"
- receive-timeout="75000"
- auto-start="false"
- pass-array-as-is="true">
- <os-events:tx-support tx-manager="distribTransactionManager"
- tx-isolation="READ_COMMITTED"
- tx-timeout="75000"/>
- <os-core:sql-query where="destinationAgency='NIMC_CENTRAL'"
- class="com.inspired.national.id.ImageExchangeObject"/>
- <os-events:receive-operation-handler>
- <spring:bean class="org.openspaces.events.polling.receive.MultiTakeReceiveOperationHandler">
- <spring:property name="nonBlocking" value="true" />
- <spring:property name="nonBlockingFactor" value="10" />
- <spring:property name="maxEntries" value="100" />
- </spring:bean>
- </os-events:receive-operation-handler>
- </os-events:polling-container>
- </spring:beans>
- <!-- <ws:consumer-config name="NIMC_Data_Upload_Web_Service_Consumer"
- wsdlLocation="http://10.1.0.22:8090/nimcdataupload/DataReception?wsdl"
- service="nimcdataupload"
- port="nimcdatauploadPort"
- serviceAddress="http://10.1.0.22:8090/nimcdataupload/DataReception" doc:name="Identity Enrollment Web Service"/>
- <ws:consumer-config name="NIMC_BVN_Registration_Web_Service_Consumer"
- wsdlLocation="http://10.1.0.22:8090/NIMCDataUploadBVN/DataReception?wsdl"
- service="NIMCDataUploadBVN"
- port="NIMCDataUploadBVNPort"
- serviceAddress="http://10.1.0.22:8090/NIMCDataUploadBVN/DataReception" doc:name="BVN Registration Web Service"/>-->
- <notifications dynamic="true">
- <notification event="COMPONENT-MESSAGE"/>
- <notification event="CONNECTION"/>
- <notification event="ENDPOINT-MESSAGE"/>
- <notification event="MESSAGE-PROCESSOR"/>
- <notification event="ROUTING"/>
- <notification event="SERVICE"/>
- </notifications>
- <jms:activemq-connector name="jmsConnector-biometrics"
- specification="1.1"
- brokerURL="vm://${activemq.broker.host}:61616"
- connectionFactory-ref="cachingConnectionFactory"
- maxRedelivery="6"
- cacheJmsSessions="true"
- eagerConsumer="true"
- createMultipleTransactedReceivers="true"
- numberOfConcurrentTransactedReceivers="7"
- noLocal="true" />
- <!-- <flow name="nimcIdentityRegistrationTestWebService">
- <http:inbound-endpoint address="http://localhost:63081/nimcRegistrationService"
- exchange-pattern="request-response">
- <cxf:jaxws-service serviceClass="com.inspired.nat.identity.IdentityRegistration"/>
- </http:inbound-endpoint>
- <component>
- <spring-object bean="nimcIdentityRegWebService"/>
- </component>
- </flow>-->
- <flow name="ProcessMessageToLocalSpaceFromWanSpaceProcessor">
- <composite-source doc:name="Composite Source">
- <inbound-endpoint address="os-eventcontainer://NIMCWanSpaceBiometricsImageObjPollContainerOne"
- exchange-pattern="request-response"/>
- <inbound-endpoint address="os-eventcontainer://NIMCWanSpaceBiometricsImageObjPollContainerTwo"
- exchange-pattern="request-response" />
- <inbound-endpoint address="os-eventcontainer://NIMCWanSpaceBiometricsImageObjPollContainerThree"
- exchange-pattern="request-response" />
- </composite-source>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("SPACE WORKER: Biometrics Objects Arrives in Space ");
- </expression-component>
- <async doc:name="Async" processingStrategy="queued-150-threads-processor">
- <processor-chain>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("WAN BULK ENTRIES PROCESSOR: Payload after Object to JSON: " + message.payloadAs(java.lang.String));
- </expression-component>
- <foreach>
- <choice>
- <when expression="#[payload is ImageExchangeObject]">
- <processor-chain>
- <expression-transformer expression="#[ biometricsImageBulkObject = (ImageExchangeObject)payload;
- bioObjectsInArray = (byte[])biometricsImageBulkObject.getEncryptImageObject();
- blProcessed = biometricsImageBulkObject.getProcessed();
- flowVars['bioTransactId'] = biometricsImageBulkObject.getTransactionId();
- if(!blProcessed){
- flowVars['content'] = bioObjectsInArray;
- }
- flowVars['content']]"/>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("BIOMETRICS OBJECTS PROCESSOR: Number of Entries : " + flowVars['bioTransactId']);
- System.out.println("BIOMETRICS OBJECTS PROCESSOR: Payload is of type : " + payload.getClass().getName());
- </expression-component>
- <gzip-uncompress-transformer />
- <byte-array-to-object-transformer doc:name="Byte Array to Object" mimeType="application/java"/>
- <expression-component doc:name="Decompressed Payload from Central WAN Space">
- System.out.println("BIOMETRICS OBJECTS PROCESSOR: Decompressed Bio Payload acquired: " + payload.getClass().getName());
- </expression-component>
- <choice>
- <when expression="#[payload is List]">
- <processor-chain>
- <foreach>
- <processor-chain>
- <expression-component doc:name="Decompressed Payload from Central WAN Space">
- System.out.println("BIOMETRICS OBJECTS PROCESSOR: Payload of Object for Processing is of type: " + payload.getClass().getName());
- flowVars['bvnNumber'] = payload.getId();
- System.out.println("BIOMETRICS OBJECTS PROCESSOR: Just Acquired Perons BVN Number: " + flowVars['bvnNumber']);
- </expression-component>
- <enricher target="#[flowVars['bioObjectsWriteLeaseContextId']]" doc:name="Enrich Space Lease Context ">
- <flow-ref name="sendImageObjectsToSpace" doc:name="Send The Bunch to Space"/>
- </enricher>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("BIO OBJECTS STORE ENGINE: Identity Object Written Xfer Space with Uid" + flowVars['bioObjectsWriteLeaseContextId']);
- </expression-component>
- <enricher target="#[flowVars['ageAtLastBirthDate']]" doc:name="Enrich Space Lease Context">
- <processor-chain>
- <flow-ref name="subFlow-acquireDemoDataAndComputeAgeToAtLastBirthDay" doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </enricher>
- <expression-transformer expression="#[ bioMetaDat = new PersonBiometricsMetaData(flowVars['bioTransactId'],
- Long.valueOf(DateTimeUtils.currentTimeMillis()), flowVars['bvnNumber']);
- bioMetaDat.setStorageId(flowVars['bioObjectsWriteLeaseContextId']);
- bioMetaDat.setProcessed(Boolean.FALSE);
- if(flowVars['ageAtLastBirthDate']!=null){
- bioMetaDat.setAgeOfPersonAtLastBirthDay(flowVars['ageAtLastBirthDate']);
- }
- if(flowVars['dateOfBirth']!=null){
- bioMetaDat.setDateOfBirth(flowVars['dateOfBirth']);
- }
- bioMetaDat.setFacialImageState(BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED);
- bioMetaDat.setSignatureImageState(BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED);
- bioMetaDat.setFingerPrintsState(BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED);
- bioMetaDat ]"/>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("BIO OBJECTS STORE ENGINE: Biometrics Meta Data Ready to Send to intel Engine: " + message.payloadAs(java.lang.String));
- </expression-component>
- <esper:send eventPayload-ref="#[payload:]"/>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("BIO OBJECTS STORE ENGINE: Biometrics Object Sent to Intell Engine: " + payload.getClass().getName());
- </expression-component>
- </processor-chain>
- </foreach>
- </processor-chain>
- </when>
- <otherwise>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("BIO OBJECTS STORE ENGINE: We have different types of Objects: " + payload.getClass().getName());
- </expression-component>
- </otherwise>
- </choice>
- </processor-chain>
- </when>
- <otherwise>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("BIO OBJECTS STORE ENGINE: We have different types of Objects: " + payload.getClass().getName());
- </expression-component>
- </otherwise>
- </choice>
- </foreach>
- </processor-chain>
- </async>
- <!-- <default-exception-strategy>
- <jms:outbound-endpoint queue="failedProcesses"/>
- </default-exception-strategy>-->
- </flow>
- <flow name="prepareAndGradeBiometricsPackageQuality">
- <esper:listen statement="select * from PersonBiometricsMetaDataEvent
- match_recognize ( partition by agencyUniqueNumber
- measures A.transactionId as a_theId, B.transactionId as b_theId, C.transactionId as c_theId
- D.transactionId as d_theId
- pattern (A+? B+ C+ D+)
- define
- A as A.processed=false and A.ninNumber = null and A.dateOfBirth!=null,
- B as B.facialImageState = BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED
- and B.signatureImageState = BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED,
- C as C.fingerPrintsState = BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED,
- D as D.ageOfPersonAtLastBirthDay>=min_age_for_adult)"/>
- <async processingStrategy="queued-120-threads-processor">
- <processor-chain>
- <expression-component doc:name="prepareAndGradeBiometricsPackageQuality-exp-component">
- System.out.println("BIOMETRICS QUALITY ASSURANCE: Message Matched OK: " + message.payloadAs(java.lang.String));
- if(payload['unClassifiedPersonsBiometrics']!=null){
- personsBiometricsPackMetaData = payload['unClassifiedPersonsBiometrics'].getUnderlying();
- if(personsBiometricsPackMetaData!=null){
- bioTransactionId = personsBiometricsPackMetaData.getAgencyUniqueNumber();
- if(personsBiometricsPackMetaData!=null){
- if(bioTransactionId!=null){
- flowVars['bvnNumber'] = bioTransactionId;
- }
- }else{
- System.out.println("BIOMETRICS QUALITY ASSURANCE: Biometrics transactionId not contained in Payload");
- }
- }
- flowVars['ageLastBirthDay'] = personsBiometricsPackMetaData.getAgeOfPersonAtLastBirthDay();
- payload = personsBiometricsPackMetaData;
- </expression-component>
- <choice>
- <when expression="#[flowVars['ageLastBirthDay']>= minAgeForAdultRegistration()]">
- <processor-chain>
- <enricher target="#[flowVars['personBiometricsData']]"
- doc:name="Enrich Space Lease Context">
- <flow-ref name="subFlow-acquireBiometricsObjectsFromStorageSpace"
- doc:name="Send Response Back to Agency"/>
- </enricher>
- <scatter-gather timeout="5000">
- <custom-aggregation-strategy class="com.inspired.nat.identity.BiometricsVerificationAggregationStrategy"/>
- <threading-profile maxThreadsActive="3"/>
- <flow-ref name="subFlow-updateStatusOfFingerPrintsInBioMetaData"
- doc:name="Send Response Back to Agency"/>
- <flow-ref name="subFlow-processFacialImagesAndSignatures"
- doc:name="Send Response Back to Agency"/>
- <flow-ref name="subFlow-processSignatureImageVerification"
- doc:name="Send Response Back to Agency"/>
- </scatter-gather>
- <wire-tap>
- <processor-chain>
- <expression-component doc:name="Update The Identity Object in the Intell Engine">
- System.out.println("BIOMETRICS QUALITY ASSURANCE: " + message.payloadAs(java.lang.String));
- </expression-component>
- <esper:send eventPayload-ref="#[payload:]"/>
- </processor-chain>
- </wire-tap>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("BIOMETRICS QUALITY ASSURANCE: Biometrics Aggregation Completed : " + message.payloadAs(java.lang.String));
- if(flowVars['nimc_finger_print_objects']!=null){
- System.out.println("BIOMETRICS QUALITY ASSURANCE: Finger prints Object Bean Acquired: " + flowVars['nimc_finger_print_objects']);
- }
- </expression-component>
- <set-property propertyName="mongo_object_coll_name"
- value="#['NimcAcceptedBiometricsColl']"/>
- <set-property propertyName="correlation_id"
- value="#[payload['transactionId']]"/>
- <set-property propertyName="source_agency"
- value="#[payload['sourceAgency']]"/>
- <set-property propertyName="biometrics_object"
- value="#[flowVars['nimc_finger_print_objects']]" />
- <jms:outbound-endpoint queue="upsert.biometrics.object.in.mongo.db.edp"
- connector-ref="jmsConnector-next"
- exchange-pattern="request-response">
- <jms:transaction action="ALWAYS_BEGIN" />
- </jms:outbound-endpoint>
- </processor-chain>
- </when>
- <otherwise>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("BIOMETRICS QUALITY ASSURANCE: This Person is Child, Age: "+ flowVars['ageLastBirthDay']);
- flowVars['biometricsQuality'] = BiometricsQualityIndicator.PERSON_IS_NOT_ADULT;
- </expression-component>
- </otherwise>
- </choice>
- </processor-chain>
- </async>
- </flow>
- <flow name="update-biometrics-objects-in-db">
- <jms:inbound-endpoint queue="upsert.biometrics.object.in.mongo.db.edp"
- connector-ref="jmsConnector-next">
- <jms:transaction action="JOIN_IF_POSSIBLE" />
- </jms:inbound-endpoint>
- <logger message="Updating Biometrics in DB for Person : #[message.inboundProperties['person_unique_id']] -- #[payload] )" level="INFO" doc:name="Logger" />
- <async>
- <processor-chain>
- <enricher target="#[flowVars['collection-exists']]">
- <mongo:exists-collection collection="#['NimcAcceptedBiometricsColl']"
- config-ref="identitiesStoreMongoDbConfig"/>
- </enricher>
- <choice>
- <when expression="#[flowVars['collection-exists']=='false']">
- <processor-chain>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("MONGO-DB STORE: Going to Create Collection With Name: " + message.inboundProperties['mongo_object_coll_name'] );
- </expression-component>
- <mongo:create-collection collection="#['NimcAcceptedBiometricsColl']"
- capped="false"
- config-ref="identitiesStoreMongoDbConfig"/>
- </processor-chain>
- </when>
- <otherwise>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("MONGO-DB BIOMETRICS STORE: Collection " + message.inboundProperties['mongo_object_coll_name'] + " Already Exist");
- </expression-component>
- </otherwise>
- </choice>
- <expression-filter expression="#[flowVars['collection-exists']=='true']" doc:name="Expression"/>
- <choice>
- <when expression="#[groovy:payload.getClass().getName() == 'org.mule.transport.NullPayload' or !(payload is NIMCAcceptedPersonBiometrics)]">
- <set-payload value="#[message.inboundProperties['biometrics_object']]" doc:name="Set Journal Voucher as new Payload"/>
- </when>
- <otherwise>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("MONGO-DB BIOMETRICS STORE: Payload is Good to go " + message.payload);
- </expression-component>
- </otherwise>
- </choice>
- <first-successful>
- <mongo:update-objects-by-function-using-map collection="#['NimcAcceptedBiometricsColl']"
- config-ref="identitiesStoreMongoDbConfig"
- upsert="true"
- function="$set"
- multi="false" doc:name="Update Biometrics Image Object">
- <mongo:query-attributes>
- <mongo:query-attribute key="sourceAgency">#[message.inboundProperties['source_agency']]</mongo:query-attribute>
- <mongo:query-attribute key="personUniqueAgencyId">#[message.inboundProperties['person_unique_id']]</mongo:query-attribute>
- </mongo:query-attributes>
- <mongo:element-attributes>
- <mongo:element-attribute value-ref="#[payload]"></mongo:element-attribute>
- </mongo:element-attributes>
- </mongo:update-objects-by-function-using-map>
- <flow-ref name="setNullComponent" />
- </first-successful>
- </processor-chain>
- </async>
- </flow>
- <sub-flow name="subFlow-processFacialImagesAndSignatures">
- <processor-chain>
- <expression-transformer expression="#[ faceImageQuality = new Object();
- signatureImageQuality = new Object();
- if(flow['personBiometricsData']!=null){
- faceScanImageObject = flowVars['personBiometricsData'].getFaceScan();
- if(faceScanImageObject!=null){
- if(faceScanImageObject is ImageDataBean){
- faceImgDataBean = (ImageDataBean)faceScanImageObject;
- flowVars['faceImageBuff'] = faceImgDataBean.getImageObject();
- }
- if(ImageUtils.confirmImageQualityOk(flowVars['faceImageBuff'])){
- listOfFacialImages = Jnbis.nist().decode(flowVars['faceImageBuff']).getFacialAndSmtImages();
- if(listOfFacialImages!=null){
- faceImageQuality = BiometricsQualityIndicator.FACE_IMAGE_ACCEPTABLE;
- }
- }else{
- faceImageQuality = BiometricsQualityIndicator.FACE_IMAGE_QUALITY_NOT_GOOD;
- }
- }else{
- faceImageQuality = BiometricsQualityIndicator.FACE_IMAGE_UNAVAILABLE;
- }
- }
- flowVars['updatedFingerBiometricMetaData'].setFacialImageState(faceImageQuality);
- flowVars['updatedFingerBiometricMetaData'].setProcessed(Boolean.TRUE);
- resultsMap = ['image.processor':'FACIAL_IMAGE_PROCESSOR',
- 'FACIAL_IMAGE_PROCESSOR' : flowVars['updatedFingerBiometricMetaData']];
- resultsMap ]"/>
- </processor-chain>
- </sub-flow>
- <sub-flow name="subFlow-processSignatureImageVerification">
- <processor-chain>
- <expression-transformer expression="#[ signatureImageQuality = new Object();
- signatureImageObject = flowVars['personBiometricsData'].getSignature();
- if(signatureImageObject!=null){
- if(signatureImageObject is ImageDataBean){
- signatureImgDataBean = (ImageDataBean)signatureImageObject;
- flowVars['signatureImageBuff'] = signatureImgDataBean.getImageObject();
- }
- if(ImageUtils.confirmImageQualityOk(flowVars['signatureImageBuff']){
- List signatures = Jnbis.nist().decode(flowVars['signatureImageBuff']).getSignatures();
- if(signatures!=null and !signatures.isEmpty()){
- signatureImageQuality = BiometricsQualityIndicator.SIGNATURE_IMAGE_ACCEPTABLE;
- }else{
- signatureImageQuality = BiometricsQualityIndicator.SIGNATURE_IMAGE_UNAVAILABLE;
- }
- }else{
- signatureImageQuality = BiometricsQualityIndicator.SIGNATURE_IMAGE_QUALITY_NOT_GOOD;
- }
- }else{
- signatureImageQuality = BiometricsQualityIndicator.SIGNATURE_IMAGE_UNAVAILABLE;
- }
- flowVars['updatedFingerBiometricMetaData'].setSignatureImageState(signatureImageQuality);
- flowVars['updatedFingerBiometricMetaData'].setProcessed(Boolean.TRUE);
- resultsMap = ['image.processor':'SIGNATURE_IMAGE_IMAGE_PROCESSOR',
- 'SIGNATURE_IMAGE_IMAGE_PROCESSOR': flowVars['updatedFingerBiometricMetaData']];
- resultsMap]"/>
- </processor-chain>
- </sub-flow>
- <flow name="prepareAndRateDemographicsData" processingStrategy="queued-120-threads-processor">
- <esper:listen statement="select * from AgencyBiometricsDataExchObjectEvent.std:unique(agencyPersonUniqueId) as
- unClassifiedPersonsDemographics where processed = Boolean.FALSE
- AND (processState in (NimcPersonObjectState.SOURCED_FROM_AGENCY, NimcPersonObjectState.RECEIVED_NOT_VETTED))"/>
- <processor-chain>
- <expression-component doc:name="prepareAndGradeBiometricsPackageQuality-exp-component">
- System.out.println("DEMOGRAPHICS VETTING AGENT: Unvetted Demographics Data Received: " + message.payloadAs(java.lang.String));
- if(payload['unClassifiedPersonsDemographics']!=null){
- unclassifiedPersonDemoData = payload['unClassifiedPersonsDemographics'].getUnderlying();
- if(unclassifiedPersonDemoData!=null){
- dateOfBirth = unclassifiedPersonDemoData.getDateOfBirth();
- dateTime = new org.mule.el.datetime.DateTime(flowVars['dateTimeToConvert'] , 'MM-dd-yyyy');
- personBirthDay = dateTime.toDate();
- flowVars['dateOfBirth'] = dateOfBirth;
- }
- }
- payload = unclassifiedPersonDemoData;
- </expression-component>
- <enricher target="#[flowVars['ageOfPersonToDate']]" doc:name="Enrich Space Lease Context">
- <processor-chain>
- <flow-ref name="subFlow-getAgeOfPersonDate" doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </enricher>
- <expression-transformer expression="#[ otherDetailsMap = payload.getOtherDetails(); if(otherDetailsMap==null){
- otherDetailsMap = ['age_of_person_todate': flowVars['ageOfPersonToDate']];
- payload.setOtherDetails(otherDetailsMap);
- }else {
- otherDetailsMap.put('age_of_person_todate', flowVars['ageOfPersonToDate']);
- payload.setOtherDetails(otherDetailsMap);
- }
- payload.setProcessState(NimcPersonObjectState.DEMOGRAPHICS_DATA_UPDATED);
- payload ]"/>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("DEMOGRAPHICS VETTING AGENT: Demographics Data Updated:" + message.payloadAs(java.lang.String));
- System.out.println("DEMOGRAPHICS VETTING AGENT: Sending to Intell Engine: " + message.payloadAs(java.lang.String));
- </expression-component>
- <esper:send eventPayload-ref="#[payload:]"/>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("DEMOGRAPHICS VETTING AGENT: Demographics Data Updated:" + message.payloadAs(java.lang.String));
- </expression-component>
- </processor-chain>
- </flow>
- <sub-flow name="subFlow-getAgeOfPersonDate">
- <processor-chain>
- <expression-component doc:name="Convert date in field 5"><![CDATA[
- date = new org.mule.el.datetime.DateTime(flowVars['dateOfBirth'], 'dd-MM-yyyy');
- flowVars['formattedDateTime'] = date.format('dd-MM-yy').toDate();
- if(flowVars['formattedDateTime'] !=null){
- flowVars['ageOfPerson'] = AgeCalculator.agetAtLastBirthDay(flowVars['formattedDateTime']);
- }
- payload = flowVars['ageOfPerson'];
- ]]>
- System.out.println("DATE TIME CONVERTER: Age of Person = : " + payload);
- </expression-component>
- </processor-chain>
- </sub-flow>
- <sub-flow name="subFlow-acquireDemoDataAndComputeAgeToAtLastBirthDay">
- <processor-chain>
- <enricher target="#[flowVars['demographicsDataOfPerson']]" doc:name="Get Demographics Data of Person">
- <processor-chain>
- <flow-ref name="subFlow-acquireDemographicsDataFromStorageSpace"
- doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </enricher>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("DEMOGRAPHICS VETTING AGENT: Demographics Data Acquired from Space:" + flowVars['demographicsDataOfPerson']);
- if(flowVars['demographicsDataOfPerson'] is AgencyBiometricsDataExchObject){
- if(flowVars['demographicsDataOfPerson']!=null){
- flowVars['dateOfBirthString'] = flowVars['demographicsDataOfPerson'].getDateOfBirth();
- }
- }
- if(flowVars['dateOfBirthString']!=null){
- System.out.println("DEMOGRAPHICS VETTING AGENT: Birth Date of Person acquired:" + flowVars['dateOfBirthString']);
- flowVars['demographicsDataOfPerson'] = null;
- }
- </expression-component>
- <processor-chain>
- <set-variable variableName="dateOfBirth" value="#[flowVars['dateOfBirthString']]"
- doc:name="The Payload is the TDO Object "/>
- <enricher target="#[flowVars['personAgeAtLastBirthDay']]"
- doc:name="Enrich Space Lease Context">
- <processor-chain>
- <flow-ref name="subFlow-getAgeOfPersonDate"
- doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </enricher>
- </processor-chain>
- </processor-chain>
- </sub-flow>
- <sub-flow name="subFlow-updateStatusOfFingerPrintsInBioMetaData">
- <processor-chain>
- <set-variable variableName="fingerPrintImagesMap"
- value="#[flowVars['personBiometricsData'].getFingerPrintScans()]"
- doc:name="Set FingerPrint Scan flowVars"/>
- <set-variable variableName="numberOfValidatedFingerPrints"
- value="#[Integer.valueOf(0)]"
- doc:name="Initialize the Number of Finger prints Validdated "/>
- <set-variable variableName="numberOfAvailableFingerPrints"
- value="#[payload.size()]"
- doc:name="Acquire the Number of Available Fingerprints"/>
- <set-variable variableName="confirmedFingerPrintsImagesArray"
- value="#[new ArrayList()]"
- doc:name="Initalize the Array of Confirmed Fingerprints "/>
- <set-variable variableName="biometricsImagesMetaData"
- value="#[payload]"
- doc:name="Pass payload to biometricsImagesMetaData flowVars"/>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("ELEGIBILITY MATCHING AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- flowVars['map_of_good_finger_print'] = [:];
- </expression-component>
- <foreach collection="#[flowVars['fingerPrintImagesMap'].values()]" doc:name="For Each"
- counterVariableName="counter"
- rootMessageVariableName="rootMessage">
- <expression-transformer expression="#[ if(payload is ImageDataBean){
- imageDataBeanObj = (ImageDataBean)payload;
- imageCode = imageDataBeanObj.getImageCode();
- imageObject = imageDataBeanObj.getImageObject();
- if(ImageUtils.confirmImageQualityOk(imageObject)){
- if(imageObject is byte[]){
- imageBuff = (byte[])imageObject;
- imageBitMap = Jnbis.wsq().decode(imageBuff).asBitmap();
- if(imageBitMap!=null){
- if(imageBitMap.getPixels().lenght()>0){
- flowVars['numberOfValidatedFingerPrints'].intValue()++;
- flowVars['confirmedFingerPrintsImagesArray'].add(imageCode);
- flowVars['map_of_good_finger_print'].put(imageCode, imageBuff);
- }
- }
- }
- }
- } flowVars['confirmedFingerPrintsImagesArray']]"/>
- </foreach>
- <expression-component doc:name="Update the Biometrics Status">
- if(!flowVars['confirmedFingerPrintsImagesArray'].isEmpty()){
- if(flowVars['confirmedFingerPrintsImagesArray'].size() >= minNumAcceptableFingers){
- flowVars['fingerPrintsQuality'] = BiometricsQualityIndicator.FINGER_PRINTS_ACCEPTABLE;
- }else{
- if(flowVars['confirmedFingerPrintsImagesArray'].size()<minNumAcceptableFingers){
- flowVars['fingerPrintsQuality'] = BiometricsQualityIndicator.FINGER_PRINTS_NOT_ACCEPTABLE;
- }
- }
- }else{
- System.out.println("DEMOGRAPHICS VETTING AGENT: There no Qualitative Finger Prints Tested");
- flowVars['fingerPrintsQuality'] = BiometricsQualityIndicator.FINGER_PRINTS_NOT_ACCEPTABLE;
- }
- flowVars['biometricsImagesMetaData'].setFingerPrintsState(flowVars['fingerPrintsQuality']);
- intValueOfverifiedFingerPrints = new Integer(flowVars['confirmedFingerPrintsImagesArray'].size());
- flowVars['biometricsImagesMetaData'].setNumberOfFingerPrintsVerified(intValueOfverifiedFingerPrints);
- if(flowVars['fingerPrintsQuality']== BiometricsQualityIndicator.FINGER_PRINTS_ACCEPTABLE){
- acceptedFingerPrintsObject = new NIMCFingerPrintObjects(flowVars['bvnNumber'], Long.valueOf(DateTimeUtils.currentTimeMillis()));
- if(flowVars['ageLastBirthDay']!=null || flowVars['ageLastBirthDay']>=0){
- acceptedFingerPrintsObject.setAgeLastBirthDay(flowVars['ageLastBirthDay']);
- }
- flowVars['nimc_finger_print_objects'] = acceptedFingerPrintsObject;
- if(!flowVars['map_of_good_finger_print'].isEmpty()){
- flowVars['nimc_finger_print_objects'].setFingersPrintsMap(flowVars['map_of_good_finger_print']);
- }
- flowVars['nimc_finger_print_objects'].setTotalNumberOfGoodPrints(flowVars['confirmedFingerPrintsImagesArray']);
- payload = ['image.processor':'FINGER_PRINTS_IMAGE_PROCESSOR',
- 'FINGER_PRINTS_IMAGE_PROCESSOR': flowVars['biometricsImagesMetaData'],
- 'nimc.finger.prints.bean': flowVars['nimc_finger_print_objects']];
- }else{
- payload = flowVars['fingerPrintsQuality'];
- }
- </expression-component>
- </processor-chain>
- </sub-flow>
- <flow name="listenAndQualifyPersonBiometricsIdentityDetailsPass">
- <esper:listen statement="select * from AgencyBiometricsDataExchObjectEvent
- match_recognize ( partition by agencyPersonUniqueId
- measures A.id as a_theId, A.processState as a_processState, B.processState as b_processState, B.id as b_theId
- C as demoGraphicsUpdatedState
- pattern (A+? B+ match_recognize_permute(C+?,D?))
- interval 10 seconds
- define
- A as (A.processState in (com.inspired.national.id.NimcPersonObjectState.SOURCED_FROM_AGENCY,
- com.inspired.national.id.NimcPersonObjectState.RECIEVED_AND_VETTED)),
- B as B.processState = com.inspired.national.id.NimcPersonObjectState.DEMOGRAPHICS_DATA_UPDATED,
- D as (min_age_for_adult > getAgeAtlastBirthDayFromString(C.dateOfBirth)),
- C as (TelephoneNumberUtils.validatePhoneNumbers(C.cellPhoneNumbers[0]) = false))" />
- <async>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("NOT ELEGIBILE IDENTITIES AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- </expression-component>
- </processor-chain>
- </async>
- </flow>
- <flow name="listenAndQualifyDemographicsOfPersonToBeRegisteredAdultPass">
- <esper:listen statement="select * from AgencyBiometricsDataExchObjectEvent
- match_recognize ( partition by agencyPersonUniqueId
- measures A.id as a_theId, A.processState as a_processState, B.processState as b_processState, B.id as b_theId
- C as demoGraphicsUpdatedState
- pattern (A+? B+ C+)
- interval 10 seconds
- define
- A as A.agencyPersonUniqueId=B.agencyPersonUniqueId and A.agencyPersonUniqueId=C.agencyPersonUniqueId and A.agencyPersonUniqueId=D.agencyPersonUniqueId
- and A.processState in (com.inspired.national.id.NimcPersonObjectState.SOURCED_FROM_AGENCY,
- com.inspired.national.id.NimcPersonObjectState.RECIEVED_AND_VETTED),
- B as B.processState = com.inspired.national.id.NimcPersonObjectState.DEMOGRAPHICS_DATA_UPDATED,
- C as (TelephoneNumberUtils.validatePhoneNumbers(C.cellPhoneNumbers[0]) = true
- and getAgeAtlastBirthDayFromString(C.dateOfBirth)>=min_age_for_adult))"/>
- <async>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("ELEGIBILITY MATCHING AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- if(payload['demoGraphicsUpdatedState']!=null){
- flowVars['personUpdatedDemographics'] = payload['demoGraphicsUpdatedState'];
- }
- if(payload['personUpdatedDemographics']!=null){
- flowVars['personUpdatedDemographics'].setProcessState(NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED);
- }
- payload = flowVars['personUpdatedDemographics'];
- System.out.println("ELEGIBILITY MATCHING AGENT: Identity Object Updated with 'DEMOGRAPHICS_DATA_PASSED'");
- System.out.println("ELEGIBILITY MATCHING AGENT: Sending Updated Object to Intell Engine");
- </expression-component>
- <esper:send eventPayload-ref="#[payload:]"/>
- </processor-chain>
- </async>
- </flow>
- <flow name="listenAndQualifyDemographicsOfPersonToBeRegisteredAdultFail">
- <esper:listen statement="select * from AgencyBiometricsDataExchObjectEvent
- match_recognize ( partition by agencyPersonUniqueId
- measures A.id as a_theId, A.processState as a_processState, B.processState as b_processState, B.id as b_theId
- C as demoGraphicsUpdatedState
- pattern (A+? B+? match_recognize_permute(C+?,D?))
- interval 10 seconds
- define
- A as (A.processState in (com.inspired.national.id.NimcPersonObjectState.SOURCED_FROM_AGENCY,
- com.inspired.national.id.NimcPersonObjectState.RECIEVED_AND_VETTED)),
- B as B.processState = com.inspired.national.id.NimcPersonObjectState.DEMOGRAPHICS_DATA_UPDATED,
- C as (TelephoneNumberUtils.validatePhoneNumbers(C.cellPhoneNumbers[0]) = false),
- D as (min_age_for_adult > getAgeAtlastBirthDayFromString(C.dateOfBirth)))"/>
- <async>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("ELEGIBILITY MATCHING AGENT; Identity Matched Results:" + message.payloadAs(java.lang.String));
- if(payload['demoGraphicsUpdatedState']!=null){
- flowVars['personUpdatedDemographics'] = payload['demoGraphicsUpdatedState'];
- }
- if(payload['personUpdatedDemographics']!=null){
- flowVars['personUpdatedDemographics'].setProcessState(NimcPersonObjectState.DEMOGRAPHICS_DATA_INCOMPLETE);
- }
- payload = flowVars['personUpdatedDemographics'];
- System.out.println("ELEGIBILITY MATCHING AGENT: Identity Object Updated with 'DEMOGRAPHICS_DATA_INCOMPLETE'");
- System.out.println("ELEGIBILITY MATCHING AGENT: Sending Updated Object to Intell Engine");
- </expression-component>
- <esper:send eventPayload-ref="#[payload:]"/>
- </processor-chain>
- </async>
- </flow>
- <flow name="listenForAccptedMaleNIMCNotRegisteredPersons">
- <esper:listen statement="select * from PersonBiometricsMetaDataEvent(facialImageState = BiometricsQualityIndicator.FACE_IMAGE_ACCEPTABLE,
- signatureImageState=BiometricsQualityIndicator.SIGNATURE_IMAGE_ACCEPTABLE,
- numberOfFingerPrintsVerified>=aceptable_number_of_fingers,
- fingerPrintsState in(BiometricsQualityIndicator.FINGER_PRINTS_ACCEPTABLE,
- BiometricsQualityIndicator.FINGER_PRINTS_IMAGE_QUALITY_OK)).std:unique(transactionId) as acceptMaleBiometricMetaObj,
- AgencyBiometricsDataExchObjectEvent(sex='male', processState = NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED).std:unique(id) as acceptedMaleDemoGraphicsData
- where acceptMaleBiometricMetaObj.agencyUniqueNumber = acceptedMaleDemoGraphicsData.agencyPersonUniqueId
- having getAgeAtlastBirthDayFromString(acceptedMaleDemoGraphicsData.dateOfBirth)>=min_age_for_adult" />
- <async>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("ELEGIBILITY MATCHING AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- if(payload['acceptMaleBiometricMetaObj']!=null){
- flowVars['biometricsMetaDataObject']=payload['acceptMaleBiometricMetaObj'].getUnderlying();
- }
- if(payload['acceptedMaleDemoGraphicsData']!=null){
- flowVars['personDemogData'] = payload['acceptedMaleDemoGraphicsData'].getUnderlying();
- }
- </expression-component>
- <flow-ref name="processAcceptedMatchedEventsFromIntellEngine"
- doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </async>
- </flow>
- <flow name="listenForFemaleAcceptedNIMCNotRegisteredPersons">
- <esper:listen statement="select * from pattern @SuppressOverlappingMatches [ every-distinct(acceptedFemaleDemoGraphicsData.id, 10 sec)
- personUnqBio = PersonBiometricsMetaDataEvent(facialImageState = BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED,
- signatureImageState=BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED,
- fingerPrintsState = BiometricsQualityIndicator.BIO_PACKAGE_UNQUALIFIED)
- -> (acceptedFemaleBiometricMetaObj = PersonBiometricsMetaDataEvent(agencyUniqueNumber = personUnqBio.agencyUniqueNumber,
- facialImageState = BiometricsQualityIndicator.FACE_IMAGE_ACCEPTABLE,
- signatureImageState=BiometricsQualityIndicator.SIGNATURE_IMAGE_ACCEPTABLE,
- numberOfFingerPrintsVerified>=aceptable_number_of_fingers,
- fingerPrintsState in (BiometricsQualityIndicator.FINGER_PRINTS_ACCEPTABLE,
- BiometricsQualityIndicator.FINGER_PRINTS_IMAGE_QUALITY_OK)) and
- acceptedFemaleDemoGraphicsData = AgencyBiometricsDataExchObjectEvent(sex='female',
- processState=NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED))]
- where acceptedFemaleBiometricMetaObj.agencyUniqueNumber = acceptedFemaleDemoGraphicsData.agencyPersonUniqueId
- having getAgeAtlastBirthDayFromString(acceptedFemaleDemoGraphicsData.dateOfBirth)>=min_age_for_adult
- or acceptedFemaleBiometricMetaObj.getAgeOfPersonAtLastBirthDay()>=min_age_for_adult"/>
- <async>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("ACCEPTED FEMALE IDENTITIES AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- if(payload['acceptedPersonsBiometricMetaObj']!=null){
- flowVars['biometricsMetaDataObject']=payload['acceptedPersonsBiometricMetaObj'].getUnderlying();
- }
- if(payload['acceptedFemaleDemoGraphicsData']!=null){
- flowVars['personDemogData'] = payload['acceptedFemaleDemoGraphicsData'].getUnderlying();
- }
- if(flowVars['personDemogData']!=null){
- flowVars['acceptedfemPersonUniqueId'] = flowVars['personDemogData'].getAgencyPersonUniqueId();
- flowVars['acceptedPersonDemographicsState'] = flowVars['personDemogData'].getProcessState();
- flowVars['sourceAgency'] = flowVars['personDemogData'].getFromPartyId();
- }
- if(flowVars['biometricsMetaDataObject']!=null){
- System.out.println("ACCEPTED FEMALE IDENTITIES AGENT: Biometrics Metata Data Available: " + flowVars['biometricsMetaDataObject']);
- }
- if(flowVars['acceptedfemPersonUniqueId']!=null){
- System.out.println("ACCEPTED FEMALE IDENTITIES AGENT: Person's Unique Id available: " + flowVars['acceptedfemPersonUniqueId']);
- }
- </expression-component>
- <enricher target="#[flowVars['acceptedAdultDemographicsDataMap']]"
- doc:name="Enrich Space Lease Context">
- <flow-ref name="subFlow-convertAgencyIdObjectToDemographicsDataMap"
- doc:name="Send Response Back to Agency"/>
- </enricher>
- <expression-transformer expression="#[ acceptedPersonsIdentityObj = new NIMCAcceptedIdentityObject(message.id, flowVars['acceptedfemPersonUniqueId'],
- BiometricsQualityIndicator.BIO_PACKAGE_ACCEPTABLE, flowVars['personDemogData'],
- flowVars['acceptedPersonDemographicsState'], flowVars['acceptedAdultDemographicsDataMap']);
- acceptedPersonsIdentityObj.setTimeStamp(Long.valueOf(DateTimeUtils.currentTimeMillis()));
- acceptedPersonsIdentityObj.setProcessed(Boolean.FALSE);
- acceptedPersonsIdentityObj.setSex(flowVars['personDemogData'].getSex());
- acceptedPersonsIdentityObj.setFromPartyId(flowVars['sourceAgency']);
- acceptedPersonsIdentityObj]"/>
- <esper:send eventPayload-ref="#[payload:]"/>
- </processor-chain>
- </async>
- </flow>
- <sub-flow name="subFlow-convertAgencyIdObjectToDemographicsDataMap">
- <processor-chain>
- <and-filter>
- <payload-type-filter expectedType="com.inspired.national.id.AgencyBiometricsDataExchObject"/>
- <expression-filter expression="#[groovy:payload.getClass().getName() != 'org.mule.transport.NullPayload']" doc:name="Expression"/>
- </and-filter>
- <json:object-to-json-transformer name="biometricsToJsonConverter"
- sourceClass="com.inspired.national.id.AgencyBiometricsDataExchObject"/>
- <json:json-to-object-transformer name="jsonToArrayListOfIdentityObjects"
- returnClass="java.util.HashMap"/>
- </processor-chain>
- </sub-flow>
- <flow name="acquire-biometrics-object-from-mongo-db">
- <enricher target="#[flowVars['person_biometrics_package']]" >
- <first-successful>
- <processor-chain>
- <mongo:find-one-object-using-query-map collection="#['NimcAcceptedBiometricsColl']"
- config-ref="identitiesStoreMongoDbConfig">
- <mongo:query-attributes>
- <mongo:query-attribute key="sourceAgency">#[flowVars['source_agency']]</mongo:query-attribute>
- <mongo:query-attribute key="personUniqueAgencyId">#[flowVars['personsUniqueId']]</mongo:query-attribute>
- </mongo:query-attributes>
- </mongo:find-one-object-using-query-map>
- <json:json-to-object-transformer doc:name="JSON to Object"
- returnClass="com.inspired.national.id.exchange.NIMCAcceptedPersonBiometrics"/>
- </processor-chain>
- </first-successful>
- </enricher>
- </flow>
- <flow name="listenForNIMCAcceptedIdentitiesAndSendAndRender">
- <esper:listen statement="select * from pattern @SuppressOverlappingMatches [ every-distinct(acceptedFemaleIdentityObj.transactionId, acceptedFemaleIdentityObj.agencyPersonUniqueId, 10 sec)
- acceptedDemoGraphicsData = AgencyBiometricsDataExchObjectEvent(processState=NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED)
- -> nimcAcceptedPersonIdentityObj = NIMCAcceptedIdentityObjectEvent( agencyPersonUniqueId = acceptedDemoGraphicsData.agencyPersonUniqueId,
- genBiometricsStateIndicator=DEMOGRAPHICS_DATA_UNACCEPTABLE,
- genBiometricsStateIndicator=BiometricsQualityIndicator.BIO_PACKAGE_ACCEPTABLE ) where timer:within(10 seconds)]
- where nimcAcceptedPersonIdentityObj.processed = Boolean.FALSE"/>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("NIMC ACCEPTED PERSON RECEIVING AGENT: Identity of Accepted person available: " + message.payloadAs(java.lang.String));
- if(payload['acceptedDemoGraphicsData']!=null){
- flowVars['nimcAceptedPeronsDemogData'] = payload['acceptedDemoGraphicsData'].getUnderlying();
- }
- if(payload['nimcAcceptedPersonIdentityObj']!=null){
- flowVars['nimcAcceptedPersonIdentityData'] = payload['nimcAcceptedPersonIdentityObj'].getUnderlying();
- }
- if(flowVars['nimcAcceptedPersonIdentityData']!=null){
- flowVars['personsUniqueId'] = flowVars['nimcAcceptedPersonIdentityData'].getAgencyPersonUniqueId();
- flowVars['source_agency'] = flowVars['nimcAcceptedPersonIdentityData'].getFromPartyId();
- }
- message.outboundProperties['person_bvn_number'] = flowVars['personsUniqueId'];
- message.outboundProperties['source_agency'] = flowVars['source_agency'];
- </expression-component>
- <enricher target="#[flowVars['fullAcceptedBiometricsData']]" doc:name="Enrich Space Lease Context">
- <processor-chain>
- <flow-ref name="subFlow-acquireBiometricsObjectsFromStorageSpace"
- doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </enricher>
- <expression-transformer expression="#[ acceptedPersonsIdentityDetails = (NIMCAcceptedIdentityObject)flowVars['nimcAcceptedPersonIdentityData'];
- if(flowVars['fullAcceptedBiometricsData']!=null){
- acceptedPersonsIdentityDetails.setBioMetricsDetails(flowVars['fullAcceptedBiometricsData']);
- personAgencyIdentityObj = acceptedPersonsIdentityDetails.getPersonIdentityDataObject();
- if(personAgencyIdentityObj!=null){
- personAgencyIdentityObj.setPersonBiometricDetails(flowVars['fullAcceptedBiometricsData']);
- acceptedPersonsIdentityDetails.setPersonIdentityDataObject(personAgencyIdentityObj);
- }
- }
- if(acceptedPersonsIdentityDetails.getPersonIdentityDataObject()==null){
- if(flowVars['nimcAceptedPeronsDemogData']!=null){
- acceptedPersonsIdentityDetails.setPersonIdentityDataObject(flowVars['nimcAceptedPeronsDemogData']);
- }
- }
- acceptedPersonsIdentityDetails ]"/>
- <set-property propertyName="person_bvn" value="#[flowVars['personsUniqueId']]" doc:name="Set Property"/>
- <set-property propertyName="person_bvn_number" value="#[flowVars['personsUniqueId']]" doc:name="Set Property"/>
- <jms:outbound-endpoint queue="process-aggregated-dentity-objct-from-intell-engine"
- connector-ref="jmsConnector-next">
- <message-properties-transformer doc:name="Message Properties"
- scope="invocation">
- <add-message-property key="priority" value="7"/>
- <add-message-property key="person_bvn" value="flowVars['personsUniqueId']"/>
- <add-message-property key="person_bvn_number" value="flowVars['personsUniqueId']"/>
- </message-properties-transformer>
- <jms:transaction action="ALWAYS_BEGIN" />
- </jms:outbound-endpoint>
- </processor-chain>
- </flow>
- <flow name="listenForNotEligibleNIMCNotRegisteredPersonsWithNotGoodBio">
- <esper:listen statement="select * from pattern @SuppressOverlappingMatches [ every-distinct(notAcceptBioPersonsDemoGraphicsData.id, 10 sec)
- notAcceptBioPersonsDemoGraphicsData = AgencyBiometricsDataExchObjectEvent(
- processState in (NimcPersonObjectState.DEMOGRAPHICS_DATA_UPDATED, NimcPersonObjectState.RECIEVED_AND_VETTED))
- -> AgencyBiometricsDataExchObjectEvent(processState NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED)
- and notAcceptBioPersonsBiometricMetaObj = PersonBiometricsMetaDataEvent( agencyUniqueNumber=notAcceptBioPersonsDemoGraphicsData.agencyPersonUniqueId,
- facialImageState != BiometricsQualityIndicator.FACE_IMAGE_ACCEPTABLE OR
- signatureImageState != BiometricsQualityIndicator.SIGNATURE_IMAGE_ACCEPTABLE or
- (aceptable_number_of_fingers > numberOfFingerPrintsVerified)
- or not PersonBiometricsMetaDataEvent(agencyUniqueNumber=notAcceptBioPersonsDemoGraphicsData.agencyPersonUniqueId,
- fingerPrintsState in(BiometricsQualityIndicator.FINGER_PRINTS_ACCEPTABLE,
- BiometricsQualityIndicator.FINGER_PRINTS_IMAGE_QUALITY_OK))) @consume where timer:within(60 sec)]
- where notAcceptBioPersonsBiometricMetaObj.agencyUniqueNumber = notAcceptBioPersonsDemoGraphicsData.agencyPersonUniqueId
- having getAgeAtlastBirthDayFromString(notAcceptBioPersonsDemoGraphicsData.dateOfBirth)>=min_age_for_adult
- or notAcceptBioPersonsBiometricMetaObj.getAgeOfPersonAtLastBirthDay()>=min_age_for_adult"/>
- <async processingStrategy="queued-120-threads-processor">
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("NOT ELEGIBILE IDENTITIES AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- if(payload['notAcceptBioPersonsDemoGraphicsData']!=null){
- flowVars['notAcceptedBioDemoData'] = payload['notAcceptBioPersonsDemoGraphicsData'].getUnderlying();
- }
- payload = flowVars['notAcceptedBioDemoData'];
- </expression-component>
- <flow-ref name="processUnacceptedDataEventsFromIntellEngine"
- doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </async>
- </flow>
- <flow name="listenForNotEligibleAdultNIMCNotRegisteredPersonsWithNotGoodDemographics">
- <esper:listen statement="select * from pattern @SuppressOverlappingMatches [every-distinct(notAcceptPersonsDemoGraphicsData.id, 10 sec)
- notAcceptPersonsDemoGraphicsData = AgencyBiometricsDataExchObjectEvent(processState != NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED or
- processState = NimcPersonObjectState.DEMOGRAPHICS_DATA_UNACCEPTABLE)
- and notAcceptedPersonsBiometricMetaObj = PersonBiometricsMetaDataEvent(processState != NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED or
- processState = NimcPersonObjectState.DEMOGRAPHICS_DATA_UNACCEPTABLE)]
- where notAcceptedPersonsBiometricMetaObj.agencyUniqueNumber = notAcceptPersonsDemoGraphicsData.agencyPersonUniqueId
- having getAgeAtlastBirthDayFromString(notAcceptPersonsDemoGraphicsData.dateOfBirth)>=min_age_for_adult"/>
- <async processingStrategy="queued-120-threads-processor">
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("ELEGIBILITY MATCHING AGENT: Identity Matched Results:" + message.payloadAs(java.lang.String));
- if(payload['notAcceptPersonsDemoGraphicsData']!=null){
- flowVars['notAcceptedIdDemodata'] = payload['notAcceptPersonsDemoGraphicsData'].getUnderlying();
- }
- if(flowVars['notAcceptedIdDemodata']!=null){
- System.out.println("REJECTED IDENTITIES AGENT: Identity: " + message.payloadAs(java.lang.String));
- }
- payload = flowVars['notAcceptedIdDemodata'];
- </expression-component>
- <flow-ref name="processUnacceptedDataEventsFromIntellEngine" doc:name="Send Response Back to Agency"/>
- </processor-chain>
- </async>
- </flow>
- <flow name="listenForNonAdultNIMCRegisteredPersonsUsingPatterns">
- <description>
- This Agent listens for a Non Adult Elligible For Registration
- </description>
- <esper:listen statement="select * from PersonBiometricsMetaDataEvent(facialImageState!=null, facialImageState = BiometricsQualityIndicator.FACE_IMAGE_ACCEPTABLE).
- std:unique(transactionId) as infantPersonsBiometricMetaObj,
- AgencyBiometricsDataExchObjectEvent(processState=NimcPersonObjectState.DEMOGRAPHICS_DATA_PASSED).std:unique(id) as infantPersonsDemoGraphicsData
- where infantPersonsBiometricMetaObj.agencyUniqueNumber = infantPersonsDemoGraphicsData.agencyPersonUniqueId
- having min_age_for_adult > getAgeAtlastBirthDayFromString(infantPersonsDemoGraphicsData.dateOfBirth)"/>
- <async processingStrategy="queued-120-threads-processor">
- <processor-chain>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("ACCEPTED INFANT INTELL AGENT: Data Acquired from iNTELL Intel Engine:" + message.payloadAs(java.lang.String));
- flowVars['payloadReceived'] = payload;
- if(payload['infantPersonsDemoGraphicsData']!=null){
- flowVars['acceptedInfantDemoData'] = payload['infantPersonsDemoGraphicsData'].getUnderlying();
- }
- if(payload['infantPersonsBiometricMetaObj']!=null){
- flowVars['acceptedInfantBioMetaData'] = payload['infantPersonsBiometricMetaObj'];
- }
- if(flowVars['acceptedInfantBioMetaData']!=null){
- flowVars['bioSpaceStorageId'] = flowVars['acceptedInfantBioMetaData'].getStorageId();
- System.out.println("DATA AGGREGATOR AGENTS: Space Storage Id: " + flowVars['bioSpaceStorageId']);
- flowVars['bvnNumber'] = flowVars['acceptedInfantBioMetaData'].getAgencyUniqueNumber();
- System.out.println("DATA AGGREGATOR AGENTS: The Matching Data acquired for person with BVN Number: " + flowVars['bvnNumber']);
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Meta Data unavailable");
- }
- if(flowVars['acceptedInfantDemoData']!=null){
- flowVars['acceptedInfantDemoDataUniqueId'] = flowVars['acceptedInfantDemoData'].getAgencyPersonUniqueId();
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Demographics data not acquired");
- }
- if(flowVars['bvnNumber']==null){
- if(flowVars['acceptedInfantDemoDataUniqueId']!=null){
- flowVars['bvnNumber'] = flowVars['acceptedInfantDemoDataUniqueId'];
- }
- payload = flowVars['acceptedInfantDemoData'];
- System.out.println("DATA AGGREGATOR AGENTS: Persons DemoGraphics Data: " + message.payloadAs(java.lang.String));
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Meta Data: " + flowVars['acceptedInfantBioMetaData']);
- System.out.println("DATA AGGREGATOR AGENTS: Person's BVN Number: " + flowVars['bvnNumber']);
- </expression-component>
- <!-- <set-variable variableName="nimcBiometricsStorageGSpace"
- value="#[(GigaSpace)app.registry['nimcCentralStorageGSpace']]"
- doc:name="The Payload is the TDO Object "/>-->
- <enricher target="#[flowVars['acceptedInfantBiometricsData']]"
- doc:name="Enrich Space Lease Context">
- <flow-ref name="subFlow-acquireBiometricsObjectsFromStorageSpace"
- doc:name="Send Response Back to Agency"/>
- </enricher>
- <expression-component doc:name="processFlowMeterStatus">
- if(flowVars['acceptedInfantBiometricsData']!=null){
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Returned from Space for Person With ID: " + flowVars['personBiometricsData'].getId() + "Acquired");
- flowVars['acceptInfPersonDemogData'].setPersonBiometricDetails(flowVars['acceptedInfantBiometricsData']);
- flowVars['updateInfantIdentityObject'] = flowVars['acceptInfPersonDemogData'];
- payload = flowVars['updateInfantIdentityObject'];
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Returned from Space for Person is Null: ");
- }
- if(payload!=null){
- System.out.println("DATA AGGREGATOR AGENTS: Payload of Person is : " + payload);
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Demographics Payload is Null: ");
- }
- if(flowVars['acceptInfPersonDemogData']!=null){
- System.out.println("DATA AGGREGATOR AGENTS: Demographics Data for Person is : " + flowVars['acceptInfPersonDemogData']);
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Demographics Data Object is Null: ");
- }
- </expression-component>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics for : " + flowVars['bvnNumber'] + "Acquired");
- </expression-component>
- <set-property propertyName="priority" value="#[7]" />
- <set-property propertyName="person_bvn" value="#[flowVars['bvnNumber']]" />
- <jms:outbound-endpoint queue="process-aggregated-dentity-objct-from-intell-engine"
- connector-ref="jmsConnector-next">
- <jms:transaction action="ALWAYS_BEGIN" />
- </jms:outbound-endpoint>
- </processor-chain>
- </async>
- </flow>
- <!-- <sub-flow name="computeAgePfpersonAtLastBirthDayFromDateString">
- <processor-chain>
- </processor-chain>
- </sub-flow>-->
- <sub-flow name="processAcceptedMatchedEventsFromIntellEngine">
- <async>
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("DATA AGGREGATOR AGENTS: Message Matched OK: " + message.payloadAs(java.lang.String));
- if(flowVars['biometricsMetaDataObject']==null){
- flowVars['biometricsMetaDataObject'] = payload['personsBiometricMetaObj'].getUnderlying();
- }
- if(flowVars['biometricsMetaDataObject']!=null){
- flowVars['bioSpaceStorageId'] = flowVars['biometricsMetaDataObject'].getStorageId();
- System.out.println("DATA AGGREGATOR AGENTS: Space Storage Id: " + flowVars['bioSpaceStorageId']);
- flowVars['bvnNumber'] = flowVars['biometricsMetaDataObject'].getAgencyUniqueNumber();
- System.out.println("DATA AGGREGATOR AGENTS: The Matching Data acquired for person with BVN Number: " + flowVars['bvnNumber']);
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Meta Data unavailable");
- }
- if(flowVars['personDemogData']==null){
- flowVars['personDemogData'] = payload['personsDemoGraphicsData'].getUnderlying();
- }
- if(flowVars['personDemogData']!=null){
- flowVars['personDemoDataUniqueId'] = flowVars['personDemogData'].getAgencyPersonUniqueId();
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Demographics data not acquired");
- }
- if(flowVars['bvnNumber']==null){
- if(flowVars['personDemoDataUniqueId']!=null){
- flowVars['bvnNumber'] = flowVars['personDemoDataUniqueId'];
- }
- }
- payload = flowVars['personDemogData'];
- System.out.println("DATA AGGREGATOR AGENTS: Persons DemoGraphics Data: " + message.payloadAs(java.lang.String));
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Meta Data: " + flowVars['biometricsMetaDataObject']);
- System.out.println("DATA AGGREGATOR AGENTS: Bioemtrics Storage Id: " + flowVars['bioSpaceStorageId']);
- System.out.println("DATA AGGREGATOR AGENTS: Person's BVN Number: " + flowVars['bvnNumber']);
- </expression-component>
- <set-variable variableName="nimcBiometricsStorageGSpace"
- value="#[(GigaSpace)app.registry['nimcCentralStorageGSpace']]"
- doc:name="The Payload is the TDO Object "/>
- <enricher target="#[flowVars['personBiometricsData']]"
- doc:name="Enrich Space Lease Context">
- <flow-ref name="subFlow-acquireBiometricsObjectsFromStorageSpace"
- doc:name="Send Response Back to Agency"/>
- </enricher>
- <expression-component doc:name="processFlowMeterStatus">
- if(flowVars['personBiometricsData']!=null){
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Returned from Space for Person With ID: " + flowVars['personBiometricsData'].getId() + "Acquired");
- flowVars['personDemogData'].setPersonBiometricDetails(flowVars['personBiometricsData']);
- flowVars['updatePersonIdentityObject'] = flowVars['personDemogData'];
- payload = flowVars['updatePersonIdentityObject'];
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics Returned from Space for Person is Null: ");
- }
- if(payload!=null){
- System.out.println("DATA AGGREGATOR AGENTS: Payload of Person is : " + payload);
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Demographics Payload is Null: ");
- }
- if(flowVars['personDemogData']!=null){
- System.out.println("DATA AGGREGATOR AGENTS: Demographics Data for Person is : " + flowVars['personDemogData']);
- }else{
- System.out.println("DATA AGGREGATOR AGENTS: Demographics Data Object is Null: ");
- }
- </expression-component>
- <!--</processor-chain>-->
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics for : " + flowVars['bvnNumber'] + "Acquired");
- </expression-component>
- <set-property propertyName="priority" value="#[7]" doc:name="Set Property"/>
- <set-property propertyName="person_bvn" value="#[flowVars['bvnNumber']]" doc:name="Set Property"/>
- <jms:outbound-endpoint queue="process-aggregated-dentity-objct-from-intell-engine"
- connector-ref="jmsConnector-next">
- <jms:transaction action="ALWAYS_BEGIN" />
- </jms:outbound-endpoint>
- </processor-chain>
- </async>
- </sub-flow>
- <sub-flow name="subFlow-acquireDemographicsDataFromStorageSpace">
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics for : " + flowVars['bvnNumber'] + "Acquired");
- template = new AgencyBiometricsDataExchObject();
- template.setId(flowVars['bvnNumber']);
- flowVars['demographicsSpaceTemplate'] = template;
- </expression-component>
- <first-successful>
- <invoke object-ref="nimcCentralStorageGSpace"
- method="takeIfExistsById"
- methodArguments="#[com.inspired.national.id.AgencyBiometricsDataExchObject.class, flowVars['bvnNumber']]"
- methodArgumentTypes="java.lang.Class, java.lang.Object"
- name="takeIfExistsBysId" doc:name="Invoke"/>
- <invoke object-ref="nimcCentralStorageGSpace"
- method="take"
- methodArguments="#[flowVars['demographicsSpaceTemplate']]"
- methodArgumentTypes="java.lang.Object"
- name="take" doc:name="Invoke"/>
- </first-successful>
- <expression-component doc:name="processFlowMeterStatus">
- if(payload!=null){
- System.out.println("SPACE WORKER AGENTS: Demograpgics Object Acquired for person: " + flowVars['bvnNumber']);
- System.out.println("SPACE WORKER AGENTS: Object Type Acquired from Space: " + payload.getClass().getName());
- }else{
- System.out.println("SPACE WORKER AGENTS: No Demographics Object returned From Space");
- }
- </expression-component>
- </processor-chain>
- </sub-flow>
- <sub-flow name="subFlow-acquireBiometricsObjectsFromStorageSpace">
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("DATA AGGREGATOR AGENTS: Biometrics for : " + flowVars['personsUniqueId'] + "Acquired");
- template = new PersonBiometricDetails();
- template.setId(flowVars['personsUniqueId']);
- flowVars['biometricsSpaceTemplate'] = template;
- </expression-component>
- <first-successful>
- <invoke object-ref="nimcCentralStorageGSpace"
- method="takeIfExistsById"
- methodArguments="#[com.inspired.national.id.PersonBiometricDetails.class, flowVars['personsUniqueId']]"
- methodArgumentTypes="java.lang.Class, java.lang.Object"
- name="takeIfExistsBysId" doc:name="Invoke"/>
- <invoke object-ref="nimcCentralStorageGSpace"
- method="take"
- methodArguments="#[flowVars['biometricsSpaceTemplate']]"
- methodArgumentTypes="java.lang.Object"
- name="take" doc:name="Invoke"/>
- </first-successful>
- <expression-component doc:name="processFlowMeterStatus">
- if(payload!=null){
- System.out.println("SPACE WORKER AGENTS: Biometrics Object Acquired for person: " + flowVars['personsUniqueId']);
- System.out.println("SPACE WORKER AGENTS: Object Type Acquired from Space: " + payload.getClass().getName());
- }else{
- System.out.println("SPACE WORKER AGENTS: No Object returned From SPace");
- }
- </expression-component>
- </processor-chain>
- </sub-flow>
- <flow name="processUnacceptedDataEventsFromIntellEngine"
- processingStrategy="queued-120-threads-processor">
- <processor-chain>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("REJECTED IDENTITIES PROCESSING AGENTS: Entry Rejected for : " + payload.getAgencyPersonUniqueId());
- </expression-component>
- </processor-chain>
- </flow>
- <sub-flow name="sendImageObjectsToSpace">
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("SPACE DISPATCHER: Going to write Message to Space");
- </expression-component>
- <expression-filter expression="#[payload!=null]" doc:name="Filter empty payload"/>
- <enricher target="#[flowVars['writeLeaseContext']]" doc:name="Enrich Space Lease Context ">
- <processor-chain>
- <set-variable variableName="nimcLocalStorageGSpace"
- value="#[(GigaSpace)app.registry['nimcCentralStorageGSpace']]"
- doc:name="The Payload is the TDO Object "/>
- <set-variable variableName="xfer_to_cntrl_write_lease_time" value="#[20000]"
- doc:name="20 Seconds lease Time "/>
- <set-variable variableName="update_time_out" value="#[45000L]"
- doc:name="20 Seconds lease Time "/>
- <choice>
- <when expression="#[payload is Object[]]">
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("BIOMETRIC IMAGE SPACE STORE: This is an Array");
- </expression-component>
- <expression-transformer expression="#[ objectArrayToWrite = (Object[])payload;
- lseCtxObject = flowVars['nimcLocalStorageGSpace'].writeMultiple(
- objectArrayToWrite, flowVars['xfer_to_cntrl_write_lease_time'],
- flowVars['update_time_out'],
- WriteModifiers.UPDATE_OR_WRITE); lseCtxObject]"/>
- </when>
- <when expression="#[!(payload is Object[])]">
- <expression-transformer expression="#[lseCtxObject = flowVars['nimcLocalStorageGSpace'].write(
- payload, flowVars['xfer_to_cntrl_write_lease_time'], flowVars['update_time_out'],
- WriteModifiers.UPDATE_OR_WRITE); lseCtxObject]"/>
- </when>
- <otherwise>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("BIOMETRIC IMAGE SPACE STORE:: " + message.payloadAs(java.lang.String));
- </expression-component>
- </otherwise>
- </choice>
- </processor-chain>
- </enricher>
- <set-payload value="#[flowVars['writeLeaseContext'].getUID()]"/>
- <expression-component doc:name="processFlowMeterStatus">
- System.out.println("BIOMETRIC IMAGE SPACE STORE: Identity Object Written to Storage Space with Uid: " + flowVars['writeLeaseContext'].getUID());
- payload = flowVars['writeLeaseContext'].getUID();
- </expression-component>
- </sub-flow>
- <flow name="storeIdentityObjectsInMongoDb">
- <jms:inbound-endpoint queue="store.identity.object.in.mongo.db.edp"
- connector-ref="jmsConnector-next">
- <jms:transaction action="JOIN_IF_POSSIBLE" />
- </jms:inbound-endpoint>
- <async>
- <processor-chain>
- <enricher target="#[flowVars['collection-exists']]">
- <mongo:exists-collection collection="#[message.inboundProperties['mongo_object_coll_name']]"
- config-ref="identitiesStoreMongoDbConfig"/>
- </enricher>
- <choice>
- <when expression="#[flowVars['collection-exists']=='false']">
- <processor-chain>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("MONGO-DB STORE: Going to Create Collection With Name: " + message.inboundProperties['mongo_object_coll_name'] );
- </expression-component>
- <mongo:create-collection collection="#[message.inboundProperties['mongo_object_coll_name']]"
- capped="true"
- config-ref="identitiesStoreMongoDbConfig"/>
- </processor-chain>
- </when>
- <otherwise>
- <expression-component doc:name="Update Activiti Process Parameters">
- System.out.println("MONGO-DB STORE: Collection " + message.inboundProperties['mongo_object_coll_name'] + " Already Exist");
- </expression-component>
- </otherwise>
- </choice>
- <expression-filter expression="#[flowVars['collection-exists']=='true']" doc:name="Expression"/>
- <set-payload value="#[message.inboundProperties['object_of_interest']]"
- doc:name="Set Journal Voucher as new Payload"/>
- <first-successful>
- <mongo:insert-object collection="#[message.inboundProperties['mongo_object_coll_name']]"
- writeConcern="SAFE"
- dbObject-ref="#[payload]"
- config-ref="identitiesStoreMongoDbConfig"/>
- <flow-ref name="setNullComponent" />
- </first-successful>
- <custom-interceptor class="com.inspired.mule.interceptors.GeneralLoggingInterceptor"/>
- <remove-property propertyName="object_of_interest" doc:name="Delete Property"/>
- <remove-property propertyName="mongo_object_coll_name" doc:name="Delete Property"/>
- </processor-chain>
- </async>
- </flow>
- </mule>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement