http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/omrs/src/main/java/org/apache/atlas/omrs/localrepository/repositorycontentmanager/OMRSRepositoryValidator.java
----------------------------------------------------------------------
diff --git 
a/omrs/src/main/java/org/apache/atlas/omrs/localrepository/repositorycontentmanager/OMRSRepositoryValidator.java
 
b/omrs/src/main/java/org/apache/atlas/omrs/localrepository/repositorycontentmanager/OMRSRepositoryValidator.java
index 6a73a9d..d012cc9 100644
--- 
a/omrs/src/main/java/org/apache/atlas/omrs/localrepository/repositorycontentmanager/OMRSRepositoryValidator.java
+++ 
b/omrs/src/main/java/org/apache/atlas/omrs/localrepository/repositorycontentmanager/OMRSRepositoryValidator.java
@@ -18,25 +18,51 @@
 package org.apache.atlas.omrs.localrepository.repositorycontentmanager;
 
 import org.apache.atlas.omrs.ffdc.OMRSErrorCode;
-import org.apache.atlas.omrs.ffdc.exception.OMRSLogicErrorException;
-import 
org.apache.atlas.omrs.metadatacollection.properties.instances.EntityDetail;
-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.TypeDef;
-import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefCategory;
-import 
org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefSummary;
+import org.apache.atlas.omrs.ffdc.exception.*;
+import org.apache.atlas.omrs.metadatacollection.properties.MatchCriteria;
+import org.apache.atlas.omrs.metadatacollection.properties.instances.*;
+import org.apache.atlas.omrs.metadatacollection.properties.typedefs.*;
+import 
org.apache.atlas.omrs.metadatacollection.repositoryconnector.OMRSRepositoryConnector;
+import sun.misc.Regexp;
 
+import javax.lang.model.type.UnknownTypeException;
 import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * OMRSRepositoryValidator provides methods to validate TypeDefs and Instances 
returned from
- * an open metadata repository.  An instance can be created by any OMRS 
component, or OMRS adapter and
- * it will connect to the local repository's content manager to access the 
local type definitions (TypeDefs)
- * and rules.
+ * an open metadata repository.  It is typically used by OMRS repository 
connectors and
+ * repository event mappers.
  */
 public class OMRSRepositoryValidator implements OMRSTypeDefValidator, 
OMRSInstanceValidator
 {
-    private static OMRSRepositoryContentManager    repositoryContentManager = 
null;
+    private static OMRSRepositoryContentManager    
defaultRepositoryContentManager = null;
+
+    private        OMRSRepositoryContentManager    repositoryContentManager;
+
+
+    /**
+     * Default constructor - deprecated as a repository connector should get 
its repository validator
+     * from its superclass.
+     */
+    @Deprecated
+    public OMRSRepositoryValidator()
+    {
+        repositoryContentManager = defaultRepositoryContentManager;
+    }
+
+
+    /**
+     * Typical constructor used by the OMRS to create a repository validator 
for a repository connector.
+     *
+     * @param repositoryContentManager - holds details of valid types and 
provides the implementation of
+     *                                 the repository validator methods
+     */
+    public OMRSRepositoryValidator(OMRSRepositoryContentManager 
repositoryContentManager)
+    {
+        this.repositoryContentManager = repositoryContentManager;
+    }
 
     /**
      * Set up the local repository's content manager.  This maintains a cache 
of the local repository's type
@@ -62,23 +88,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "getLocalTypeDefs()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.getLocalTypeDefs();
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
-
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        validateRepositoryContentManager(methodName);
 
+        return repositoryContentManager.getLocalTypeDefs();
     }
 
 
@@ -99,27 +111,14 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
      * @param sourceName - name of the caller
      * @param typeDefSummaries - list of summary information about the 
TypeDefs.
      */
-    public void validateAgainstLocalTypeDefs(String   sourceName,
-                                             ArrayList<TypeDefSummary> 
typeDefSummaries)
+    public void validateAgainstLocalTypeDefs(String               sourceName,
+                                             List<TypeDefSummary> 
typeDefSummaries)
     {
         final String  methodName = "validateAgainstLocalTypeDefs()";
 
-        if (repositoryContentManager != null)
-        {
-            repositoryContentManager.validateAgainstLocalTypeDefs(sourceName, 
typeDefSummaries);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        repositoryContentManager.validateAgainstLocalTypeDefs(sourceName, 
typeDefSummaries);
     }
 
 
@@ -134,26 +133,13 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
      * @return boolean flag
      */
     public boolean   validateEnterpriseTypeDefs(String             sourceName,
-                                                ArrayList<TypeDef> typeDefs)
+                                                List<TypeDef>      typeDefs)
     {
         final String  methodName = "validateEnterpriseTypeDefs()";
 
-        if (repositoryContentManager != null)
-        {
-            return 
repositoryContentManager.validateEnterpriseTypeDefs(sourceName, typeDefs);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validateEnterpriseTypeDefs(sourceName, 
typeDefs);
     }
 
 
@@ -169,22 +155,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "isActiveType()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.isActiveType(sourceName, 
typeDefGUID, typeDefName);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.isActiveType(sourceName, typeDefGUID, 
typeDefName);
     }
 
     /**
@@ -199,22 +172,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "isOpenType()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.isOpenType(sourceName, 
typeDefGUID, typeDefName);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.isOpenType(sourceName, typeDefGUID, 
typeDefName);
     }
 
 
@@ -230,22 +190,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "isKnownType()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.isKnownType(sourceName, 
typeDefGUID, typeDefName);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.isKnownType(sourceName, typeDefGUID, 
typeDefName);
     }
 
 
@@ -263,24 +210,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "validTypeId()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validTypeId(sourceName,
-                                                        typeDefGUID,
-                                                        typeDefName);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validTypeId(sourceName, typeDefGUID, 
typeDefName);
     }
 
 
@@ -293,35 +225,44 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
      * @param category - category for the TypeDef
      * @return boolean result
      */
-    public boolean validTypeId(String          sourceName,
-                               String          typeDefGUID,
-                               String          typeDefName,
-                               TypeDefCategory category)
+    public boolean validTypeDefId(String          sourceName,
+                                  String          typeDefGUID,
+                                  String          typeDefName,
+                                  TypeDefCategory category)
     {
-        final String  methodName = "validTypeId()";
+        final String  methodName = "validTypeDefId()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validTypeId(sourceName,
-                                                        typeDefGUID,
-                                                        typeDefName,
-                                                        category);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validTypeDefId(sourceName, 
typeDefGUID, typeDefName, category);
+    }
+
+    /**
+     * Return boolean indicating whether the AttributeTypeDef identifiers are 
from a single known type or not.
+     *
+     * @param sourceName - source of the request (used for logging)
+     * @param attributeTypeDefGUID - unique identifier of the AttributeTypeDef
+     * @param attributeTypeDefName - unique name of the AttributeTypeDef
+     * @param category - category for the AttributeTypeDef
+     * @return boolean result
+     */
+    public boolean validAttributeTypeDefId(String                   sourceName,
+                                           String                   
attributeTypeDefGUID,
+                                           String                   
attributeTypeDefName,
+                                           AttributeTypeDefCategory category)
+    {
+        final String  methodName = "validAttributeTypeDefId()";
+
+        validateRepositoryContentManager(methodName);
+
+       return repositoryContentManager.validAttributeTypeDefId(sourceName,
+                                                               
attributeTypeDefGUID,
+                                                               
attributeTypeDefName,
+                                                               category);
     }
 
 
+
     /**
      * Return boolean indicating whether the TypeDef identifiers are from a 
single known type or not.
      *
@@ -332,37 +273,53 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
      * @param category - category for the TypeDef
      * @return boolean result
      */
-    public boolean validTypeId(String          sourceName,
-                               String          typeDefGUID,
-                               String          typeDefName,
-                               long            typeDefVersion,
-                               TypeDefCategory category)
+    public boolean validTypeDefId(String          sourceName,
+                                  String          typeDefGUID,
+                                  String          typeDefName,
+                                  long            typeDefVersion,
+                                  TypeDefCategory category)
     {
-        final String  methodName = "validTypeId()";
+        final String  methodName = "validTypeDefId()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validTypeId(sourceName,
-                                                        typeDefGUID,
-                                                        typeDefName,
-                                                        typeDefVersion,
-                                                        category);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validTypeDefId(sourceName,
+                                                       typeDefGUID,
+                                                       typeDefName,
+                                                       typeDefVersion,
+                                                       category);
+    }
+
+
+    /**
+     * Return boolean indicating whether the TypeDef identifiers are from a 
single known type or not.
+     *
+     * @param sourceName - source of the request (used for logging)
+     * @param attributeTypeDefGUID - unique identifier of the TypeDef
+     * @param attributeTypeDefName - unique name of the TypeDef
+     * @param attributeTypeDefVersion - versionName of the type
+     * @param category - category for the TypeDef
+     * @return boolean result
+     */
+    public boolean validAttributeTypeDefId(String                   sourceName,
+                                           String                   
attributeTypeDefGUID,
+                                           String                   
attributeTypeDefName,
+                                           long                     
attributeTypeDefVersion,
+                                           AttributeTypeDefCategory category)
+    {
+        final String  methodName = "validAttributeTypeDefId()";
+
+        validateRepositoryContentManager(methodName);
+
+        return repositoryContentManager.validAttributeTypeDefId(sourceName,
+                                                                
attributeTypeDefGUID,
+                                                                
attributeTypeDefName,
+                                                                
attributeTypeDefVersion,
+                                                                category);
     }
 
 
+
     /**
      * Return boolean indicating whether the supplied TypeDef is valid or not.
      *
@@ -373,24 +330,29 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     public boolean validTypeDef(String         sourceName,
                                 TypeDef        typeDef)
     {
-        final String  methodName = "validTypeDef()";
+        final String methodName = "validTypeDef()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validTypeDef(sourceName, typeDef);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validTypeDef(sourceName, typeDef);
+    }
+
+
+    /**
+     * Return boolean indicating whether the supplied AttributeTypeDef is 
valid or not.
+     *
+     * @param sourceName - source of the request (used for logging)
+     * @param attributeTypeDef - TypeDef to test
+     * @return boolean result
+     */
+    public boolean validAttributeTypeDef(String           sourceName,
+                                         AttributeTypeDef attributeTypeDef)
+    {
+        final String  methodName = "validAttributeTypeDef()";
+
+        validateRepositoryContentManager(methodName);
+
+        return repositoryContentManager.validAttributeTypeDef(sourceName, 
attributeTypeDef);
     }
 
 
@@ -406,22 +368,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "validTypeDefSummary()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validTypeDefSummary(sourceName, 
typeDefSummary);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validTypeDefSummary(sourceName, 
typeDefSummary);
     }
 
 
@@ -437,22 +386,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "validEntity()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validEntity(sourceName, entity);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validEntity(sourceName, entity);
     }
 
 
@@ -468,22 +404,9 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "validRelationship()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validRelationship(sourceName, 
relationship);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
-                                              errorCode.getUserAction());
-        }
+        return repositoryContentManager.validRelationship(sourceName, 
relationship);
     }
 
 
@@ -505,25 +428,2403 @@ public class OMRSRepositoryValidator implements 
OMRSTypeDefValidator, OMRSInstan
     {
         final String  methodName = "validInstanceId()";
 
-        if (repositoryContentManager != null)
-        {
-            return repositoryContentManager.validInstanceId(sourceName,
-                                                            typeDefGUID,
-                                                            typeDefName,
-                                                            category,
-                                                            instanceGUID);
-        }
-        else
-        {
-            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
-            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+        validateRepositoryContentManager(methodName);
 
-            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
-                                              this.getClass().getName(),
-                                              methodName,
-                                              errorMessage,
-                                              errorCode.getSystemAction(),
+        return repositoryContentManager.validInstanceId(sourceName,
+                                                        typeDefGUID,
+                                                        typeDefName,
+                                                        category,
+                                                        instanceGUID);
+    }
+
+    /* ==============================================================
+     * Simple parameter validation methods needed by all repositories
+     * ==============================================================
+     */
+
+
+    /**
+     * Validate that the supplied user Id is not null.
+     *
+     * @param userId - userId passed on call to this metadata collection
+     * @param methodName - name of method requesting the validation.
+     * @throws UserNotAuthorizedException - the userId is invalid
+     */
+    public  void validateUserId(String  repositoryName,
+                                String  userId,
+                                String  methodName) throws 
UserNotAuthorizedException
+    {
+        if ("".equals(userId))
+        {
+            OMRSErrorCode errorCode = OMRSErrorCode.NULL_USER_ID;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage("userId", methodName, repositoryName);
+
+            throw new UserNotAuthorizedException(errorCode.getHTTPErrorCode(),
+                                                 this.getClass().getName(),
+                                                 methodName,
+                                                 errorMessage,
+                                                 errorCode.getSystemAction(),
+                                                 errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a TypeDef's identifiers are not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param guidParameterName - name of the parameter that passed the guid.
+     * @param nameParameterName - name of the parameter that passed the name.
+     * @param guid - unique identifier for a type or an instance passed on the 
request
+     * @param name - name of TypeDef.
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateTypeDefIds(String repositoryName,
+                                    String guidParameterName,
+                                    String nameParameterName,
+                                    String guid,
+                                    String name,
+                                    String methodName) throws 
InvalidParameterException
+    {
+        if (guid == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_TYPEDEF_IDENTIFIER;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(guidParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+        else if (name == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_TYPEDEF_NAME;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(nameParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that an AttributeTypeDef's identifiers are not null and are 
recognized.
+     *
+     * @param repositoryName - name of the repository.
+     * @param guidParameterName - name of the parameter that passed the guid.
+     * @param nameParameterName - name of the parameter that passed the name.
+     * @param guid - unique identifier for a type or an instance passed on the 
request
+     * @param name - name of TypeDef.
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid, or name provided
+     */
+    public  void validateAttributeTypeDefIds(String repositoryName,
+                                             String guidParameterName,
+                                             String nameParameterName,
+                                             String guid,
+                                             String name,
+                                             String methodName) throws 
InvalidParameterException
+    {
+        if (guid == null)
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.NULL_ATTRIBUTE_TYPEDEF_IDENTIFIER;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(guidParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+        else if (name == null)
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.NO_ATTRIBUTE_TYPEDEF_NAME;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(nameParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that type's identifier is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param guidParameterName - name of the parameter that passed the guid.
+     * @param guid - unique identifier for a type or an instance passed on the 
request
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateTypeGUID(String repositoryName,
+                                  String guidParameterName,
+                                  String guid,
+                                  String methodName) throws 
InvalidParameterException
+    {
+        if (guid == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_TYPEDEF_IDENTIFIER;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(guidParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    public void validateTypeDefPatch(String       repositoryName,
+                                     TypeDefPatch patch,
+                                     String       methodName) throws 
InvalidParameterException, PatchErrorException
+    {
+        if (patch == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_TYPEDEF_PATCH;
+            String        errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage(methodName,
+                                                                               
                             repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that if a type's identifier is passed then it is valid.
+     *
+     * @param repositoryName - name of the repository.
+     * @param guidParameterName - name of the parameter that passed the guid.
+     * @param guid - unique identifier for a type or an instance passed on the 
request
+     * @param methodName - method receiving the call
+     * @throws TypeErrorException - invalid provided
+     */
+    public  void validateInstanceTypeGUID(String repositoryName,
+                                          String guidParameterName,
+                                          String guid,
+                                          String methodName) throws 
TypeErrorException
+    {
+        if (guid == null)
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.BAD_TYPEDEF_ID_FOR_INSTANCE;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(guidParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new TypeErrorException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that type's name is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param nameParameterName - name of the parameter that passed the name.
+     * @param name - unique identifier for a type or an instance passed on the 
request
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no name provided
+     */
+    public  void validateTypeName(String repositoryName,
+                                  String nameParameterName,
+                                  String name,
+                                  String methodName) throws 
InvalidParameterException
+    {
+        if (name == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_TYPEDEF_NAME;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(nameParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a TypeDef's category is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param nameParameterName - name of the parameter that passed the name.
+     * @param category - category of TypeDef
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no name provided
+     */
+    public  void validateTypeDefCategory(String          repositoryName,
+                                         String          nameParameterName,
+                                         TypeDefCategory category,
+                                         String          methodName) throws 
InvalidParameterException
+    {
+        if (category == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_TYPEDEF_CATEGORY;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(nameParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a AttributeTypeDef's category is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param nameParameterName - name of the parameter that passed the name.
+     * @param category - category of TypeDef
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no name provided
+     */
+    public  void validateAttributeTypeDefCategory(String                   
repositoryName,
+                                                  String                   
nameParameterName,
+                                                  AttributeTypeDefCategory 
category,
+                                                  String                   
methodName) throws InvalidParameterException
+    {
+        if (category == null)
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.NO_ATTRIBUTE_TYPEDEF_CATEGORY;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(nameParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate the content of a new TypeDef is valid.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the typeDef.
+     * @param typeDef - unique identifier for a type or an instance passed on 
the request
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no typeDef provided
+     * @throws InvalidTypeDefException - invalid typeDef provided
+     */
+    public  void validateTypeDef(String  repositoryName,
+                                 String  parameterName,
+                                 TypeDef typeDef,
+                                 String  methodName) throws 
InvalidParameterException, InvalidTypeDefException
+    {
+        if (typeDef == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_TYPEDEF;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+
+        validateTypeDefIds(repositoryName,
+                           parameterName + ".getGUID",
+                           parameterName + ".getName",
+                           typeDef.getGUID(),
+                           typeDef.getName(),
+                           methodName);
+
+        validateTypeDefCategory(repositoryName,
+                                parameterName + ".getCategory",
+                                typeDef.getCategory(),
+                                methodName);
+
+
+    }
+
+
+    /**
+     * Validate the content of a new TypeDef is known.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the typeDef.
+     * @param typeDef - unique identifier for a type or an instance passed on 
the request
+     * @param methodName - method receiving the call
+     * @throws TypeDefNotKnownException - no recognized typeDef provided
+     */
+    public  void validateKnownTypeDef(String  repositoryName,
+                                      String  parameterName,
+                                      TypeDef typeDef,
+                                      String  methodName) throws 
TypeDefNotKnownException
+    {
+        final String  thisMethodName = "validateKnownTypeDef";
+
+        validateRepositoryContentManager(thisMethodName);
+
+        if (! repositoryContentManager.isKnownType(repositoryName, 
typeDef.getGUID(), typeDef.getName()))
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.TYPEDEF_NOT_KNOWN;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(typeDef.getName(),
+                                                                            
typeDef.getGUID(),
+                                                                            
parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new TypeDefNotKnownException(errorCode.getHTTPErrorCode(),
+                                               this.getClass().getName(),
+                                               methodName,
+                                               errorMessage,
+                                               errorCode.getSystemAction(),
+                                               errorCode.getUserAction());
+
+        }
+    }
+
+
+    /**
+     * Validate the content of a new TypeDef is known.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the typeDef.
+     * @param typeDef - unique identifier for a type or an instance passed on 
the request
+     * @param methodName - method receiving the call
+     * @throws TypeDefKnownException - the TypeDef is already defined
+     * @throws TypeDefConflictException - the TypeDef is already defined - but 
differently
+     */
+    public  void validateUnknownTypeDef(String  repositoryName,
+                                        String  parameterName,
+                                        TypeDef typeDef,
+                                        String  methodName) throws 
TypeDefKnownException,
+                                                                   
TypeDefConflictException
+    {
+        final String  thisMethodName = "validateUnknownTypeDef";
+
+        validateRepositoryContentManager(thisMethodName);
+
+        if (repositoryContentManager.isKnownType(repositoryName, 
typeDef.getGUID(), typeDef.getName()))
+        {
+            // todo validate that the existing typeDef matches the new one.
+
+            OMRSErrorCode errorCode = OMRSErrorCode.TYPEDEF_ALREADY_DEFINED;
+            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage(typeDef.getName(),
+                                                                               
                      typeDef.getGUID(),
+                                                                               
                      repositoryName);
+
+            throw new TypeDefKnownException(errorCode.getHTTPErrorCode(),
+                                            this.getClass().getName(),
+                                            methodName,
+                                            errorMessage,
+                                            errorCode.getSystemAction(),
+                                            errorCode.getUserAction());
+
+        }
+    }
+
+
+    /**
+     * Validate the content of a new TypeDef is known.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the typeDef.
+     * @param attributeTypeDef - unique identifier for an attribute type or an 
instance passed on the request
+     * @param methodName - method receiving the call
+     * @throws TypeDefKnownException - the TypeDef is already defined
+     * @throws TypeDefConflictException - the TypeDef is already defined - but 
differently
+     */
+    public  void validateUnknownAttributeTypeDef(String           
repositoryName,
+                                                 String           
parameterName,
+                                                 AttributeTypeDef 
attributeTypeDef,
+                                                 String           methodName) 
throws TypeDefKnownException,
+                                                                               
      TypeDefConflictException
+    {
+        final String  thisMethodName = "validateUnknownTypeDef";
+
+        validateRepositoryContentManager(thisMethodName);
+
+        if (repositoryContentManager.isKnownType(repositoryName,
+                                                 attributeTypeDef.getGUID(),
+                                                 attributeTypeDef.getName()))
+        {
+            // todo validate that the existing typeDef matches the new one.
+
+            OMRSErrorCode errorCode = 
OMRSErrorCode.ATTRIBUTE_TYPEDEF_ALREADY_DEFINED;
+            String errorMessage = errorCode.getErrorMessageId()
+                    + 
errorCode.getFormattedErrorMessage(attributeTypeDef.getName(),
+                                                         
attributeTypeDef.getGUID(),
+                                                         repositoryName);
+
+            throw new TypeDefKnownException(errorCode.getHTTPErrorCode(),
+                                            this.getClass().getName(),
+                                            methodName,
+                                            errorMessage,
+                                            errorCode.getSystemAction(),
+                                            errorCode.getUserAction());
+
+        }
+    }
+
+
+    /**
+     * Validate the content of a TypeDef associated with a metadata instance.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the typeDef.
+     * @param typeDef - unique identifier for a type or an instance passed on 
the request
+     * @param methodName - method receiving the call
+     * @throws TypeErrorException - no typeDef provided
+     * @throws RepositoryErrorException - the TypeDef from the repository is 
in error.
+     */
+    public  void validateTypeDefForInstance(String  repositoryName,
+                                            String  parameterName,
+                                            TypeDef typeDef,
+                                            String  methodName) throws 
TypeErrorException,
+                                                                       
RepositoryErrorException
+    {
+        if (typeDef == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_TYPEDEF;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new TypeErrorException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+
+        try
+        {
+            validateTypeDefIds(repositoryName,
+                               parameterName + ".getGUID",
+                               parameterName + ".getName",
+                               typeDef.getGUID(),
+                               typeDef.getName(),
+                               methodName);
+
+            validateTypeDefCategory(repositoryName,
+                                    parameterName + ".getCategory",
+                                    typeDef.getCategory(),
+                                    methodName);
+        }
+        catch (Throwable    error)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.BAD_TYPEDEF;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new RepositoryErrorException(errorCode.getHTTPErrorCode(),
+                                               this.getClass().getName(),
+                                               methodName,
+                                               errorMessage,
+                                               errorCode.getSystemAction(),
+                                               errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that the supplied TypeDef GUID and name matches the type 
associated with a metadata instance.
+     *
+     * @param repositoryName - name of the repository.
+     * @param typeDefGUID - the supplied typeDef GUID.
+     * @param typeDefName - the supplied typeDef name.
+     * @param instance - instance retrieved from the store with the supplied 
instance guid
+     * @param methodName - method making this call
+     * @throws InvalidParameterException - incompatibility detected between 
the TypeDef and the instance's type
+     * @throws RepositoryErrorException - the instance from the repository is 
in error.
+     */
+    public  void validateTypeForInstanceDelete(String         repositoryName,
+                                               String         typeDefGUID,
+                                               String         typeDefName,
+                                               InstanceHeader instance,
+                                               String         methodName) 
throws InvalidParameterException,
+                                                                               
  RepositoryErrorException
+    {
+        /*
+         * Just make sure the instance has a type :)
+         */
+        this.validateInstanceType(repositoryName, instance);
+
+
+        /*
+         * Both the GUID and the name must match
+         */
+        if ((! typeDefGUID.equals(instance.getType().getTypeDefGUID())) ||
+            (! typeDefName.equals(instance.getType().getTypeDefName())))
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.BAD_TYPEDEF_IDS_FOR_DELETE;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(typeDefName,
+                                                                            
typeDefGUID,
+                                                                            
methodName,
+                                                                            
instance.getGUID(),
+                                                                            
repositoryName);
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+
+    }
+
+
+    /**
+     * Validate the content of a new AttributeTypeDef.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the 
attributeTypeDef.
+     * @param attributeTypeDef - unique identifier for a type or an instance 
passed on the request
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no attributeTypeDef provided
+     * @throws InvalidTypeDefException - bad attributeTypeDef provided
+     */
+    public  void validateAttributeTypeDef(String           repositoryName,
+                                          String           parameterName,
+                                          AttributeTypeDef attributeTypeDef,
+                                          String           methodName) throws 
InvalidParameterException,
+                                                                              
InvalidTypeDefException
+    {
+        if (attributeTypeDef == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_ATTRIBUTE_TYPEDEF;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+
+        validateAttributeTypeDefIds(repositoryName,
+                                    parameterName + ".getGUID",
+                                    parameterName + ".getName",
+                                    attributeTypeDef.getGUID(),
+                                    attributeTypeDef.getName(),
+                                    methodName);
+
+        validateAttributeTypeDefCategory(repositoryName,
+                                         parameterName + ".getCategory",
+                                         attributeTypeDef.getCategory(),
+                                         methodName);
+    }
+
+
+    /**
+     * Validate that type's name is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the name.
+     * @param gallery - typeDef gallery
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no name provided
+     */
+    public  void validateTypeDefGallery(String         repositoryName,
+                                        String         parameterName,
+                                        TypeDefGallery gallery,
+                                        String         methodName) throws 
InvalidParameterException
+    {
+        if (gallery == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NULL_TYPEDEF_GALLERY;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that the type's name is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param standard - name of the standard - null means any.
+     * @param organization - name of the organization - null means any.
+     * @param identifier - identifier of the element in the standard - null 
means any.
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no name provided
+     */
+    public  void validateExternalId(String repositoryName,
+                                    String standard,
+                                    String organization,
+                                    String identifier,
+                                    String methodName) throws 
InvalidParameterException
+    {
+        if ((standard == null) && (organization == null) || (identifier == 
null))
+        {
+            OMRSErrorCode errorCode = OMRSErrorCode.NO_EXTERNAL_ID;
+
+            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage(methodName,
+                                                                               
                      repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that an entity's identifier is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param guidParameterName - name of the parameter that passed the guid.
+     * @param guid - unique identifier for a type or an instance passed on the 
request
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateGUID(String repositoryName,
+                              String guidParameterName,
+                              String guid,
+                              String methodName) throws 
InvalidParameterException
+    {
+        if (guid == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_GUID;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(guidParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a home metadata collection identifier is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param guidParameterName - name of the parameter that passed the guid.
+     * @param guid - unique identifier for a type or an instance passed on the 
request
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateHomeMetadataGUID(String repositoryName,
+                                          String guidParameterName,
+                                          String guid,
+                                          String methodName) throws 
InvalidParameterException
+    {
+        if (guid == null)
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.NULL_HOME_METADATA_COLLECTION_ID;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(guidParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a classification name is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the guid.
+     * @param classificationName - unique name for a classification type
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - classification name is null
+     */
+    public  void validateClassificationName(String repositoryName,
+                                            String parameterName,
+                                            String classificationName,
+                                            String methodName) throws 
InvalidParameterException
+    {
+        if (classificationName == null)
+        {
+            OMRSErrorCode errorCode    = 
OMRSErrorCode.NULL_CLASSIFICATION_NAME;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a classification is valid for the entity.
+     *
+     * @param repositoryName - name of the repository.
+     * @param classificationName - unique name for a classification type
+     * @param propertiesParameterName - name of the parameter that passed the 
properties.
+     * @param classificationProperties - properties to test
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - classification name is null
+     * @throws TypeErrorException - the classification is invalid for this 
entity
+     */
+    public  void validateClassificationProperties(String             
repositoryName,
+                                                  String             
classificationName,
+                                                  String             
propertiesParameterName,
+                                                  InstanceProperties 
classificationProperties,
+                                                  String             
methodName) throws PropertyErrorException,
+                                                                               
         TypeErrorException
+    {
+        if (repositoryContentManager != null)
+        {
+            TypeDef   classificationTypeDef = 
repositoryContentManager.getTypeDefByName(repositoryName, classificationName);
+
+            if (classificationTypeDef != null)
+            {
+                validatePropertiesForType(repositoryName, 
propertiesParameterName, classificationTypeDef, classificationProperties, 
methodName);
+            }
+            else
+            {
+                /*
+                 * Logic error as the type should be valid
+                 */
+                final String   thisMethodName = 
"validateClassificationProperties";
+
+                throwValidatorLogicError(repositoryName, methodName, 
thisMethodName);
+            }
+        }
+        else
+        {
+            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
+            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a classification is valid for the entity.
+     *
+     * @param repositoryName - name of the repository.
+     * @param classificationParameterName - name of the parameter that passed 
the guid.
+     * @param classificationName - unique name for a classification type
+     * @param entityTypeName - name of entity type
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - classification name is null
+     * @throws ClassificationErrorException - the classification is invalid 
for this entity
+     */
+    public  void validateClassification(String             repositoryName,
+                                        String             
classificationParameterName,
+                                        String             classificationName,
+                                        String             entityTypeName,
+                                        String             methodName) throws 
InvalidParameterException,
+                                                                              
ClassificationErrorException
+    {
+        this.validateClassificationName(repositoryName, 
classificationParameterName, classificationName, methodName);
+
+        if (repositoryContentManager != null)
+        {
+            if (! 
repositoryContentManager.isValidClassificationForEntity(repositoryName, 
classificationName, entityTypeName))
+            {
+                OMRSErrorCode errorCode    = 
OMRSErrorCode.INVALID_CLASSIFICATION_FOR_ENTITY;
+                String        errorMessage = errorCode.getErrorMessageId()
+                                           + 
errorCode.getFormattedErrorMessage(repositoryName,
+                                                                               
 classificationName,
+                                                                               
 entityTypeName);
+
+                throw new 
ClassificationErrorException(errorCode.getHTTPErrorCode(),
+                                                       
this.getClass().getName(),
+                                                       methodName,
+                                                       errorMessage,
+                                                       
errorCode.getSystemAction(),
+                                                       
errorCode.getUserAction());
+            }
+        }
+        else
+        {
+            OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
+            String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+
+            throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                              this.getClass().getName(),
+                                              methodName,
+                                              errorMessage,
+                                              errorCode.getSystemAction(),
+                                              errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a classification is valid for the entity.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the guid.
+     * @param classifications - list of classifications
+     * @param entityTypeName - name of entity type
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - classification name is null
+     * @throws ClassificationErrorException - the classification is invalid 
for this entity
+     * @throws PropertyErrorException - the classification's properties are 
invalid for its type
+     * @throws TypeErrorException - the classification's type is invalid
+     */
+    public  void validateClassificationList(String               
repositoryName,
+                                            String               parameterName,
+                                            List<Classification> 
classifications,
+                                            String               
entityTypeName,
+                                            String               methodName) 
throws InvalidParameterException,
+                                                                               
     ClassificationErrorException,
+                                                                               
     PropertyErrorException,
+                                                                               
     TypeErrorException
+    {
+        if (classifications != null)
+        {
+            for (Classification classification : classifications)
+            {
+                if (classification != null)
+                {
+                    if (repositoryContentManager != null)
+                    {
+                        this.validateClassification(repositoryName,
+                                                    parameterName,
+                                                    classification.getName(),
+                                                    entityTypeName,
+                                                    methodName);
+
+
+                        this.validatePropertiesForType(repositoryName,
+                                                       parameterName,
+                                                       
repositoryContentManager.getTypeDefByName(repositoryName,
+                                                                               
                  classification.getName()),
+                                                       
classification.getProperties(),
+                                                       methodName);
+                    }
+                    else
+                    {
+                        OMRSErrorCode errorCode = 
OMRSErrorCode.LOCAL_REPOSITORY_CONFIGURATION_ERROR;
+                        String errorMessage = errorCode.getErrorMessageId() + 
errorCode.getFormattedErrorMessage();
+
+                        throw new 
OMRSLogicErrorException(errorCode.getHTTPErrorCode(),
+                                                          
this.getClass().getName(),
+                                                          methodName,
+                                                          errorMessage,
+                                                          
errorCode.getSystemAction(),
+                                                          
errorCode.getUserAction());
+                    }
+
+                }
+                else
+                {
+                    OMRSErrorCode errorCode    = 
OMRSErrorCode.NULL_CLASSIFICATION_NAME;
+                    String        errorMessage = errorCode.getErrorMessageId()
+                                               + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                               
     methodName,
+                                                                               
     repositoryName);
+
+                    throw new 
InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                        
this.getClass().getName(),
+                                                        methodName,
+                                                        errorMessage,
+                                                        
errorCode.getSystemAction(),
+                                                        
errorCode.getUserAction());
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Validate that a TypeDef match criteria set of properties is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the match 
criteria.
+     * @param matchCriteria - match criteria properties
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateMatchCriteria(String            repositoryName,
+                                       String            parameterName,
+                                       TypeDefProperties matchCriteria,
+                                       String            methodName) throws 
InvalidParameterException
+    {
+        if (matchCriteria == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_MATCH_CRITERIA;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a metadata instance match criteria and set of properties 
are either both null or
+     * both not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param matchCriteriaParameterName - name of the parameter that passed 
the match criteria.
+     * @param matchPropertiesParameterName - name of the parameter that passed 
the match criteria.
+     * @param matchCriteria - match criteria enum
+     * @param matchProperties - match properties
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateMatchCriteria(String             repositoryName,
+                                       String             
matchCriteriaParameterName,
+                                       String             
matchPropertiesParameterName,
+                                       MatchCriteria      matchCriteria,
+                                       InstanceProperties matchProperties,
+                                       String             methodName) throws 
InvalidParameterException
+    {
+        if ((matchCriteria == null) && (matchProperties == null))
+        {
+            return;
+        }
+
+        if (matchCriteria == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_MATCH_CRITERIA;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(matchCriteriaParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+
+        if (matchProperties == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_MATCH_CRITERIA;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(matchPropertiesParameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that a search criteria  is not null.
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the parameter that passed the search 
criteria.
+     * @param searchCriteria - match criteria properties
+     * @param methodName - method receiving the call
+     * @throws InvalidParameterException - no guid provided
+     */
+    public  void validateSearchCriteria(String repositoryName,
+                                        String parameterName,
+                                        String searchCriteria,
+                                        String methodName) throws 
InvalidParameterException
+    {
+        if ((searchCriteria == null) || ("".equals(searchCriteria)))
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_SEARCH_CRITERIA;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                            
methodName,
+                                                                            
repositoryName);
+
+            throw new InvalidParameterException(errorCode.getHTTPErrorCode(),
+                                                this.getClass().getName(),
+                                                methodName,
+                                                errorMessage,
+                                                errorCode.getSystemAction(),
+                                                errorCode.getUserAction());
+        }
+    }
+
+
+    /**
+     * Validate that the properties for a metadata instance match its TypeDef
+     *
+     * @param repositoryName - name of the repository.
+     * @param parameterName - name of the properties parameter.
+     * @param typeDef - type information to validate against.
+     * @param properties - proposed properties
+     * @param methodName - method receiving the call
+     * @throws RepositoryErrorException - no typeDef provided
+     * @throws PropertyErrorException - invalid property
+     */
+    public  void validatePropertiesForType(String             repositoryName,
+                                           String             parameterName,
+                                           TypeDef            typeDef,
+                                           InstanceProperties properties,
+                                           String             methodName) 
throws PropertyErrorException,
+                                                                               
  TypeErrorException
+    {
+        if (typeDef == null)
+        {
+            /*
+             * Logic error as the type should be valid
+             */
+            final String   thisMethodName = "validatePropertiesForType";
+
+            throwValidatorLogicError(repositoryName, methodName, 
thisMethodName);
+        }
+
+        if (properties == null)
+        {
+            /*
+             * No properties to evaluate so return
+             */
+            return;
+        }
+
+
+        String  typeDefCategoryName = null;
+        String  typeDefName         = typeDef.getName();
+
+        if (typeDef.getCategory() != null)
+        {
+            typeDefCategoryName = typeDef.getCategory().getTypeName();
+        }
+
+        List<TypeDefAttribute>  typeDefAttributes = 
typeDef.getPropertiesDefinition();
+
+        if (typeDefAttributes == null)
+        {
+            OMRSErrorCode errorCode    = OMRSErrorCode.NO_PROPERTIES_FOR_TYPE;
+            String        errorMessage = errorCode.getErrorMessageId()
+                                       + 
errorCode.getFormattedErrorMessage(typeDefCategoryName,
+                                                                            
typeDefName,
+                                                                            
repositoryName);
+
+            throw new PropertyErrorException(errorCode.getHTTPErrorCode(),
+                                             this.getClass().getName(),
+                                             methodName,
+                                             errorMessage,
+                                             errorCode.getSystemAction(),
+                                             errorCode.getUserAction());
+        }
+
+        /*
+         * Need to step through each of the proposed properties and validate 
that the name and value are
+         * present and they match the typeDef
+         */
+        Iterator    propertyList = properties.getPropertyNames();
+
+        while (propertyList.hasNext())
+        {
+            String   propertyName = propertyList.next().toString();
+
+            if (propertyName == null)
+            {
+                OMRSErrorCode errorCode    = 
OMRSErrorCode.NULL_PROPERTY_NAME_FOR_INSTANCE;
+                String        errorMessage = errorCode.getErrorMessageId()
+                                           + 
errorCode.getFormattedErrorMessage(parameterName,
+                                                                               
 methodName,
+                                                                               
 repositoryName);
+
+                throw new PropertyErrorException(errorCode.getHTTPErrorCode(),
+                                                 this.getClass().getName(),
+                                                 methodName,
+                                                 errorMessage,
+                                                 errorCode.getSystemAction(),
+                                                 errorCode.getUserAction());
+            }
+
+            AttributeTypeDefCategory  propertyDefinitionType = null;
+            boolean                   recognizedProperty = false;
+
+            for (TypeDefAttribute typeDefAttribute : typeDefAttributes)
+            {
+                if (typeDefAttribute != null)
+  

<TRUNCATED>

Reply via email to