http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSRepositoryConnector.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSRepositoryConnector.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSRepositoryConnector.java
index f74a772..0e18748 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSRepositoryConnector.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSRepositoryConnector.java
@@ -17,14 +17,20 @@
  */
 package org.apache.atlas.omrs.enterprise.repositoryconnector;
 
+import org.apache.atlas.ocf.Connector;
 import org.apache.atlas.ocf.ffdc.ConnectorCheckedException;
+import org.apache.atlas.omrs.auditlog.OMRSAuditCode;
 import org.apache.atlas.omrs.enterprise.connectormanager.OMRSConnectorConsumer;
 import org.apache.atlas.omrs.enterprise.connectormanager.OMRSConnectorManager;
 import org.apache.atlas.omrs.ffdc.exception.RepositoryErrorException;
+import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryHelper;
+import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryValidator;
 import org.apache.atlas.omrs.metadatacollection.OMRSMetadataCollection;
 import 
org.apache.atlas.omrs.metadatacollection.repositoryconnector.OMRSRepositoryConnector;
 import org.apache.atlas.omrs.ffdc.OMRSErrorCode;
 import org.apache.atlas.omrs.ffdc.exception.OMRSRuntimeException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -57,6 +63,7 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
     private FederatedConnector               localCohortConnector             
= null;
     private ArrayList<FederatedConnector>    remoteCohortConnectors           
= new ArrayList<>();
 
+    private static final Logger log = 
LoggerFactory.getLogger(EnterpriseOMRSRepositoryConnector.class);
 
     /**
      * Constructor used by the EnterpriseOMRSConnectorProvider.
@@ -106,6 +113,8 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
         if (metadataCollectionId != null)
         {
             enterpriseMetadataCollection = new 
EnterpriseOMRSMetadataCollection(this,
+                                                                               
 repositoryHelper,
+                                                                               
 repositoryValidator,
                                                                                
 enterpriseMetadataCollectionId,
                                                                                
 enterpriseMetadataCollectionName);
 
@@ -143,12 +152,25 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
     }
 
     /**
+     * Indicates that the connector is completely configured and can begin 
processing.
+     *
+     * @throws ConnectorCheckedException - there is a problem within the 
connector.
+     */
+    public void start() throws ConnectorCheckedException
+    {
+        super.start();
+    }
+
+
+    /**
      * Free up any resources held since the connector is no longer needed.
      *
      * @throws ConnectorCheckedException - there is a problem disconnecting 
the connector.
      */
     public void disconnect() throws ConnectorCheckedException
     {
+        super.disconnect();
+
         if ((connectorManager != null) && (connectorConsumerId != null))
         {
             connectorManager.unregisterConnectorConsumer(connectorConsumerId);
@@ -228,9 +250,31 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
 
 
     /**
+     * Return a repository helper that can be used by an OMAS to create types 
and instance objects.
+     *
+     * @return an OMRSRepositoryHelper object that is linked to the repository 
content manager for this server.
+     */
+    public OMRSRepositoryHelper getRepositoryHelper()
+    {
+        return super.repositoryHelper;
+    }
+
+
+    /**
+     * Return a repository validator that can be used by an OMAS to validate 
types and instance objects.
+     *
+     * @return an OMRSRepositoryValidator object that is linked to the 
repository content manager for this server.
+     */
+    public OMRSRepositoryValidator getRepositoryValidator()
+    {
+        return super.repositoryValidator;
+    }
+
+
+    /**
      * Save the connector to the local repository.  This is passed from the 
OMRSConnectorManager.
      *
-     * @param metadataCollectionId - Unique identifier for the metadata 
collection
+     * @param metadataCollectionId - Unique identifier for the metadata 
collection.
      * @param localConnector - OMRSRepositoryConnector object for the local 
repository.
      */
     public void setLocalConnector(String                  metadataCollectionId,
@@ -252,7 +296,7 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
     /**
      * Pass the connector to one of the remote repositories in the metadata 
repository cohort.
      *
-     * @param metadataCollectionId - Unique identifier for the metadata 
collection
+     * @param metadataCollectionId - Unique identifier for the metadata 
collection.
      * @param remoteConnector - OMRSRepositoryConnector object providing 
access to the remote repository.
      */
     public void addRemoteConnector(String                  
metadataCollectionId,
@@ -282,6 +326,7 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
 
             if 
(registeredConnector.getMetadataCollectionId().equals(metadataCollectionId))
             {
+                this.disconnectConnector(registeredConnector);
                 iterator.remove();
             }
         }
@@ -292,11 +337,52 @@ public class EnterpriseOMRSRepositoryConnector extends 
OMRSRepositoryConnector i
      */
     public void disconnectAllConnectors()
     {
-        // TODO
+        if (localCohortConnector != null)
+        {
+            this.disconnectConnector(localCohortConnector);
+
+            if (remoteCohortConnectors != null)
+            {
+                for (FederatedConnector  remoteConnector : 
remoteCohortConnectors)
+                {
+                    if (remoteConnector != null)
+                    {
+                        this.disconnectConnector(remoteConnector);
+                    }
+                }
+            }
+        }
     }
 
 
     /**
+     * Issue a disconnect call on the supplied connector.
+     *
+     * @param federatedConnector - connector to disconnect.
+     */
+    private void disconnectConnector(FederatedConnector  federatedConnector)
+    {
+        Connector    connector = null;
+
+        if (federatedConnector != null)
+        {
+            connector = federatedConnector.getConnector();
+        }
+
+        if (connector != null)
+        {
+            try
+            {
+                connector.disconnect();
+            }
+            catch (Throwable  error)
+            {
+                log.error("Exception from disconnect of connector to metadata 
collection:" + federatedConnector.getMetadataCollectionId() + "  Error message 
was: " + error.getMessage());
+            }
+        }
+    }
+
+    /**
      * FederatedConnector is a private class for storing details of each of 
the connectors to the repositories
      * in the open metadata repository cohort.
      */

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventListener.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventListener.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventListener.java
index 9db6892..c1ed59b 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventListener.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventListener.java
@@ -562,9 +562,7 @@ public class OMRSEventListener implements OMRSTopicListener
                                                                          
instanceEventOriginator.getServerName(),
                                                                          
instanceEventOriginator.getServerType(),
                                                                          
instanceEventOriginator.getOrganizationName(),
-                                                                         
instanceEvent.getTypeDefGUID(),
-                                                                         
instanceEvent.getTypeDefName(),
-                                                                         
instanceEvent.getInstanceGUID());
+                                                                         
instanceEvent.getEntity());
                         break;
 
                     case PURGED_ENTITY_EVENT:
@@ -680,9 +678,7 @@ public class OMRSEventListener implements OMRSTopicListener
                                                                                
instanceEventOriginator.getServerName(),
                                                                                
instanceEventOriginator.getServerType(),
                                                                                
instanceEventOriginator.getOrganizationName(),
-                                                                               
instanceEvent.getTypeDefGUID(),
-                                                                               
instanceEvent.getTypeDefName(),
-                                                                               
instanceEvent.getInstanceGUID());
+                                                                               
instanceEvent.getRelationship());
                         break;
 
                     case PURGED_RELATIONSHIP_EVENT:

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventPublisher.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventPublisher.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventPublisher.java
index 14a8e69..6f482b6 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventPublisher.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSEventPublisher.java
@@ -17,7 +17,7 @@
  */
 package org.apache.atlas.omrs.eventmanagement;
 
-import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.admin.properties.OpenMetadataEventProtocolVersion;
 import org.apache.atlas.omrs.auditlog.*;
 import org.apache.atlas.omrs.eventmanagement.events.*;
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -277,7 +278,7 @@ public class OMRSEventPublisher implements 
OMRSRegistryEventProcessor, OMRSTypeD
                                             String                    
originatorOrganizationName,
                                             Date                      
registrationTimestamp,
                                             Connection                
remoteConnection,
-                                            ArrayList<TypeDefSummary> 
typeDefList)
+                                            List<TypeDefSummary>      
typeDefList)
     {
         OMRSEventOriginator eventOriginator = new OMRSEventOriginator();
 
@@ -345,7 +346,7 @@ public class OMRSEventPublisher implements 
OMRSRegistryEventProcessor, OMRSTypeD
                                               String                    
originatorOrganizationName,
                                               Date                      
registrationTimestamp,
                                               Connection                
remoteConnection,
-                                              ArrayList<TypeDefSummary> 
typeDefList)
+                                              List<TypeDefSummary>      
typeDefList)
     {
         OMRSEventOriginator eventOriginator = new OMRSEventOriginator();
 
@@ -1108,18 +1109,14 @@ public class OMRSEventPublisher implements 
OMRSRegistryEventProcessor, OMRSTypeD
      * @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 entity - deleted entity
      */
     public void processDeletedEntityEvent(String       sourceName,
                                           String       
originatorMetadataCollectionId,
                                           String       originatorServerName,
                                           String       originatorServerType,
                                           String       
originatorOrganizationName,
-                                          String       typeDefGUID,
-                                          String       typeDefName,
-                                          String       instanceGUID)
+                                          EntityDetail entity)
     {
         OMRSEventOriginator eventOriginator = new OMRSEventOriginator();
 
@@ -1129,9 +1126,7 @@ public class OMRSEventPublisher implements 
OMRSRegistryEventProcessor, OMRSTypeD
         eventOriginator.setOrganizationName(originatorOrganizationName);
 
         OMRSInstanceEvent instanceEvent = new 
OMRSInstanceEvent(OMRSInstanceEventType.DELETED_ENTITY_EVENT,
-                                                                typeDefGUID,
-                                                                typeDefName,
-                                                                instanceGUID);
+                                                                entity);
 
         instanceEvent.setEventOriginator(eventOriginator);
 
@@ -1537,18 +1532,14 @@ public class OMRSEventPublisher implements 
OMRSRegistryEventProcessor, OMRSTypeD
      * @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
+     * @param relationship - deleted relationship
      */
     public void processDeletedRelationshipEvent(String       sourceName,
                                                 String       
originatorMetadataCollectionId,
                                                 String       
originatorServerName,
                                                 String       
originatorServerType,
                                                 String       
originatorOrganizationName,
-                                                String       typeDefGUID,
-                                                String       typeDefName,
-                                                String       instanceGUID)
+                                                Relationship relationship)
     {
         OMRSEventOriginator eventOriginator = new OMRSEventOriginator();
 
@@ -1558,9 +1549,7 @@ public class OMRSEventPublisher implements 
OMRSRegistryEventProcessor, OMRSTypeD
         eventOriginator.setOrganizationName(originatorOrganizationName);
 
         OMRSInstanceEvent instanceEvent = new 
OMRSInstanceEvent(OMRSInstanceEventType.DELETED_RELATIONSHIP_EVENT,
-                                                                typeDefGUID,
-                                                                typeDefName,
-                                                                instanceGUID);
+                                                                relationship);
 
         instanceEvent.setEventOriginator(eventOriginator);
 

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventExchangeRule.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventExchangeRule.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventExchangeRule.java
index 66072ed..3a43fb3 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventExchangeRule.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventExchangeRule.java
@@ -18,48 +18,119 @@
 package org.apache.atlas.omrs.eventmanagement;
 
 import org.apache.atlas.omrs.admin.properties.OpenMetadataExchangeRule;
-import 
org.apache.atlas.omrs.metadatacollection.properties.instances.EntityDetail;
-import 
org.apache.atlas.omrs.metadatacollection.properties.instances.Relationship;
+import org.apache.atlas.omrs.ffdc.OMRSErrorCode;
+import org.apache.atlas.omrs.ffdc.exception.OMRSLogicErrorException;
+import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryContentManager;
+import 
org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceHeader;
+import 
org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceType;
+import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDef;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
-import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSTypeDefValidator;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * OMRSRepositoryEventExchangeRule determines if particular types of events 
should be exchanged on the OMRS Topic.
  */
 public class OMRSRepositoryEventExchangeRule
 {
-    private String                    sourceName;
-    private OMRSTypeDefValidator      typeDefValidator;
-    private OpenMetadataExchangeRule  exchangeRule;
-    private ArrayList<TypeDefSummary> selectedTypesToProcess;
+    private String                             sourceName;
+    private OMRSRepositoryContentManager       repositoryContentManager;
+    private OpenMetadataExchangeRule           exchangeRule;
+    private HashMap<String, TypeDefSummary>    selectedTypesToProcess = new 
HashMap<>();
 
 
     /**
      * Constructor provides all of the objects used in the event exchange 
decision.
      *
      * @param sourceName - name of the caller
-     * @param typeDefValidator - local manager of the type definitions 
(TypeDefs) used by the local repository.
+     * @param repositoryContentManager - local manager of the type definitions 
(TypeDefs) used by the local repository.
      * @param exchangeRule - enum detailing the types of events to process.
      * @param selectedTypesToProcess - supplementary list to support selective 
processing of events.
      */
-    public OMRSRepositoryEventExchangeRule(String                    
sourceName,
-                                           OMRSTypeDefValidator      
typeDefValidator,
-                                           OpenMetadataExchangeRule  
exchangeRule,
-                                           ArrayList<TypeDefSummary> 
selectedTypesToProcess)
+    public OMRSRepositoryEventExchangeRule(String                       
sourceName,
+                                           OMRSRepositoryContentManager 
repositoryContentManager,
+                                           OpenMetadataExchangeRule     
exchangeRule,
+                                           List<TypeDefSummary>         
selectedTypesToProcess)
     {
+        final String  methodName = "OMRSRepositoryEventExchangeRule 
constructor";
+
+        /*
+         * Validate the supplied parameters.
+         */
+        if (sourceName == null)
+        {
+            OMRSErrorCode  errorCode = OMRSErrorCode.NULL_SOURCE_NAME;
+
+            String errorMessage = errorCode.getErrorMessageId()
+                                + 
errorCode.getFormattedErrorMessage(methodName);
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
+        }
+        if (repositoryContentManager == null)
+        {
+            OMRSErrorCode errorCode = OMRSErrorCode.NULL_CONTENT_MANAGER;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(methodName);
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
+        }
+        if (exchangeRule == null)
+        {
+            OMRSErrorCode  errorCode = OMRSErrorCode.NULL_EXCHANGE_RULE;
+
+            String errorMessage = errorCode.getErrorMessageId()
+                                + 
errorCode.getFormattedErrorMessage(methodName);
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
+        }
+
         this.sourceName = sourceName;
-        this.typeDefValidator = typeDefValidator;
+        this.repositoryContentManager = repositoryContentManager;
         this.exchangeRule = exchangeRule;
-        this.selectedTypesToProcess = selectedTypesToProcess;
+
+        /*
+         * The selected types are loaded into a hash map for easy retrieval.
+         */
+        if (selectedTypesToProcess != null)
+        {
+            for (TypeDefSummary  typeDefSummary : selectedTypesToProcess)
+            {
+                if (typeDefSummary != null)
+                {
+                    String   typeDefSummaryGUID = typeDefSummary.getGUID();
+
+                    if (typeDefSummaryGUID != null)
+                    {
+                        this.selectedTypesToProcess.put(typeDefSummaryGUID, 
typeDefSummary);
+                    }
+                }
+            }
+        }
     }
 
 
     /**
-     * Determine if TypeDef events should be processed.
+     * Determine if TypeDef events should be processed.  TypeDef events are 
processed unless the rule is set
+     * to registration events only.
      *
-     * @return boolean flag
+     * @return boolean flag indicating if the event should be processed.
      */
     public boolean processTypeDefEvents()
     {
@@ -83,13 +154,56 @@ public class OMRSRepositoryEventExchangeRule
      */
     public boolean processInstanceEvent(String   typeDefGUID, String   
typeDefName)
     {
-        if (typeDefValidator == null)
+        if (repositoryContentManager == null)
+        {
+            /*
+             * A set up error
+             */
+            return false;
+        }
+        else if ((exchangeRule == OpenMetadataExchangeRule.REGISTRATION_ONLY) 
||
+                 (exchangeRule == OpenMetadataExchangeRule.JUST_TYPEDEFS))
         {
+            /*
+             * The rule says not to process instances
+             */
+            return false;
+        }
+        else if ((typeDefGUID == null) || (typeDefName == null))
+        {
+            /*
+             * The instance is invalid - this will be logged elsewhere.
+             */
             return false;
         }
         else
         {
-            return typeDefValidator.isActiveType(sourceName, typeDefGUID, 
typeDefName);
+            /*
+             * Only active types should be processed.
+             */
+            if (repositoryContentManager.isActiveType(sourceName, typeDefGUID, 
typeDefName))
+            {
+                if (exchangeRule == OpenMetadataExchangeRule.ALL)
+                {
+                    /*
+                     * All active types should be processed
+                     */
+                    return true;
+                }
+                else
+                {
+                    /*
+                     * The exchange rule is either SELECTED_TYPES or 
LEARNED_TYPES - for either, the instance
+                     * is processed if its type is in the 
selectedTypesToProcess list.
+                     */
+                    if (selectedTypesToProcess.get(typeDefGUID) != null)
+                    {
+                        return true;
+                    }
+                }
+            }
+
+            return false;
         }
     }
 
@@ -102,7 +216,7 @@ public class OMRSRepositoryEventExchangeRule
      */
     public boolean processInstanceEvent(TypeDefSummary   typeDefSummary)
     {
-        if (typeDefValidator == null)
+        if (repositoryContentManager == null)
         {
             return false;
         }
@@ -112,7 +226,7 @@ public class OMRSRepositoryEventExchangeRule
         }
         else
         {
-            return typeDefValidator.isActiveType(sourceName, 
typeDefSummary.getGUID(), typeDefSummary.getName());
+            return this.processInstanceEvent(typeDefSummary.getGUID(), 
typeDefSummary.getName());
         }
     }
 
@@ -120,47 +234,94 @@ public class OMRSRepositoryEventExchangeRule
     /**
      * Determine from the type of the instance if an instance event should be 
processed.
      *
-     * @param entity - details of the instance to test
+     * @param instance - details of the instance to test
      * @return boolean flag
      */
-    public boolean processInstanceEvent(EntityDetail   entity)
+    public boolean processInstanceEvent(InstanceHeader instance)
     {
-        if (typeDefValidator == null)
+        if (repositoryContentManager == null)
         {
             return false;
         }
-        else if (entity == null)
+        else if (instance == null)
         {
             return false;
         }
         else
         {
-            // TODO
-            return true;
+            InstanceType type = instance.getType();
+
+            if (type == null)
+            {
+                return false;
+            }
+            else
+            {
+                return this.processInstanceEvent(type.getTypeDefGUID(), 
type.getTypeDefName());
+            }
         }
     }
 
 
     /**
-     * Determine from the type of the instance if an instance event should be 
processed.
+     * If the rule is in learning mode, determine if the type of the instance 
should be added to the list
+     * of types being processed.  For this to happen, the instance header must 
include a valid type, the type
+     * must be an active type for this server and not already included in the 
list.
      *
-     * @param relationship - details of the instance to test
-     * @return boolean flag
+     * Any errors discovered in the types, of this rule's set up result in a 
false result.  No diagnostics are
+     * created because this method is called very frequently and the errors 
will be trapped and logged elsewhere.
+     *
+     * @param instance - details of the instance to test
+     * @return boolean flag - true if the instance should be saved as a 
learned instance.
      */
-    public boolean processInstanceEvent(Relationship relationship)
+    public boolean learnInstanceEvent(InstanceHeader instance)
     {
-        if (typeDefValidator == null)
+        if (repositoryContentManager == null)
         {
+            /*
+             * This is a logic error the cause of which has probably already 
been logged.
+             */
             return false;
         }
-        else if (relationship == null)
-        {
-            return false;
-        }
-        else
+        else if (exchangeRule == OpenMetadataExchangeRule.LEARNED_TYPES)
         {
-            // TODO
-            return true;
+            InstanceType type = instance.getType();
+
+            if (type != null)
+            {
+                if (repositoryContentManager.isActiveType(sourceName, 
type.getTypeDefGUID(), type.getTypeDefName()))
+                {
+                    /*
+                     * All active types should be learned and added to the 
rule so save copies are updated by
+                     * incoming events.
+                     */
+                    if (selectedTypesToProcess.get(type.getTypeDefGUID()) == 
null)
+                    {
+                        try
+                        {
+                            TypeDef typeDef = 
repositoryContentManager.getTypeDef(sourceName,
+                                                                               
   type.getTypeDefGUID(),
+                                                                               
   type.getTypeDefName());
+
+                            if (typeDef != null)
+                            {
+                                selectedTypesToProcess.put(typeDef.getGUID(), 
typeDef);
+                            }
+                        }
+                        catch (Throwable  error)
+                        {
+                            return false; /* Problem with type */
+                        }
+                    }
+
+                    /*
+                     * The instance should be saved if it is not already known.
+                     */
+                    return true;
+                }
+            }
         }
+
+        return false; /* rule is not set to LEARNED_TYPES (or a problem with 
the instance) */
     }
 }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventManager.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventManager.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventManager.java
index ff06a76..ae2b31c 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventManager.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/OMRSRepositoryEventManager.java
@@ -21,10 +21,11 @@ import org.apache.atlas.omrs.auditlog.OMRSAuditLog;
 import org.apache.atlas.omrs.auditlog.OMRSAuditingComponent;
 import org.apache.atlas.omrs.eventmanagement.events.OMRSInstanceEventProcessor;
 import org.apache.atlas.omrs.eventmanagement.events.OMRSTypeDefEventProcessor;
+import org.apache.atlas.omrs.ffdc.OMRSErrorCode;
+import org.apache.atlas.omrs.ffdc.exception.OMRSLogicErrorException;
 import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryValidator;
 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.InstanceType;
 import 
org.apache.atlas.omrs.metadatacollection.properties.instances.Relationship;
 import org.apache.atlas.omrs.metadatacollection.properties.typedefs.*;
 import org.slf4j.Logger;
@@ -45,7 +46,7 @@ public class OMRSRepositoryEventManager implements 
OMRSRepositoryEventProcessor
 {
     private ArrayList<OMRSTypeDefEventProcessor>  typeDefEventConsumers  = new 
ArrayList<>();
     private ArrayList<OMRSInstanceEventProcessor> instanceEventConsumers = new 
ArrayList<>();
-    private OMRSRepositoryValidator               repositoryValidator    = new 
OMRSRepositoryValidator();
+    private OMRSRepositoryValidator               repositoryValidator; /* set 
in constructor */
     private OMRSRepositoryEventExchangeRule       exchangeRule; /* set in 
constructor */
 
     /*
@@ -60,19 +61,53 @@ public class OMRSRepositoryEventManager implements 
OMRSRepositoryEventProcessor
      *
      * @param exchangeRule - this is the rule that determines which events are 
processed.
      */
-    public OMRSRepositoryEventManager(OMRSRepositoryEventExchangeRule 
exchangeRule)
+    public OMRSRepositoryEventManager(OMRSRepositoryEventExchangeRule 
exchangeRule,
+                                      OMRSRepositoryValidator         
repositoryValidator)
     {
+        final String   methodName = "OMRSRepositoryEventManager";
         /*
          * If the exchangeRule is null, throw exception
          */
         if (exchangeRule == null)
         {
-            // TODO throw exception
+            OMRSErrorCode errorCode = OMRSErrorCode.NULL_EXCHANGE_RULE;
+            String        errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage(methodName);
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
         }
 
         this.exchangeRule = exchangeRule;
+
+        /*
+         * If the repository validator is null, throw an exception
+         */
+        if (repositoryValidator == null)
+        {
+            OMRSErrorCode errorCode = OMRSErrorCode.NULL_REPOSITORY_VALIDATOR;
+            String        errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
+        }
+
+        this.repositoryValidator = repositoryValidator;
+
+        if (log.isDebugEnabled())
+        {
+            log.debug("New Event Manager");
+        }
     }
 
+
     /**
      * Adds a new consumer to the list of consumers that the 
OMRSRepositoryEventManager will notify of
      * any TypeDef events it receives.
@@ -720,23 +755,18 @@ public class OMRSRepositoryEventManager implements 
OMRSRepositoryEventProcessor
      * @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 entity - deleted entity
      */
     public void processDeletedEntityEvent(String       sourceName,
                                           String       
originatorMetadataCollectionId,
                                           String       originatorServerName,
                                           String       originatorServerType,
                                           String       
originatorOrganizationName,
-                                          String       typeDefGUID,
-                                          String       typeDefName,
-                                          String       instanceGUID)
+                                          EntityDetail entity)
     {
-        if (repositoryValidator.validInstanceId(sourceName, typeDefGUID, 
typeDefName, TypeDefCategory.ENTITY_DEF, instanceGUID))
+        if (repositoryValidator.validEntity(sourceName, entity))
         {
-            if (exchangeRule.processInstanceEvent(typeDefGUID,
-                                                  typeDefName))
+            if (exchangeRule.processInstanceEvent(entity))
             {
                 for (OMRSInstanceEventProcessor consumer : 
instanceEventConsumers)
                 {
@@ -745,9 +775,7 @@ public class OMRSRepositoryEventManager implements 
OMRSRepositoryEventProcessor
                                                        originatorServerName,
                                                        originatorServerType,
                                                        
originatorOrganizationName,
-                                                       typeDefGUID,
-                                                       typeDefName,
-                                                       instanceGUID);
+                                                       entity);
                 }
             }
         }
@@ -1171,22 +1199,18 @@ public class OMRSRepositoryEventManager implements 
OMRSRepositoryEventProcessor
      * @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
+     * @param relationship - deleted relationship
      */
     public void processDeletedRelationshipEvent(String       sourceName,
                                                 String       
originatorMetadataCollectionId,
                                                 String       
originatorServerName,
                                                 String       
originatorServerType,
                                                 String       
originatorOrganizationName,
-                                                String       typeDefGUID,
-                                                String       typeDefName,
-                                                String       instanceGUID)
+                                                Relationship relationship)
     {
-        if (repositoryValidator.validInstanceId(sourceName, typeDefGUID, 
typeDefName, TypeDefCategory.RELATIONSHIP_DEF, instanceGUID))
+        if (repositoryValidator.validRelationship(sourceName, relationship))
         {
-            if (exchangeRule.processInstanceEvent(typeDefGUID, typeDefName))
+            if (exchangeRule.processInstanceEvent(relationship))
             {
                 for (OMRSInstanceEventProcessor consumer: 
instanceEventConsumers)
                 {
@@ -1195,9 +1219,7 @@ public class OMRSRepositoryEventManager implements 
OMRSRepositoryEventProcessor
                                                              
originatorServerName,
                                                              
originatorServerType,
                                                              
originatorOrganizationName,
-                                                             typeDefGUID,
-                                                             typeDefName,
-                                                             instanceGUID);
+                                                             relationship);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSEvent.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSEvent.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSEvent.java
index 21cce9e..9a591e2 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSEvent.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/OMRSEvent.java
@@ -18,13 +18,12 @@
 package org.apache.atlas.omrs.eventmanagement.events;
 
 
-import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.eventmanagement.events.v1.OMRSEventV1;
 import org.apache.atlas.omrs.eventmanagement.events.v1.OMRSEventV1ErrorSection;
 import 
org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceProvenanceType;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.AttributeTypeDef;
 import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDef;
-import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefCategory;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/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
index b2f0ceb..fea400b 100644
--- 
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
@@ -166,18 +166,14 @@ public interface OMRSInstanceEventProcessor
      * @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 entity - deleted entity
      */
     void processDeletedEntityEvent(String       sourceName,
                                    String       originatorMetadataCollectionId,
                                    String       originatorServerName,
                                    String       originatorServerType,
                                    String       originatorOrganizationName,
-                                   String       typeDefGUID,
-                                   String       typeDefName,
-                                   String       instanceGUID);
+                                   EntityDetail entity);
 
 
     /**
@@ -418,18 +414,14 @@ public interface OMRSInstanceEventProcessor
      * @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
+     * @param relationship - deleted relationship
      */
     void processDeletedRelationshipEvent(String       sourceName,
                                          String       
originatorMetadataCollectionId,
                                          String       originatorServerName,
                                          String       originatorServerType,
                                          String       
originatorOrganizationName,
-                                         String       typeDefGUID,
-                                         String       typeDefName,
-                                         String       instanceGUID);
+                                         Relationship relationship);
 
 
     /**

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/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
index 6db78a0..0f9b515 100644
--- 
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
@@ -17,7 +17,7 @@
  */
 package org.apache.atlas.omrs.eventmanagement.events;
 
-import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.ocf.properties.beans.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;
@@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -59,7 +60,7 @@ public class OMRSRegistryEvent extends OMRSEvent
     /*
      * Used in the registration process to enable the repositories to detect 
incompatible TypeDefs.
      */
-    private  ArrayList<TypeDefSummary>   typeDefSummaries                = 
null;
+    private List<TypeDefSummary>         typeDefSummaries = null;
 
     /*
      * Specific variables only used in error reporting.  It defines the subset 
of error codes from OMRSEvent
@@ -122,7 +123,7 @@ public class OMRSRegistryEvent extends OMRSEvent
     public OMRSRegistryEvent(OMRSRegistryEventType          registryEventType,
                              Date                           
registrationTimestamp,
                              Connection                     remoteConnection,
-                             ArrayList<TypeDefSummary>      typeDefSummaries)
+                             List<TypeDefSummary>           typeDefSummaries)
     {
         super(OMRSEventCategory.REGISTRY);
 
@@ -214,7 +215,7 @@ public class OMRSRegistryEvent extends OMRSEvent
      *
      * @return TypeDefSummaries object
      */
-    public ArrayList<TypeDefSummary> getTypeDefSummaries()
+    public List<TypeDefSummary> getTypeDefSummaries()
     {
         return typeDefSummaries;
     }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/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
index 95022cd..19a77eb 100644
--- 
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
@@ -17,7 +17,6 @@
  */
 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

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/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
index 91ae433..620c6b3 100644
--- 
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
@@ -18,11 +18,12 @@
 package org.apache.atlas.omrs.eventmanagement.events;
 
 
-import org.apache.atlas.ocf.properties.Connection;
+import org.apache.atlas.ocf.properties.beans.Connection;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * OMRSRegistryEventProcessor is an interface implemented by a component that 
is able to process
@@ -51,7 +52,7 @@ public interface OMRSRegistryEventProcessor
                                      String                    
originatorOrganizationName,
                                      Date                      
registrationTimestamp,
                                      Connection                
remoteConnection,
-                                     ArrayList<TypeDefSummary> typeDefList);
+                                     List<TypeDefSummary>      typeDefList);
 
 
     /**
@@ -91,7 +92,7 @@ public interface OMRSRegistryEventProcessor
                                        String                    
originatorOrganizationName,
                                        Date                      
registrationTimestamp,
                                        Connection                
remoteConnection,
-                                       ArrayList<TypeDefSummary> typeDefList);
+                                       List<TypeDefSummary>      typeDefList);
 
 
     /**

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1ErrorSection.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1ErrorSection.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1ErrorSection.java
index 8926491..2e74bb7 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1ErrorSection.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1ErrorSection.java
@@ -17,20 +17,28 @@
  */
 package org.apache.atlas.omrs.eventmanagement.events.v1;
 
-import org.apache.atlas.ocf.properties.Connection;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.eventmanagement.events.OMRSEventErrorCode;
 import 
org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceProvenanceType;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.AttributeTypeDef;
 import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDef;
-import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefCategory;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
 
 import java.io.Serializable;
 
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
 /**
  * OMRSEventV1ErrorSection describes the properties used to record errors 
detected by one of the members of the
  * open metadata repository cohort.
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, 
fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class OMRSEventV1ErrorSection implements Serializable
 {
     private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1InstanceSection.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1InstanceSection.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1InstanceSection.java
index f5d55fa..f31c302 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1InstanceSection.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1InstanceSection.java
@@ -17,6 +17,9 @@
  */
 package org.apache.atlas.omrs.eventmanagement.events.v1;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import org.apache.atlas.omrs.eventmanagement.events.OMRSInstanceEventType;
 import 
org.apache.atlas.omrs.metadatacollection.properties.instances.EntityDetail;
 import 
org.apache.atlas.omrs.metadatacollection.properties.instances.Relationship;
@@ -24,9 +27,15 @@ import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSumma
 
 import java.io.Serializable;
 
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
 /**
  * OMRSEventV1InstanceSection describes the properties specific to instance 
events
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, 
fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class OMRSEventV1InstanceSection implements Serializable
 {
     private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1RegistrySection.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1RegistrySection.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1RegistrySection.java
index 0fb5f6c..91da30c 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1RegistrySection.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1RegistrySection.java
@@ -17,17 +17,27 @@
  */
 package org.apache.atlas.omrs.eventmanagement.events.v1;
 
-import org.apache.atlas.ocf.properties.Connection;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.apache.atlas.ocf.properties.beans.Connection;
 import org.apache.atlas.omrs.eventmanagement.events.OMRSRegistryEventType;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
 
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
 
 /**
  * OMRSEventV1RegistrySection describes properties that are used exclusively 
for registry events.
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, 
fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class OMRSEventV1RegistrySection implements Serializable
 {
     private static final long serialVersionUID = 1L;
@@ -35,7 +45,7 @@ public class OMRSEventV1RegistrySection implements 
Serializable
     private OMRSRegistryEventType     registryEventType     = null;
     private Date                      registrationTimestamp = null;
     private Connection                remoteConnection      = null;
-    private ArrayList<TypeDefSummary> TypeDefList           = null;
+    private ArrayList<TypeDefSummary> typeDefList           = null;
 
     public OMRSEventV1RegistrySection()
     {
@@ -71,13 +81,27 @@ public class OMRSEventV1RegistrySection implements 
Serializable
         this.remoteConnection = remoteConnection;
     }
 
-    public ArrayList<TypeDefSummary> getTypeDefList()
+    public List<TypeDefSummary> getTypeDefList()
     {
-        return TypeDefList;
+        if (typeDefList == null)
+        {
+            return null;
+        }
+        else
+        {
+            return new ArrayList<>(typeDefList);
+        }
     }
 
-    public void setTypeDefList(ArrayList<TypeDefSummary> typeDefList)
+    public void setTypeDefList(List<TypeDefSummary> typeDefList)
     {
-        TypeDefList = typeDefList;
+        if (typeDefList == null)
+        {
+            this.typeDefList = null;
+        }
+        else
+        {
+            this.typeDefList = new ArrayList<>(typeDefList);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1TypeDefSection.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1TypeDefSection.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1TypeDefSection.java
index fc75df5..d035f75 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1TypeDefSection.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/events/v1/OMRSEventV1TypeDefSection.java
@@ -17,6 +17,9 @@
  */
 package org.apache.atlas.omrs.eventmanagement.events.v1;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import org.apache.atlas.omrs.eventmanagement.events.OMRSTypeDefEventType;
 import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.AttributeTypeDef;
 import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDef;
@@ -25,9 +28,15 @@ import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSumma
 
 import java.io.Serializable;
 
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
+import static 
com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
+
 /**
  * OMRSEventV1TypeDefSection describes the properties specific to TypeDef 
related events
  */
+@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, 
fieldVisibility=NONE)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown=true)
 public class OMRSEventV1TypeDefSection implements Serializable
 {
     private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapper.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapper.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapper.java
index 99a8569..3d3ae70 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapper.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapper.java
@@ -19,6 +19,7 @@ package 
org.apache.atlas.omrs.eventmanagement.repositoryeventmapper;
 
 import org.apache.atlas.omrs.eventmanagement.OMRSRepositoryEventProcessor;
 import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryHelper;
+import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryValidator;
 import 
org.apache.atlas.omrs.metadatacollection.repositoryconnector.OMRSRepositoryConnector;
 
 /**
@@ -36,20 +37,58 @@ public interface OMRSRepositoryEventMapper
      * @param repositoryConnector - this is the connector to the local 
repository that the event mapper is processing
      *                            events from.  The repository connector is 
used to retrieve additional information
      *                            necessary to fill out the OMRS Events.
-     * @param repositoryHelper - provides helper methods for building TypeDefs 
and metadata instances such as
-     *                         entities and relationships.
-     * @param localMetadataCollectionId - unique identifier for the local 
repository's metadata collection.
-     * @param localServerName - name of the local server.
-     * @param localServerType - type of local repository/server.
-     * @param localOrganizationName - name of the organization that owns the 
local metadata repository.
      */
     void initialize(String                      repositoryEventMapperName,
-                    OMRSRepositoryConnector     repositoryConnector,
-                    OMRSRepositoryHelper        repositoryHelper,
-                    String                      localMetadataCollectionId,
-                    String                      localServerName,
-                    String                      localServerType,
-                    String                      localOrganizationName);
+                    OMRSRepositoryConnector     repositoryConnector);
+
+
+    /**
+     * Set up a repository helper object for the repository connector to use.
+     *
+     * @param repositoryHelper - helper object for building TypeDefs and 
metadata instances.
+     */
+    void setRepositoryHelper(OMRSRepositoryHelper   repositoryHelper);
+
+
+    /**
+     * Set up a repository validator for the repository connector to use.
+     *
+     * @param repositoryValidator - validator object to check the validity of 
TypeDefs and metadata instances.
+     */
+    void setRepositoryValidator(OMRSRepositoryValidator repositoryValidator);
+
+
+    /**
+     * Set up the name of the server where the metadata collection resides.
+     *
+     * @param serverName - String name
+     */
+    void  setServerName(String      serverName);
+
+
+    /**
+     * Set up the descriptive string describing the type of the server.  This 
might be the
+     * name of the product, or similar identifier.
+     *
+     * @param serverType - String server type
+     */
+    void setServerType(String serverType);
+
+
+    /**
+     * Set up the name of the organization that runs/owns the server.
+     *
+     * @param organizationName - String organization name
+     */
+    void setOrganizationName(String organizationName);
+
+
+    /**
+     * Set up the unique Id for this metadata collection.
+     *
+     * @param metadataCollectionId - String unique Id
+     */
+    void setMetadataCollectionId(String         metadataCollectionId);
 
 
     /**
@@ -62,4 +101,7 @@ public interface OMRSRepositoryEventMapper
      *                                open metadata repository cohort.
      */
     void setRepositoryEventProcessor(OMRSRepositoryEventProcessor 
repositoryEventProcessor);
+
+
+
 }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperBase.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperBase.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperBase.java
index 4d9db96..e84735c 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperBase.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperBase.java
@@ -17,25 +17,12 @@
  */
 package org.apache.atlas.omrs.eventmanagement.repositoryeventmapper;
 
-import org.apache.atlas.ocf.ConnectorBase;
-import org.apache.atlas.omrs.eventmanagement.OMRSRepositoryEventProcessor;
-import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryHelper;
-import 
org.apache.atlas.omrs.metadatacollection.repositoryconnector.OMRSRepositoryConnector;
 
 /**
  * OMRSRepositoryEventMapperBase provides a base class for implementors of 
OMRSRepositoryEventMapper.
  */
-public abstract class OMRSRepositoryEventMapperBase extends ConnectorBase 
implements OMRSRepositoryEventMapper
+public abstract class OMRSRepositoryEventMapperBase extends 
OMRSRepositoryEventMapperConnector
 {
-    protected OMRSRepositoryEventProcessor repositoryEventProcessor  = null;
-    protected String                       repositoryEventMapperName = null;
-    protected OMRSRepositoryConnector      repositoryConnector       = null;
-    protected OMRSRepositoryHelper         repositoryHelper          = null;
-    protected String                       localMetadataCollectionId = null;
-    protected String                       localServerName           = null;
-    protected String                       localServerType           = null;
-    protected String                       localOrganizationName     = null;
-
     /**
      * Default constructor for OCF ConnectorBase.
      */
@@ -43,50 +30,4 @@ public abstract class OMRSRepositoryEventMapperBase extends 
ConnectorBase implem
     {
         super();
     }
-
-
-    /**
-     * Set up the repository event listener for this connector to use.  The 
connector should pass
-     * each type or instance metadata change reported by its metadata 
repository's metadata on to the
-     * repository event listener.
-     *
-     * @param repositoryEventProcessor - listener responsible for distributing 
notifications of local
-     *                                changes to metadata types and instances 
to the rest of the
-     *                                open metadata repository cluster.
-     */
-    public void setRepositoryEventProcessor(OMRSRepositoryEventProcessor 
repositoryEventProcessor)
-    {
-        this.repositoryEventProcessor = repositoryEventProcessor;
-    }
-
-
-    /**
-     * Pass additional information to the connector needed to process events.
-     *
-     * @param repositoryEventMapperName - repository event mapper name used 
for the source of the OMRS events.
-     * @param repositoryConnector - ths is the connector to the local 
repository that the event mapper is processing
-     *                            events from.  The repository connector is 
used to retrieve additional information
-     *                            necessary to fill out the OMRS Events.
-     * @param repositoryHelper - the TypeDef helper is used to create metadata 
instances that are
-     * @param localMetadataCollectionId - unique identifier for the local 
repository's metadata collection.
-     * @param localServerName - name of the local server.
-     * @param localServerType - type of local repository/server.
-     * @param localOrganizationName - name of the organization that owns the 
local metadata repository.
-     */
-    public void initialize(String                      
repositoryEventMapperName,
-                           OMRSRepositoryConnector     repositoryConnector,
-                           OMRSRepositoryHelper        repositoryHelper,
-                           String                      
localMetadataCollectionId,
-                           String                      localServerName,
-                           String                      localServerType,
-                           String                      localOrganizationName)
-    {
-        this.repositoryEventMapperName = repositoryEventMapperName;
-        this.repositoryConnector = repositoryConnector;
-        this.repositoryHelper = repositoryHelper;
-        this.localMetadataCollectionId = localMetadataCollectionId;
-        this.localServerName = localServerName;
-        this.localServerType = localServerType;
-        this.localOrganizationName = localOrganizationName;
-    }
 }

http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperConnector.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperConnector.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperConnector.java
new file mode 100644
index 0000000..0db06e4
--- /dev/null
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/eventmanagement/repositoryeventmapper/OMRSRepositoryEventMapperConnector.java
@@ -0,0 +1,169 @@
+/*
+ * 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.repositoryeventmapper;
+
+import org.apache.atlas.ocf.ConnectorBase;
+import org.apache.atlas.ocf.ffdc.ConnectorCheckedException;
+import org.apache.atlas.omrs.eventmanagement.OMRSRepositoryEventProcessor;
+import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryHelper;
+import 
org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryValidator;
+import 
org.apache.atlas.omrs.metadatacollection.repositoryconnector.OMRSRepositoryConnector;
+
+/**
+ * OMRSRepositoryEventMapperBase provides a base class for implementors of 
OMRSRepositoryEventMapper.
+ */
+public abstract class OMRSRepositoryEventMapperConnector extends ConnectorBase 
implements OMRSRepositoryEventMapper
+{
+    protected OMRSRepositoryEventProcessor repositoryEventProcessor  = null;
+    protected String                       repositoryEventMapperName = null;
+    protected OMRSRepositoryConnector      repositoryConnector       = null;
+    protected OMRSRepositoryHelper         repositoryHelper          = null;
+    protected OMRSRepositoryValidator      repositoryValidator       = null;
+    protected String                       localMetadataCollectionId = null;
+    protected String                       localServerName           = null;
+    protected String                       localServerType           = null;
+    protected String                       localOrganizationName     = null;
+
+    /**
+     * Default constructor for OCF ConnectorBase.
+     */
+    public OMRSRepositoryEventMapperConnector()
+    {
+        super();
+    }
+
+
+    /**
+     * Pass additional information to the connector needed to process events.
+     *
+     * @param repositoryEventMapperName - repository event mapper name used 
for the source of the OMRS events.
+     * @param repositoryConnector - ths is the connector to the local 
repository that the event mapper is processing
+     *                            events from.  The repository connector is 
used to retrieve additional information
+     *                            necessary to fill out the OMRS Events.
+     */
+    public void initialize(String                      
repositoryEventMapperName,
+                           OMRSRepositoryConnector     repositoryConnector)
+    {
+        this.repositoryEventMapperName = repositoryEventMapperName;
+        this.repositoryConnector = repositoryConnector;
+    }
+
+
+    /**
+     * Set up a repository helper object for the repository connector to use.
+     *
+     * @param repositoryHelper - helper object for building TypeDefs and 
metadata instances.
+     */
+    public void setRepositoryHelper(OMRSRepositoryHelper repositoryHelper)
+    {
+        this.repositoryHelper = repositoryHelper;
+    }
+
+
+    /**
+     * Set up a repository validator for the repository connector to use.
+     *
+     * @param repositoryValidator - validator object to check the validity of 
TypeDefs and metadata instances.
+     */
+    public void setRepositoryValidator(OMRSRepositoryValidator 
repositoryValidator)
+    {
+        this.repositoryValidator = repositoryValidator;
+    }
+
+
+    /**
+     * Set up the name of the server where the metadata collection resides.
+     *
+     * @param serverName - String name
+     */
+    public void  setServerName(String      serverName)
+    {
+        this.localServerName = serverName;
+    }
+
+
+    /**
+     * Set up the descriptive string describing the type of the server.  This 
might be the
+     * name of the product, or similar identifier.
+     *
+     * @param serverType - String server type
+     */
+    public void setServerType(String serverType)
+    {
+        this.localServerType = serverType;
+    }
+
+
+    /**
+     * Set up the name of the organization that runs/owns the server.
+     *
+     * @param organizationName - String organization name
+     */
+    public void setOrganizationName(String organizationName)
+    {
+        this.localOrganizationName = organizationName;
+    }
+
+
+    /**
+     * Set up the unique Id for this metadata collection.
+     *
+     * @param metadataCollectionId - String unique Id
+     */
+    public void setMetadataCollectionId(String         metadataCollectionId)
+    {
+        this.localMetadataCollectionId = metadataCollectionId;
+    }
+
+
+    /**
+     * Set up the repository event listener for this connector to use.  The 
connector should pass
+     * each type or instance metadata change reported by its metadata 
repository's metadata on to the
+     * repository event listener.
+     *
+     * @param repositoryEventProcessor - listener responsible for distributing 
notifications of local
+     *                                changes to metadata types and instances 
to the rest of the
+     *                                open metadata repository cluster.
+     */
+    public void setRepositoryEventProcessor(OMRSRepositoryEventProcessor 
repositoryEventProcessor)
+    {
+        this.repositoryEventProcessor = repositoryEventProcessor;
+    }
+
+
+    /**
+     * Indicates that the connector is completely configured and can begin 
processing.
+     *
+     * @throws ConnectorCheckedException - there is a problem within the 
connector.
+     */
+    public void start() throws ConnectorCheckedException
+    {
+        super.start();
+    }
+
+
+    /**
+     * Free up any resources held since the connector is no longer needed.
+     *
+     * @throws ConnectorCheckedException - there is a problem within the 
connector.
+     */
+    public  void disconnect() throws ConnectorCheckedException
+    {
+        super.disconnect();
+    }
+}

Reply via email to