http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSMetadataCollection.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSMetadataCollection.java b/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSMetadataCollection.java new file mode 100644 index 0000000..12a6ea5 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/enterprise/repositoryconnector/EnterpriseOMRSMetadataCollection.java @@ -0,0 +1,3995 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <p/> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p/> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.atlas.omrs.enterprise.repositoryconnector; + +import org.apache.atlas.omrs.ffdc.OMRSErrorCode; +import org.apache.atlas.omrs.ffdc.exception.*; +import org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryValidator; +import org.apache.atlas.omrs.metadatacollection.OMRSMetadataCollection; +import org.apache.atlas.omrs.metadatacollection.properties.MatchCriteria; +import org.apache.atlas.omrs.metadatacollection.properties.SequencingOrder; +import org.apache.atlas.omrs.metadatacollection.properties.instances.*; +import org.apache.atlas.omrs.metadatacollection.properties.typedefs.*; + +import java.util.ArrayList; +import java.util.Date; + + +/** + * EnterpriseOMRSMetadataCollection executes the calls to the open metadata repositories registered + * with the OMRSEnterpriseConnectorManager. The effect is a federated view over these open metadata + * repositories. + * <p> + * EnterpriseOMRSMetadataCollection is part of an EnterpriseOMRSRepositoryConnector. The EnterpriseOMRSRepositoryConnector + * holds the list of OMRS Connectors, one for each of the metadata repositories. This list may change + * over time as metadata repositories register and deregister with the connected cohorts. + * The EnterpriseOMRSRepositoryConnector is responsible for keeping the list of connectors up-to-date through + * contact with the OMRSEnterpriseConnectorManager. + * </p> + * <p> + * When a request is made to the EnterpriseOMRSMetadataCollection, it calls the EnterpriseOMRSRepositoryConnector + * to request the appropriate list of metadata collection for the request. Then the EnterpriseOMRSConnector + * calls the appropriate remote connectors. + * </p> + * <p> + * The first OMRS Connector in the list is the OMRS Repository Connector for the "local" repository. + * The local repository is favoured when new metadata is to be created, unless the type of metadata + * is not supported by the local repository. In which case, the EnterpriseOMRSMetadataCollection searches its + * list looking for the first metadata repository that supports the metadata type and stores it there. + * </p> + * <p> + * Updates and deletes are routed to the owning (home) repository. Searches are made to each repository in turn + * and the duplicates are removed. Queries are directed to the local repository and then the remote repositories + * until all of the requested metadata is assembled. + * </p> + */ +public class EnterpriseOMRSMetadataCollection extends OMRSMetadataCollection +{ + + /* + * Private variables for a metadata collection instance + */ + private EnterpriseOMRSRepositoryConnector parentConnector; + private String enterpriseMetadataCollectionId; + private String enterpriseMetadataCollectionName; + + + private final OMRSRepositoryValidator repositoryValidator = new OMRSRepositoryValidator(); + + + /** + * Default constructor. + * + * @param parentConnector - connector that this metadata collection supports. The connector has the information + * to call the metadata repository. + * @param enterpriseMetadataCollectionId - unique identifier for the metadata collection. + * @param enterpriseMetadataCollectionName - name of the metadata collection - used for messages. + */ + public EnterpriseOMRSMetadataCollection(EnterpriseOMRSRepositoryConnector parentConnector, + String enterpriseMetadataCollectionId, + String enterpriseMetadataCollectionName) + { + /* + * The metadata collection Id is the unique Id for the metadata collection. It is managed by the super class. + */ + super(enterpriseMetadataCollectionId); + this.enterpriseMetadataCollectionId = enterpriseMetadataCollectionId; + this.enterpriseMetadataCollectionName = enterpriseMetadataCollectionName; + + /* + * Save parentConnector since this has the connection information and access to the metadata about the + * metadata cohort. + */ + this.parentConnector = parentConnector; + } + + + /* ============================== + * Group 2: Working with typedefs + */ + + /** + * Returns the list of different types of metadata organized into two groups. The first are the + * attribute type definitions (AttributeTypeDefs). These provide types for properties in full + * type definitions. Full type definitions (TypeDefs) describe types for entities, relationships + * and classifications. + * + * @param userId - unique identifier for requesting user. + * @return TypeDefs - List of different categories of TypeDefs. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public TypeDefGallery getAllTypes(String userId) throws RepositoryErrorException, + UserNotAuthorizedException + { + final String methodName = "getTypeDefs()"; + + /* + * The list of metadata collections are retrieved for each request to ensure that any changes in + * the shape of the cohort are reflected immediately. + */ + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Ready to process the request. Search results need to come from all members of the cohort. + * They need to be combined and then duplicates removed to create the final list of results. + * Some repositories may produce exceptions. These exceptions are saved and may be returned if + * there are no results from any repository. + */ + ArrayList<TypeDef> combinedTypeDefResults = new ArrayList<>(); + ArrayList<AttributeTypeDef> combinedAttributeTypeDefResults = new ArrayList<>(); + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections extracting the typedefs from each repository. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection == null) + { + /* + * A problem in the set up of the metadata collection list. Repository connectors implemented + * with no metadata collection are tested for in the OMRSEnterpriseConnectorManager so something + * else has gone wrong. + */ + OMRSErrorCode errorCode = OMRSErrorCode.NULL_ENTERPRISE_METADATA_COLLECTION; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Process the retrieved metadata collection + */ + try + { + TypeDefGallery results = metadataCollection.getAllTypes(userId); + + /* + * Step through the list of returned TypeDefs and consolidate. + */ + if (results != null) + { + ArrayList<TypeDef> typeDefResults = results.getTypeDefs(); + ArrayList<AttributeTypeDef> attributeResults = results.getAttributeTypeDefs(); + + if (typeDefResults != null) + { + combinedTypeDefResults.addAll(typeDefResults); + } + + if (attributeResults != null) + { + combinedAttributeTypeDefResults.addAll(attributeResults); + } + } + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + + int resultCount = (combinedTypeDefResults.size() + combinedAttributeTypeDefResults.size()); + + /* + * Return any results, or exception if nothing is found. + */ + if (resultCount > 0) + { + TypeDefGallery combinedResults = new TypeDefGallery(); + + combinedResults.setAttributeTypeDefs(combinedAttributeTypeDefResults); + combinedResults.setTypeDefs(combinedTypeDefResults); + + if (repositoryValidator.validateEnterpriseTypeDefs(enterpriseMetadataCollectionName, + combinedTypeDefResults)) + { + return combinedResults; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.CONFLICTING_ENTERPRISE_TYPEDEFS; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + else + { + /* + * A system with no defined TypeDefs is unbelievable. Certainly not very useful :) + * This probably means that exceptions were thrown. Re-throw any cached exceptions + * or, if no exceptions occurred then throw repository error because something is wrong. + */ + if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.NO_TYPEDEFS_DEFINED; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + } + + + /** + * Returns a list of type definitions that have the specified name. Type names should be unique. This + * method allows wildcard character to be included in the name. These are * (asterisk) for an + * arbitrary string of characters and ampersand for an arbitrary character. + * + * @param userId - unique identifier for requesting user. + * @param name - name of the TypeDefs to return (including wildcard characters). + * @return TypeDefs list. + * @throws InvalidParameterException - the name of the TypeDef is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public TypeDefGallery findTypesByName(String userId, + String name) throws InvalidParameterException, + RepositoryErrorException, + UserNotAuthorizedException + { + final String methodName = "findTypeDefsByName()"; + + /* + * Validate that there is a name supplied. + */ + if (name == null) + { + /* + * No Name supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_TYPEDEF_NAME; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * The list of metadata collections are retrieved for each request to ensure that any changes in + * the shape of the cohort are reflected immediately. + */ + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Ready to process the request. Search results need to come from all members of the cohort. + * They need to be combined and then duplicates removed to create the final list of results. + * Some repositories may produce exceptions. These exceptions are saved and may be returned if + * there are no results from any repository. + */ + ArrayList<TypeDef> combinedTypeDefResults = new ArrayList<>(); + ArrayList<AttributeTypeDef> combinedAttributeTypeDefResults = new ArrayList<>(); + InvalidParameterException invalidParameterException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections extracting the typedefs from each repository. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection == null) + { + /* + * A problem in the set up of the metadata collection list. Repository connectors implemented + * with no metadata collection are tested for in the OMRSEnterpriseConnectorManager so something + * else has gone wrong. + */ + OMRSErrorCode errorCode = OMRSErrorCode.NULL_ENTERPRISE_METADATA_COLLECTION; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Process the retrieved metadata collection + */ + try + { + TypeDefGallery results = metadataCollection.findTypesByName(userId, name); + String metadataCollectionId = metadataCollection.getMetadataCollectionId(); + + /* + * Combine the results from the metadata collection with those elements previously retrieved. + */ + if (results != null) + { + ArrayList<TypeDef> typeDefResults = results.getTypeDefs(); + ArrayList<AttributeTypeDef> attributeResults = results.getAttributeTypeDefs(); + + if (typeDefResults != null) + { + combinedTypeDefResults.addAll(typeDefResults); + } + + if (attributeResults != null) + { + combinedAttributeTypeDefResults.addAll(attributeResults); + } + } + } + catch (InvalidParameterException error) + { + invalidParameterException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + + int resultCount = (combinedTypeDefResults.size() + combinedAttributeTypeDefResults.size()); + + /* + * Return any results, or exception if nothing is found. + */ + if (resultCount > 0) + { + TypeDefGallery combinedResults = new TypeDefGallery(); + + combinedResults.setAttributeTypeDefs(combinedAttributeTypeDefResults); + combinedResults.setTypeDefs(combinedTypeDefResults); + + if (repositoryValidator.validateEnterpriseTypeDefs(enterpriseMetadataCollectionName, + combinedTypeDefResults)) + { + return combinedResults; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.CONFLICTING_ENTERPRISE_TYPEDEFS; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + else + { + if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (invalidParameterException != null) + { + throw invalidParameterException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + return null; + } + } + } + + + /** + * Returns all of the TypeDefs for a specific category. + * + * @param userId - unique identifier for requesting user. + * @param typeDefCategory - enum value for the category of TypeDef to return. + * @return TypeDefs list. + * @throws InvalidParameterException - the TypeDefCategory is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public ArrayList<TypeDef> findTypeDefsByCategory(String userId, + TypeDefCategory typeDefCategory) throws InvalidParameterException, + RepositoryErrorException, + UserNotAuthorizedException + { + final String methodName = "findTypeDefsByCategory()"; + + if (typeDefCategory == null) + { + /* + * No category supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_TYPEDEF_CATEGORY; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * The list of metadata collections are retrieved for each request to ensure that any changes in + * the shape of the cohort are reflected immediately. + */ + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Ready to process the request. Search results need to come from all members of the cohort. + * They need to be combined and then duplicates removed to create the final list of results. + * Some repositories may produce exceptions. These exceptions are saved and may be returned if + * there are no results from any repository. + */ + ArrayList<TypeDef> combinedResults = new ArrayList<>(); + InvalidParameterException invalidParameterException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections extracting the typedefs from each repository. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection == null) + { + /* + * A problem in the set up of the metadata collection list. Repository connectors implemented + * with no metadata collection are tested for in the OMRSEnterpriseConnectorManager so something + * else has gone wrong. + */ + OMRSErrorCode errorCode = OMRSErrorCode.NULL_ENTERPRISE_METADATA_COLLECTION; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Process the retrieved metadata collection + */ + try + { + ArrayList<TypeDef> results = metadataCollection.findTypeDefsByCategory(userId, typeDefCategory); + String metadataCollectionId = metadataCollection.getMetadataCollectionId(); + + /* + * Step through the list of returned TypeDefs and remove duplicates. + */ + if (results != null) + { + for (TypeDef returnedTypeDef : results) + { + combinedResults = this.addUniqueTypeDef(combinedResults, + returnedTypeDef, + metadataCollectionId); + } + } + } + catch (InvalidParameterException error) + { + invalidParameterException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + + /* + * Return any results, or null if nothing is found. + */ + if (combinedResults.size() > 0) + { + if (repositoryValidator.validateEnterpriseTypeDefs(enterpriseMetadataCollectionName, combinedResults)) + { + return combinedResults; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.CONFLICTING_ENTERPRISE_TYPEDEFS; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + else + { + if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (invalidParameterException != null) + { + throw invalidParameterException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + return null; + } + } + } + + + /** + * Returns all of the AttributeTypeDefs for a specific category. + * + * @param userId - unique identifier for requesting user. + * @param category - enum value for the category of an AttributeTypeDef to return. + * @return TypeDefs list. + * @throws InvalidParameterException - the TypeDefCategory is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public ArrayList<AttributeTypeDef> findAttributeTypeDefsByCategory(String userId, + AttributeTypeDefCategory category) throws InvalidParameterException, + RepositoryErrorException, + UserNotAuthorizedException + { + return null; + } + + + /** + * Return the TypeDefs that have the properties matching the supplied match criteria. + * + * @param userId - unique identifier for requesting user. + * @param matchCriteria - TypeDefProperties - a list of property names and values. + * @return TypeDefs list. + * @throws InvalidParameterException - the matchCriteria is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public ArrayList<TypeDef> findTypeDefsByProperty(String userId, + TypeDefProperties matchCriteria) throws InvalidParameterException, + RepositoryErrorException, + UserNotAuthorizedException + { + final String methodName = "findTypeDefsByProperty()"; + + if (matchCriteria == null) + { + /* + * No match criteria supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_MATCH_CRITERIA; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * The list of metadata collections are retrieved for each request to ensure that any changes in + * the shape of the cohort are reflected immediately. + */ + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Ready to process the request. Search results need to come from all members of the cohort. + * They need to be combined and then duplicates removed to create the final list of results. + * Some repositories may produce exceptions. These exceptions are saved and may be returned if + * there are no results from any repository. + */ + ArrayList<TypeDef> combinedResults = new ArrayList<>(); + InvalidParameterException invalidParameterException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections extracting the typedefs from each repository. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection == null) + { + /* + * A problem in the set up of the metadata collection list. Repository connectors implemented + * with no metadata collection are tested for in the OMRSEnterpriseConnectorManager so something + * else has gone wrong. + */ + OMRSErrorCode errorCode = OMRSErrorCode.NULL_ENTERPRISE_METADATA_COLLECTION; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Process the retrieved metadata collection + */ + try + { + ArrayList<TypeDef> results = metadataCollection.findTypeDefsByProperty(userId, matchCriteria); + String metadataCollectionId = metadataCollection.getMetadataCollectionId(); + + /* + * Step through the list of returned TypeDefs and remove duplicates. + */ + if (results != null) + { + for (TypeDef returnedTypeDef : results) + { + combinedResults = this.addUniqueTypeDef(combinedResults, + returnedTypeDef, + metadataCollectionId); + } + } + } + catch (InvalidParameterException error) + { + invalidParameterException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + + /* + * Return any results, or null if nothing is found. + */ + if (combinedResults.size() > 0) + { + if (repositoryValidator.validateEnterpriseTypeDefs(enterpriseMetadataCollectionName, combinedResults)) + { + return combinedResults; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.CONFLICTING_ENTERPRISE_TYPEDEFS; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + else + { + if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (invalidParameterException != null) + { + throw invalidParameterException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + return null; + } + } + } + + + /** + * Return the types that are linked to the elements from the specified standard. + * + * @param userId - unique identifier for requesting user. + * @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. + * @return TypeDefs list - each entry in the list contains a typedef. This is is a structure + * describing the TypeDef's category and properties. + * @throws InvalidParameterException - all attributes of the external Id are null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public TypeDefGallery findTypesByExternalID(String userId, + String standard, + String organization, + String identifier) throws InvalidParameterException, + RepositoryErrorException, + UserNotAuthorizedException + { + final String methodName = "findTypeDefsByExternalID()"; + + if ((standard == null) && (organization == null) && (identifier == null)) + { + /* + * No external Id properties supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_EXTERNAL_ID; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * The list of metadata collections are retrieved for each request to ensure that any changes in + * the shape of the cohort are reflected immediately. + */ + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Ready to process the request. Search results need to come from all members of the cohort. + * They need to be combined and then duplicates removed to create the final list of results. + * Some repositories may produce exceptions. These exceptions are saved and may be returned if + * there are no results from any repository. + */ + ArrayList<TypeDef> combinedTypeDefResults = new ArrayList<>(); + ArrayList<AttributeTypeDef> combinedAttributeTypeDefResults = new ArrayList<>(); + InvalidParameterException invalidParameterException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections extracting the typedefs from each repository. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection == null) + { + /* + * A problem in the set up of the metadata collection list. Repository connectors implemented + * with no metadata collection are tested for in the OMRSEnterpriseConnectorManager so something + * else has gone wrong. + */ + OMRSErrorCode errorCode = OMRSErrorCode.NULL_ENTERPRISE_METADATA_COLLECTION; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Process the retrieved metadata collection + */ + try + { + TypeDefGallery results = metadataCollection.findTypesByExternalID(userId, + standard, + organization, + identifier); + String metadataCollectionId = metadataCollection.getMetadataCollectionId(); + + /* + * Combine the results from the metadata collection with those elements previously retrieved. + */ + if (results != null) + { + ArrayList<TypeDef> typeDefResults = results.getTypeDefs(); + ArrayList<AttributeTypeDef> attributeResults = results.getAttributeTypeDefs(); + + if (typeDefResults != null) + { + combinedTypeDefResults.addAll(typeDefResults); + } + + if (attributeResults != null) + { + combinedAttributeTypeDefResults.addAll(attributeResults); + } + } + } + catch (InvalidParameterException error) + { + invalidParameterException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + + int resultCount = (combinedTypeDefResults.size() + combinedAttributeTypeDefResults.size()); + + /* + * Return any results, or exception if nothing is found. + */ + if (resultCount > 0) + { + TypeDefGallery combinedResults = new TypeDefGallery(); + + combinedResults.setAttributeTypeDefs(combinedAttributeTypeDefResults); + combinedResults.setTypeDefs(combinedTypeDefResults); + + if (repositoryValidator.validateEnterpriseTypeDefs(enterpriseMetadataCollectionName, + combinedTypeDefResults)) + { + return combinedResults; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.CONFLICTING_ENTERPRISE_TYPEDEFS; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + else + { + if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (invalidParameterException != null) + { + throw invalidParameterException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + return null; + } + } + } + + + /** + * Return the TypeDefs that match the search criteria. + * + * @param userId - unique identifier for requesting user. + * @param searchCriteria - String - search criteria. + * @return TypeDefs list - each entry in the list contains a typedef. This is is a structure + * describing the TypeDef's category and properties. + * @throws InvalidParameterException - the searchCriteria is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public ArrayList<TypeDef> searchForTypeDefs(String userId, + String searchCriteria) throws InvalidParameterException, + RepositoryErrorException, + UserNotAuthorizedException + { + final String methodName = "searchForTypeDefs()"; + + if (searchCriteria == null) + { + /* + * No search criteria supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_SEARCH_CRITERIA; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * The list of metadata collections are retrieved for each request to ensure that any changes in + * the shape of the cohort are reflected immediately. + */ + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Ready to process the request. Search results need to come from all members of the cohort. + * They need to be combined and then duplicates removed to create the final list of results. + * Some repositories may produce exceptions. These exceptions are saved and may be returned if + * there are no results from any repository. + */ + ArrayList<TypeDef> combinedResults = new ArrayList<>(); + InvalidParameterException invalidParameterException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections extracting the typedefs from each repository. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection == null) + { + /* + * A problem in the set up of the metadata collection list. Repository connectors implemented + * with no metadata collection are tested for in the OMRSEnterpriseConnectorManager so something + * else has gone wrong. + */ + OMRSErrorCode errorCode = OMRSErrorCode.NULL_ENTERPRISE_METADATA_COLLECTION; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /* + * Process the retrieved metadata collection + */ + try + { + ArrayList<TypeDef> results = metadataCollection.searchForTypeDefs(userId, searchCriteria); + String metadataCollectionId = metadataCollection.getMetadataCollectionId(); + + /* + * Step through the list of returned TypeDefs and remove duplicates. + */ + if (results != null) + { + for (TypeDef returnedTypeDef : results) + { + combinedResults = this.addUniqueTypeDef(combinedResults, + returnedTypeDef, + metadataCollectionId); + } + } + } + catch (InvalidParameterException error) + { + invalidParameterException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + + /* + * Return any results, or null if nothing is found. + */ + if (combinedResults.size() > 0) + { + if (repositoryValidator.validateEnterpriseTypeDefs(enterpriseMetadataCollectionName, combinedResults)) + { + return combinedResults; + } + else + { + OMRSErrorCode errorCode = OMRSErrorCode.CONFLICTING_ENTERPRISE_TYPEDEFS; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + else + { + if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (invalidParameterException != null) + { + throw invalidParameterException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + return null; + } + } + } + + + /** + * Return the TypeDef identified by the GUID. + * + * @param userId - unique identifier for requesting user. + * @param guid - String unique Id of the TypeDef + * @return TypeDef structure describing its category and properties. + * @throws InvalidParameterException - the guid is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - The requested TypeDef is not known in the metadata collection. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public TypeDef getTypeDefByGUID(String userId, + String guid) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotKnownException, + UserNotAuthorizedException + { + final String methodName = "getTypeDefByGUID()"; + + if (guid == null) + { + /* + * No guid supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_GUID; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + TypeDefNotKnownException typeDefNotKnownException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections requesting the typedef from each repository. + * The first TypeDef retrieved is returned to the caller. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection != null) + { + try + { + TypeDef retrievedTypeDef = getTypeDefByGUID(userId, guid); + + if (retrievedTypeDef != null) + { + return retrievedTypeDef; + } + } + catch (TypeDefNotKnownException error) + { + typeDefNotKnownException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + } + + /* + * The TypeDef has not been found. Process the exceptions. + */ + if (typeDefNotKnownException != null) + { + throw typeDefNotKnownException; + } + else if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + /* + * All of the repositories have returned a null TypeDef so default to TypeDefNotKnownException. + */ + OMRSErrorCode errorCode = OMRSErrorCode.TYPEDEF_NOT_KNOWN; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new TypeDefNotKnownException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + } + + + /** + * Return the AttributeTypeDef identified by the GUID. + * + * @param userId - unique identifier for requesting user. + * @param guid - String unique id of the TypeDef + * @return TypeDef structure describing its category and properties. + * @throws InvalidParameterException - the guid is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - The requested TypeDef is not known in the metadata collection. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public AttributeTypeDef getAttributeTypeDefByGUID(String userId, + String guid) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotKnownException, + UserNotAuthorizedException + { + return null; + } + + + /** + * Return the TypeDef identified by the unique name. + * + * @param userId - unique identifier for requesting user. + * @param name - String name of the TypeDef. + * @return TypeDef structure describing its category and properties. + * @throws InvalidParameterException - the name is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - the requested TypeDef is not found in the metadata collection. + */ + public TypeDef getTypeDefByName(String userId, + String name) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotKnownException, + UserNotAuthorizedException + { + final String methodName = "getTypeDefByName()"; + + if (name == null) + { + /* + * No name supplied so can not perform the search + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_TYPEDEF_NAME; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new InvalidParameterException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + ArrayList<OMRSMetadataCollection> metadataCollections = parentConnector.getMetadataCollections(); + + if (metadataCollections == null) + { + /* + * No repositories available + */ + OMRSErrorCode errorCode = OMRSErrorCode.NO_REPOSITORIES; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + TypeDefNotKnownException typeDefNotKnownException = null; + UserNotAuthorizedException userNotAuthorizedException = null; + RepositoryErrorException repositoryErrorException = null; + RuntimeException anotherException = null; + + /* + * Loop through the metadata collections requesting the typedef from each repository. + * The first TypeDef retrieved is returned to the caller. + */ + for (OMRSMetadataCollection metadataCollection : metadataCollections) + { + if (metadataCollection != null) + { + try + { + TypeDef retrievedTypeDef = getTypeDefByName(userId, name); + + if (retrievedTypeDef != null) + { + return retrievedTypeDef; + } + } + catch (TypeDefNotKnownException error) + { + typeDefNotKnownException = error; + } + catch (UserNotAuthorizedException error) + { + userNotAuthorizedException = error; + } + catch (RepositoryErrorException error) + { + repositoryErrorException = error; + } + catch (RuntimeException error) + { + anotherException = error; + } + } + } + + /* + * The TypeDef has not been found. Process the exceptions. + */ + if (typeDefNotKnownException != null) + { + throw typeDefNotKnownException; + } + else if (userNotAuthorizedException != null) + { + throw userNotAuthorizedException; + } + else if (repositoryErrorException != null) + { + throw repositoryErrorException; + } + else if (anotherException != null) + { + throw anotherException; + } + else + { + /* + * All of the repositories have returned a null TypeDef so default to TypeDefNotKnownException. + */ + OMRSErrorCode errorCode = OMRSErrorCode.TYPEDEF_NOT_KNOWN; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new TypeDefNotKnownException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + + + /** + * Return the AttributeTypeDef identified by the unique name. + * + * @param userId - unique identifier for requesting user. + * @param name - String name of the TypeDef. + * @return TypeDef structure describing its category and properties. + * @throws InvalidParameterException - the name is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - the requested TypeDef is not found in the metadata collection. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public AttributeTypeDef getAttributeTypeDefByName(String userId, + String name) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotKnownException, + UserNotAuthorizedException + { + return null; + } + + + /** + * Create a collection of related types. + * + * @param userId - unique identifier for requesting user. + * @param newTypes - TypeDefGallery structure describing the new AttributeTypeDefs and TypeDefs. + * @throws InvalidParameterException - the new TypeDef is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotSupportedException - the repository is not able to support this TypeDef. + * @throws TypeDefKnownException - the TypeDef is already stored in the repository. + * @throws TypeDefConflictException - the new TypeDef conflicts with an existing TypeDef. + * @throws InvalidTypeDefException - the new TypeDef has invalid contents. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public void addTypeDefGallery(String userId, + TypeDefGallery newTypes) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotSupportedException, + TypeDefKnownException, + TypeDefConflictException, + InvalidTypeDefException, + UserNotAuthorizedException + { + + } + + + /** + * Create a definition of a new TypeDef. This new TypeDef is pushed to each repository that will accept it. + * An exception is passed to the caller if the TypeDef is invalid, or if none of the repositories accept it. + * + * @param userId - unique identifier for requesting user. + * @param newTypeDef - TypeDef structure describing the new TypeDef. + * @throws InvalidParameterException - the new TypeDef is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotSupportedException - the repository is not able to support this TypeDef. + * @throws TypeDefKnownException - the TypeDef is already stored in the repository. + * @throws TypeDefConflictException - the new TypeDef conflicts with an existing TypeDef. + * @throws InvalidTypeDefException - the new TypeDef has invalid contents. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public void addTypeDef(String userId, + TypeDef newTypeDef) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotSupportedException, + TypeDefKnownException, + TypeDefConflictException, + InvalidTypeDefException, + UserNotAuthorizedException + { + final String methodName = "addTypeDef()"; + + OMRSErrorCode errorCode = OMRSErrorCode.ENTERPRISE_NOT_SUPPORTED; + + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(methodName); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + /** + * Create a definition of a new AttributeTypeDef. + * + * @param userId - unique identifier for requesting user. + * @param newAttributeTypeDef - TypeDef structure describing the new TypeDef. + * @throws InvalidParameterException - the new TypeDef is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotSupportedException - the repository is not able to support this TypeDef. + * @throws TypeDefKnownException - the TypeDef is already stored in the repository. + * @throws TypeDefConflictException - the new TypeDef conflicts with an existing TypeDef. + * @throws InvalidTypeDefException - the new TypeDef has invalid contents. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public void addAttributeTypeDef(String userId, + AttributeTypeDef newAttributeTypeDef) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotSupportedException, + TypeDefKnownException, + TypeDefConflictException, + InvalidTypeDefException, + UserNotAuthorizedException + { + final String methodName = "addAttributeTypeDef()"; + + OMRSErrorCode errorCode = OMRSErrorCode.ENTERPRISE_NOT_SUPPORTED; + + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(methodName); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + + /** + * Verify that a definition of a TypeDef is either new - or matches the definition already stored. + * + * @param userId - unique identifier for requesting user. + * @param typeDef - TypeDef structure describing the TypeDef to test. + * @return boolean - true means the TypeDef matches the local definition - false means the TypeDef is not known. + * @throws InvalidParameterException - the TypeDef is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotSupportedException - the repository is not able to support this TypeDef. + * @throws TypeDefConflictException - the new TypeDef conflicts with an existing TypeDef. + * @throws InvalidTypeDefException - the new TypeDef has invalid contents. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public boolean verifyTypeDef(String userId, + TypeDef typeDef) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotSupportedException, + TypeDefConflictException, + InvalidTypeDefException, + UserNotAuthorizedException + { + final String methodName = "verifyTypeDef()"; + + OMRSErrorCode errorCode = OMRSErrorCode.ENTERPRISE_NOT_SUPPORTED; + + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(methodName); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + + /** + * Verify that a definition of an AttributeTypeDef is either new - or matches the definition already stored. + * + * @param userId - unique identifier for requesting user. + * @param attributeTypeDef - TypeDef structure describing the TypeDef to test. + * @return boolean - true means the TypeDef matches the local definition - false means the TypeDef is not known. + * @throws InvalidParameterException - the TypeDef is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotSupportedException - the repository is not able to support this TypeDef. + * @throws TypeDefConflictException - the new TypeDef conflicts with an existing TypeDef. + * @throws InvalidTypeDefException - the new TypeDef has invalid contents. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public boolean verifyAttributeTypeDef(String userId, + AttributeTypeDef attributeTypeDef) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotSupportedException, + TypeDefConflictException, + InvalidTypeDefException, + UserNotAuthorizedException + { + final String methodName = "verifyAttributeTypeDef()"; + + OMRSErrorCode errorCode = OMRSErrorCode.ENTERPRISE_NOT_SUPPORTED; + + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(methodName); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + + /** + * Update one or more properties of the TypeDef. The TypeDefPatch controls what types of updates + * are safe to make to the TypeDef. + * + * @param userId - unique identifier for requesting user. + * @param typeDefPatch - TypeDef patch describing change to TypeDef. + * @return updated TypeDef + * @throws InvalidParameterException - the TypeDefPatch is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - the requested TypeDef is not found in the metadata collection. + * @throws PatchErrorException - the TypeDef can not be updated because the supplied patch is incompatible + * with the stored TypeDef. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public TypeDef updateTypeDef(String userId, + TypeDefPatch typeDefPatch) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotKnownException, + PatchErrorException, + UserNotAuthorizedException + { + final String methodName = "updateTypeDef()"; + + OMRSErrorCode errorCode = OMRSErrorCode.ENTERPRISE_NOT_SUPPORTED; + + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(methodName); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + + /** + * Delete the TypeDef. This is only possible if the TypeDef has never been used to create instances or any + * instances of this TypeDef have been purged from the metadata collection. + * + * @param userId - unique identifier for requesting user. + * @param obsoleteTypeDefGUID - String unique identifier for the TypeDef. + * @param obsoleteTypeDefName - String unique name for the TypeDef. + * @throws InvalidParameterException - the one of TypeDef identifiers is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - the requested TypeDef is not found in the metadata collection. + * @throws TypeDefInUseException - the TypeDef can not be deleted because there are instances of this type in the + * the metadata collection. These instances need to be purged before the + * TypeDef can be deleted. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public void deleteTypeDef(String userId, + String obsoleteTypeDefGUID, + String obsoleteTypeDefName) throws InvalidParameterException, + RepositoryErrorException, + TypeDefNotKnownException, + TypeDefInUseException, + UserNotAuthorizedException + { + final String methodName = "deleteTypeDef()"; + + OMRSErrorCode errorCode = OMRSErrorCode.ENTERPRISE_NOT_SUPPORTED; + + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(methodName); + + throw new RepositoryErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + + + /** + * Delete an AttributeTypeDef. This is only possible if the AttributeTypeDef has never been used to create + * instances or any instances of this AttributeTypeDef have been purged from the metadata collection. + * + * @param userId - unique identifier for requesting user. + * @param obsoleteTypeDefGUID - String unique identifier for the AttributeTypeDef. + * @param obsoleteTypeDefName - String unique name for the AttributeTypeDef. + * @throws InvalidParameterException - the one of AttributeTypeDef identifiers is null. + * @throws RepositoryErrorException - there is a problem communicating with the metadata repository where + * the metadata collection is stored. + * @throws TypeDefNotKnownException - the requested AttributeTypeDef is not found in the metadata collection. + * @throws TypeDefInUseException - the AttributeTypeDef can not be deleted because there are instances of this type in the + * the metadata collection. These instances need to be purged before the + * AttributeTypeDef can be deleted. + * @throws UserNotAuthorizedException - the userId is not permitted to perform this operation. + */ + public void deleteAttributeTypeDef(String userId, + String obsoleteTypeDefGUID, + String obsoleteTypeDefName) throws InvalidParameterException, +
<TRUNCATED>
