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>