You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by da...@apache.org on 2018/02/16 09:52:33 UTC

[17/30] atlas git commit: ATLAS-2246: OMRS Connector API plus REST and IGC Connector skeleton - 15th February 2018

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventProcessor.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventProcessor.java b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventProcessor.java
new file mode 100644
index 0000000..b2f0ceb
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventProcessor.java
@@ -0,0 +1,667 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.atlas.omrs.eventmanagement.events;
+
+import org.apache.atlas.omrs.metadatacollection.properties.instances.EntityDetail;
+import org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceProvenanceType;
+import org.apache.atlas.omrs.metadatacollection.properties.instances.Relationship;
+import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
+
+/**
+ * OMRSInstanceEventProcessor is an interface implemented by a component that is able to process incoming
+ * metadata instance events for an Open Metadata Repository.  Instance events are used to replicate metadata
+ * instances across an Open Metadata Repository Cohort.
+ */
+public interface OMRSInstanceEventProcessor
+{
+    /**
+     * A new entity has been created.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the new entity
+     */
+    void processNewEntityEvent(String       sourceName,
+                               String       originatorMetadataCollectionId,
+                               String       originatorServerName,
+                               String       originatorServerType,
+                               String       originatorOrganizationName,
+                               EntityDetail entity);
+
+
+    /**
+     * An existing entity has been updated.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the new version of the entity.
+     */
+    void processUpdatedEntityEvent(String       sourceName,
+                                   String       originatorMetadataCollectionId,
+                                   String       originatorServerName,
+                                   String       originatorServerType,
+                                   String       originatorOrganizationName,
+                                   EntityDetail entity);
+
+
+    /**
+     * An update to an entity has been undone.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the version of the entity that has been restored.
+     */
+    void processUndoneEntityEvent(String       sourceName,
+                                  String       originatorMetadataCollectionId,
+                                  String       originatorServerName,
+                                  String       originatorServerType,
+                                  String       originatorOrganizationName,
+                                  EntityDetail entity);
+
+
+    /**
+     * A new classification has been added to an entity.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the entity with the new classification added.
+     */
+    void processClassifiedEntityEvent(String       sourceName,
+                                      String       originatorMetadataCollectionId,
+                                      String       originatorServerName,
+                                      String       originatorServerType,
+                                      String       originatorOrganizationName,
+                                      EntityDetail entity);
+
+
+    /**
+     * A classification has been removed from an entity.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the entity after the classification has been removed.
+     */
+    void processDeclassifiedEntityEvent(String       sourceName,
+                                        String       originatorMetadataCollectionId,
+                                        String       originatorServerName,
+                                        String       originatorServerType,
+                                        String       originatorOrganizationName,
+                                        EntityDetail entity);
+
+
+    /**
+     * An existing classification has been changed on an entity.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the entity after the classification has been changed.
+     */
+    void processReclassifiedEntityEvent(String       sourceName,
+                                        String       originatorMetadataCollectionId,
+                                        String       originatorServerName,
+                                        String       originatorServerType,
+                                        String       originatorOrganizationName,
+                                        EntityDetail entity);
+
+
+    /**
+     * An existing entity has been deleted.  This is a soft delete. This means it is still in the repository
+     * but it is no longer returned on queries.
+     *
+     * All relationships to the entity are also soft-deleted and will no longer be usable.  These deleted relationships
+     * will be notified through separate events.
+     *
+     * Details of the TypeDef are included with the entity's unique id (guid) to ensure the right entity is deleted in
+     * the remote repositories.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param typeDefGUID - unique identifier for this entity's TypeDef
+     * @param typeDefName - name of this entity's TypeDef
+     * @param instanceGUID - unique identifier for the entity
+     */
+    void processDeletedEntityEvent(String       sourceName,
+                                   String       originatorMetadataCollectionId,
+                                   String       originatorServerName,
+                                   String       originatorServerType,
+                                   String       originatorOrganizationName,
+                                   String       typeDefGUID,
+                                   String       typeDefName,
+                                   String       instanceGUID);
+
+
+    /**
+     * A deleted entity has been permanently removed from the repository.  This request can not be undone.
+     *
+     * Details of the TypeDef are included with the entity's unique id (guid) to ensure the right entity is purged in
+     * the remote repositories.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param typeDefGUID - unique identifier for this entity's TypeDef
+     * @param typeDefName - name of this entity's TypeDef
+     * @param instanceGUID - unique identifier for the entity
+     */
+    void processPurgedEntityEvent(String       sourceName,
+                                  String       originatorMetadataCollectionId,
+                                  String       originatorServerName,
+                                  String       originatorServerType,
+                                  String       originatorOrganizationName,
+                                  String       typeDefGUID,
+                                  String       typeDefName,
+                                  String       instanceGUID);
+
+
+    /**
+     * A deleted entity has been restored to the state it was before it was deleted.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the version of the entity that has been restored.
+     */
+    void processRestoredEntityEvent(String       sourceName,
+                                    String       originatorMetadataCollectionId,
+                                    String       originatorServerName,
+                                    String       originatorServerType,
+                                    String       originatorOrganizationName,
+                                    EntityDetail entity);
+
+
+    /**
+     * An existing entity has had its type changed.  Typically this action is taken to move an entity's
+     * type to either a super type (so the subtype can be deleted) or a new subtype (so additional properties can be
+     * added.)  However, the type can be changed to any compatible type.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param originalTypeDef - description of this entity's original TypeDef.
+     * @param entity - new values for this entity, including the new type information.
+     */
+    void processReTypedEntityEvent(String         sourceName,
+                                   String         originatorMetadataCollectionId,
+                                   String         originatorServerName,
+                                   String         originatorServerType,
+                                   String         originatorOrganizationName,
+                                   TypeDefSummary originalTypeDef,
+                                   EntityDetail   entity);
+
+
+    /**
+     * An existing entity has changed home repository.  This action is taken for example, if a repository
+     * becomes permanently unavailable, or if the user community updating this entity move to working
+     * from a different repository in the open metadata repository cluster.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param originalHomeMetadataCollectionId - unique identifier for the original home metadata collection/repository.
+     * @param entity - new values for this entity, including the new home information.
+     */
+    void processReHomedEntityEvent(String       sourceName,
+                                   String       originatorMetadataCollectionId,
+                                   String       originatorServerName,
+                                   String       originatorServerType,
+                                   String       originatorOrganizationName,
+                                   String       originalHomeMetadataCollectionId,
+                                   EntityDetail entity);
+
+    /**
+     * The guid of an existing entity has been changed to a new value.  This is used if two different
+     * entities are discovered to have the same guid.  This is extremely unlikely but not impossible so
+     * the open metadata protocol has provision for this.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param originalEntityGUID - the existing identifier for the entity.
+     * @param entity - new values for this entity, including the new guid.
+     */
+    void processReIdentifiedEntityEvent(String       sourceName,
+                                        String       originatorMetadataCollectionId,
+                                        String       originatorServerName,
+                                        String       originatorServerType,
+                                        String       originatorOrganizationName,
+                                        String       originalEntityGUID,
+                                        EntityDetail entity);
+
+
+    /**
+     * The local repository is requesting that an entity from another repository's metadata collection is
+     * refreshed so the local repository can create a reference copy.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param typeDefGUID - - unique identifier for this entity's TypeDef
+     * @param typeDefName - name of this entity's TypeDef
+     * @param instanceGUID - unique identifier for the entity
+     * @param homeMetadataCollectionId - metadata collection id for the home of this instance.
+     */
+    void processRefreshEntityRequested(String       sourceName,
+                                       String       originatorMetadataCollectionId,
+                                       String       originatorServerName,
+                                       String       originatorServerType,
+                                       String       originatorOrganizationName,
+                                       String       typeDefGUID,
+                                       String       typeDefName,
+                                       String       instanceGUID,
+                                       String       homeMetadataCollectionId);
+
+
+    /**
+     * A remote repository in the cohort has sent entity details in response to a refresh request.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param entity - details of the requested entity
+     */
+    void processRefreshEntityEvent(String       sourceName,
+                                   String       originatorMetadataCollectionId,
+                                   String       originatorServerName,
+                                   String       originatorServerType,
+                                   String       originatorOrganizationName,
+                                   EntityDetail entity);
+
+    /**
+     * A new relationship has been created.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param relationship - details of the new relationship
+     */
+    void processNewRelationshipEvent(String       sourceName,
+                                     String       originatorMetadataCollectionId,
+                                     String       originatorServerName,
+                                     String       originatorServerType,
+                                     String       originatorOrganizationName,
+                                     Relationship relationship);
+
+
+    /**
+     * An existing relationship has been updated.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param relationship - details of the new version of the relationship.
+     */
+    void processUpdatedRelationshipEvent(String       sourceName,
+                                         String       originatorMetadataCollectionId,
+                                         String       originatorServerName,
+                                         String       originatorServerType,
+                                         String       originatorOrganizationName,
+                                         Relationship relationship);
+
+
+    /**
+     * An update to a relationship has been undone.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param relationship - details of the version of the relationship that has been restored.
+     */
+    void processUndoneRelationshipEvent(String       sourceName,
+                                        String       originatorMetadataCollectionId,
+                                        String       originatorServerName,
+                                        String       originatorServerType,
+                                        String       originatorOrganizationName,
+                                        Relationship relationship);
+
+
+    /**
+     * An existing relationship has been deleted.  This is a soft delete. This means it is still in the repository
+     * but it is no longer returned on queries.
+     *
+     * Details of the TypeDef are included with the relationship's unique id (guid) to ensure the right
+     * relationship is deleted in the remote repositories.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param typeDefGUID - unique identifier for this relationship's TypeDef
+     * @param typeDefName - name of this relationship's TypeDef
+     * @param instanceGUID - unique identifier for the relationship
+     */
+    void processDeletedRelationshipEvent(String       sourceName,
+                                         String       originatorMetadataCollectionId,
+                                         String       originatorServerName,
+                                         String       originatorServerType,
+                                         String       originatorOrganizationName,
+                                         String       typeDefGUID,
+                                         String       typeDefName,
+                                         String       instanceGUID);
+
+
+    /**
+     * A deleted relationship has been permanently removed from the repository.  This request can not be undone.
+     *
+     * Details of the TypeDef are included with the relationship's unique id (guid) to ensure the right
+     * relationship is purged in the remote repositories.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param typeDefGUID - unique identifier for this relationship's TypeDef.
+     * @param typeDefName - name of this relationship's TypeDef.
+     * @param instanceGUID - unique identifier for the relationship.
+     */
+    void processPurgedRelationshipEvent(String       sourceName,
+                                        String       originatorMetadataCollectionId,
+                                        String       originatorServerName,
+                                        String       originatorServerType,
+                                        String       originatorOrganizationName,
+                                        String       typeDefGUID,
+                                        String       typeDefName,
+                                        String       instanceGUID);
+
+
+    /**
+     * A deleted relationship has been restored to the state it was before it was deleted.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param relationship - details of the version of the relationship that has been restored.
+     */
+    void processRestoredRelationshipEvent(String       sourceName,
+                                          String       originatorMetadataCollectionId,
+                                          String       originatorServerName,
+                                          String       originatorServerType,
+                                          String       originatorOrganizationName,
+                                          Relationship relationship);
+
+
+    /**
+     * An existing relationship has had its type changed.  Typically this action is taken to move a relationship's
+     * type to either a super type (so the subtype can be deleted) or a new subtype (so additional properties can be
+     * added.)  However, the type can be changed to any compatible type.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param originalTypeDef -  description of this relationship's original TypeDef.
+     * @param relationship - new values for this relationship, including the new type information.
+     */
+    void processReTypedRelationshipEvent(String         sourceName,
+                                         String         originatorMetadataCollectionId,
+                                         String         originatorServerName,
+                                         String         originatorServerType,
+                                         String         originatorOrganizationName,
+                                         TypeDefSummary originalTypeDef,
+                                         Relationship   relationship);
+
+
+    /**
+     * An existing relationship has changed home repository.  This action is taken for example, if a repository
+     * becomes permanently unavailable, or if the user community updating this relationship move to working
+     * from a different repository in the open metadata repository cluster.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param originalHomeMetadataCollectionId - unique identifier for the original home repository.
+     * @param relationship - new values for this relationship, including the new home information.
+     */
+    void processReHomedRelationshipEvent(String       sourceName,
+                                         String       originatorMetadataCollectionId,
+                                         String       originatorServerName,
+                                         String       originatorServerType,
+                                         String       originatorOrganizationName,
+                                         String       originalHomeMetadataCollectionId,
+                                         Relationship relationship);
+
+
+    /**
+     * The guid of an existing relationship has changed.  This is used if two different
+     * relationships are discovered to have the same guid.  This is extremely unlikely but not impossible so
+     * the open metadata protocol has provision for this.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param originalRelationshipGUID - the existing identifier for the relationship.
+     * @param relationship - new values for this relationship, including the new guid.
+     */
+    void processReIdentifiedRelationshipEvent(String       sourceName,
+                                              String       originatorMetadataCollectionId,
+                                              String       originatorServerName,
+                                              String       originatorServerType,
+                                              String       originatorOrganizationName,
+                                              String       originalRelationshipGUID,
+                                              Relationship relationship);
+
+
+
+    /**
+     * An open metadata repository has requested the home repository of a relationship send details of the relationship so
+     * its local metadata collection can create a reference copy of the instance.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param typeDefGUID - unique identifier for this instance's TypeDef
+     * @param typeDefName - name of this relationship's TypeDef
+     * @param instanceGUID - unique identifier for the instance
+     * @param homeMetadataCollectionId - metadata collection id for the home of this instance.
+     */
+    void processRefreshRelationshipRequest(String       sourceName,
+                                           String       originatorMetadataCollectionId,
+                                           String       originatorServerName,
+                                           String       originatorServerType,
+                                           String       originatorOrganizationName,
+                                           String       typeDefGUID,
+                                           String       typeDefName,
+                                           String       instanceGUID,
+                                           String       homeMetadataCollectionId);
+
+
+    /**
+     * An open metadata repository is refreshing the information about a relationship for the other
+     * repositories in the cohort.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection hosted by the server that
+     *                                       sent the event.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param relationship - relationship details
+     */
+    void processRefreshRelationshipEvent(String       sourceName,
+                                         String       originatorMetadataCollectionId,
+                                         String       originatorServerName,
+                                         String       originatorServerType,
+                                         String       originatorOrganizationName,
+                                         Relationship relationship);
+
+
+    /**
+     * An open metadata repository has detected two metadata instances with the same identifier (guid).
+     * This is a serious error because it could lead to corruption of the metadata collections within the cohort.
+     * When this occurs, all repositories in the cohort delete their reference copies of the metadata instances and
+     * at least one of the instances has its GUID changed in its respective home repository.  The updated instance(s)
+     * are redistributed around the cohort.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - metadata collection id of the repository reporting the conflicting instance
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param targetMetadataCollectionId - metadata collection id of other repository with the conflicting instance
+     * @param targetTypeDef - details of the target instance's TypeDef
+     * @param targetInstanceGUID - unique identifier for the source instance
+     * @param otherOrigin - origin of the other (older) metadata instance
+     * @param otherMetadataCollectionId - metadata collection of the other (older) metadata instance
+     * @param otherTypeDef - details of the other (older) instance's TypeDef
+     * @param otherInstanceGUID - unique identifier for the other (older) instance
+     * @param errorMessage - description of the error.
+     */
+    void processConflictingInstancesEvent(String                 sourceName,
+                                          String                 originatorMetadataCollectionId,
+                                          String                 originatorServerName,
+                                          String                 originatorServerType,
+                                          String                 originatorOrganizationName,
+                                          String                 targetMetadataCollectionId,
+                                          TypeDefSummary         targetTypeDef,
+                                          String                 targetInstanceGUID,
+                                          String                 otherMetadataCollectionId,
+                                          InstanceProvenanceType otherOrigin,
+                                          TypeDefSummary         otherTypeDef,
+                                          String                 otherInstanceGUID,
+                                          String                 errorMessage);
+
+
+    /**
+     * An open metadata repository has detected an inconsistency in the version number of the type used in an updated metadata
+     * instance compared to its stored version.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - metadata collection id of the repository reporting the conflicting instance
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param targetMetadataCollectionId - metadata collection id of other repository with the conflicting instance
+     * @param targetTypeDef - description of the target instance's TypeDef
+     * @param targetInstanceGUID - unique identifier for the source instance
+     * @param otherTypeDef - details of the other (older) instance's TypeDef
+     * @param errorMessage - description of the error.
+     */
+    void processConflictingTypeEvent(String                 sourceName,
+                                     String                 originatorMetadataCollectionId,
+                                     String                 originatorServerName,
+                                     String                 originatorServerType,
+                                     String                 originatorOrganizationName,
+                                     String                 targetMetadataCollectionId,
+                                     TypeDefSummary         targetTypeDef,
+                                     String                 targetInstanceGUID,
+                                     TypeDefSummary         otherTypeDef,
+                                     String                 errorMessage);
+}
+

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventType.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventType.java b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventType.java
new file mode 100644
index 0000000..8d94980
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSInstanceEventType.java
@@ -0,0 +1,148 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.atlas.omrs.eventmanagement.events;
+
+/**
+ * OMRSInstanceEventType defines the different types of instance events in the open metadata repository services
+ * protocol.
+ */
+public enum OMRSInstanceEventType
+{
+    UNKNOWN_INSTANCE_EVENT          (0,  "UnknownInstanceEvent",
+                                         "An event that is not recognized by the local server."),
+    NEW_ENTITY_EVENT                (1,  "NewEntityEvent",
+                                         "A new entity has been created."),
+    UPDATED_ENTITY_EVENT            (2,  "UpdatedEntityEvent",
+                                         "An existing entity has been updated."),
+    UNDONE_ENTITY_EVENT             (3,  "UndoneEntityEvent",
+                                         "An update to an entity has been undone."),
+    CLASSIFIED_ENTITY_EVENT         (4,  "ClassifiedEntityEvent",
+                                         "A new classification has been added to an entity."),
+    DECLASSIFIED_ENTITY_EVENT       (5,  "DeclassifiedEntityEvent",
+                                         "A classification has been removed from an entity."),
+    RECLASSIFIED_ENTITY_EVENT       (6,  "ReclassifiedEntityEvent",
+                                         "An existing classification has been changed on an entity."),
+    DELETED_ENTITY_EVENT            (7,  "DeletedEntityEvent",
+                                         "An existing entity has been deleted.  This is a soft delete. " +
+                                          "This means it is still in the repository " +
+                                          "but it is no longer returned on queries."),
+    PURGED_ENTITY_EVENT             (8,  "PurgedEntityEvent",
+                                         "A deleted entity has been permanently removed from the repository. " +
+                                          "This request can not be undone."),
+    RESTORED_ENTITY_EVENT           (9,  "RestoredEntityEvent",
+                                         "A deleted entity has been restored to the state it was before it was deleted."),
+    RE_IDENTIFIED_ENTITY_EVENT      (10, "ReIdentifiedEntityEvent",
+                                         "The guid of an existing entity has been changed to a new value."),
+    RETYPED_ENTITY_EVENT            (11, "ReTypedEntityEvent",
+                                         "An existing entity has had its type changed."),
+    RE_HOMED_ENTITY_EVENT           (12, "ReHomedEntityEvent",
+                                         "An existing entity has changed home repository."),
+    REFRESH_ENTITY_REQUEST          (13, "RefreshEntityRequestEvent",
+                                         "The local repository is requesting that an entity from another repository's " +
+                                          "metadata collection is " +
+                                          "refreshed so the local repository can create a reference copy."),
+    REFRESHED_ENTITY_EVENT          (14, "RefreshedEntityEvent",
+                                         "A remote repository in the cohort has sent entity details in response " +
+                                          "to a refresh request."),
+    NEW_RELATIONSHIP_EVENT          (15, "NewRelationshipEvent",
+                                         "A new relationship has been created."),
+    UPDATED_RELATIONSHIP_EVENT      (16, "UpdateRelationshipEvent",
+                                         "An existing relationship has been updated."),
+    UNDONE_RELATIONSHIP_EVENT       (17, "UndoneRelationshipEvent",
+                                         "An earlier change to a relationship has been undone."),
+    DELETED_RELATIONSHIP_EVENT      (18, "DeletedRelationshipEvent",
+                                         "An existing relationship has been deleted.  This is a soft delete. " +
+                                          "This means it is still in the repository " +
+                                          "but it is no longer returned on queries."),
+    PURGED_RELATIONSHIP_EVENT       (19, "PurgedRelationshipEvent",
+                                         "A deleted relationship has been permanently removed from the repository. " +
+                                          "This request can not be undone."),
+    RESTORED_RELATIONSHIP_EVENT     (20, "RestoredRelationshipEvent",
+                                         "A deleted relationship has been restored to the state it was before it was deleted."),
+    RE_IDENTIFIED_RELATIONSHIP_EVENT(21, "ReIdentifiedRelationshipEvent",
+                                         "The guid of an existing relationship has changed."),
+    RETYPED_RELATIONSHIP_EVENT      (22, "ReTypedRelationshipEvent",
+                                         "An existing relationship has had its type changed."),
+    RE_HOMED_RELATIONSHIP_EVENT     (23, "ReHomedRelationshipEvent",
+                                         "An existing relationship has changed home repository."),
+    REFRESH_RELATIONSHIP_REQUEST    (24, "RefreshRelationshipRequestEvent",
+                                         "A repository has requested the home repository of a relationship send " +
+                                                "details of hte relationship so " +
+                                                "the local repository can create a reference copy of the instance."),
+    REFRESHED_RELATIONSHIP_EVENT    (25, "RefreshedRelationshipEvent",
+                                         "The local repository is refreshing the information about a relationship for the " +
+                                          "other repositories in the cohort."),
+    INSTANCE_ERROR_EVENT            (99, "InstanceErrorEvent",
+                                         "An error has been detected in the exchange of instances between members of the cohort.")
+    ;
+
+
+    private  int      eventTypeCode;
+    private  String   eventTypeName;
+    private  String   eventTypeDescription;
+
+
+    /**
+     * Default Constructor - sets up the specific values for this instance of the enum.
+     *
+     * @param eventTypeCode - int identifier used for indexing based on the enum.
+     * @param eventTypeName - string name used for messages that include the enum.
+     * @param eventTypeDescription - default description for the enum value - used when natural resource
+     *                                     bundle is not available.
+     */
+    OMRSInstanceEventType(int eventTypeCode, String eventTypeName, String eventTypeDescription)
+    {
+        this.eventTypeCode = eventTypeCode;
+        this.eventTypeName = eventTypeName;
+        this.eventTypeDescription = eventTypeDescription;
+    }
+
+
+    /**
+     * Return the int identifier used for indexing based on the enum.
+     *
+     * @return int identifier code
+     */
+    public int getInstanceEventTypeCode()
+    {
+        return eventTypeCode;
+    }
+
+
+    /**
+     * Return the string name used for messages that include the enum.
+     *
+     * @return String name
+     */
+    public String getInstanceEventTypeName()
+    {
+        return eventTypeName;
+    }
+
+
+    /**
+     * Return the default description for the enum value - used when natural resource
+     * bundle is not available.
+     *
+     * @return String default description
+     */
+    public String getInstanceEventTypeDescription()
+    {
+        return eventTypeDescription;
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEvent.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEvent.java b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEvent.java
new file mode 100644
index 0000000..6db78a0
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEvent.java
@@ -0,0 +1,289 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.atlas.omrs.eventmanagement.events;
+
+import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.omrs.eventmanagement.events.v1.OMRSEventV1;
+import org.apache.atlas.omrs.eventmanagement.events.v1.OMRSEventV1RegistrySection;
+import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+
+/**
+ * OMRSRegistryEvent provides the conversion between the properties of a registry event and the serialized event body.
+ * It supports conversion in either direction through its inner class called OMRSRegistryEventPayload:
+ * <ul>
+ *     <li>
+ *         Converting from registry event properties to an OMRSEvent body for sending outbound events.
+ *     </li>
+ *     <li>
+ *         Converting from an event body to registry event properties for inbound events.
+ *     </li>
+ * </ul>
+ * OMRSRegistryEvent also provides a specialized interface to allow the cohort registry to work effectively
+ * with registry events.
+ */
+public class OMRSRegistryEvent extends OMRSEvent
+{
+    /*
+     * The type of the registry event that defines how the rest of the values should be interpreted.
+     */
+    private  OMRSRegistryEventType       registryEventType               = OMRSRegistryEventType.UNKNOWN_REGISTRY_EVENT;
+
+    /*
+     * Registration information describing a specific repository.
+     */
+    private  Date                        registrationTimestamp           = null;
+    private  Connection                  remoteConnection                = null;
+
+    /*
+     * Used in the registration process to enable the repositories to detect incompatible TypeDefs.
+     */
+    private  ArrayList<TypeDefSummary>   typeDefSummaries                = null;
+
+    /*
+     * Specific variables only used in error reporting.  It defines the subset of error codes from OMRSEvent
+     * that are specific to registry events.
+     */
+    private  OMRSRegistryEventErrorCode  errorCode                       = OMRSRegistryEventErrorCode.NOT_IN_USE;
+
+
+    private static final Logger log = LoggerFactory.getLogger(OMRSRegistryEvent.class);
+
+
+    /**
+     * Inbound event constructor that takes the object created by the Jackson JSON mapper and unpacks the
+     * properties into the registry event.
+     *
+     * @param inboundEvent - incoming Event.
+     */
+    public OMRSRegistryEvent(OMRSEventV1 inboundEvent)
+    {
+        super(inboundEvent);
+
+        OMRSEventV1RegistrySection registrySection = inboundEvent.getRegistryEventSection();
+
+        if (registrySection != null)
+        {
+            this.registryEventType     = registrySection.getRegistryEventType();
+            this.registrationTimestamp = registrySection.getRegistrationTimestamp();
+            this.remoteConnection      = registrySection.getRemoteConnection();
+            this.typeDefSummaries      = registrySection.getTypeDefList();
+        }
+
+        if (super.genericErrorCode != null)
+        {
+            switch (errorCode)
+            {
+                case BAD_REMOTE_CONNECTION:
+                    this.errorCode = OMRSRegistryEventErrorCode.BAD_REMOTE_CONNECTION;
+                    break;
+
+                case CONFLICTING_COLLECTION_ID:
+                    this.errorCode = OMRSRegistryEventErrorCode.CONFLICTING_COLLECTION_ID;
+                    break;
+
+                default:
+                    this.errorCode = OMRSRegistryEventErrorCode.UNKNOWN_ERROR_CODE;
+            }
+        }
+    }
+
+
+    /**
+     * Constructor for a normal outbound event.  It sets the event type and the other parameters
+     * used in a registry event payload.
+     *
+     * @param registryEventType - type of event (REGISTRATION_EVENT, REFRESH_REGISTRATION_REQUEST, RE_REGISTRATION_EVENT)
+     * @param registrationTimestamp - time that the local repository registered.
+     * @param remoteConnection - remote connection to this local repository.
+     * @param typeDefSummaries - Summary list of supported TypeDefs
+     */
+    public OMRSRegistryEvent(OMRSRegistryEventType          registryEventType,
+                             Date                           registrationTimestamp,
+                             Connection                     remoteConnection,
+                             ArrayList<TypeDefSummary>      typeDefSummaries)
+    {
+        super(OMRSEventCategory.REGISTRY);
+
+        this.registryEventType           = registryEventType;
+        this.registrationTimestamp       = registrationTimestamp;
+        this.remoteConnection            = remoteConnection;
+        this.typeDefSummaries            = typeDefSummaries;
+    }
+
+
+    /**
+     * Constructor for an UnRegistration Event.
+     *
+     * @param registryEventType - the type of event
+     */
+    public OMRSRegistryEvent(OMRSRegistryEventType          registryEventType)
+    {
+        super(OMRSEventCategory.REGISTRY);
+
+        this.registryEventType           = registryEventType;
+    }
+
+
+    /**
+     * Constructor for the REGISTRATION_ERROR_EVENT outbound event.
+     *
+     * @param errorCode - detailed error code
+     * @param errorMessage - Optional error message
+     * @param targetMetadataCollectionId - the identifier of the server that sent bad information.
+     * @param remoteConnection - remote connection to the target repository. (Optional - only supplied if
+     *                              relevant to the reported error; otherwise null.)
+     */
+    public OMRSRegistryEvent(OMRSRegistryEventErrorCode errorCode,
+                             String                     errorMessage,
+                             String                     targetMetadataCollectionId,
+                             Connection                 remoteConnection)
+    {
+        super(OMRSEventCategory.REGISTRY,
+              errorCode.getErrorCodeEncoding(),
+              errorMessage,
+              targetMetadataCollectionId,
+              remoteConnection);
+
+        this.registryEventType = OMRSRegistryEventType.REGISTRATION_ERROR_EVENT;
+    }
+
+
+    /**
+     * Return the specific registry event type.
+     *
+     * @return registry event type enum
+     */
+    public OMRSRegistryEventType getRegistryEventType()
+    {
+        return registryEventType;
+    }
+
+
+    /**
+     * Return the date/time that the repository registered with the open metadata repository cohort.
+     * If this is a normal registry event then this timestamp is the registration time for the local repository.
+     * If this an error event, then this is the registration time for the target repository.
+     *
+     * @return Date object for timestamp
+     */
+    public Date getRegistrationTimestamp()
+    {
+        return registrationTimestamp;
+    }
+
+
+    /**
+     * Return the remote connection used to create a connector used to call the repository across the network.
+     * If this is a normal registry event then this connection is for the local repository.
+     * If this an error event, then this is the connection for the target repository.
+     *
+     * @return Connection object
+     */
+    public Connection getRemoteConnection()
+    {
+        return remoteConnection;
+    }
+
+
+    /**
+     * Return the list of TypeDef summaries included in the event.
+     * If this is a normal registry event then these TypeDefs are from the local repository.
+     * If this an error event, then these TypeDefs are from the targeted repository.
+     *
+     * @return TypeDefSummaries object
+     */
+    public ArrayList<TypeDefSummary> getTypeDefSummaries()
+    {
+        return typeDefSummaries;
+    }
+
+
+    /**
+     * Return the error code for the event.  This property is only used for error events.
+     *
+     * @return OMRSRegistryEventErrorCode enum
+     */
+    public OMRSRegistryEventErrorCode getErrorCode()
+    {
+        return errorCode;
+    }
+
+
+    /**
+     * Returns an OMRSEvent populated with details from this RegistryEvent
+     *
+     * @return OMRSEvent (Version 1) object
+     */
+    public OMRSEventV1  getOMRSEventV1()
+    {
+        OMRSEventV1     omrsEvent = super.getOMRSEventV1();
+
+        OMRSEventV1RegistrySection registrySection  = new OMRSEventV1RegistrySection();
+
+        registrySection.setRegistryEventType(this.registryEventType);
+        registrySection.setRegistrationTimestamp(this.registrationTimestamp);
+        registrySection.setRemoteConnection(this.remoteConnection);
+        registrySection.setTypeDefList(this.typeDefSummaries);
+
+        omrsEvent.setRegistryEventSection(registrySection);
+
+        return omrsEvent;
+    }
+
+
+    /**
+     * Standard toString method.
+     *
+     * @return JSON style description of variables.
+     */
+    @Override
+    public String toString()
+    {
+        return "OMRSRegistryEvent{" +
+                "registryEventType=" + registryEventType +
+                ", registrationTimestamp=" + registrationTimestamp +
+                ", remoteConnection=" + remoteConnection +
+                ", typeDefSummaries=" + typeDefSummaries +
+                ", errorCode=" + errorCode +
+                ", eventTimestamp=" + eventTimestamp +
+                ", eventDirection=" + eventDirection +
+                ", eventCategory=" + eventCategory +
+                ", eventOriginator=" + eventOriginator +
+                ", genericErrorCode=" + genericErrorCode +
+                ", errorMessage='" + errorMessage + '\'' +
+                ", targetMetadataCollectionId='" + targetMetadataCollectionId + '\'' +
+                ", targetRemoteConnection=" + targetRemoteConnection +
+                ", targetTypeDefSummary=" + targetTypeDefSummary +
+                ", targetAttributeTypeDef=" + targetAttributeTypeDef +
+                ", targetInstanceGUID='" + targetInstanceGUID + '\'' +
+                ", otherOrigin=" + otherOrigin +
+                ", otherMetadataCollectionId='" + otherMetadataCollectionId + '\'' +
+                ", otherTypeDefSummary=" + otherTypeDefSummary +
+                ", otherTypeDef=" + otherTypeDef +
+                ", otherAttributeTypeDef=" + otherAttributeTypeDef +
+                ", otherInstanceGUID='" + otherInstanceGUID + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventErrorCode.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventErrorCode.java b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventErrorCode.java
new file mode 100644
index 0000000..95022cd
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventErrorCode.java
@@ -0,0 +1,126 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.atlas.omrs.eventmanagement.events;
+
+import org.apache.atlas.omrs.eventmanagement.events.OMRSEventErrorCode;
+
+/**
+ * OMRSRegistryEventErrorCode defines the list of error codes that are used to record errors in the registration
+ * process that is used by the cluster registries when managing the membership of the open metadata repository cluster.
+ * <ul>
+ *     <li>
+ *         NOT_IN_USE - There has been no error detected and so the error code is not in use.
+ *     </li>
+ *     <li>
+ *         CONFLICTING_REPOSITORY_ID - Remote server/repository is using the same metadata collection id as the local server.
+ *     </li>
+ *     <li>
+ *         CONFLICTING_TYPEDEFS - There are conflicting type definitions (TypeDefs) detected between two repositories
+ *         in the open metadata repository cluster.
+ *     </li>
+ * </ul>
+ */
+public enum OMRSRegistryEventErrorCode
+{
+    NOT_IN_USE                (0, "No Error",
+                                  "There has been no error detected and so the error code is not in use.",
+                               null),
+    CONFLICTING_COLLECTION_ID (1, "Conflicting metadata collection Id",
+                               "Remote server/repository is using the same metadata collection id as the local server.",
+                               OMRSEventErrorCode.CONFLICTING_COLLECTION_ID),
+    BAD_REMOTE_CONNECTION     (2, "Unusable Remote Connection to Repository",
+                                  "The remote connection send by one of the member of the cohort is resulting in errors " +
+                                          "when it is used to create an OMRS Connector to the repository.",
+                               OMRSEventErrorCode.BAD_REMOTE_CONNECTION),
+    UNKNOWN_ERROR_CODE        (99, "Unknown Error Code",
+                               "Unrecognized error code from incoming event.",
+                               null)
+    ;
+
+
+    private  int                 errorCodeId;
+    private  String              errorCodeName;
+    private  String              errorCodeDescription;
+    private  OMRSEventErrorCode  errorCodeEncoding ;
+
+
+    /**
+     * Typical constructor sets up the values for this enum instance.
+     *
+     * @param errorCodeId - int identifier for the enum, used for indexing arrays etc with the enum.
+     * @param errorCodeName - String name for the enum, used for message content.
+     * @param errorCodeDescription - String default description for the enum, used when there is not natural
+     *                             language resource bundle available.
+     * @param errorCodeEncoding - code value to use in OMRSEvents
+     */
+    OMRSRegistryEventErrorCode(int                  errorCodeId,
+                               String               errorCodeName,
+                               String               errorCodeDescription,
+                               OMRSEventErrorCode   errorCodeEncoding)
+    {
+        this.errorCodeId = errorCodeId;
+        this.errorCodeName = errorCodeName;
+        this.errorCodeDescription = errorCodeDescription;
+        this.errorCodeEncoding = errorCodeEncoding;
+    }
+
+
+    /**
+     * Return the identifier for the enum, used for indexing arrays etc with the enum.
+     *
+     * @return int identifier
+     */
+    public int getErrorCodeId()
+    {
+        return errorCodeId;
+    }
+
+
+    /**
+     * Return the name for the enum, used for message content.
+     *
+     * @return String name
+     */
+    public String getErrorCodeName()
+    {
+        return errorCodeName;
+    }
+
+
+    /**
+     * Return the default description for the enum, used when there is not natural
+     * language resource bundle available.
+     *
+     * @return String default description
+     */
+    public String getErrorCodeDescription()
+    {
+        return errorCodeDescription;
+    }
+
+
+    /**
+     * Return the encoding to use in OMRSEvents.
+     *
+     * @return String OMRSEvent encoding for this errorCode
+     */
+    public OMRSEventErrorCode getErrorCodeEncoding()
+    {
+        return errorCodeEncoding;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventProcessor.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventProcessor.java b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventProcessor.java
new file mode 100644
index 0000000..91ae433
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventProcessor.java
@@ -0,0 +1,159 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.atlas.omrs.eventmanagement.events;
+
+
+import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+/**
+ * OMRSRegistryEventProcessor is an interface implemented by a component that is able to process
+ * registry events for an Open Metadata Repository's membership of an Open Metadata Repository Cohort.
+ */
+public interface OMRSRegistryEventProcessor
+{
+    /**
+     * Introduces a new server/repository to the metadata repository cohort.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection that is registering with the cohort.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param registrationTimestamp - the time that the server/repository issued the registration request.
+     * @param remoteConnection - the Connection properties for the connector used to call the registering server.
+     * @param typeDefList - the list of TypeDefs supported by the registering server/repository.
+     * @return flag indicating if the event was sent or not.
+     */
+    boolean processRegistrationEvent(String                    sourceName,
+                                     String                    originatorMetadataCollectionId,
+                                     String                    originatorServerName,
+                                     String                    originatorServerType,
+                                     String                    originatorOrganizationName,
+                                     Date                      registrationTimestamp,
+                                     Connection                remoteConnection,
+                                     ArrayList<TypeDefSummary> typeDefList);
+
+
+    /**
+     * Requests that the other servers in the cohort send re-registration events.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @return flag indicating if the event was sent or not.
+     */
+    boolean processRegistrationRefreshRequest(String                    sourceName,
+                                              String                    originatorServerName,
+                                              String                    originatorServerType,
+                                              String                    originatorOrganizationName);
+
+
+    /**
+     * Refreshes the other servers in the cohort with the originating server's registration.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - unique identifier for the metadata collection that is registering with the cohort.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param registrationTimestamp - the time that the server/repository first registered with the cohort.
+     * @param remoteConnection - the Connection properties for the connector used to call the registering server.
+     * @param typeDefList - the list of TypeDefs supported by the registering server/repository.
+     * @return flag indicating if the event was sent or not.
+     */
+    boolean processReRegistrationEvent(String                    sourceName,
+                                       String                    originatorMetadataCollectionId,
+                                       String                    originatorServerName,
+                                       String                    originatorServerType,
+                                       String                    originatorOrganizationName,
+                                       Date                      registrationTimestamp,
+                                       Connection                remoteConnection,
+                                       ArrayList<TypeDefSummary> typeDefList);
+
+
+    /**
+     * A server/repository is being removed from the metadata repository cohort.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - metadata collectionId of originator.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @return flag indicating if the event was sent or not.
+     */
+    boolean processUnRegistrationEvent(String                    sourceName,
+                                       String                    originatorMetadataCollectionId,
+                                       String                    originatorServerName,
+                                       String                    originatorServerType,
+                                       String                    originatorOrganizationName);
+
+
+    /**
+     * There is more than one member of the open metadata repository cohort that is using the same metadata
+     * collection Id.  This means that their metadata instances can be updated in more than one server and their
+     * is a potential for data integrity issues.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - metadata collectionId of originator.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param conflictingMetadataCollectionId - unique identifier for the metadata collection that is registering with the cohort.
+     * @param errorMessage - details of the conflict
+     */
+    void processConflictingCollectionIdEvent(String  sourceName,
+                                             String  originatorMetadataCollectionId,
+                                             String  originatorServerName,
+                                             String  originatorServerType,
+                                             String  originatorOrganizationName,
+                                             String  conflictingMetadataCollectionId,
+                                             String  errorMessage);
+
+
+    /**
+     * A connection to one of the members of the open metadata repository cohort is not usable by one of the members.
+     *
+     * @param sourceName - name of the source of the event.  It may be the cohort name for incoming events or the
+     *                   local repository, or event mapper name.
+     * @param originatorMetadataCollectionId - metadata collectionId of originator.
+     * @param originatorServerName - name of the server that the event came from.
+     * @param originatorServerType - type of server that the event came from.
+     * @param originatorOrganizationName - name of the organization that owns the server that sent the event.
+     * @param targetMetadataCollectionId - Id for the repository with the bad remote connection.
+     * @param remoteConnection - the Connection properties for the connector used to call the registering server.
+     * @param errorMessage - details of the error that occurs when the connection is used.
+     */
+    void processBadConnectionEvent(String     sourceName,
+                                   String     originatorMetadataCollectionId,
+                                   String     originatorServerName,
+                                   String     originatorServerType,
+                                   String     originatorOrganizationName,
+                                   String     targetMetadataCollectionId,
+                                   Connection remoteConnection,
+                                   String     errorMessage);
+}

http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventType.java
----------------------------------------------------------------------
diff --git a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventType.java b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventType.java
new file mode 100644
index 0000000..5dcd411
--- /dev/null
+++ b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSRegistryEventType.java
@@ -0,0 +1,128 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.atlas.omrs.eventmanagement.events;
+
+/**
+ * OMRSRegistryEventType defines the different types of registry events in the open metadata repository services
+ * protocol.  There are 4 basic values.
+ * <ul>
+ *     <li>
+ *         UNKNOWN_REGISTRY_EVENT - the event is not recognized by this local server, probably because it is back-level
+ *         from other servers in the cohort.  It is logged in the audit log and then ignored.  The registration
+ *         protocol should evolve so that new message types can be ignored by back-level servers without damage
+ *         to the cohort's integrity.
+ *     </li>
+ *     <li>
+ *         REGISTRATION_EVENT - this event is a server's first contact with the cohort.  It publicises the id of the
+ *         local repository, the connection information needed to connect remotely to this local server's
+ *         repository (localServerRemoteConnection) plus a list of typedef names and GUIDs.  Other servers in the
+ *         cohort will respond either with a RE_REGISTRATION_EVENT if all is ok or REGISTRATION_ERROR if there
+ *         is a problem with any information in the REGISTRATION_EVENT.
+ *     </li>
+ *     <li>
+ *         REFRESH_REGISTRATION_EVENT - this event is used after a local server has experienced configuration issues
+ *         and needs to receive the registration information from other members of the cohort again.
+ *     </li>
+ *     <li>
+ *         RE_REGISTRATION_EVENT - this event is used by a previously registered server to broadcast its current
+ *         configuration.  It is used in response to a REGISTRATION_EVENT and a REFRESH_REGISTRATION_EVENT to
+ *         let the other servers know about its configuration, or whenever its configuration may have changed
+ *         (such as after a server restart or administrator action).
+ *     </li>
+ *     <li>
+ *         UN_REGISTRATION_EVENT - this event is used when a server is being removed from the cohort.  The other
+ *         servers can choose whether to remove its replicated metadata from their repository, or mark it as
+ *         deregistered repository's metadata.
+ *     </li>
+ *     <li>
+ *         REGISTRATION_ERROR_EVENT - ths event is used to report anomalies in the registration information being
+ *         passed between the repositories and the actions taken.  Each of these errors should be investigated
+ *         since they should not occur.
+ *     </li>
+ * </ul>
+ */
+public enum OMRSRegistryEventType
+{
+    UNKNOWN_REGISTRY_EVENT       (0, "UnknownRegistryEvent",
+                                     "An event that is not recognized by the local server."),
+    REGISTRATION_EVENT           (1, "RegistrationEvent",
+                                     "Introduces a new server/repository to the metadata repository cohort."),
+    REFRESH_REGISTRATION_REQUEST (2, "RefreshRegistrationRequest",
+                                     "Requests that the other servers in the cohort send re-registration events."),
+    RE_REGISTRATION_EVENT        (3, "ReRegistrationEvent",
+                                     "Refreshes the other servers in the cohort with the local server's configuration."),
+    UN_REGISTRATION_EVENT        (4, "UnRegistrationEvent",
+                                     "A server/repository is being removed from the metadata repository cohort."),
+    REGISTRATION_ERROR_EVENT     (99, "RegistrationErrorEvent",
+                                      "An anomaly has been detected in the information received from a member in the metadata repository cohort.");
+
+
+    private  int      registryEventTypeCode;
+    private  String   registryEventTypeName;
+    private  String   registryEventTypeDescription;
+
+
+    /**
+     * Default Constructor - sets up the specific values for this instance of the enum.
+     *
+     * @param registryEventTypeCode - int identifier used for indexing based on the enum.
+     * @param registryEventTypeName - string name used for messages that include the enum.
+     * @param registryEventTypeDescription - default description for the enum value - used when natural resource
+     *                                     bundle is not available.
+     */
+    OMRSRegistryEventType(int registryEventTypeCode, String registryEventTypeName, String registryEventTypeDescription)
+    {
+        this.registryEventTypeCode = registryEventTypeCode;
+        this.registryEventTypeName = registryEventTypeName;
+        this.registryEventTypeDescription = registryEventTypeDescription;
+    }
+
+
+    /**
+     * Return the int identifier used for indexing based on the enum.
+     *
+     * @return int identifier code
+     */
+    public int getRegistryEventTypeCode()
+    {
+        return registryEventTypeCode;
+    }
+
+
+    /**
+     * Return the string name used for messages that include the enum.
+     *
+     * @return String name
+     */
+    public String getRegistryEventTypeName()
+    {
+        return registryEventTypeName;
+    }
+
+
+    /**
+     * Return the default description for the enum value - used when natural resource
+     * bundle is not available.
+     *
+     * @return String default description
+     */
+    public String getRegistryEventTypeDescription()
+    {
+        return registryEventTypeDescription;
+    }
+}