You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by da...@apache.org on 2018/04/06 08:28:15 UTC

[11/31] atlas git commit: ATLAS-2122 OMAG Server Application and OMRS APIs

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>