You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by my...@apache.org on 2018/06/21 16:19:10 UTC

[fineract-cn-notifications] 02/15: Increment One

This is an automated email from the ASF dual-hosted git repository.

myrle pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-notifications.git

commit 9f886dd56dd4377fcb12a4d47116e9331ba7c3de
Author: Ebenezer Graham <eg...@alustudent.com>
AuthorDate: Sun Jun 10 01:07:54 2018 +0400

    Increment One
    
    Commit for increment one
---
 .gitignore                                         |   17 +
 HEADER                                             |   16 +
 LICENSE                                            |  201 +
 NOTICE.txt                                         |    5 +
 api/build.gradle                                   |   57 +
 .../notification/api/v1/PermittableGroupIds.class  |  Bin 0 -> 328 bytes
 .../api/v1/client/IamATeapotException.class        |  Bin 0 -> 392 bytes
 .../api/v1/client/NotificationManager.class        |  Bin 0 -> 1462 bytes
 .../notification/api/v1/domain/Notification.class  |  Bin 0 -> 1782 bytes
 .../cn/notification/api/v1/domain/Sample.class     |  Bin 0 -> 1752 bytes
 .../api/v1/events/NotificationEventConstants.class |  Bin 0 -> 666 bytes
 .../cn/notification/api/v1/domain/SampleTest.class |  Bin 0 -> 3710 bytes
 api/settings.gradle                                |   18 +
 .../notification/api/v1/PermittableGroupIds.java   |   25 +
 .../api/v1/client/IamATeapotException.java         |   23 +
 .../api/v1/client/NotificationManager.java         |   59 +
 .../notification/api/v1/domain/Notification.java   |   76 +
 .../cn/notification/api/v1/domain/Sample.java      |   72 +
 .../api/v1/events/NotificationEventConstants.java  |   35 +
 .../cn/notification/api/v1/domain/SampleTest.java  |   57 +
 build.gradle                                       |   60 +
 component-test/build.gradle                        |   56 +
 .../cn/notification/SuiteTestEnvironment.class     |  Bin 0 -> 1528 bytes
 .../TestSample$TestConfiguration.class             |  Bin 0 -> 1398 bytes
 .../fineract/cn/notification/TestSample.class      |  Bin 0 -> 5890 bytes
 .../fineract/cn/notification/TestSuite.class       |  Bin 0 -> 695 bytes
 .../listener/MigrationEventListener.class          |  Bin 0 -> 1482 bytes
 .../listener/SampleEventListener.class             |  Bin 0 -> 1473 bytes
 component-test/settings.gradle                     |   18 +
 .../cn/notification/SuiteTestEnvironment.java      |   48 +
 .../fineract/cn/notification/TestSample.java       |  137 +
 .../apache/fineract/cn/notification/TestSuite.java |   30 +
 .../listener/MigrationEventListener.java           |   50 +
 .../notification/listener/SampleEventListener.java |   50 +
 gradle/wrapper/gradle-wrapper.jar                  |  Bin 0 -> 54212 bytes
 gradle/wrapper/gradle-wrapper.properties           |    6 +
 gradlew                                            |  172 +
 gradlew.bat                                        |   84 +
 service/build.gradle                               |   85 +
 service/out/production/resources/application.yml   |   96 +
 service/out/production/resources/bootstrap.yml     |   22 +
 .../db/migrations/mariadb/V1__initial_setup.sql    |   32 +
 service/settings.gradle                            |   18 +
 .../service/NotificationApplication.java           |   32 +
 .../service/NotificationConfiguration.java         |  101 +
 .../cn/notification/service/ServiceConstants.java  |   23 +
 .../internal/command/InitializeServiceCommand.java |   31 +
 .../service/internal/command/SampleCommand.java    |   42 +
 .../command/handler/MigrationAggregate.java        |   67 +
 .../internal/command/handler/SampleAggregate.java  |   66 +
 .../service/internal/mapper/SampleMapper.java      |   45 +
 .../repository/EmailGatewayConfiguration.java      |  114 +
 .../EmailGatewayConfigurationRepository.java       |   29 +
 .../repository/SMSGatewayConfiguration.java        |   94 +
 .../SMSGatewayConfigurationRepository.java         |   29 +
 .../service/internal/service/EmailSender.java      |   44 +
 .../service/internal/service/SMSSender.java        |   54 +
 .../service/internal/service/SampleService.java    |   47 +
 .../service/listener/AccountingEventListener.java  |  130 +
 .../service/listener/ChequeEventListener.java      |   84 +
 .../service/listener/CustomerEventListener.java    |  201 +
 .../service/listener/DepositEventListener.java     |   60 +
 .../service/listener/IdentityEventListener.java    |   87 +
 .../service/listener/OfficeEventListener.java      |  120 +
 .../service/listener/PayrollEventListener.java     |   61 +
 .../service/listener/PortfolioEventListener.java   |  151 +
 .../service/listener/TellerEventListener.java      |  146 +
 .../service/rest/NotificationRestController.java   |  119 +
 service/src/main/resources/application.yml         |   78 +
 service/src/main/resources/bootstrap.yml           |   22 +
 .../db/migrations/mariadb/V1__initial_setup.sql    |   32 +
 settings.gradle                                    |   23 +
 shared.gradle                                      |  111 +
 system-analysis.mdj                                | 4104 ++++++++++++++++++++
 74 files changed, 7972 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..99b514a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+.gradle
+.idea
+build/
+target/
+detail
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+*.iml
+
+*.log
+
+*.toDelete
diff --git a/HEADER b/HEADER
new file mode 100644
index 0000000..90705e0
--- /dev/null
+++ b/HEADER
@@ -0,0 +1,16 @@
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8dada3e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/NOTICE.txt b/NOTICE.txt
new file mode 100644
index 0000000..41f69b8
--- /dev/null
+++ b/NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Fineract CN Notification
+Copyright [2017-2018] The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file
diff --git a/api/build.gradle b/api/build.gradle
new file mode 100644
index 0000000..5b9924a
--- /dev/null
+++ b/api/build.gradle
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE'
+    }
+}
+
+plugins {
+    id "com.github.hierynomus.license" version "0.13.1"
+    id("org.nosphere.apache.rat") version "0.3.1"
+}
+
+apply from: '../shared.gradle'
+
+dependencies {
+    compile(
+            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-feign'],
+            [group: 'org.apache.fineract.cn', name: 'api', version: versions.frameworkapi],
+            [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator],
+            [group: 'org.hibernate', name: 'hibernate-validator-annotation-processor', version: versions.validator]
+    )
+
+    testCompile(
+            [group: 'org.apache.fineract.cn', name: 'test', version: versions.frameworktest],
+    )
+}
+
+publishing {
+    publications {
+        api(MavenPublication) {
+            from components.java
+            groupId project.group
+            artifactId project.name
+            version project.version
+        }
+    }
+}
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class
new file mode 100644
index 0000000..a1dee5e
Binary files /dev/null and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.class
new file mode 100644
index 0000000..a197a0a
Binary files /dev/null and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class
new file mode 100644
index 0000000..3cb4555
Binary files /dev/null and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Notification.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Notification.class
new file mode 100644
index 0000000..16602d7
Binary files /dev/null and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Notification.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Sample.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Sample.class
new file mode 100644
index 0000000..818a105
Binary files /dev/null and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Sample.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class
new file mode 100644
index 0000000..6b2a09d
Binary files /dev/null and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class differ
diff --git a/api/out/test/classes/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.class b/api/out/test/classes/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.class
new file mode 100644
index 0000000..8013bfa
Binary files /dev/null and b/api/out/test/classes/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.class differ
diff --git a/api/settings.gradle b/api/settings.gradle
new file mode 100644
index 0000000..491f745
--- /dev/null
+++ b/api/settings.gradle
@@ -0,0 +1,18 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+rootProject.name = 'api'
\ No newline at end of file
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java
new file mode 100644
index 0000000..a854460
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1;
+
+@SuppressWarnings("unused")
+public interface PermittableGroupIds {
+  String SAMPLE_MANAGEMENT = "notification__v1__samples";
+  String SELF_MANAGEMENT = "notification__v1__self";
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.java
new file mode 100644
index 0000000..9265ed4
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.client;
+
+@SuppressWarnings("WeakerAccess")
+public class IamATeapotException extends RuntimeException {
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java
new file mode 100644
index 0000000..3c20ea3
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.client;
+
+import org.apache.fineract.cn.notification.api.v1.domain.Sample;
+import java.util.List;
+import org.apache.fineract.cn.api.annotation.ThrowsException;
+import org.apache.fineract.cn.api.util.CustomFeignClientsConfiguration;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@SuppressWarnings("unused")
+@FeignClient(value="notification-v1", path="/notification/v1", configuration = CustomFeignClientsConfiguration.class)
+public interface NotificationManager {
+
+  @RequestMapping(
+          value = "/sample",
+          method = RequestMethod.GET,
+          produces = MediaType.ALL_VALUE,
+          consumes = MediaType.APPLICATION_JSON_VALUE
+  )
+  List<Sample> findAllEntities();
+
+  @RequestMapping(
+          value = "/sample/{identifier}",
+          method = RequestMethod.GET,
+          produces = MediaType.ALL_VALUE,
+          consumes = MediaType.APPLICATION_JSON_VALUE)
+  Sample getEntity(@PathVariable("identifier") final String identifier);
+
+  @RequestMapping(
+      value = "/sample",
+      method = RequestMethod.POST,
+      produces = MediaType.APPLICATION_JSON_VALUE,
+      consumes = MediaType.APPLICATION_JSON_VALUE
+  )
+  @ThrowsException(status = HttpStatus.I_AM_A_TEAPOT, exception = IamATeapotException.class)
+  void createEntity(final Sample sample);
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Notification.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Notification.java
new file mode 100644
index 0000000..c685c5a
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Notification.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import java.util.Objects;
+import org.apache.fineract.cn.lang.validation.constraints.ValidIdentifier;
+import org.hibernate.validator.constraints.Length;
+
+@SuppressWarnings({"WeakerAccess", "unused"})
+public class Notification {
+  @ValidIdentifier
+  private String identifier;
+  @Length(max = 512)
+  private String payload;
+
+  private String recipient;
+
+  private String message;
+
+  public Notification() {
+    super();
+  }
+
+  public static Notification create(final String identifier, final String payload) {
+    final Notification notification = new Notification();
+    notification.setIdentifier(identifier);
+    notification.setPayload(payload);
+    return notification;
+  }
+
+  public String getIdentifier() {
+    return this.identifier;
+  }
+
+  public void setIdentifier(final String identifier) {
+    this.identifier = identifier;
+  }
+
+  public String getPayload() {
+    return payload;
+  }
+
+  public void setPayload(String payload) {
+    this.payload = payload;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    Notification notification = (Notification) o;
+    return Objects.equals(identifier, notification.identifier) &&
+            Objects.equals(payload, notification.payload);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(identifier, payload);
+  }
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Sample.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Sample.java
new file mode 100644
index 0000000..644dda9
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Sample.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import java.util.Objects;
+import org.apache.fineract.cn.lang.validation.constraints.ValidIdentifier;
+import org.hibernate.validator.constraints.Length;
+
+@SuppressWarnings({"WeakerAccess", "unused"})
+public class Sample {
+  @ValidIdentifier
+  private String identifier;
+  @Length(max = 512)
+  private String payload;
+
+  public Sample() {
+    super();
+  }
+
+  public static Sample create(final String identifier, final String payload) {
+    final Sample sample = new Sample();
+    sample.setIdentifier(identifier);
+    sample.setPayload(payload);
+    return sample;
+  }
+
+  public String getIdentifier() {
+    return this.identifier;
+  }
+
+  public void setIdentifier(final String identifier) {
+    this.identifier = identifier;
+  }
+
+  public String getPayload() {
+    return payload;
+  }
+
+  public void setPayload(String payload) {
+    this.payload = payload;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    Sample sample = (Sample) o;
+    return Objects.equals(identifier, sample.identifier) &&
+            Objects.equals(payload, sample.payload);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(identifier, payload);
+  }
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
new file mode 100644
index 0000000..3f351c6
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.events;
+
+@SuppressWarnings("unused")
+public interface NotificationEventConstants {
+
+    String DESTINATION = "notification-v1";
+    String SELECTOR_NAME = "action";
+    String INITIALIZE = "initialize";
+    String POST_SAMPLE = "post-sample";
+    String SELECTOR_INITIALIZE = SELECTOR_NAME + " = '" + INITIALIZE + "'";
+    String SELECTOR_POST_SAMPLE = SELECTOR_NAME + " = '" + POST_SAMPLE + "'";
+
+    //Customer constants;
+    String CUSTOMER_DESTINATION = "customer-v1";
+    String SELECTOR_POST_CUSTOMER = SELECTOR_NAME + " = 'post-customer'";
+
+}
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.java
new file mode 100644
index 0000000..65cd1ac
--- /dev/null
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.fineract.cn.test.domain.ValidationTest;
+import org.apache.fineract.cn.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+public class SampleTest extends ValidationTest<Sample> {
+
+  public SampleTest(ValidationTestCase<Sample> testCase) {
+    super(testCase);
+  }
+
+  @Override
+  protected Sample createValidTestSubject() {
+    return Sample.create("xxxx", "yyy");
+  }
+
+  @Parameterized.Parameters
+  public static Collection testCases() {
+    final Collection<ValidationTestCase> ret = new ArrayList<>();
+    ret.add(new ValidationTestCase<Sample>("basicCase")
+            .adjustment(x -> {})
+            .valid(true));
+    ret.add(new ValidationTestCase<Sample>("nullIdentifier")
+            .adjustment(x -> x.setIdentifier(null))
+            .valid(false));
+    ret.add(new ValidationTestCase<Sample>("tooShortIdentifier")
+            .adjustment(x -> x.setIdentifier("z"))
+            .valid(false));
+    ret.add(new ValidationTestCase<Sample>("tooLongPayload")
+            .adjustment(x -> x.setPayload(RandomStringUtils.randomAlphanumeric(513)))
+            .valid(false));
+    return ret;
+  }
+
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..ca2370a
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+group 'org.apache.fineract.cn.notification'
+
+task publishApiToMavenLocal {
+    dependsOn gradle.includedBuild('api').task(':publishToMavenLocal')
+}
+
+task publishServiceToMavenLocal {
+    mustRunAfter publishApiToMavenLocal
+    dependsOn gradle.includedBuild('service').task(':publishToMavenLocal')
+}
+
+task publishComponentTestToMavenLocal {
+    mustRunAfter publishApiToMavenLocal
+    mustRunAfter publishServiceToMavenLocal
+    dependsOn gradle.includedBuild('component-test').task(':publishToMavenLocal')
+}
+
+task publishToMavenLocal {
+    group 'all'
+    dependsOn publishApiToMavenLocal
+    dependsOn publishServiceToMavenLocal
+    dependsOn publishComponentTestToMavenLocal
+}
+
+task prepareForTest {
+    group 'all'
+    dependsOn publishToMavenLocal
+    dependsOn gradle.includedBuild('component-test').task(':build')
+}
+
+task licenseFormat {
+    group 'all'
+    dependsOn gradle.includedBuild('api').task(':licenseFormat')
+    dependsOn gradle.includedBuild('service').task(':licenseFormat')
+    dependsOn gradle.includedBuild('component-test').task(':licenseFormat')
+}
+
+task rat {
+    group 'all'
+    dependsOn gradle.includedBuild('api').task(':rat')
+    dependsOn gradle.includedBuild('service').task(':rat')
+    dependsOn gradle.includedBuild('component-test').task(':rat')
+}
diff --git a/component-test/build.gradle b/component-test/build.gradle
new file mode 100644
index 0000000..0348f06
--- /dev/null
+++ b/component-test/build.gradle
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+buildscript {
+    ext {
+        springBootVersion = '1.4.1.RELEASE'
+    }
+
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath ("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
+    }
+}
+
+plugins {
+    id "com.github.hierynomus.license" version "0.13.1"
+    id("org.nosphere.apache.rat") version "0.3.1"
+}
+apply from: '../shared.gradle'
+
+dependencies {
+    compile(
+            [group: 'org.apache.fineract.cn.notification', name: 'api', version: project.version],
+            [group: 'org.apache.fineract.cn.notification', name: 'service', version: project.version],
+            [group: 'org.apache.fineract.cn.anubis', name: 'test', version: versions.frameworkanubis],
+            [group: 'org.apache.fineract.cn', name: 'api', version: versions.frameworkapi],
+            [group: 'org.apache.fineract.cn', name: 'test', version: versions.frameworktest],
+            [group: 'org.apache.fineract.cn', name: 'lang', version: versions.frameworklang],
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
+    )
+}
+
+publishing {
+    publications {
+        mavenJava(MavenPublication) {
+            from components.java
+        }
+    }
+}
diff --git a/component-test/out/production/classes/org/apache/fineract/cn/notification/SuiteTestEnvironment.class b/component-test/out/production/classes/org/apache/fineract/cn/notification/SuiteTestEnvironment.class
new file mode 100644
index 0000000..d098f6e
Binary files /dev/null and b/component-test/out/production/classes/org/apache/fineract/cn/notification/SuiteTestEnvironment.class differ
diff --git a/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSample$TestConfiguration.class b/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSample$TestConfiguration.class
new file mode 100644
index 0000000..b125463
Binary files /dev/null and b/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSample$TestConfiguration.class differ
diff --git a/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSample.class b/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSample.class
new file mode 100644
index 0000000..5962f3a
Binary files /dev/null and b/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSample.class differ
diff --git a/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSuite.class b/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSuite.class
new file mode 100644
index 0000000..f083d51
Binary files /dev/null and b/component-test/out/production/classes/org/apache/fineract/cn/notification/TestSuite.class differ
diff --git a/component-test/out/production/classes/org/apache/fineract/cn/notification/listener/MigrationEventListener.class b/component-test/out/production/classes/org/apache/fineract/cn/notification/listener/MigrationEventListener.class
new file mode 100644
index 0000000..6a70e37
Binary files /dev/null and b/component-test/out/production/classes/org/apache/fineract/cn/notification/listener/MigrationEventListener.class differ
diff --git a/component-test/out/production/classes/org/apache/fineract/cn/notification/listener/SampleEventListener.class b/component-test/out/production/classes/org/apache/fineract/cn/notification/listener/SampleEventListener.class
new file mode 100644
index 0000000..917edfc
Binary files /dev/null and b/component-test/out/production/classes/org/apache/fineract/cn/notification/listener/SampleEventListener.class differ
diff --git a/component-test/settings.gradle b/component-test/settings.gradle
new file mode 100644
index 0000000..a07a3bc
--- /dev/null
+++ b/component-test/settings.gradle
@@ -0,0 +1,18 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+rootProject.name = 'component-test'
\ No newline at end of file
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java b/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java
new file mode 100644
index 0000000..5f2b5f4
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification;
+
+import org.apache.fineract.cn.test.env.TestEnvironment;
+import org.apache.fineract.cn.test.fixture.cassandra.CassandraInitializer;
+import org.apache.fineract.cn.test.fixture.mariadb.MariaDBInitializer;
+import org.junit.ClassRule;
+import org.junit.rules.RuleChain;
+import org.junit.rules.RunExternalResourceOnce;
+import org.junit.rules.TestRule;
+
+/**
+ * This contains the database resources required by the test.  They are in a separate
+ * class so that the test suite can initialize them before the classes it calls. This
+ * makes test runs faster and prevents tests from "stepping on each other's toes" when
+ * initializing and de-initializing external resources.
+ */
+public class SuiteTestEnvironment {
+  static final String APP_VERSION = "1";
+  static final String APP_NAME = "notification-v" + APP_VERSION;
+
+  static final TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
+  static final CassandraInitializer cassandraInitializer = new CassandraInitializer();
+  static final MariaDBInitializer mariaDBInitializer = new MariaDBInitializer();
+
+  @ClassRule
+  public static TestRule orderClassRules = RuleChain
+      .outerRule(new RunExternalResourceOnce(testEnvironment))
+      .around(new RunExternalResourceOnce(cassandraInitializer))
+      .around(new RunExternalResourceOnce(mariaDBInitializer));
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSample.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSample.java
new file mode 100644
index 0000000..76db357
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSample.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification;
+
+import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
+import org.apache.fineract.cn.notification.api.v1.domain.Sample;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.NotificationConfiguration;
+import java.util.List;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.fineract.cn.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
+import org.apache.fineract.cn.api.context.AutoUserContext;
+import org.apache.fineract.cn.test.fixture.TenantDataStoreContextTestRule;
+import org.apache.fineract.cn.test.listener.EnableEventRecording;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.cloud.netflix.ribbon.RibbonClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
+public class TestSample extends SuiteTestEnvironment {
+  private static final String LOGGER_NAME = "test-logger";
+  private static final String TEST_USER = "homer";
+
+
+  @Configuration
+  @EnableEventRecording
+  @EnableFeignClients(basePackages = {"org.apache.fineract.cn.notification.api.v1.client"})
+  @RibbonClient(name = APP_NAME)
+  @Import({NotificationConfiguration.class})
+  @ComponentScan("org.apache.fineract.cn.notification.listener")
+  public static class TestConfiguration {
+    public TestConfiguration() {
+      super();
+    }
+
+    @Bean(name = LOGGER_NAME)
+    public Logger logger() {
+      return LoggerFactory.getLogger(LOGGER_NAME);
+    }
+  }
+
+  @ClassRule
+  public final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer, mariaDBInitializer);
+
+  @Rule
+  public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
+          = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment, this::waitForInitialize);
+
+  private AutoUserContext userContext;
+
+  @Autowired
+  private NotificationManager testSubject;
+
+  @Autowired
+  private EventRecorder eventRecorder;
+
+  @SuppressWarnings("WeakerAccess")
+  @Autowired
+  @Qualifier(LOGGER_NAME)
+  Logger logger;
+
+  public TestSample() {
+    super();
+  }
+
+  @Before
+  public void prepTest() {
+    userContext = tenantApplicationSecurityEnvironment.createAutoUserContext(TestSample.TEST_USER);
+  }
+
+  @After
+  public void cleanTest() {
+    userContext.close();
+    eventRecorder.clear();
+  }
+
+  public boolean waitForInitialize() {
+    try {
+      return this.eventRecorder.wait(NotificationEventConstants.INITIALIZE, APP_VERSION);
+    } catch (final InterruptedException e) {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  @Test
+  public void shouldCreateSample() throws InterruptedException {
+    logger.info("Running test shouldCreateSample.");
+    final Sample sample = Sample.create(RandomStringUtils.randomAlphanumeric(8), RandomStringUtils.randomAlphanumeric(512));
+    this.testSubject.createEntity(sample);
+
+    Assert.assertTrue(this.eventRecorder.wait(NotificationEventConstants.POST_SAMPLE, sample.getIdentifier()));
+
+    final Sample createdSample = this.testSubject.getEntity(sample.getIdentifier());
+    Assert.assertEquals(sample, createdSample);
+  }
+
+  @Test
+  public void shouldListSamples() {
+    logger.info("Running test shouldListSamples.");
+    final List<Sample> allEntities = this.testSubject.findAllEntities();
+    Assert.assertNotNull(allEntities);
+  }
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java
new file mode 100644
index 0000000..a4d42bf
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+    TestSample.class,
+    //TODO: when you create a new component test, add it here so you can run it with the suite.
+})
+public class TestSuite extends SuiteTestEnvironment {
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java
new file mode 100644
index 0000000..c24b97c
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.listener;
+
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@SuppressWarnings("unused")
+@Component
+public class MigrationEventListener {
+
+  private final EventRecorder eventRecorder;
+
+  @Autowired
+  public MigrationEventListener(@SuppressWarnings("SpringJavaAutowiringInspection") final EventRecorder eventRecorder) {
+    super();
+    this.eventRecorder = eventRecorder;
+  }
+
+  @JmsListener(
+      subscription = NotificationEventConstants.DESTINATION,
+      destination = NotificationEventConstants.DESTINATION,
+      selector = NotificationEventConstants.SELECTOR_INITIALIZE
+  )
+  public void onInitialization(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload) {
+    this.eventRecorder.event(tenant, NotificationEventConstants.INITIALIZE, payload, String.class);
+  }
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/listener/SampleEventListener.java b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/SampleEventListener.java
new file mode 100644
index 0000000..85abe9e
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/SampleEventListener.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.listener;
+
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@SuppressWarnings("unused")
+@Component
+public class SampleEventListener {
+
+  private final EventRecorder eventRecorder;
+
+  @Autowired
+  public SampleEventListener(@SuppressWarnings("SpringJavaAutowiringInspection") final EventRecorder eventRecorder) {
+    super();
+    this.eventRecorder = eventRecorder;
+  }
+
+  @JmsListener(
+      subscription = NotificationEventConstants.DESTINATION,
+      destination = NotificationEventConstants.DESTINATION,
+      selector = NotificationEventConstants.SELECTOR_POST_SAMPLE
+  )
+  public void onCreateSample(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                             final String payload) {
+    this.eventRecorder.event(tenant, NotificationEventConstants.POST_SAMPLE, payload, String.class);
+  }
+}
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..400f155
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..c563c1a
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri May 18 16:18:58 MUT 2018
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..4453cce
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save ( ) {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/service/build.gradle b/service/build.gradle
new file mode 100644
index 0000000..57f507d
--- /dev/null
+++ b/service/build.gradle
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+buildscript {
+    ext {
+        springBootVersion = '1.4.1.RELEASE'
+    }
+
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath ("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
+    }
+}
+
+plugins {
+    id "com.github.hierynomus.license" version "0.13.1"
+    id("org.nosphere.apache.rat") version "0.3.1"
+}
+
+apply from: '../shared.gradle'
+
+apply plugin: 'spring-boot'
+
+springBoot {
+    executable = true
+    classifier = 'boot'
+}
+
+dependencies {
+    compile(
+            [group: 'com.twilio.sdk', name: 'twilio', version: '7.17.+'],
+            [group: 'org.apache.fineract.cn.customer', name: 'api', version: versions.fineractcncustomer],
+            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-config'],
+            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka'],
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-jetty'],
+            //check this dependency
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.4.3.RELEASE'],
+            [group: 'org.apache.fineract.cn.notification', name: 'api', version: project.version],
+            [group: 'org.apache.fineract.cn.anubis', name: 'library', version: versions.frameworkanubis],
+            [group: 'com.google.code.gson', name: 'gson'],
+            [group: 'org.apache.fineract.cn', name: 'lang', version: versions.frameworklang],
+            [group: 'org.apache.fineract.cn', name: 'async', version: versions.frameworkasync],
+            [group: 'org.apache.fineract.cn', name: 'cassandra', version: versions.frameworkcassandra],
+            [group: 'org.apache.fineract.cn', name: 'mariadb', version: versions.frameworkmariadb],
+            [group: 'org.apache.fineract.cn', name: 'command', version: versions.frameworkcommand],
+            [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator]
+    )
+}
+
+publishToMavenLocal.dependsOn bootRepackage
+
+publishing {
+    publications {
+        service(MavenPublication) {
+            from components.java
+            groupId project.group
+            artifactId project.name
+            version project.version
+        }
+        bootService(MavenPublication) {
+            // "boot" jar
+            artifact ("$buildDir/libs/$project.name-$version-boot.jar")
+            groupId project.group
+            artifactId ("$project.name-boot")
+            version project.version
+        }
+    }
+}
diff --git a/service/out/production/resources/application.yml b/service/out/production/resources/application.yml
new file mode 100644
index 0000000..17d03bc
--- /dev/null
+++ b/service/out/production/resources/application.yml
@@ -0,0 +1,96 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+spring:
+  cloud:
+    discovery:
+      enabled: false
+    config:
+      enabled: false
+  mail:
+    host: smtp.gmail.com
+    port: 587
+    username: ebenezergraham69@gmail.com
+    password: fdzmzbhbmtkafzvq
+    properties:
+      mail:
+        smtpauth: true
+        smtp:
+        starttls:
+          enable: true
+
+eureka:
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:8761/eureka/
+
+server:
+  port: 8081
+  contextPath: /notification/v1/*
+
+cassandra:
+  clusterName: staging_cluster
+  contactPoints: 127.0.0.1:9042,127.0.0.2:9042,127.0.0.3:9042
+  keyspace: seshat
+  cl:
+    read: LOCAL_QUORUM
+    write: LOCAL_QUORUM
+    delete: LOCAL_QUORUM
+
+mariadb:
+  driverClass: org.mariadb.jdbc.Driver
+  database: seshat
+  host: localhost
+  port: 3306
+  user: root
+  password: mysql
+
+bonecp:
+  idleMaxAgeInMinutes: 240
+  idleConnectionTestPeriodInMinutes: 60
+  maxConnectionsPerPartition: 10
+  minConnectionsPerPartition: 1
+  partitionCount: 2
+  acquireIncrement: 5
+  statementsCacheSize: 100
+
+async:
+  corePoolSize: 32
+  maxPoolSize: 16384
+  queueCapacity: 0
+  threadName: async-processor-
+
+flyway:
+  enabled: false
+
+mfi:
+  senderNumber: +15109441898
+
+smssender:
+  accountSID: AC1fde2c6f26f367b93231c5fdb944c908
+  authtoken: bc9a53e41745b8471e0ecafc859d86aa
+
+fineract:
+  customer:
+    accountcreated:
+      message: Dear Valued Customer, Your account has been created.
+    accountclosed:
+      message: Dear Valued Customer, Your account has been successfully closed.
+
+
diff --git a/service/out/production/resources/bootstrap.yml b/service/out/production/resources/bootstrap.yml
new file mode 100644
index 0000000..76c2441
--- /dev/null
+++ b/service/out/production/resources/bootstrap.yml
@@ -0,0 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+spring:
+    application:
+        name: notification-v1
diff --git a/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql b/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql
new file mode 100644
index 0000000..b68edad
--- /dev/null
+++ b/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql
@@ -0,0 +1,32 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+CREATE TABLE notification (
+  id BIGINT NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(8) NOT NULL,
+  payload VARCHAR(512) NULL,
+  CONSTRAINT notification_pk PRIMARY KEY (id)
+);
+
+CREATE TABLE template_sample (
+  id BIGINT NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(8) NOT NULL,
+  payload VARCHAR(512) NULL,
+  CONSTRAINT template_sample_pk PRIMARY KEY (id)
+);
diff --git a/service/settings.gradle b/service/settings.gradle
new file mode 100644
index 0000000..1a4c2fd
--- /dev/null
+++ b/service/settings.gradle
@@ -0,0 +1,18 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+rootProject.name = 'service'
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java
new file mode 100644
index 0000000..5968d0d
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service;
+
+import org.springframework.boot.SpringApplication;
+
+public class NotificationApplication {
+
+  public NotificationApplication() {
+    super();
+  }
+
+  public static void main(String[] args) {
+    SpringApplication.run(NotificationConfiguration.class, args);
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java
new file mode 100644
index 0000000..01aa6d3
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service;
+
+import org.apache.fineract.cn.anubis.config.EnableAnubis;
+import org.apache.fineract.cn.async.config.EnableAsync;
+import org.apache.fineract.cn.cassandra.config.EnableCassandra;
+import org.apache.fineract.cn.command.config.EnableCommandProcessing;
+import org.apache.fineract.cn.lang.config.EnableServiceException;
+import org.apache.fineract.cn.lang.config.EnableTenantContext;
+import org.apache.fineract.cn.mariadb.config.EnableMariaDB;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+import java.util.Properties;
+
+@SuppressWarnings("WeakerAccess")
+@Configuration
+@EnableAutoConfiguration
+@EnableDiscoveryClient
+@EnableAsync
+@EnableTenantContext
+@EnableCassandra
+@EnableMariaDB
+@EnableCommandProcessing
+@EnableAnubis
+@EnableServiceException
+@ConfigurationProperties(locations = {"details"})
+@ComponentScan({
+    "org.apache.fineract.cn.notification.service.rest",
+    "org.apache.fineract.cn.notification.service.internal.service",
+    "org.apache.fineract.cn.notification.service.internal.repository",
+    "org.apache.fineract.cn.notification.service.internal.command.handler"
+})
+@EnableJpaRepositories({
+    "org.apache.fineract.cn.notification.service.internal.repository"
+})
+public class NotificationConfiguration extends WebMvcConfigurerAdapter {
+
+  public NotificationConfiguration() {
+    super();
+  }
+
+  @Bean(name = ServiceConstants.LOGGER_NAME)
+  public Logger logger() {
+    return LoggerFactory.getLogger(ServiceConstants.LOGGER_NAME);
+  }
+
+  @Override
+  public void configurePathMatch(final PathMatchConfigurer configurer) {
+    configurer.setUseSuffixPatternMatch(Boolean.FALSE);
+  }
+
+  @Bean
+  @Qualifier("gmail")
+  public JavaMailSender getJavaMailSender() {
+
+    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
+    mailSender.setHost("smtp.gmail.com");
+    mailSender.setPort(587);
+
+    mailSender.setUsername("ebenezergraham69@gmail.com");
+    mailSender.setPassword("fdzmzbhbmtkafzvq");
+
+    Properties props = mailSender.getJavaMailProperties();
+    props.put("mail.transport.protocol", "smtp");
+    props.put("mail.smtp.auth", "true");
+    props.put("mail.smtp.starttls.enable", "true");
+    props.put("mail.debug", "true");
+
+    return mailSender;
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java b/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java
new file mode 100644
index 0000000..cb4e902
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service;
+
+public interface ServiceConstants {
+  String LOGGER_NAME = "rest-logger";
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java
new file mode 100644
index 0000000..21335ac
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command;
+
+public class InitializeServiceCommand {
+
+  public InitializeServiceCommand() {
+    super();
+  }
+
+  @Override
+  public String toString() {
+    return "InitializeServiceCommand{}";
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/SampleCommand.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/SampleCommand.java
new file mode 100644
index 0000000..3fa3aac
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/SampleCommand.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command;
+
+import org.apache.fineract.cn.notification.api.v1.domain.Sample;
+
+public class SampleCommand {
+
+  private final Sample sample;
+
+  public SampleCommand(final Sample sample) {
+    super();
+    this.sample = sample;
+  }
+
+  public Sample sample() {
+    return this.sample;
+  }
+
+  @Override
+  public String toString() {
+    return "SampleCommand{" +
+        "sample=" + sample.getIdentifier() +
+        '}';
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java
new file mode 100644
index 0000000..da7cc6e
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command.handler;
+
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.command.InitializeServiceCommand;
+import javax.sql.DataSource;
+import org.apache.fineract.cn.command.annotation.Aggregate;
+import org.apache.fineract.cn.command.annotation.CommandHandler;
+import org.apache.fineract.cn.command.annotation.CommandLogLevel;
+import org.apache.fineract.cn.command.annotation.EventEmitter;
+import org.apache.fineract.cn.lang.ApplicationName;
+import org.apache.fineract.cn.mariadb.domain.FlywayFactoryBean;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.transaction.annotation.Transactional;
+
+@SuppressWarnings({
+    "unused"
+})
+@Aggregate
+public class MigrationAggregate {
+
+  private final Logger logger;
+  private final DataSource dataSource;
+  private final FlywayFactoryBean flywayFactoryBean;
+  private final ApplicationName applicationName;
+
+  @Autowired
+  public MigrationAggregate(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+                            final DataSource dataSource,
+                            final FlywayFactoryBean flywayFactoryBean,
+                            final ApplicationName applicationName) {
+    super();
+    this.logger = logger;
+    this.dataSource = dataSource;
+    this.flywayFactoryBean = flywayFactoryBean;
+    this.applicationName = applicationName;
+  }
+
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+  @Transactional
+  @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.INITIALIZE)
+  public String initialize(final InitializeServiceCommand initializeServiceCommand) {
+    this.logger.debug("Start service migration.");
+    this.flywayFactoryBean.create(this.dataSource).migrate();
+    return this.applicationName.getVersionString();
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SampleAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SampleAggregate.java
new file mode 100644
index 0000000..cf09aca
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SampleAggregate.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command.handler;
+
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.command.SampleCommand;
+import org.apache.fineract.cn.command.annotation.Aggregate;
+import org.apache.fineract.cn.command.annotation.CommandHandler;
+import org.apache.fineract.cn.command.annotation.CommandLogLevel;
+import org.apache.fineract.cn.command.annotation.EventEmitter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@SuppressWarnings("unused")
+@Aggregate
+public class SampleAggregate {
+
+  private final SampleJpaEntityRepository sampleJpaEntityRepository;
+
+  @Autowired
+  public SampleAggregate(final SampleJpaEntityRepository sampleJpaEntityRepository) {
+    super();
+    this.sampleJpaEntityRepository = sampleJpaEntityRepository;
+  }
+
+  //TODO: Think about your command handler logging, then delete this comment.
+  // The log levels provided in the command handler cause log messages to be emitted each time this
+  // command handler is called before and after the call. Before the call, the command is logged
+  // using its toString() method, and after the call, the emitted event is logged via its toString()
+  // method.
+  //
+  // If you wish to adjust the information in the log messages, do so via the toString() methods.
+  // Financial transactions, passwords, and customer address data are examples of information which
+  // should not be placed in the logs.
+  //
+  // If a command handler should not emit a log message, change logStart and logFinish to:
+  // CommandLogLevel.NONE.
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+  @Transactional
+  @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_SAMPLE)
+  public String sample(final SampleCommand sampleCommand) {
+
+    final SampleJpaEntity entity = new SampleJpaEntity();
+    entity.setIdentifier(sampleCommand.sample().getIdentifier());
+    entity.setPayload(sampleCommand.sample().getPayload());
+    this.sampleJpaEntityRepository.save(entity);
+
+    return sampleCommand.sample().getIdentifier();
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SampleMapper.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SampleMapper.java
new file mode 100644
index 0000000..973adee
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SampleMapper.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.mapper;
+
+import org.apache.fineract.cn.notification.api.v1.domain.Sample;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class SampleMapper {
+
+  private SampleMapper() {
+    super();
+  }
+
+  public static Sample map(final SampleJpaEntity sampleJpaEntity) {
+    final Sample sample = new Sample();
+    sample.setIdentifier(sampleJpaEntity.getIdentifier());
+    sample.setPayload(sampleJpaEntity.getPayload());
+    return sample;
+  }
+
+  public static List<Sample> map(final List<SampleJpaEntity> sampleJpaEntities) {
+    final ArrayList<Sample> samples = new ArrayList<>(sampleJpaEntities.size());
+    samples.addAll(sampleJpaEntities.stream().map(SampleMapper::map).collect(Collectors.toList()));
+    return samples;
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfiguration.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfiguration.java
new file mode 100644
index 0000000..e0c6d89
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfiguration.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import javax.persistence.*;
+
+@SuppressWarnings("unused")
+@Entity
+@Table(name = "email_gateway_configuration")
+public class EmailGatewayConfiguration {
+
+  @Id
+  @GeneratedValue(strategy = GenerationType.IDENTITY)
+  @Column(name = "id")
+  private Long id;
+  @Column(name = "identifier")
+  private String identifier;
+  @Column(name = "host")
+  private String host;
+  @Column(name = "port")
+  private String port;
+  @Column(name = "username")
+  private String username;
+  @Column(name = "app_id")
+  private String app_id;
+  @Column(name = "smtp_auth")
+  private String smtp_auth;
+  @Column(name = "start_tls")
+  private String start_tls;
+
+  public EmailGatewayConfiguration() {
+    super();
+  }
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public String getIdentifier() {
+    return this.identifier;
+  }
+
+  public void setIdentifier(final String identifier) {
+    this.identifier = identifier;
+  }
+
+  public String getHost() {
+    return host;
+  }
+
+  public void setHost(String host) {
+    this.host = host;
+  }
+
+  public String getPort() {
+    return port;
+  }
+
+  public void setPort(String port) {
+    this.port = port;
+  }
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getApp_id() {
+    return app_id;
+  }
+
+  public void setApp_id(String app_id) {
+    this.app_id = app_id;
+  }
+
+  public String getSmtp_auth() {
+    return smtp_auth;
+  }
+
+  public void setSmtp_auth(String smtp_auth) {
+    this.smtp_auth = smtp_auth;
+  }
+
+  public String getStart_tls() {
+    return start_tls;
+  }
+
+  public void setStart_tls(String start_tls) {
+    this.start_tls = start_tls;
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java
new file mode 100644
index 0000000..b380def
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface EmailGatewayConfigurationRepository extends JpaRepository<EmailGatewayConfiguration, Long> {
+  Optional<EmailGatewayConfiguration> findByIdentifier(String identifier);
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfiguration.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfiguration.java
new file mode 100644
index 0000000..770db6a
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfiguration.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import javax.persistence.*;
+
+@SuppressWarnings("unused")
+@Entity
+@Table(name = "sms_gateway_configuration")
+public class SMSGatewayConfiguration {
+
+  @Id
+  @GeneratedValue(strategy = GenerationType.IDENTITY)
+  @Column(name = "id")
+  private Long id;
+  @Column(name = "identifier")
+  private String identifier;
+  @Column(name = "organisation")
+  private String organisation;
+  @Column(name = "auth_token")
+  private String auth_token;
+  @Column(name = "accountid")
+  private String accountid;
+  @Column(name = "option")
+  private String option;
+
+  public SMSGatewayConfiguration() {
+    super();
+  }
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public String getIdentifier() {
+    return this.identifier;
+  }
+
+  public void setIdentifier(final String identifier) {
+    this.identifier = identifier;
+  }
+
+  public String getOrganisation() {
+    return organisation;
+  }
+
+  public void setOrganisation(String organisation) {
+    this.organisation = organisation;
+  }
+
+  public String getAuth_token() {
+    return auth_token;
+  }
+
+  public void setAuth_token(String auth_token) {
+    this.auth_token = auth_token;
+  }
+
+  public String getAccountid() {
+    return accountid;
+  }
+
+  public void setAccountid(String accountid) {
+    this.accountid = accountid;
+  }
+
+  public String getOption() {
+    return option;
+  }
+
+  public void setOption(String option) {
+    this.option = option;
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java
new file mode 100644
index 0000000..7daae78
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface SMSGatewayConfigurationRepository extends JpaRepository<SMSGatewayConfiguration, Long> {
+  Optional<SMSGatewayConfiguration> findByIdentifier(String identifier);
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailSender.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailSender.java
new file mode 100644
index 0000000..e9cc516
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailSender.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class EmailSender {
+
+    @Autowired
+    @Qualifier("gmail")
+    private JavaMailSender sender;
+
+    public void sendEmail(String to, String subject, String message) {
+        SimpleMailMessage mail = new SimpleMailMessage();
+        mail.setTo(to);
+        mail.setSubject(subject);
+        mail.setText(message);
+        sender.send(mail);
+    }
+
+}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSSender.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSSender.java
new file mode 100644
index 0000000..6bf7558
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSSender.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service;
+
+
+import com.twilio.Twilio;
+import com.twilio.rest.api.v2010.account.Message;
+import com.twilio.type.PhoneNumber;
+import org.springframework.beans.factory.annotation.Value;
+import com.twilio.rest.api.v2010.account.MessageCreator;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SMSSender {
+
+    @Value(value = "${smssender.accountSID}")
+    public static String ACCOUNT_SID;
+
+    @Value("${smssender.authToken}")
+    public static String AUTH_TOKEN;
+
+    @Value("${mfi.senderNumber}")
+    public static String sender;
+
+    @Value("${fineract.customer.accountcreated}")
+    public String template;
+
+    public void sendSMS(String receiver, String template) {
+
+        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
+
+        MessageCreator messageCreator = Message.creator(ACCOUNT_SID,new PhoneNumber(receiver), new PhoneNumber(sender), template);
+        Message message = messageCreator.create();
+        System.out.println(message.getSid());
+        System.out.println(message.getStatus());
+    }
+
+    }
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SampleService.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SampleService.java
new file mode 100644
index 0000000..bc2d5a8
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SampleService.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service;
+
+import org.apache.fineract.cn.notification.api.v1.domain.Sample;
+import org.apache.fineract.cn.notification.service.internal.mapper.SampleMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class SampleService {
+
+  private final SampleJpaEntityRepository sampleJpaEntityRepository;
+
+  @Autowired
+  public SampleService(final SampleJpaEntityRepository sampleJpaEntityRepository) {
+    super();
+    this.sampleJpaEntityRepository = sampleJpaEntityRepository;
+  }
+
+  public List<Sample> findAllEntities() {
+    return SampleMapper.map(this.sampleJpaEntityRepository.findAll());
+  }
+
+  public Optional<Sample> findByIdentifier(final String identifier) {
+    return this.sampleJpaEntityRepository.findByIdentifier(identifier).map(SampleMapper::map);
+  }
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/AccountingEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/AccountingEventListener.java
new file mode 100644
index 0000000..a061b1a
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/AccountingEventListener.java
@@ -0,0 +1,130 @@
+ /*
+         * Licensed to the Apache Software Foundation (ASF) under one
+         * or more contributor license agreements.  See the NOTICE file
+         * distributed with this work for additional information
+         * regarding copyright ownership.  The ASF licenses this file
+         * to you under the Apache License, Version 2.0 (the
+         * "License"); you may not use this file except in compliance
+         * with the License.  You may obtain a copy of the License at
+         *
+         *   http://www.apache.org/licenses/LICENSE-2.0
+         *
+         * Unless required by applicable law or agreed to in writing,
+         * software distributed under the License is distributed on an
+         * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+         * KIND, either express or implied.  See the License for the
+         * specific language governing permissions and limitations
+         * under the License.
+         */
+
+        package org.apache.fineract.cn.notification.service.listener;
+
+        import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+        import org.apache.fineract.cn.accounting.service.internal.service.AccountService;
+        import org.apache.fineract.cn.notification.service.internal.service.EmailSender;
+        import org.apache.fineract.cn.notification.service.internal.service.SMSSender;
+        import org.springframework.beans.factory.annotation.Autowired;
+        import org.springframework.jms.annotation.JmsListener;
+        import org.springframework.messaging.handler.annotation.Header;
+        import org.springframework.stereotype.Component;
+        import org.apache.fineract.cn.accounting.api.v1.EventConstants;
+
+
+@SuppressWarnings("unused")
+@Component
+public class AccountingEventListener {
+
+    AccountService accountService;
+
+    @Autowired
+    SMSSender smsSender;
+
+    @Autowired
+    EmailSender emailSender;
+
+    @Autowired
+    public AccountingEventListener( final AccountService accountingManager) {
+        this.accountService = accountingManager;
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_POST_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onCreateAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant, final String payload) {
+        accountService.findAccount(tenant);
+        String receiver = "";
+        String template = "";
+        smsSender.sendSMS(receiver,template);
+        emailSender.sendEmail(receiver,"Hello", "You account has been created");
+    }
+
+     /*
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onChangeAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                final String payload) {
+        this.logger.debug("Account modified.");
+        this.eventRecorder.event(tenant, EventConstants.PUT_ACCOUNT, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_CLOSE_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onCloseAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload) {
+        this.logger.debug("Account closed.");
+        this.eventRecorder.event(tenant, EventConstants.CLOSE_ACCOUNT, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_LOCK_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onLockAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                              final String payload) {
+        this.logger.debug("Account locked.");
+        this.eventRecorder.event(tenant, EventConstants.LOCK_ACCOUNT, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_UNLOCK_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onUnlockAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                final String payload) {
+        this.logger.debug("Account unlocked.");
+        this.eventRecorder.event(tenant, EventConstants.UNLOCK_ACCOUNT, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_REOPEN_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onReopenAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                final String payload) {
+        this.logger.debug("Account reopened.");
+        this.eventRecorder.event(tenant, EventConstants.REOPEN_ACCOUNT, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_DELETE_ACCOUNT,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onDeleteAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                final String payload) {
+        this.logger.debug("Account deleted.");
+        this.eventRecorder.event(tenant, EventConstants.DELETE_ACCOUNT, payload, String.class);
+    }
+ */
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/ChequeEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/ChequeEventListener.java
new file mode 100644
index 0000000..2c6c2cf
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/ChequeEventListener.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.fineract.cn.notification.service.listener;
+
+import org.apache.fineract.cn.cheque.AbstractChequeTest;
+import org.apache.fineract.cn.cheque.api.v1.EventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ChequeEventListener {
+
+    private final Logger logger;
+
+    public ChequeEventListener(@Qualifier(AbstractChequeTest.TEST_LOGGER) final Logger logger) {
+        super();
+        this.logger = logger;
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_ISSUE_CHEQUES,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onIssueCheques(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload) {
+        this.logger.debug("Cheques issued.");
+    }
+/*
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_CHEQUE_TRANSACTION,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onChequeTransaction(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                    final String payload) {
+        this.logger.debug("Cheque transaction processed.");
+        this.eventRecorder.event(tenant, EventConstants.CHEQUE_TRANSACTION, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_CHEQUE_TRANSACTION_APPROVED,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onChequeApproved(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                 final String payload) {
+        this.logger.debug("Cheque transaction approved.");
+        this.eventRecorder.event(tenant, EventConstants.CHEQUE_TRANSACTION_APPROVED, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_CHEQUE_TRANSACTION_CANCELED,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onChequeCanceled(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                 final String payload) {
+        this.logger.debug("Cheque transaction canceled.");
+        this.eventRecorder.event(tenant, EventConstants.CHEQUE_TRANSACTION_CANCELED, payload, String.class);
+    }
+*/
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java
new file mode 100644
index 0000000..a28d83a
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java
@@ -0,0 +1,201 @@
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one
+     * or more contributor license agreements.  See the NOTICE file
+     * distributed with this work for additional information
+     * regarding copyright ownership.  The ASF licenses this file
+     * to you under the Apache License, Version 2.0 (the
+     * "License"); you may not use this file except in compliance
+     * with the License.  You may obtain a copy of the License at
+     *
+     *   http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing,
+     * software distributed under the License is distributed on an
+     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+     * KIND, either express or implied.  See the License for the
+     * specific language governing permissions and limitations
+     * under the License.
+     */
+
+package org.apache.fineract.cn.notification.service.listener;
+
+import org.apache.fineract.cn.customer.api.v1.CustomerEventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.customer.api.v1.client.CustomerManager;
+import org.apache.fineract.cn.customer.api.v1.domain.ContactDetail;
+import org.apache.fineract.cn.customer.api.v1.domain.Customer;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.service.EmailSender;
+import org.apache.fineract.cn.notification.service.internal.service.SMSSender;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class CustomerEventListener {
+
+        private CustomerManager customerManager;
+        private SMSSender smsSender;
+        private EmailSender emailSender;
+
+        @Autowired
+        public CustomerEventListener( final CustomerManager customerManager, SMSSender smsSender,
+                                 final EmailSender emailSender ) {
+            this.customerManager = customerManager;
+            this.smsSender = smsSender;
+            this.emailSender = emailSender;
+        }
+
+        @JmsListener(
+                destination = CustomerEventConstants.DESTINATION,
+                selector = CustomerEventConstants.SELECTOR_POST_CUSTOMER
+        )
+        public void customerCreatedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                         final String payload) {
+
+            Customer customer = customerManager.findCustomer(payload);
+            if (customer.getContactDetails().size() > 0) {
+                customer.getContactDetails().forEach(contactDetail -> {
+                    if (contactDetail.getType().equals(ContactDetail.Type.PHONE)) {
+                        String receiverNumber = customer.getContactDetails().get(0).getValue();
+                        // TODO: pass receiver number for templating and localization.
+                        smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been created");
+                    } else if (contactDetail.getType().equals(ContactDetail.Type.EMAIL)) {
+                        String emailAddress = customer.getContactDetails().get(0).getValue();
+                        // TODO: pass email address for templating and localization.
+                        emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been created");
+                    }
+                });
+            }
+        }
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_ACTIVATE_CUSTOMER
+    )
+    public void customerActivatedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                       final String payload) {
+        Customer customer = customerManager.findCustomer(payload);
+        if(customer.getCurrentState().equalsIgnoreCase("ACTIVE")){
+            customer.getContactDetails().forEach(contact-> {
+                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
+                String receiverNumber = customer.getContactDetails().get(0).getValue();
+                smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Activated");
+            } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
+                String emailAddress = customer.getContactDetails().get(0).getValue();
+                // TODO: pass email address for templating and localization.
+                emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Activated");
+            }
+            });
+        }
+    }
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_LOCK_CUSTOMER
+    )
+    public void customerLockedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                    final String payload) {
+        Customer customer = customerManager.findCustomer(payload);
+        if(customer.getCurrentState().equalsIgnoreCase("LOCKED")){
+            customer.getContactDetails().forEach(contact-> {
+                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
+                    String receiverNumber = customer.getContactDetails().get(0).getValue();
+                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Locked");
+                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
+                    String emailAddress = customer.getContactDetails().get(0).getValue();
+                    // TODO: pass email address for templating and localization.
+                    emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Locked");
+                }
+            });
+        }
+    }
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_UNLOCK_CUSTOMER
+    )
+    public void customerUnlockedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                      final String payload) {
+        Customer customer = customerManager.findCustomer(payload);
+        if(customer.getCurrentState().equalsIgnoreCase("LOCKED")){
+            customer.getContactDetails().forEach(contact-> {
+                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
+                    String receiverNumber = customer.getContactDetails().get(0).getValue();
+                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Unlocked");
+                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
+                    String emailAddress = customer.getContactDetails().get(0).getValue();
+                    // TODO: pass email address for templating and localization.
+                    emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Unlocked");
+                }
+            });
+        }
+    }
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_CLOSE_CUSTOMER
+    )
+    public void customerClosedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                    final String payload) {
+        Customer customer = customerManager.findCustomer(payload);
+        if(customer.getCurrentState().equalsIgnoreCase("CLOSED")){
+            customer.getContactDetails().forEach(contact-> {
+                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
+                    String receiverNumber = customer.getContactDetails().get(0).getValue();
+                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Closed");
+                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
+                    String emailAddress = customer.getContactDetails().get(0).getValue();
+                    // TODO: pass email address for templating and localization.
+                    emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Closed");
+                }
+            });
+        }
+    }
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_REOPEN_CUSTOMER
+    )
+    public void customerReopenedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                      final String payload) {
+        Customer customer = customerManager.findCustomer(payload);
+        if(customer.getCurrentState().equalsIgnoreCase("LOCKED")){
+            customer.getContactDetails().forEach(contact-> {
+                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
+                    String receiverNumber = customer.getContactDetails().get(0).getValue();
+                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been reopened");
+                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
+                    String emailAddress = customer.getContactDetails().get(0).getValue();
+                    // TODO: pass email address for templating and localization.
+                    emailSender.sendEmail(emailAddress, "Account Reopened", "Dear Valued Customer, Your account has been reopened");
+                }
+            });
+        }
+    }
+    
+/*
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_PUT_ADDRESS
+    )
+    public void addressChangedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                    final String payload) {
+        this.eventRecorder.event(tenant, CustomerEventConstants.PUT_ADDRESS, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = CustomerEventConstants.DESTINATION,
+            selector = CustomerEventConstants.SELECTOR_PUT_IDENTIFICATION_CARD
+    )
+    public void identificationCardChangedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                               final String payload) {
+        this.eventRecorder.event(tenant, CustomerEventConstants.PUT_IDENTIFICATION_CARD, payload, String.class);
+    }
+
+
+*/
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/DepositEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/DepositEventListener.java
new file mode 100644
index 0000000..bcde220
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/DepositEventListener.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.fineract.cn.deposit.listener;
+
+import org.apache.fineract.cn.deposit.api.v1.EventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DepositEventListener {
+
+
+    @Autowired
+    public DepositEventListener() {
+        super();
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_INTEREST_ACCRUED,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onAccrual(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                          final String payload) {
+    }
+/*
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_DIVIDEND_DISTRIBUTION,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onDividendDistribution(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                       final String payload) {
+        this.logger.debug("Dividend distributed for product {}.", payload);
+        this.eventRecorder.event(tenant, EventConstants.DIVIDEND_DISTRIBUTION, payload, String.class);
+    }
+*/
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/IdentityEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/IdentityEventListener.java
new file mode 100644
index 0000000..142f138
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/IdentityEventListener.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+package org.apache.fineract.cn.notification.service.listener;
+
+import org.apache.fineract.cn.identity.api.v1.events.EventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@Component
+public class IdentityEventListener {
+
+    private IdentityManager identityManager;
+
+    @Autowired
+    public IdentityEventListener( final IdentityManager identityManager) {
+        this.identityManager = identityManager;
+    }
+
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_POST_USER
+    )
+    public void onCreateUser(
+            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
+            final String payload) throws Exception {
+        eventRecorder.event(tenant, EventConstants.OPERATION_POST_USER, payload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_USER_ROLEIDENTIFIER
+    )
+    public void onChangeUserRole(
+            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
+            final String payload) throws Exception {
+        eventRecorder.event(tenant, EventConstants.OPERATION_PUT_USER_ROLEIDENTIFIER, payload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_USER_PASSWORD
+    )
+    public void onChangeUserPassword(
+            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
+            final String payload) throws Exception {
+        eventRecorder.event(tenant, EventConstants.OPERATION_PUT_USER_PASSWORD, payload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_AUTHENTICATE
+    )
+    public void onAuthentication(
+            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
+            final String payload) throws Exception {
+        eventRecorder.event(tenant, EventConstants.OPERATION_AUTHENTICATE, payload, String.class);
+    }
+
+
+}
+*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/OfficeEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/OfficeEventListener.java
new file mode 100644
index 0000000..c77510e
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/OfficeEventListener.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+package org.apache.fineract.cn.notification.service.listener;
+
+import org.apache.fineract.cn.accounting.api.v1.EventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OfficeEventListener {
+
+    private final EventRecorder eventRecorder;
+
+    @Autowired
+    public OfficeEventListener(final EventRecorder eventRecorder) {
+        super();
+        this.eventRecorder = eventRecorder;
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_POST_EMPLOYEE
+    )
+    public void onCreateEmployee(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                 final String eventPayload) throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_POST_EMPLOYEE, eventPayload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_EMPLOYEE
+    )
+    public void onUpdateEmployee(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                 final String eventPayload) throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_PUT_EMPLOYEE, eventPayload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_DELETE_EMPLOYEE
+    )
+    public void onDeleteEmployee(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                 final String eventPayload) throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_DELETE_EMPLOYEE, eventPayload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_CONTACT_DETAIL
+    )
+    public void onSetContactDetail(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                   final String eventPayload) throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_PUT_CONTACT_DETAIL, eventPayload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_DELETE_CONTACT_DETAIL
+    )
+    public void onDeleteContactDetail(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                      final String eventPayload) throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_DELETE_CONTACT_DETAIL, eventPayload, String.class);
+    }
+
+    public void onCreateOffice(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload)
+            throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_POST_OFFICE, payload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_DELETE_OFFICE
+    )
+    public void onDeleteOffice(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload)
+            throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_DELETE_OFFICE, payload, String.class);
+    }
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_OFFICE
+    )
+    public void onUpdateOffice(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload)
+            throws Exception {
+        this.eventRecorder.event(tenant, EventConstants.OPERATION_PUT_OFFICE, payload, String.class);
+    }
+
+}
+*/
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PayrollEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PayrollEventListener.java
new file mode 100644
index 0000000..ce4cc70
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PayrollEventListener.java
@@ -0,0 +1,61 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+    /*
+package org.apache.fineract.cn.payroll.listener;
+
+import org.apache.fineract.cn.payroll.api.v1.EventConstants;
+import org.apache.fineract.cn.payroll.service.ServiceConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PayrollEventListener {
+
+    private final Logger logger;
+    private final EventRecorder eventRecorder;
+
+    @Autowired
+    public PayrollEventListener(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+                                       final EventRecorder eventRecorder) {
+        super();
+        this.logger = logger;
+        this.eventRecorder = eventRecorder;
+    }
+
+
+    @JmsListener(
+            subscription = EventConstants.DESTINATION,
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_POST_DISTRIBUTION
+    )
+    public void onPostCollection(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                 final String payload) {
+        this.logger.info("Payment distribution with source account {0} processed.", payload);
+        this.eventRecorder.event(tenant, EventConstants.POST_DISTRIBUTION, payload, String.class);
+    }
+
+}
+*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java
new file mode 100644
index 0000000..88109a7
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java
@@ -0,0 +1,151 @@
+package org.apache.fineract.cn.notification.service.listener;/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.fineract.cn.individuallending.api.v1.events.IndividualLoanCommandEvent;
+import org.apache.fineract.cn.individuallending.api.v1.events.IndividualLoanEventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.reporting.api.v1.domain.Header;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.stereotype.Component;
+import org.apache.fineract.cn.group.api.v1.EventConstants;
+import org.apache.fineract.cn.portfolio.api.v1.client.PortfolioManager;
+
+@SuppressWarnings("unused")
+@Component
+public class PortfolioEventListener {
+
+    @Autowired
+    public PortfolioEventListener() {
+        super();
+        //PortfolioManager portfolioManager = new PortfolioManager();
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_DENY_INDIVIDUALLOAN_CASE
+    )
+    public void onDeny(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                       final String payload) {
+
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_APPROVE_INDIVIDUALLOAN_CASE
+    )
+    public void onApprove(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                          final String payload) {
+
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_ACCEPT_PAYMENT_INDIVIDUALLOAN_CASE
+    )
+    public void onAcceptPayment(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                final String payload) {
+    }
+
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_DISBURSE_INDIVIDUALLOAN_CASE
+    )
+    public void onDisburse(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                           final String payload) {
+
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_CHECK_LATE_INDIVIDUALLOAN_CASE
+    )
+    public void onCheckLate(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                            final String payload) {
+
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_OPEN_INDIVIDUALLOAN_CASE
+    )
+    public void onOpen(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                       final String payload) {
+
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_MARK_LATE_INDIVIDUALLOAN_CASE
+    )
+    public void onMarkLate(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                           final String payload) {
+
+    }
+
+    @JmsListener(
+            subscription = IndividualLoanEventConstants.DESTINATION,
+            destination = IndividualLoanEventConstants.DESTINATION,
+            selector = IndividualLoanEventConstants.SELECTOR_CLOSE_INDIVIDUALLOAN_CASE
+    )
+    public void onClose(//@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                        final String payload) {
+    }
+
+    /*
+
+        @JmsListener(
+                subscription = EventConstants.DESTINATION,
+                destination = EventConstants.DESTINATION,
+                selector = EventConstants.SELECTOR_POST_GROUP
+        )
+        public void onGroupCreated(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                   final String payload) {
+            this.eventRecorder.event(tenant, EventConstants.POST_GROUP, payload, String.class);
+        }
+
+        @JmsListener(
+                subscription = EventConstants.DESTINATION,
+                destination = EventConstants.DESTINATION,
+                selector = EventConstants.SELECTOR_ACTIVATE_GROUP
+        )
+        public void onGroupActivated(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                     final String payload) {
+            this.eventRecorder.event(tenant, EventConstants.ACTIVATE_GROUP, payload, String.class);
+        }
+
+        @JmsListener(
+                subscription = EventConstants.DESTINATION,
+                destination = EventConstants.DESTINATION,
+                selector = EventConstants.SELECTOR_PUT_GROUP
+        )
+        public void onGroupUpdated(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                   final String payload) {
+            this.eventRecorder.event(tenant, EventConstants.PUT_GROUP, payload, String.class);
+        }
+         */
+    }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/TellerEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/TellerEventListener.java
new file mode 100644
index 0000000..5b461be
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/TellerEventListener.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+    /*
+package org.apache.fineract.cn.teller.listener;
+
+import org.apache.fineract.cn.teller.AbstractTellerTest;
+import org.apache.fineract.cn.teller.api.v1.EventConstants;
+import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TellerEventListener {
+
+    private final Logger logger;
+    private final EventRecorder eventRecorder;
+
+    public TellerEventListener(@Qualifier(AbstractTellerTest.LOGGER_NAME) final Logger logger,
+                               final EventRecorder eventRecorder) {
+        super();
+        this.logger = logger;
+        this.eventRecorder = eventRecorder;
+    }
+
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_POST_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onCreate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                         final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.POST_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PUT_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onChange(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                         final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.PUT_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_OPEN_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onOpen(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                       final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.OPEN_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_CLOSE_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onClose(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                        final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.CLOSE_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_AUTHENTICATE_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onAuthenticate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.AUTHENTICATE_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_PAUSE_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onPause(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                        final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.PAUSE_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_CONFIRM_TRANSACTION,
+            subscription = EventConstants.DESTINATION
+    )
+    public void confirmTransaction(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                   final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.CONFIRM_TRANSACTION, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_DELETE_TELLER,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onDeleteTeller(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                               final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.DELETE_TELLER, payload, String.class);
+    }
+
+    @JmsListener(
+            destination = EventConstants.DESTINATION,
+            selector = EventConstants.SELECTOR_SAVE_DENOMINATION,
+            subscription = EventConstants.DESTINATION
+    )
+    public void onSaveDenomination(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+                                   final String payload) {
+        this.logger.debug("Teller {} created.", payload);
+        this.eventRecorder.event(tenant, EventConstants.SAVE_DENOMINATION, payload, String.class);
+    }
+
+}
+*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java b/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java
new file mode 100644
index 0000000..983b43e
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.rest;
+
+import org.apache.fineract.cn.notification.api.v1.PermittableGroupIds;
+import org.apache.fineract.cn.notification.api.v1.domain.Sample;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.command.InitializeServiceCommand;
+import org.apache.fineract.cn.notification.service.internal.command.SampleCommand;
+import org.apache.fineract.cn.notification.service.internal.service.SampleService;
+import java.util.List;
+import javax.validation.Valid;
+import org.apache.fineract.cn.anubis.annotation.AcceptedTokenType;
+import org.apache.fineract.cn.anubis.annotation.Permittable;
+import org.apache.fineract.cn.command.gateway.CommandGateway;
+import org.apache.fineract.cn.lang.ServiceException;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@SuppressWarnings("unused")
+@RestController
+@RequestMapping("/")
+public class NotificationRestController {
+
+  private final Logger logger;
+  private final CommandGateway commandGateway;
+  private final SampleService sampleService;
+
+  @Autowired
+  public NotificationRestController(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+                              final CommandGateway commandGateway,
+                              final SampleService sampleService) {
+    super();
+    this.logger = logger;
+    this.commandGateway = commandGateway;
+    this.sampleService = sampleService;
+  }
+
+  @Permittable(value = AcceptedTokenType.SYSTEM)
+  @RequestMapping(
+      value = "/initialize",
+      method = RequestMethod.POST,
+      consumes = MediaType.ALL_VALUE,
+      produces = MediaType.APPLICATION_JSON_VALUE
+  )
+  public
+  @ResponseBody
+  ResponseEntity<Void> initialize() throws InterruptedException {
+      this.commandGateway.process(new InitializeServiceCommand());
+      return ResponseEntity.accepted().build();
+  }
+
+  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SAMPLE_MANAGEMENT)
+  @RequestMapping(
+          value = "/sample",
+          method = RequestMethod.GET,
+          consumes = MediaType.ALL_VALUE,
+          produces = MediaType.APPLICATION_JSON_VALUE
+  )
+  public
+  @ResponseBody
+  List<Sample> findAllEntities() {
+    return this.sampleService.findAllEntities();
+  }
+
+  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SAMPLE_MANAGEMENT)
+  @RequestMapping(
+          value = "/sample/{identifier}",
+          method = RequestMethod.GET,
+          consumes = MediaType.ALL_VALUE,
+          produces = MediaType.APPLICATION_JSON_VALUE
+  )
+  public
+  @ResponseBody
+  ResponseEntity<Sample> getEntity(@PathVariable("identifier") final String identifier) {
+    return this.sampleService.findByIdentifier(identifier)
+            .map(ResponseEntity::ok)
+            .orElseThrow(() -> ServiceException.notFound("Instance with identifier " + identifier + " doesn't exist."));
+  }
+
+  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SAMPLE_MANAGEMENT)
+  @RequestMapping(
+      value = "/sample",
+      method = RequestMethod.POST,
+      consumes = MediaType.APPLICATION_JSON_VALUE,
+      produces = MediaType.APPLICATION_JSON_VALUE
+  )
+  public
+  @ResponseBody
+  ResponseEntity<Void> createEntity(@RequestBody @Valid final Sample instance) throws InterruptedException {
+    this.commandGateway.process(new SampleCommand(instance));
+    return ResponseEntity.accepted().build();
+  }
+}
diff --git a/service/src/main/resources/application.yml b/service/src/main/resources/application.yml
new file mode 100644
index 0000000..37acaaf
--- /dev/null
+++ b/service/src/main/resources/application.yml
@@ -0,0 +1,78 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+spring:
+  cloud:
+    discovery:
+      enabled: false
+    config:
+      enabled: false
+
+eureka:
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:8761/eureka/
+
+server:
+  port: 8081
+  contextPath: /notification/v1/*
+
+cassandra:
+  clusterName: staging_cluster
+  contactPoints: 127.0.0.1:9042,127.0.0.2:9042,127.0.0.3:9042
+  keyspace: seshat
+  cl:
+    read: LOCAL_QUORUM
+    write: LOCAL_QUORUM
+    delete: LOCAL_QUORUM
+
+mariadb:
+  driverClass: org.mariadb.jdbc.Driver
+  database: seshat
+  host: localhost
+  port: 3306
+  user: root
+  password: mysql
+
+bonecp:
+  idleMaxAgeInMinutes: 240
+  idleConnectionTestPeriodInMinutes: 60
+  maxConnectionsPerPartition: 10
+  minConnectionsPerPartition: 1
+  partitionCount: 2
+  acquireIncrement: 5
+  statementsCacheSize: 100
+
+async:
+  corePoolSize: 32
+  maxPoolSize: 16384
+  queueCapacity: 0
+  threadName: async-processor-
+
+flyway:
+  enabled: false
+
+fineract:
+  customer:
+    accountcreated:
+      message: Dear Valued Customer, Your account has been created.
+    accountclosed:
+      message: Dear Valued Customer, Your account has been successfully closed.
+
+
diff --git a/service/src/main/resources/bootstrap.yml b/service/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..76c2441
--- /dev/null
+++ b/service/src/main/resources/bootstrap.yml
@@ -0,0 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+spring:
+    application:
+        name: notification-v1
diff --git a/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql b/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql
new file mode 100644
index 0000000..b68edad
--- /dev/null
+++ b/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql
@@ -0,0 +1,32 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+CREATE TABLE notification (
+  id BIGINT NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(8) NOT NULL,
+  payload VARCHAR(512) NULL,
+  CONSTRAINT notification_pk PRIMARY KEY (id)
+);
+
+CREATE TABLE template_sample (
+  id BIGINT NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(8) NOT NULL,
+  payload VARCHAR(512) NULL,
+  CONSTRAINT template_sample_pk PRIMARY KEY (id)
+);
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..868411f
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+rootProject.name = 'notification'
+
+includeBuild 'api'
+includeBuild 'service'
+includeBuild 'component-test'
+
diff --git a/shared.gradle b/shared.gradle
new file mode 100644
index 0000000..a01bb15
--- /dev/null
+++ b/shared.gradle
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+group 'org.apache.fineract.cn.notification'
+version '0.1.0.BUILD-SNAPSHOT'
+
+ext.versions = [
+        fineractcnidentity      : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnprovisioner   : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnrhythm        : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnoffice        : '0.1.0-BUILD-SNAPSHOT',
+        fineractcncustomer      : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnaccounting    : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnportfolio     : '0.1.0-BUILD-SNAPSHOT',
+        fineractcndeposit       : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnteller        : '0.1.0-BUILD-SNAPSHOT',
+        kuelapcheques           : '0.1.0-BUILD-SNAPSHOT',
+        fineractcnpayroll       : '0.1.0-BUILD-SNAPSHOT',
+        fineractcngroup         : '0.1.0-BUILD-SNAPSHOT',
+        frameworkapi            : '0.1.0-BUILD-SNAPSHOT',
+        frameworklang           : '0.1.0-BUILD-SNAPSHOT',
+        frameworkasync          : '0.1.0-BUILD-SNAPSHOT',
+        frameworkcassandra      : '0.1.0-BUILD-SNAPSHOT',
+        frameworkmariadb        : '0.1.0-BUILD-SNAPSHOT',
+        frameworkcommand        : '0.1.0-BUILD-SNAPSHOT',
+        frameworktest           : '0.1.0-BUILD-SNAPSHOT',
+        frameworkanubis         : '0.1.0-BUILD-SNAPSHOT',
+        validator : '5.3.0.Final'
+]
+
+apply plugin: 'java'
+apply plugin: 'idea'
+apply plugin: 'maven-publish'
+apply plugin: 'io.spring.dependency-management'
+
+tasks.withType(JavaCompile) {
+    sourceCompatibility = JavaVersion.VERSION_1_8
+    targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+repositories {
+    jcenter()
+    mavenLocal()
+}
+
+dependencyManagement {
+    imports {
+        mavenBom 'io.spring.platform:platform-bom:Athens-RELEASE'
+        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Camden.SR1'
+    }
+}
+
+// override certain dependency provided by Spring platform using newer releases
+ext['cassandra.version'] = '3.6'
+ext['cassandra-driver.version'] = '3.1.2'
+ext['activemq.version'] = '5.13.2'
+ext['spring-data-releasetrain.version'] = 'Gosling-SR2A'
+
+dependencies {
+    compile(
+            [group: 'com.google.code.findbugs', name: 'jsr305']
+    )
+
+    testCompile(
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
+    )
+}
+
+jar {
+    from sourceSets.main.allSource
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+}
+
+license {
+    header rootProject.file('../HEADER')
+    strictCheck true
+    mapping {
+        java = 'SLASHSTAR_STYLE'
+        xml = 'XML_STYLE'
+        yml = 'SCRIPT_STYLE'
+        yaml = 'SCRIPT_STYLE'
+    }
+}
+
+rat {
+    // List of exclude directives, defaults to ['**/.gradle/**']
+    excludes = [
+            "**/.idea/**",
+            "**/.gradle/**",
+            "**/gradle/**",
+            "**/build/**",
+            "gradlew",
+            "gradlew.bat",
+            "README.md"
+    ]
+}
+
diff --git a/system-analysis.mdj b/system-analysis.mdj
new file mode 100644
index 0000000..4c7f1af
--- /dev/null
+++ b/system-analysis.mdj
@@ -0,0 +1,4104 @@
+{
+	"_type": "Project",
+	"_id": "AAAAAAFF+h6SjaM2Hec=",
+	"name": "Untitled",
+	"ownedElements": [
+		{
+			"_type": "UMLModel",
+			"_id": "AAAAAAFF+qBWK6M3Z8Y=",
+			"_parent": {
+				"$ref": "AAAAAAFF+h6SjaM2Hec="
+			},
+			"name": "Model",
+			"ownedElements": [
+				{
+					"_type": "UMLClassDiagram",
+					"_id": "AAAAAAFF+qBtyKM79qY=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "Main",
+					"visible": true,
+					"defaultDiagram": true
+				},
+				{
+					"_type": "UMLActivity",
+					"_id": "AAAAAAFjqASLHqqfH1M=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "Activity1",
+					"ownedElements": [
+						{
+							"_type": "UMLActivityDiagram",
+							"_id": "AAAAAAFjqASLIKqg3FE=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "Notification Activity",
+							"visible": true,
+							"defaultDiagram": false,
+							"ownedViews": [
+								{
+									"_type": "UMLControlNodeView",
+									"_id": "AAAAAAFjqASvhqqmFR0=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqASvhaqkmH0="
+									},
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 178,
+									"top": 32,
+									"width": 20,
+									"height": 20,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLActionView",
+									"_id": "AAAAAAFjqATelaqrA88=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqATelKqpPIs="
+									},
+									"subViews": [
+										{
+											"_type": "UMLNameCompartmentView",
+											"_id": "AAAAAAFjqATelqqsQwY=",
+											"_parent": {
+												"$ref": "AAAAAAFjqATelaqrA88="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqATelKqpPIs="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqATelqqtdxw=",
+													"_parent": {
+														"$ref": "AAAAAAFjqATelqqsQwY="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 32,
+													"top": 0,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqATel6qupnU=",
+													"_parent": {
+														"$ref": "AAAAAAFjqATelqqsQwY="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 144,
+													"top": 95,
+													"width": 87,
+													"height": 26,
+													"autoResize": false,
+													"underline": false,
+													"text": "JMSListener injects event",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": true
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqATemKqvl8w=",
+													"_parent": {
+														"$ref": "AAAAAAFjqATelqqsQwY="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 32,
+													"top": 0,
+													"width": 86,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"text": "(from Activity1)",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqATemKqwuws=",
+													"_parent": {
+														"$ref": "AAAAAAFjqATelqqsQwY="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 32,
+													"top": 0,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 1,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Arial;13;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 139,
+											"top": 88,
+											"width": 97,
+											"height": 38,
+											"autoResize": false,
+											"stereotypeLabel": {
+												"$ref": "AAAAAAFjqATelqqtdxw="
+											},
+											"nameLabel": {
+												"$ref": "AAAAAAFjqATel6qupnU="
+											},
+											"namespaceLabel": {
+												"$ref": "AAAAAAFjqATemKqvl8w="
+											},
+											"propertyLabel": {
+												"$ref": "AAAAAAFjqATemKqwuws="
+											}
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 139,
+									"top": 88,
+									"width": 97,
+									"height": 54,
+									"autoResize": false,
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showNamespace": false,
+									"showProperty": true,
+									"showType": true,
+									"nameCompartment": {
+										"$ref": "AAAAAAFjqATelqqsQwY="
+									},
+									"wordWrap": true
+								},
+								{
+									"_type": "UMLActionView",
+									"_id": "AAAAAAFjqAWrCqrNuOs=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqAWrCarLlr0="
+									},
+									"subViews": [
+										{
+											"_type": "UMLNameCompartmentView",
+											"_id": "AAAAAAFjqAWrCqrOxcc=",
+											"_parent": {
+												"$ref": "AAAAAAFjqAWrCqrNuOs="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqAWrCarLlr0="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAWrC6rPvtY=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAWrCqrOxcc="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -366,
+													"top": 304,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAWrC6rQZmc=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAWrCqrOxcc="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 45,
+													"top": 351,
+													"width": 95,
+													"height": 52,
+													"autoResize": false,
+													"underline": false,
+													"text": "retrieve receipt SMS and email contact",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": true
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAWrC6rRHbU=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAWrCqrOxcc="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -366,
+													"top": 304,
+													"width": 86,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"text": "(from Activity1)",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAWrC6rS8Ik=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAWrCqrOxcc="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -366,
+													"top": 304,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 1,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Arial;13;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 40,
+											"top": 344,
+											"width": 105,
+											"height": 64,
+											"autoResize": false,
+											"stereotypeLabel": {
+												"$ref": "AAAAAAFjqAWrC6rPvtY="
+											},
+											"nameLabel": {
+												"$ref": "AAAAAAFjqAWrC6rQZmc="
+											},
+											"namespaceLabel": {
+												"$ref": "AAAAAAFjqAWrC6rRHbU="
+											},
+											"propertyLabel": {
+												"$ref": "AAAAAAFjqAWrC6rS8Ik="
+											}
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 40,
+									"top": 344,
+									"width": 105,
+									"height": 80,
+									"autoResize": false,
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showNamespace": false,
+									"showProperty": true,
+									"showType": true,
+									"nameCompartment": {
+										"$ref": "AAAAAAFjqAWrCqrOxcc="
+									},
+									"wordWrap": true
+								},
+								{
+									"_type": "UMLActionView",
+									"_id": "AAAAAAFjqAYmKaro5lo=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqAYmKKrmL6s="
+									},
+									"subViews": [
+										{
+											"_type": "UMLNameCompartmentView",
+											"_id": "AAAAAAFjqAYmKarpUFk=",
+											"_parent": {
+												"$ref": "AAAAAAFjqAYmKaro5lo="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqAYmKKrmL6s="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAYmKqrq62s=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAYmKarpUFk="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 322,
+													"top": 224,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAYmKqrr75M=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAYmKarpUFk="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 213,
+													"top": 351,
+													"width": 111,
+													"height": 39,
+													"autoResize": false,
+													"underline": false,
+													"text": "Prepare Message with template created",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": true
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAYmK6rsSQ0=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAYmKarpUFk="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 322,
+													"top": 224,
+													"width": 86,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"text": "(from Activity1)",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAYmK6rtvPo=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAYmKarpUFk="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 322,
+													"top": 224,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 1,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Arial;13;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 208,
+											"top": 344,
+											"width": 121,
+											"height": 51,
+											"autoResize": false,
+											"stereotypeLabel": {
+												"$ref": "AAAAAAFjqAYmKqrq62s="
+											},
+											"nameLabel": {
+												"$ref": "AAAAAAFjqAYmKqrr75M="
+											},
+											"namespaceLabel": {
+												"$ref": "AAAAAAFjqAYmK6rsSQ0="
+											},
+											"propertyLabel": {
+												"$ref": "AAAAAAFjqAYmK6rtvPo="
+											}
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 208,
+									"top": 344,
+									"width": 121,
+									"height": 67,
+									"autoResize": false,
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showNamespace": false,
+									"showProperty": true,
+									"showType": true,
+									"nameCompartment": {
+										"$ref": "AAAAAAFjqAYmKarpUFk="
+									},
+									"wordWrap": true
+								},
+								{
+									"_type": "UMLActionView",
+									"_id": "AAAAAAFjqAZdgqsCYJQ=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqAZdgasAyFA="
+									},
+									"subViews": [
+										{
+											"_type": "UMLNameCompartmentView",
+											"_id": "AAAAAAFjqAZdgqsDDao=",
+											"_parent": {
+												"$ref": "AAAAAAFjqAZdgqsCYJQ="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqAZdgasAyFA="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAZdgqsEhl4=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAZdgqsDDao="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -240,
+													"top": 528,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAZdgqsF8Ko=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAZdgqsDDao="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 136,
+													"top": 591,
+													"width": 103,
+													"height": 39,
+													"autoResize": false,
+													"underline": false,
+													"text": "Senders Objects transmit the data",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": true
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAZdgqsGu+E=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAZdgqsDDao="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -240,
+													"top": 528,
+													"width": 86,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"text": "(from Activity1)",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqAZdgqsH70w=",
+													"_parent": {
+														"$ref": "AAAAAAFjqAZdgqsDDao="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -240,
+													"top": 528,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 1,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Arial;13;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 131,
+											"top": 584,
+											"width": 113,
+											"height": 51,
+											"autoResize": false,
+											"stereotypeLabel": {
+												"$ref": "AAAAAAFjqAZdgqsEhl4="
+											},
+											"nameLabel": {
+												"$ref": "AAAAAAFjqAZdgqsF8Ko="
+											},
+											"namespaceLabel": {
+												"$ref": "AAAAAAFjqAZdgqsGu+E="
+											},
+											"propertyLabel": {
+												"$ref": "AAAAAAFjqAZdgqsH70w="
+											}
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 131,
+									"top": 584,
+									"width": 113,
+									"height": 67,
+									"autoResize": false,
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showNamespace": false,
+									"showProperty": true,
+									"showType": true,
+									"nameCompartment": {
+										"$ref": "AAAAAAFjqAZdgqsDDao="
+									},
+									"wordWrap": true
+								},
+								{
+									"_type": "UMLControlNodeView",
+									"_id": "AAAAAAFjqAbQ96sfooI=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqAbQ7asd+Ww="
+									},
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 175,
+									"top": 680,
+									"width": 26,
+									"height": 26,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLActionView",
+									"_id": "AAAAAAFjqA2/Cata4OI=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqA2/A6tYai0="
+									},
+									"subViews": [
+										{
+											"_type": "UMLNameCompartmentView",
+											"_id": "AAAAAAFjqA2/C6tbg3o=",
+											"_parent": {
+												"$ref": "AAAAAAFjqA2/Cata4OI="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqA2/A6tYai0="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqA2/C6tcNpM=",
+													"_parent": {
+														"$ref": "AAAAAAFjqA2/C6tbg3o="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 178,
+													"top": 336,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqA2/DKtd5Og=",
+													"_parent": {
+														"$ref": "AAAAAAFjqA2/C6tbg3o="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 229,
+													"top": 463,
+													"width": 79,
+													"height": 26,
+													"autoResize": false,
+													"underline": false,
+													"text": "Locatize Template",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": true
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqA2/DateYyA=",
+													"_parent": {
+														"$ref": "AAAAAAFjqA2/C6tbg3o="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 178,
+													"top": 336,
+													"width": 86,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"text": "(from Activity1)",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqA2/Datf4DQ=",
+													"_parent": {
+														"$ref": "AAAAAAFjqA2/C6tbg3o="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Arial;13;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 178,
+													"top": 336,
+													"width": 0,
+													"height": 13,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 1,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Arial;13;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 224,
+											"top": 456,
+											"width": 89,
+											"height": 38,
+											"autoResize": false,
+											"stereotypeLabel": {
+												"$ref": "AAAAAAFjqA2/C6tcNpM="
+											},
+											"nameLabel": {
+												"$ref": "AAAAAAFjqA2/DKtd5Og="
+											},
+											"namespaceLabel": {
+												"$ref": "AAAAAAFjqA2/DateYyA="
+											},
+											"propertyLabel": {
+												"$ref": "AAAAAAFjqA2/Datf4DQ="
+											}
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Arial;13;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 224,
+									"top": 456,
+									"width": 89,
+									"height": 54,
+									"autoResize": false,
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showNamespace": false,
+									"showProperty": true,
+									"showType": true,
+									"nameCompartment": {
+										"$ref": "AAAAAAFjqA2/C6tbg3o="
+									},
+									"wordWrap": true
+								},
+								{
+									"_type": "UMLControlNodeView",
+									"_id": "AAAAAAFjqBIJL6ubZ3I=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqBIJLquZsRo="
+									},
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 131,
+									"top": 288,
+									"width": 113,
+									"height": 6,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqBIoa6ugHqY=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqBIoaquel/4="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBIoa6uhY6U=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBIoa6ugHqY="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBIoaquel/4="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 201,
+											"top": 151,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBIoa6ugHqY="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBIoa6uivk8=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBIoa6ugHqY="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBIoaquel/4="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 216,
+											"top": 151,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBIoa6ugHqY="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBIobKujWVc=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBIoa6ugHqY="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBIoaquel/4="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 172,
+											"top": 152,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBIoa6ugHqY="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqCEih6yTO40="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqATelaqrA88="
+									},
+									"lineStyle": 1,
+									"points": "187:142;187:175",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqBIoa6uhY6U="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqBIoa6uivk8="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqBIobKujWVc="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqBKjHquxAW0=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqBKjHquv5CM="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBKjHquyqKs=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBKjHquxAW0="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBKjHquv5CM="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 201,
+											"top": 62,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBKjHquxAW0="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBKjHquzayI=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBKjHquxAW0="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBKjHquv5CM="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 216,
+											"top": 62,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBKjHquxAW0="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBKjHqu0+xU=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBKjHquxAW0="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBKjHquv5CM="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 172,
+											"top": 63,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBKjHquxAW0="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqATelaqrA88="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqASvhqqmFR0="
+									},
+									"lineStyle": 1,
+									"points": "187:52;187:87",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqBKjHquyqKs="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqBKjHquzayI="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqBKjHqu0+xU="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqBLYAqvEqog=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqBLYAqvCSQk="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBLYAqvFiZM=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBLYAqvEqog="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBLYAqvCSQk="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 282,
+											"top": 426,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBLYAqvEqog="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBLYAqvGPAg=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBLYAqvEqog="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBLYAqvCSQk="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 297,
+											"top": 426,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBLYAqvEqog="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBLYAqvHWRk=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBLYAqvEqog="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBLYAqvCSQk="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 253,
+											"top": 427,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBLYAqvEqog="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqA2/Cata4OI="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqAYmKaro5lo="
+									},
+									"lineStyle": 1,
+									"points": "268:411;268:455",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqBLYAqvFiZM="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqBLYAqvGPAg="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqBLYAqvHWRk="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqBLqN6vVVDc=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqBLqNqvTow0="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBLqOKvWpw0=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBLqN6vVVDc="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBLqNqvTow0="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 201,
+											"top": 658,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBLqN6vVVDc="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBLqOKvX76Y=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBLqN6vVVDc="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBLqNqvTow0="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 216,
+											"top": 658,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBLqN6vVVDc="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqBLqOavYEPE=",
+											"_parent": {
+												"$ref": "AAAAAAFjqBLqN6vVVDc="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqBLqNqvTow0="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 172,
+											"top": 659,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqBLqN6vVVDc="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqAbQ96sfooI="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqAZdgqsCYJQ="
+									},
+									"lineStyle": 1,
+									"points": "187:651;187:679",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqBLqOKvWpw0="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqBLqOKvX76Y="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqBLqOavYEPE="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqB0vKqwHDoM=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqB0vKawF6iM="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB0vKqwIlNc=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB0vKqwHDoM="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB0vKawF6iM="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 168,
+											"top": 322,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB0vKqwHDoM="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB0vK6wJ+8E=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB0vKqwHDoM="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB0vKawF6iM="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 179,
+											"top": 333,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB0vKqwHDoM="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB0vK6wKDT8=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB0vKqwHDoM="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB0vKawF6iM="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 147,
+											"top": 301,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB0vKqwHDoM="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqAWrCqrNuOs="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqBIJL6ubZ3I="
+									},
+									"lineStyle": 1,
+									"points": "183:294;133:343",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqB0vKqwIlNc="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqB0vK6wJ+8E="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqB0vK6wKDT8="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqB14tKwY2QY=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqB14s6wWTtM="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB14tKwZWVs=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB14tKwY2QY="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB14s6wWTtM="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 224,
+											"top": 301,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB14tKwY2QY="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB14tKwaFP8=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB14tKwY2QY="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB14s6wWTtM="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 235,
+											"top": 291,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB14tKwY2QY="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB14tKwbJe8=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB14tKwY2QY="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB14s6wWTtM="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 201,
+											"top": 322,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB14tKwY2QY="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqAYmKaro5lo="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqBIJL6ubZ3I="
+									},
+									"lineStyle": 1,
+									"points": "191:294;236:343",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqB14tKwZWVs="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqB14tKwaFP8="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqB14tKwbJe8="
+									}
+								},
+								{
+									"_type": "UMLControlNodeView",
+									"_id": "AAAAAAFjqB9/Taw5bl4=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqB9/S6w3TKM="
+									},
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 136,
+									"top": 544,
+									"width": 104,
+									"height": 6,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqB+W4qw+0nc=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqB+W4qw8vc8="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB+W46w/H0c=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB+W4qw+0nc="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB+W4qw8vc8="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 201,
+											"top": 559,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB+W4qw+0nc="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB+W46xAJPs=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB+W4qw+0nc="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB+W4qw8vc8="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 216,
+											"top": 559,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB+W4qw+0nc="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB+W46xBhSQ=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB+W4qw+0nc="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB+W4qw8vc8="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 172,
+											"top": 560,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB+W4qw+0nc="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqAZdgqsCYJQ="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqB9/Taw5bl4="
+									},
+									"lineStyle": 1,
+									"points": "187:550;187:583",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqB+W46w/H0c="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqB+W46xAJPs="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqB+W46xBhSQ="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqB+mdKxPr44=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqB+mc6xNTWc="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB+mdKxQpVA=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB+mdKxPr44="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB+mc6xNTWc="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 221,
+											"top": 531,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB+mdKxPr44="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB+mdKxRB1o=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB+mdKxPr44="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB+mc6xNTWc="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 230,
+											"top": 543,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB+mdKxPr44="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqB+mdKxSTJo=",
+											"_parent": {
+												"$ref": "AAAAAAFjqB+mdKxPr44="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqB+mc6xNTWc="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 202,
+											"top": 508,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqB+mdKxPr44="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqB9/Taw5bl4="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqA2/Cata4OI="
+									},
+									"lineStyle": 1,
+									"points": "233:510;191:543",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqB+mdKxQpVA="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqB+mdKxRB1o="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqB+mdKxSTJo="
+									}
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqCBd1Kx5mCs=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqCBd06x3DWs="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqCBd1Kx6qnM=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCBd1Kx5mCs="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCBd06x3DWs="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 162,
+											"top": 469,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqCBd1Kx5mCs="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqCBd1ax7Ky4=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCBd1Kx5mCs="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCBd06x3DWs="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 175,
+											"top": 461,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqCBd1Kx5mCs="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqCBd1ax8vzU=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCBd1Kx5mCs="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCBd06x3DWs="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 137,
+											"top": 484,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqCBd1Kx5mCs="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqB9/Taw5bl4="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqAWrCqrNuOs="
+									},
+									"lineStyle": 1,
+									"points": "116:424;185:543",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqCBd1Kx6qnM="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqCBd1ax7Ky4="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqCBd1ax8vzU="
+									}
+								},
+								{
+									"_type": "UMLActionView",
+									"_id": "AAAAAAFjqCEih6yTO40=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqCEig6yRtTs="
+									},
+									"subViews": [
+										{
+											"_type": "UMLNameCompartmentView",
+											"_id": "AAAAAAFjqCEiiayUplA=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCEih6yTO40="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCEig6yRtTs="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqCEiiqyV3PI=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCEiiayUplA="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -144,
+													"top": -128,
+													"width": 0,
+													"height": 12,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqCEii6yWXBY=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCEiiayUplA="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 132,
+													"top": 183,
+													"width": 111,
+													"height": 36,
+													"autoResize": false,
+													"underline": false,
+													"text": "Check if Event has been enabled by MFI",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": true
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqCEii6yXfwg=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCEiiayUplA="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -144,
+													"top": -128,
+													"width": 80,
+													"height": 12,
+													"autoResize": false,
+													"underline": false,
+													"text": "(from Activity1)",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqCEii6yYpPQ=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCEiiayUplA="
+													},
+													"visible": false,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": -144,
+													"top": -128,
+													"width": 0,
+													"height": 12,
+													"autoResize": false,
+													"underline": false,
+													"horizontalAlignment": 1,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 127,
+											"top": 176,
+											"width": 121,
+											"height": 48,
+											"autoResize": false,
+											"stereotypeLabel": {
+												"$ref": "AAAAAAFjqCEiiqyV3PI="
+											},
+											"nameLabel": {
+												"$ref": "AAAAAAFjqCEii6yWXBY="
+											},
+											"namespaceLabel": {
+												"$ref": "AAAAAAFjqCEii6yXfwg="
+											},
+											"propertyLabel": {
+												"$ref": "AAAAAAFjqCEii6yYpPQ="
+											}
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": true,
+									"containerExtending": false,
+									"left": 127,
+									"top": 176,
+									"width": 121,
+									"height": 64,
+									"autoResize": false,
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showNamespace": false,
+									"showProperty": true,
+									"showType": true,
+									"nameCompartment": {
+										"$ref": "AAAAAAFjqCEiiayUplA="
+									},
+									"wordWrap": true
+								},
+								{
+									"_type": "UMLControlFlowView",
+									"_id": "AAAAAAFjqCJ5HqyxiME=",
+									"_parent": {
+										"$ref": "AAAAAAFjqASLIKqg3FE="
+									},
+									"model": {
+										"$ref": "AAAAAAFjqCJ5HayvTsA="
+									},
+									"subViews": [
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqCJ5H6yynz8=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCJ5HqyxiME="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCJ5HayvTsA="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 201,
+											"top": 256,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqCJ5HqyxiME="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqCJ5IKyzLqE=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCJ5HqyxiME="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCJ5HayvTsA="
+											},
+											"visible": null,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 216,
+											"top": 256,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": 1.5707963267948966,
+											"distance": 30,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqCJ5HqyxiME="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "EdgeLabelView",
+											"_id": "AAAAAAFjqCJ5IKy0y/c=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCJ5HqyxiME="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCJ5HayvTsA="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 172,
+											"top": 257,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"alpha": -1.5707963267948966,
+											"distance": 15,
+											"hostEdge": {
+												"$ref": "AAAAAAFjqCJ5HqyxiME="
+											},
+											"edgePosition": 1,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"head": {
+										"$ref": "AAAAAAFjqBIJL6ubZ3I="
+									},
+									"tail": {
+										"$ref": "AAAAAAFjqCEih6yTO40="
+									},
+									"lineStyle": 1,
+									"points": "187:240;187:287",
+									"stereotypeDisplay": "label",
+									"showVisibility": true,
+									"showProperty": true,
+									"nameLabel": {
+										"$ref": "AAAAAAFjqCJ5H6yynz8="
+									},
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjqCJ5IKyzLqE="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjqCJ5IKy0y/c="
+									}
+								}
+							]
+						}
+					],
+					"visibility": "public",
+					"isReentrant": true,
+					"isReadOnly": false,
+					"isSingleExecution": false,
+					"nodes": [
+						{
+							"_type": "UMLInitialNode",
+							"_id": "AAAAAAFjqASvhaqkmH0=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "InitialNode1",
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLAction",
+							"_id": "AAAAAAFjqATelKqpPIs=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "JMSListener injects event",
+							"visibility": "public",
+							"kind": "opaque",
+							"isLocallyReentrant": false,
+							"isSynchronous": true
+						},
+						{
+							"_type": "UMLAction",
+							"_id": "AAAAAAFjqAWrCarLlr0=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "retrieve receipt SMS and email contact",
+							"visibility": "public",
+							"kind": "opaque",
+							"isLocallyReentrant": false,
+							"isSynchronous": true
+						},
+						{
+							"_type": "UMLAction",
+							"_id": "AAAAAAFjqAYmKKrmL6s=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "Prepare Message with template created",
+							"visibility": "public",
+							"kind": "opaque",
+							"isLocallyReentrant": false,
+							"isSynchronous": true
+						},
+						{
+							"_type": "UMLAction",
+							"_id": "AAAAAAFjqAZdgasAyFA=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "Senders Objects transmit the data",
+							"visibility": "public",
+							"kind": "opaque",
+							"isLocallyReentrant": false,
+							"isSynchronous": true
+						},
+						{
+							"_type": "UMLActivityFinalNode",
+							"_id": "AAAAAAFjqAbQ7asd+Ww=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "ActivityFinalNode1",
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLAction",
+							"_id": "AAAAAAFjqA2/A6tYai0=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "Locatize Template",
+							"visibility": "public",
+							"kind": "opaque",
+							"isLocallyReentrant": false,
+							"isSynchronous": true
+						},
+						{
+							"_type": "UMLForkNode",
+							"_id": "AAAAAAFjqBHP9auQV5g=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "ForkNode1",
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLForkNode",
+							"_id": "AAAAAAFjqBIJLquZsRo=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "ForkNode2",
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLJoinNode",
+							"_id": "AAAAAAFjqB9/S6w3TKM=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "JoinNode1",
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLAction",
+							"_id": "AAAAAAFjqCEig6yRtTs=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"name": "Check if Event has been enabled by MFI",
+							"visibility": "public",
+							"kind": "opaque",
+							"isLocallyReentrant": false,
+							"isSynchronous": true
+						}
+					],
+					"edges": [
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqBEKGKt1+H8=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqATelKqpPIs="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqAWrCarLlr0="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqBIoaquel/4=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqATelKqpPIs="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqCEig6yRtTs="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqBKjHquv5CM=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqASvhaqkmH0="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqATelKqpPIs="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqBLYAqvCSQk=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqAYmKKrmL6s="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqA2/A6tYai0="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqBLqNqvTow0=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqAZdgasAyFA="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqAbQ7asd+Ww="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqByuGavpb+Q=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqATelKqpPIs="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqAWrCarLlr0="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqB0vKawF6iM=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqBIJLquZsRo="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqAWrCarLlr0="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqB14s6wWTtM=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqBIJLquZsRo="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqAYmKKrmL6s="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqB+W4qw8vc8=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqB9/S6w3TKM="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqAZdgasAyFA="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqB+mc6xNTWc=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqA2/A6tYai0="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqB9/S6w3TKM="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqCBd06x3DWs=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqAWrCarLlr0="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqB9/S6w3TKM="
+							},
+							"visibility": "public"
+						},
+						{
+							"_type": "UMLControlFlow",
+							"_id": "AAAAAAFjqCJ5HayvTsA=",
+							"_parent": {
+								"$ref": "AAAAAAFjqASLHqqfH1M="
+							},
+							"source": {
+								"$ref": "AAAAAAFjqCEig6yRtTs="
+							},
+							"target": {
+								"$ref": "AAAAAAFjqBIJLquZsRo="
+							},
+							"visibility": "public"
+						}
+					]
+				},
+				{
+					"_type": "UMLCollaboration",
+					"_id": "AAAAAAFjqCY2j5u3ys8=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "Collaboration1",
+					"ownedElements": [
+						{
+							"_type": "UMLInteraction",
+							"_id": "AAAAAAFjqCY2kpu4n0I=",
+							"_parent": {
+								"$ref": "AAAAAAFjqCY2j5u3ys8="
+							},
+							"name": "Interaction1",
+							"ownedElements": [
+								{
+									"_type": "UMLSequenceDiagram",
+									"_id": "AAAAAAFjqCY2kpu5KQk=",
+									"_parent": {
+										"$ref": "AAAAAAFjqCY2kpu4n0I="
+									},
+									"name": "SequenceDiagram1",
+									"visible": true,
+									"defaultDiagram": false,
+									"ownedViews": [
+										{
+											"_type": "UMLFrameView",
+											"_id": "AAAAAAFjqCY2k5u6GlA=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCY2kpu5KQk="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCY2kpu5KQk="
+											},
+											"subViews": [
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqCY2lJu7Oe8=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCY2k5u6GlA="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 73,
+													"top": 10,
+													"width": 111,
+													"height": 12,
+													"autoResize": false,
+													"underline": false,
+													"text": "SequenceDiagram1",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												},
+												{
+													"_type": "LabelView",
+													"_id": "AAAAAAFjqCY2lZu8kXQ=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCY2k5u6GlA="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;1",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 10,
+													"top": 10,
+													"width": 58,
+													"height": 12,
+													"autoResize": false,
+													"underline": false,
+													"text": "interaction",
+													"horizontalAlignment": 2,
+													"verticalAlignment": 5,
+													"wordWrap": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 5,
+											"top": 5,
+											"width": 695,
+											"height": 595,
+											"autoResize": false,
+											"nameLabel": {
+												"$ref": "AAAAAAFjqCY2lJu7Oe8="
+											},
+											"frameTypeLabel": {
+												"$ref": "AAAAAAFjqCY2lZu8kXQ="
+											}
+										},
+										{
+											"_type": "UMLSeqLifelineView",
+											"_id": "AAAAAAFjqCbCSJvIsEM=",
+											"_parent": {
+												"$ref": "AAAAAAFjqCY2kpu5KQk="
+											},
+											"model": {
+												"$ref": "AAAAAAFjqCbCSJvHDpo="
+											},
+											"subViews": [
+												{
+													"_type": "UMLNameCompartmentView",
+													"_id": "AAAAAAFjqCbCSZvJ4ng=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCbCSJvIsEM="
+													},
+													"model": {
+														"$ref": "AAAAAAFjqCbCSJvHDpo="
+													},
+													"subViews": [
+														{
+															"_type": "LabelView",
+															"_id": "AAAAAAFjqCbCSpvKaxs=",
+															"_parent": {
+																"$ref": "AAAAAAFjqCbCSZvJ4ng="
+															},
+															"visible": false,
+															"enabled": true,
+															"lineColor": "#000000",
+															"fillColor": "#ffffff",
+															"fontColor": "#000000",
+															"font": "Helvetica;12;0",
+															"showShadow": true,
+															"containerChangeable": false,
+															"containerExtending": false,
+															"left": 0,
+															"top": 0,
+															"width": 0,
+															"height": 12,
+															"autoResize": false,
+															"underline": false,
+															"horizontalAlignment": 2,
+															"verticalAlignment": 5,
+															"wordWrap": false
+														},
+														{
+															"_type": "LabelView",
+															"_id": "AAAAAAFjqCbCSpvLXu8=",
+															"_parent": {
+																"$ref": "AAAAAAFjqCbCSZvJ4ng="
+															},
+															"visible": true,
+															"enabled": true,
+															"lineColor": "#000000",
+															"fillColor": "#ffffff",
+															"fontColor": "#000000",
+															"font": "Helvetica;12;1",
+															"showShadow": true,
+															"containerChangeable": false,
+															"containerExtending": false,
+															"left": 37,
+															"top": 47,
+															"width": 90,
+															"height": 12,
+															"autoResize": false,
+															"underline": false,
+															"text": "EventListener",
+															"horizontalAlignment": 2,
+															"verticalAlignment": 5,
+															"wordWrap": false
+														},
+														{
+															"_type": "LabelView",
+															"_id": "AAAAAAFjqCbCSpvMWyQ=",
+															"_parent": {
+																"$ref": "AAAAAAFjqCbCSZvJ4ng="
+															},
+															"visible": false,
+															"enabled": true,
+															"lineColor": "#000000",
+															"fillColor": "#ffffff",
+															"fontColor": "#000000",
+															"font": "Helvetica;12;0",
+															"showShadow": true,
+															"containerChangeable": false,
+															"containerExtending": false,
+															"left": 0,
+															"top": 0,
+															"width": 99,
+															"height": 12,
+															"autoResize": false,
+															"underline": false,
+															"text": "(from Interaction1)",
+															"horizontalAlignment": 2,
+															"verticalAlignment": 5,
+															"wordWrap": false
+														},
+														{
+															"_type": "LabelView",
+															"_id": "AAAAAAFjqCbCS5vNZUs=",
+															"_parent": {
+																"$ref": "AAAAAAFjqCbCSZvJ4ng="
+															},
+															"visible": false,
+															"enabled": true,
+															"lineColor": "#000000",
+															"fillColor": "#ffffff",
+															"fontColor": "#000000",
+															"font": "Helvetica;12;0",
+															"showShadow": true,
+															"containerChangeable": false,
+															"containerExtending": false,
+															"left": 0,
+															"top": 0,
+															"width": 0,
+															"height": 12,
+															"autoResize": false,
+															"underline": false,
+															"horizontalAlignment": 1,
+															"verticalAlignment": 5,
+															"wordWrap": false
+														}
+													],
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 32,
+													"top": 40,
+													"width": 100,
+													"height": 40,
+													"autoResize": false,
+													"stereotypeLabel": {
+														"$ref": "AAAAAAFjqCbCSpvKaxs="
+													},
+													"nameLabel": {
+														"$ref": "AAAAAAFjqCbCSpvLXu8="
+													},
+													"namespaceLabel": {
+														"$ref": "AAAAAAFjqCbCSpvMWyQ="
+													},
+													"propertyLabel": {
+														"$ref": "AAAAAAFjqCbCS5vNZUs="
+													}
+												},
+												{
+													"_type": "UMLLinePartView",
+													"_id": "AAAAAAFjqCbCS5vOH9k=",
+													"_parent": {
+														"$ref": "AAAAAAFjqCbCSJvIsEM="
+													},
+													"model": {
+														"$ref": "AAAAAAFjqCbCSJvHDpo="
+													},
+													"visible": true,
+													"enabled": true,
+													"lineColor": "#000000",
+													"fillColor": "#ffffff",
+													"fontColor": "#000000",
+													"font": "Helvetica;12;0",
+													"showShadow": true,
+													"containerChangeable": false,
+													"containerExtending": false,
+													"left": 82,
+													"top": 80,
+													"width": 1,
+													"height": 160,
+													"autoResize": false
+												}
+											],
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 32,
+											"top": 40,
+											"width": 100,
+											"height": 200,
+											"autoResize": false,
+											"stereotypeDisplay": "label",
+											"showVisibility": true,
+											"showNamespace": false,
+											"showProperty": true,
+											"showType": true,
+											"nameCompartment": {
+												"$ref": "AAAAAAFjqCbCSZvJ4ng="
+											},
+											"wordWrap": false,
+											"linePart": {
+												"$ref": "AAAAAAFjqCbCS5vOH9k="
+											}
+										}
+									],
+									"showSequenceNumber": true,
+									"showSignature": true,
+									"showActivation": true
+								}
+							],
+							"visibility": "public",
+							"isReentrant": true,
+							"participants": [
+								{
+									"_type": "UMLLifeline",
+									"_id": "AAAAAAFjqCbCSJvHDpo=",
+									"_parent": {
+										"$ref": "AAAAAAFjqCY2kpu4n0I="
+									},
+									"name": "EventListener",
+									"visibility": "public",
+									"represent": {
+										"$ref": "AAAAAAFjqCbCR5vGwmU="
+									},
+									"isMultiInstance": false
+								}
+							]
+						}
+					],
+					"visibility": "public",
+					"attributes": [
+						{
+							"_type": "UMLAttribute",
+							"_id": "AAAAAAFjqCbCR5vGwmU=",
+							"_parent": {
+								"$ref": "AAAAAAFjqCY2j5u3ys8="
+							},
+							"name": "Role1",
+							"visibility": "public",
+							"isStatic": false,
+							"isLeaf": false,
+							"type": "",
+							"isReadOnly": false,
+							"isOrdered": false,
+							"isUnique": false,
+							"isDerived": false,
+							"aggregation": "none",
+							"isID": false
+						}
+					],
+					"isAbstract": false,
+					"isFinalSpecialization": false,
+					"isLeaf": false
+				},
+				{
+					"_type": "UMLUseCaseDiagram",
+					"_id": "AAAAAAFjuvxSC6RUg4A=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "CustomerUseCase",
+					"visible": true,
+					"defaultDiagram": false,
+					"ownedViews": [
+						{
+							"_type": "UMLUseCaseSubjectView",
+							"_id": "AAAAAAFjuv4gOKRa+jQ=",
+							"_parent": {
+								"$ref": "AAAAAAFjuvxSC6RUg4A="
+							},
+							"model": {
+								"$ref": "AAAAAAFjuv4gOKRYAw8="
+							},
+							"subViews": [
+								{
+									"_type": "UMLNameCompartmentView",
+									"_id": "AAAAAAFjuv4gOaRbEkE=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv4gOKRa+jQ="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv4gOKRYAw8="
+									},
+									"subViews": [
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv4gOaRczFQ=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv4gOaRbEkE="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 0,
+											"top": 0,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv4gOaRdgAQ=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv4gOaRbEkE="
+											},
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;1",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 213,
+											"top": 39,
+											"width": 478,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"text": "Notification Microservice",
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv4gOaReStM=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv4gOaRbEkE="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 0,
+											"top": 0,
+											"width": 69,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"text": "(from Model)",
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv4gOaRf7IE=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv4gOaRbEkE="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 0,
+											"top": 0,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"horizontalAlignment": 1,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": 208,
+									"top": 32,
+									"width": 488,
+									"height": 24,
+									"autoResize": false,
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjuv4gOaRczFQ="
+									},
+									"nameLabel": {
+										"$ref": "AAAAAAFjuv4gOaRdgAQ="
+									},
+									"namespaceLabel": {
+										"$ref": "AAAAAAFjuv4gOaReStM="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjuv4gOaRf7IE="
+									}
+								}
+							],
+							"visible": true,
+							"enabled": true,
+							"lineColor": "#000000",
+							"fillColor": "#ffffff",
+							"fontColor": "#000000",
+							"font": "Helvetica;12;0",
+							"showShadow": true,
+							"containerChangeable": false,
+							"containerExtending": false,
+							"left": 208,
+							"top": 32,
+							"width": 488,
+							"height": 608,
+							"autoResize": false,
+							"stereotypeDisplay": "label",
+							"showVisibility": true,
+							"showNamespace": false,
+							"showProperty": true,
+							"showType": true,
+							"nameCompartment": {
+								"$ref": "AAAAAAFjuv4gOaRbEkE="
+							},
+							"wordWrap": false
+						},
+						{
+							"_type": "UMLActorView",
+							"_id": "AAAAAAFjuv6kb6R0A6g=",
+							"_parent": {
+								"$ref": "AAAAAAFjuvxSC6RUg4A="
+							},
+							"model": {
+								"$ref": "AAAAAAFjuv6kbaRyZy0="
+							},
+							"subViews": [
+								{
+									"_type": "UMLNameCompartmentView",
+									"_id": "AAAAAAFjuv6kcKR1JNo=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv6kb6R0A6g="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv6kbaRyZy0="
+									},
+									"subViews": [
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv6kcKR2baE=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv6kcKR1JNo="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": -112,
+											"top": 352,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv6kcaR3JSY=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv6kcKR1JNo="
+											},
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;1",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 61,
+											"top": 341,
+											"width": 134,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"text": "customer microservice",
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv6kcaR4LTc=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv6kcKR1JNo="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": -112,
+											"top": 352,
+											"width": 69,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"text": "(from Model)",
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv6kcaR5qOc=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv6kcKR1JNo="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": -112,
+											"top": 352,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"horizontalAlignment": 1,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": 56,
+									"top": 334,
+									"width": 144,
+									"height": 24,
+									"autoResize": false,
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjuv6kcKR2baE="
+									},
+									"nameLabel": {
+										"$ref": "AAAAAAFjuv6kcaR3JSY="
+									},
+									"namespaceLabel": {
+										"$ref": "AAAAAAFjuv6kcaR4LTc="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjuv6kcaR5qOc="
+									}
+								},
+								{
+									"_type": "UMLAttributeCompartmentView",
+									"_id": "AAAAAAFjuv6kcqR6rvs=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv6kb6R0A6g="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv6kbaRyZy0="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -56,
+									"top": 176,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLOperationCompartmentView",
+									"_id": "AAAAAAFjuv6kcqR7HEk=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv6kb6R0A6g="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv6kbaRyZy0="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -56,
+									"top": 176,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLReceptionCompartmentView",
+									"_id": "AAAAAAFjuv6kc6R8FZ0=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv6kb6R0A6g="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv6kbaRyZy0="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -56,
+									"top": 176,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLTemplateParameterCompartmentView",
+									"_id": "AAAAAAFjuv6kdKR9/xc=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv6kb6R0A6g="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv6kbaRyZy0="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -56,
+									"top": 176,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								}
+							],
+							"visible": true,
+							"enabled": true,
+							"lineColor": "#000000",
+							"fillColor": "#ffffff",
+							"fontColor": "#000000",
+							"font": "Helvetica;12;0",
+							"showShadow": true,
+							"containerChangeable": true,
+							"containerExtending": false,
+							"left": 56,
+							"top": 280,
+							"width": 144,
+							"height": 79,
+							"autoResize": false,
+							"stereotypeDisplay": "label",
+							"showVisibility": true,
+							"showNamespace": false,
+							"showProperty": true,
+							"showType": true,
+							"nameCompartment": {
+								"$ref": "AAAAAAFjuv6kcKR1JNo="
+							},
+							"wordWrap": false,
+							"suppressAttributes": true,
+							"suppressOperations": true,
+							"suppressReceptions": true,
+							"showMultiplicity": true,
+							"showOperationSignature": true,
+							"attributeCompartment": {
+								"$ref": "AAAAAAFjuv6kcqR6rvs="
+							},
+							"operationCompartment": {
+								"$ref": "AAAAAAFjuv6kcqR7HEk="
+							},
+							"receptionCompartment": {
+								"$ref": "AAAAAAFjuv6kc6R8FZ0="
+							},
+							"templateParameterCompartment": {
+								"$ref": "AAAAAAFjuv6kdKR9/xc="
+							}
+						},
+						{
+							"_type": "UMLUseCaseView",
+							"_id": "AAAAAAFjuv/XzaSib0Y=",
+							"_parent": {
+								"$ref": "AAAAAAFjuvxSC6RUg4A="
+							},
+							"model": {
+								"$ref": "AAAAAAFjuv/XzKSgDcQ="
+							},
+							"subViews": [
+								{
+									"_type": "UMLNameCompartmentView",
+									"_id": "AAAAAAFjuv/XzqSjIc4=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv/XzaSib0Y="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv/XzKSgDcQ="
+									},
+									"subViews": [
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv/Xz6SkS8o=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv/XzqSjIc4="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": -80,
+											"top": -96,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv/X0KSlY0g=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv/XzqSjIc4="
+											},
+											"visible": true,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;1",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": 330.5,
+											"top": 104,
+											"width": 92,
+											"height": 36,
+											"autoResize": false,
+											"underline": false,
+											"text": "Account Created Notification",
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": true
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv/X0KSmuPo=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv/XzqSjIc4="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": -80,
+											"top": -96,
+											"width": 69,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"text": "(from Model)",
+											"horizontalAlignment": 2,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										},
+										{
+											"_type": "LabelView",
+											"_id": "AAAAAAFjuv/X0KSnIG4=",
+											"_parent": {
+												"$ref": "AAAAAAFjuv/XzqSjIc4="
+											},
+											"visible": false,
+											"enabled": true,
+											"lineColor": "#000000",
+											"fillColor": "#ffffff",
+											"fontColor": "#000000",
+											"font": "Helvetica;12;0",
+											"showShadow": true,
+											"containerChangeable": false,
+											"containerExtending": false,
+											"left": -80,
+											"top": -96,
+											"width": 0,
+											"height": 12,
+											"autoResize": false,
+											"underline": false,
+											"horizontalAlignment": 1,
+											"verticalAlignment": 5,
+											"wordWrap": false
+										}
+									],
+									"visible": true,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": 325.5,
+									"top": 97,
+									"width": 102,
+									"height": 48,
+									"autoResize": false,
+									"stereotypeLabel": {
+										"$ref": "AAAAAAFjuv/Xz6SkS8o="
+									},
+									"nameLabel": {
+										"$ref": "AAAAAAFjuv/X0KSlY0g="
+									},
+									"namespaceLabel": {
+										"$ref": "AAAAAAFjuv/X0KSmuPo="
+									},
+									"propertyLabel": {
+										"$ref": "AAAAAAFjuv/X0KSnIG4="
+									}
+								},
+								{
+									"_type": "UMLAttributeCompartmentView",
+									"_id": "AAAAAAFjuv/X0aSocII=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv/XzaSib0Y="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv/XzKSgDcQ="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -40,
+									"top": -48,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLOperationCompartmentView",
+									"_id": "AAAAAAFjuv/X0qSpfns=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv/XzaSib0Y="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv/XzKSgDcQ="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -40,
+									"top": -48,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLReceptionCompartmentView",
+									"_id": "AAAAAAFjuv/X0qSqNoc=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv/XzaSib0Y="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv/XzKSgDcQ="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -40,
+									"top": -48,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLTemplateParameterCompartmentView",
+									"_id": "AAAAAAFjuv/X06Sr5DM=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv/XzaSib0Y="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv/XzKSgDcQ="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -40,
+									"top": -48,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								},
+								{
+									"_type": "UMLExtensionPointCompartmentView",
+									"_id": "AAAAAAFjuv/X1KSsXMU=",
+									"_parent": {
+										"$ref": "AAAAAAFjuv/XzaSib0Y="
+									},
+									"model": {
+										"$ref": "AAAAAAFjuv/XzKSgDcQ="
+									},
+									"visible": false,
+									"enabled": true,
+									"lineColor": "#000000",
+									"fillColor": "#ffffff",
+									"fontColor": "#000000",
+									"font": "Helvetica;12;0",
+									"showShadow": true,
+									"containerChangeable": false,
+									"containerExtending": false,
+									"left": -40,
+									"top": -48,
+									"width": 10,
+									"height": 10,
+									"autoResize": false
+								}
+							],
+							"visible": true,
+							"enabled": true,
+							"lineColor": "#000000",
+							"fillColor": "#ffffff",
+							"fontColor": "#000000",
+							"font": "Helvetica;12;0",
+							"showShadow": true,
+							"containerChangeable": true,
+							"containerExtending": false,
+							"left": 304,
+							"top": 88,
+							"width": 145,
+							"height": 67,
+							"autoResize": false,
+							"stereotypeDisplay": "label",
+							"showVisibility": true,
+							"showNamespace": false,
+							"showProperty": true,
+							"showType": true,
+							"nameCompartment": {
+								"$ref": "AAAAAAFjuv/XzqSjIc4="
+							},
+							"wordWrap": true,
+							"suppressAttributes": true,
+							"suppressOperations": true,
+							"suppressReceptions": true,
+							"showMultiplicity": true,
+							"showOperationSignature": true,
+							"attributeCompartment": {
+								"$ref": "AAAAAAFjuv/X0aSocII="
+							},
+							"operationCompartment": {
+								"$ref": "AAAAAAFjuv/X0qSpfns="
+							},
+							"receptionCompartment": {
+								"$ref": "AAAAAAFjuv/X0qSqNoc="
+							},
+							"templateParameterCompartment": {
+								"$ref": "AAAAAAFjuv/X06Sr5DM="
+							},
+							"extensionPointCompartment": {
+								"$ref": "AAAAAAFjuv/X1KSsXMU="
+							}
+						}
+					]
+				},
+				{
+					"_type": "UMLUseCaseSubject",
+					"_id": "AAAAAAFjuv4gOKRYAw8=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "Notification Microservice",
+					"visibility": "public"
+				},
+				{
+					"_type": "UMLActor",
+					"_id": "AAAAAAFjuv6kbaRyZy0=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "customer microservice",
+					"visibility": "public",
+					"isAbstract": false,
+					"isFinalSpecialization": false,
+					"isLeaf": false
+				},
+				{
+					"_type": "UMLUseCase",
+					"_id": "AAAAAAFjuv/XzKSgDcQ=",
+					"_parent": {
+						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
+					},
+					"name": "Account Created Notification",
+					"visibility": "public",
+					"isAbstract": false,
+					"isFinalSpecialization": false,
+					"isLeaf": false
+				}
+			],
+			"visibility": "public"
+		}
+	]
+}
\ No newline at end of file