http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/opentypes/OpenMetadataTypesArchive.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/opentypes/OpenMetadataTypesArchive.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/opentypes/OpenMetadataTypesArchive.java new file mode 100644 index 0000000..b8aa172 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/opentypes/OpenMetadataTypesArchive.java @@ -0,0 +1,5657 @@ +/* + * 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.archivemanager.opentypes; + + +import org.apache.atlas.omrs.archivemanager.OMRSArchiveBuilder; +import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchive; +import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchiveType; +import org.apache.atlas.omrs.ffdc.OMRSErrorCode; +import org.apache.atlas.omrs.ffdc.exception.OMRSLogicErrorException; +import org.apache.atlas.omrs.metadatacollection.properties.instances.InstanceStatus; +import org.apache.atlas.omrs.metadatacollection.properties.typedefs.*; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Map; + +/** + * OpenMetadataTypesArchive builds an open metadata archive containing all of the standard open metadata types. + * These types have hardcoded dates and guids so that however many times this archive is rebuilt, it will + * produce the same content. + * <p> + * Details of the open metadata types are documented on the wiki: + * <a href="https://cwiki.apache.org/confluence/display/ATLAS/Building+out+the+Open+Metadata+Typesystem">Building out the Open Metadata Typesystem</a> + * </p> + * <p> + * There are 8 areas, each covering a different topic area of metadata. The module breaks down the process of creating + * the models into the areas and then the individual models to simplify the maintenance of this class + * </p> + */ +public class OpenMetadataTypesArchive +{ + /* + * This is the header information for the archive. + */ + private static final String archiveGUID = "bce3b0a0-662a-4f87-b8dc-844078a11a6e"; + private static final String archiveName = "Open Metadata Types"; + private static final String archiveDescription = "Standard types for open metadata repositories."; + private static final OpenMetadataArchiveType archiveType = OpenMetadataArchiveType.CONTENT_PACK; + private static final String originatorName = "Apache Atlas (OMRS)"; + private static final Date creationDate = new Date(1516313040008L); + + /* + * Specific values for initializing TypeDefs + */ + private static final long versionNumber = 1L; + private static final String versionName = "1.0"; + + + + private OMRSArchiveBuilder archiveBuilder; + + + /** + * Default constructor sets up the archive builder. This in turn sets up the header for the archive. + */ + public OpenMetadataTypesArchive() + { + OMRSArchiveBuilder newArchiveBuilder = new OMRSArchiveBuilder(archiveGUID, + archiveName, + archiveDescription, + archiveType, + originatorName, + creationDate, + null); + this.archiveBuilder = newArchiveBuilder; + } + + + /** + * Return the unique identifier for this archive. + * + * @return String guid + */ + public String getArchiveGUID() + { + return archiveGUID; + } + + /** + * Returns the open metadata type archive containing all of the standard open metadata types. + * + * @return populated open metadata archive object + */ + public OpenMetadataArchive getOpenMetadataArchive() + { + final String methodName = "getOpenMetadataArchive()"; + + if (this.archiveBuilder != null) + { + /* + * Call each of the methods to systematically add the contents of the archive. + */ + this.addStandardPrimitiveDefs(); + this.addArea0Types(); + this.addArea1Types(); + this.addArea2Types(); + this.addArea3Types(); + this.addArea4Types(); + this.addArea5Types(); + this.addArea6Types(); + this.addArea7Types(); + + /* + * The completed archive is ready to be packaged up and returned + */ + return this.archiveBuilder.getOpenMetadataArchive(); + } + else + { + /* + * This is a logic error since it means the creation of the archive builder threw an exception + * in the constructor and so this object should not be used. + */ + OMRSErrorCode errorCode = OMRSErrorCode.ARCHIVE_UNAVAILABLE; + String errorMessage = errorCode.getErrorMessageId() + errorCode.getFormattedErrorMessage(); + + throw new OMRSLogicErrorException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + } + + + /* + * ======================================== + * Attribute types + */ + + + /** + * Add the standard primitive types to the archive builder. + */ + private void addStandardPrimitiveDefs() + { + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_BOOLEAN)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_BYTE)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_CHAR)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_SHORT)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_INT)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_LONG)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_FLOAT)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_DOUBLE)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_BIGINTEGER)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_BIGDECIMAL)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_STRING)); + this.archiveBuilder.addPrimitiveDef(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_DATE)); + } + + + /** + * Set up an individual primitive definition + * + * @param primitiveDefCategory - category of the primitive def defines the unique + * information about this primitive type. + * @return initialized PrimitiveDef object ready for the archive + */ + private PrimitiveDef getPrimitiveDef(PrimitiveDefCategory primitiveDefCategory) + { + PrimitiveDef primitiveDef = new PrimitiveDef(primitiveDefCategory); + + primitiveDef.setGUID(primitiveDefCategory.getGUID()); + primitiveDef.setName(primitiveDefCategory.getName()); + + return primitiveDef; + } + + + /** + * Create a CollectionDef. A new CollectionDef is required for each combination of primitive types + * used to initialize the collection. Each CollectionDef has its own unique identifier (guid) and + * its name is a combination of the collection type and the primitives use to initialize it. + * + * @param guid - unique identifier for the CollectionDef + * @param name - unique name for the CollectionDef + * @param collectionDefCategory - category of the collection. + * @return Filled out CollectionDef + */ + private CollectionDef getCollectionDef(String guid, + String name, + CollectionDefCategory collectionDefCategory) + { + CollectionDef collectionDef = new CollectionDef(collectionDefCategory); + + collectionDef.setGUID(guid); + collectionDef.setName(name); + + return collectionDef; + } + + + /** + * Create an EnumDef that has no valid values defined. These are added by the caller. + * + * @param guid - unique identifier for the CollectionDef + * @param name - unique name for the CollectionDef + * @param description - short default description of the enum type + * @param descriptionGUID - guid of the glossary term describing this enum type + * @return basic EnumDef without valid values + */ + private EnumDef getEmptyEnumDef(String guid, + String name, + String description, + String descriptionGUID) + { + EnumDef enumDef = new EnumDef(); + + enumDef.setGUID(guid); + enumDef.setName(name); + enumDef.setDescription(description); + enumDef.setDescriptionGUID(descriptionGUID); + enumDef.setDefaultValue(null); + + return enumDef; + } + + + /** + * Create an EnumElementDef that carries one of the valid values for an Enum. + * + * @param ordinal - code number + * @param value - name + * @param description - short description + * @param descriptionGUID - guid of the glossary term describing this enum element + * @return Fully filled out EnumElementDef + */ + private EnumElementDef getEnumElementDef(int ordinal, + String value, + String description, + String descriptionGUID) + { + EnumElementDef enumElementDef = new EnumElementDef(); + + enumElementDef.setOrdinal(ordinal); + enumElementDef.setValue(value); + enumElementDef.setDescription(description); + enumElementDef.setDescriptionGUID(descriptionGUID); + + return enumElementDef; + } + + + /** + * Sets up a default EntityDef. Calling methods can override the default values. This EntityDef + * has no attribute defined. + * + * @param guid - unique identifier for the entity + * @param name - name of the entity + * @param superType - Super type for this entity (null for top-level) + * @param description - short description of the entity + * @param descriptionGUID - guid of the glossary term describing this entity type + * @return Initialized EntityDef + */ + EntityDef getDefaultEntityDef(String guid, + String name, + TypeDefLink superType, + String description, + String descriptionGUID) + { + EntityDef entityDef = new EntityDef(); + + /* + * Set up the parameters supplied by the caller. + */ + entityDef.setGUID(guid); + entityDef.setName(name); + entityDef.setSuperType(superType); + entityDef.setDescription(description); + entityDef.setDescriptionGUID(descriptionGUID); + + /* + * Set up the defaults + */ + entityDef.setOrigin(archiveGUID); + entityDef.setCreatedBy(originatorName); + entityDef.setCreateTime(creationDate); + entityDef.setVersion(versionNumber); + entityDef.setVersionName(versionName); + + /* + * Set default valid instance statuses + */ + ArrayList<InstanceStatus> validInstanceStatusList = new ArrayList<>(); + validInstanceStatusList.add(InstanceStatus.ACTIVE); + validInstanceStatusList.add(InstanceStatus.DELETED); + entityDef.setValidInstanceStatusList(validInstanceStatusList); + + return entityDef; + } + + + /** + * Return an attribute with the supplied name and description that is of type String. It is set up to be optional, + * indexable (useful for searches) but the value does not need to be unique. + * These are the typical values used for most open metadata attribute. + * They can be changed by the caller once the TypeDefAttribute is returned. + * + * @param attributeName - name of the attribute + * @param attributeDescription - short description for the attribute + * @param attributeDescriptionGUID - guid of the glossary term that describes this attribute. + * @return Optional TypeDefAttribute of type string + */ + TypeDefAttribute getStringTypeDefAttribute(String attributeName, + String attributeDescription, + String attributeDescriptionGUID) + { + TypeDefAttribute attribute = new TypeDefAttribute(); + + attribute.setAttributeName(attributeName); + attribute.setAttributeDescription(attributeDescription); + attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); + attribute.setAttributeType(getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_STRING)); + attribute.setAttributeCardinality(AttributeCardinality.AT_MOST_ONE); + attribute.setValuesMinCount(0); + attribute.setValuesMaxCount(1); + attribute.setIndexable(true); + attribute.setUnique(false); + attribute.setDefaultValue(null); + attribute.setExternalStandardMappings(null); + + return attribute; + } + + + /** + * Returns a basic RelationshipDef without any attributes or ends set up. + * The caller is responsible for adding the attributes and ends definition. + * + * @param guid - unique identifier for the relationship + * @param name - name of the relationship + * @param superType - Super type for this relationship (null for top-level) + * @param description - short default description of the relationship + * @param descriptionGUID - guid of the glossary term that describes this relationship + * @param relationshipCategory - is this an association, aggregation or composition? + * @param propagationRule - should classifications propagate over this relationship? + * @return RelationshipDef with no ends defined. + */ + private RelationshipDef getBasicRelationshipDef(String guid, + String name, + TypeDefLink superType, + String description, + String descriptionGUID, + RelationshipCategory relationshipCategory, + ClassificationPropagationRule propagationRule) + { + RelationshipDef relationshipDef = new RelationshipDef(); + + /* + * Set up the parameters supplied by the caller. + */ + relationshipDef.setGUID(guid); + relationshipDef.setName(name); + relationshipDef.setSuperType(superType); + relationshipDef.setDescription(description); + relationshipDef.setDescriptionGUID(descriptionGUID); + + /* + * Set up the defaults + */ + relationshipDef.setOrigin(archiveGUID); + relationshipDef.setCreatedBy(originatorName); + relationshipDef.setCreateTime(creationDate); + relationshipDef.setVersion(versionNumber); + relationshipDef.setVersionName(versionName); + + /* + * Set default valid instance statuses + */ + ArrayList<InstanceStatus> validInstanceStatusList = new ArrayList<>(); + validInstanceStatusList.add(InstanceStatus.ACTIVE); + validInstanceStatusList.add(InstanceStatus.DELETED); + relationshipDef.setValidInstanceStatusList(validInstanceStatusList); + + /* + * Set up the category of relationship + */ + relationshipDef.setRelationshipCategory(relationshipCategory); + + if ((relationshipCategory == RelationshipCategory.AGGREGATION) || + (relationshipCategory == RelationshipCategory.COMPOSITION)) + { + /* + * By convention, end 1 is the container end in the open metadata model. + */ + relationshipDef.setRelationshipContainerEnd(RelationshipContainerEnd.END1); + } + else + { + relationshipDef.setRelationshipContainerEnd(RelationshipContainerEnd.NOT_APPLICABLE); + } + + /* + * Use the supplied propagation rule. + */ + relationshipDef.setPropagationRule(propagationRule); + + return relationshipDef; + } + + + /** + * Returns a RelationshipEndDef object that sets up details of an entity at one end of a relationship. + * + * @param entityType - details of the type of entity connected to this end. + * @param attributeName - name of the attribute that the entity at the other end uses to refer to this entity. + * @param attributeDescription - description of this attribute + * @param attributeDescriptionGUID - unique identifier of the glossary term describing this attribute. + * @param attributeCardinality - cardinality of this end of the relationship. + * @return the definition of one end of a Relationship. + */ + private RelationshipEndDef getRelationshipEndDef(TypeDefLink entityType, + String attributeName, + String attributeDescription, + String attributeDescriptionGUID, + AttributeCardinality attributeCardinality) + { + RelationshipEndDef relationshipEndDef = new RelationshipEndDef(); + + relationshipEndDef.setEntityType(entityType); + relationshipEndDef.setAttributeName(attributeName); + relationshipEndDef.setAttributeDescription(attributeDescription); + relationshipEndDef.setAttributeDescriptionGUID(attributeDescriptionGUID); + relationshipEndDef.setAttributeCardinality(attributeCardinality); + + return relationshipEndDef; + } + + + /** + * Returns a basic ClassificationDef without any attributes. The caller is responsible for adding the + * attribute definitions. + * + * @param guid - unique identifier for the classification + * @param name - name of the classification + * @param superType - Super type for this classification (null for top-level) + * @param description - short description of the classification + * @param descriptionGUID - unique identifier of the glossary term that describes this classification. + * @param validEntityDefs - which entities can this classification be linked to. + * @param propagatable - can the classification propagate over relationships? + * @return ClassificationDef with no attributes defined. + */ + private ClassificationDef getClassificationDef(String guid, + String name, + TypeDefLink superType, + String description, + String descriptionGUID, + ArrayList<TypeDefLink> validEntityDefs, + boolean propagatable) + { + ClassificationDef classificationDef = new ClassificationDef(); + + /* + * Set up the parameters supplied by the caller. + */ + classificationDef.setGUID(guid); + classificationDef.setName(name); + classificationDef.setSuperType(superType); + classificationDef.setDescription(description); + classificationDef.setDescriptionGUID(descriptionGUID); + + /* + * Set up the defaults + */ + classificationDef.setOrigin(archiveGUID); + classificationDef.setCreatedBy(originatorName); + classificationDef.setCreateTime(creationDate); + classificationDef.setVersion(versionNumber); + classificationDef.setVersionName(versionName); + + /* + * Set default valid instance statuses + */ + ArrayList<InstanceStatus> validInstanceStatusList = new ArrayList<>(); + validInstanceStatusList.add(InstanceStatus.ACTIVE); + validInstanceStatusList.add(InstanceStatus.DELETED); + classificationDef.setValidInstanceStatusList(validInstanceStatusList); + + /* + * Set up the supplied validEntityTypes and propagatable flag. + */ + classificationDef.setValidEntityDefs(validEntityDefs); + classificationDef.setPropagatable(propagatable); + + return classificationDef; + } + + + /* + * ======================================== + * AREA 0 - common types and infrastructure + */ + + /** + * Add the list of area 0 types + */ + private void addArea0Types() + { + this.add0010BaseModel(); + this.add0015LinkedMediaTypes(); + this.add0017ExternalIdentifiers(); + this.add0020PropertyFacets(); + this.add0025Locations(); + this.add0030HostsAndPlatforms(); + this.add0035ComplexHosts(); + this.add0040SoftwareServers(); + this.add0045ServersAndAssets(); + this.add0070NetworksAndGateways(); + this.add0090CloudPlatformsAndServices(); + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + /** + * 0010 Base Model defines the core entities that have been inherited from the original Apache Atlas model. + * It defines an initial set of asset types that need to be governed (more assets are defined in Area 2). + */ + private void add0010BaseModel() + { + this.archiveBuilder.addEntityDef(getReferenceableEntity()); + this.archiveBuilder.addEntityDef(getAssetEntity()); + this.archiveBuilder.addEntityDef(getInfrastructureEntity()); + this.archiveBuilder.addEntityDef(getProcessEntity()); + this.archiveBuilder.addEntityDef(getDataSetEntity()); + + this.archiveBuilder.addRelationshipDef(getProcessInputRelationship()); + this.archiveBuilder.addRelationshipDef(getProcessOutputRelationship()); + } + + + /** + * The Referenceable entity is the superclass of all of the governed open metadata entities. It specifies that + * these entities have a unique identifier called "qualifiedName". + * + * @return Referenceable EntityDef + */ + private EntityDef getReferenceableEntity() + { + /* + * Build the Entity + */ + final String guid = "005c7c14-ac84-4136-beed-959401b041f8"; + final String name = "Referenceable"; + final String description = "An open metadata entity that has a unique identifier."; + final String descriptionGUID = null; + + EntityDef entityDef = getDefaultEntityDef(guid, + name, + null, + description, + descriptionGUID); + + /* + * Build the attributes + */ + ArrayList<TypeDefAttribute> properties = new ArrayList<>(); + TypeDefAttribute property; + + final String attributeName = "qualifiedName"; + final String attributeDescription = "Unique identifier for the entity."; + final String attributeDescriptionGUID = null; + + + property = getStringTypeDefAttribute(attributeName, attributeDescription, attributeDescriptionGUID); + property.setUnique(true); + properties.add(property); + + entityDef.setPropertiesDefinition(properties); + + return entityDef; + } + + + /** + * The Asset entity is the root entity for the assets that open metadata and governance is governing. + * + * @return Asset EntityDef + */ + private EntityDef getAssetEntity() + { + /* + * Build the Entity + */ + final String guid = "896d14c2-7522-4f6c-8519-757711943fe6"; + final String name = "Asset"; + final String description = "The description of an asset that needs to be catalogued and governed."; + final String descriptionGUID = null; + final String superTypeName = "Referenceable"; + + EntityDef entityDef = getDefaultEntityDef(guid, + name, + this.archiveBuilder.getEntityDef(superTypeName), + description, + descriptionGUID); + + /* + * Build the attributes + */ + ArrayList<TypeDefAttribute> properties = new ArrayList<>(); + TypeDefAttribute property; + + final String attribute1Name = "name"; + final String attribute1Description = "Display name for the asset."; + final String attribute1DescriptionGUID = null; + final String attribute2Name = "description"; + final String attribute2Description = "Description of the asset."; + final String attribute2DescriptionGUID = null; + final String attribute3Name = "owner"; + final String attribute3Description = "User name of the person or process that owns the asset."; + final String attribute3DescriptionGUID = null; + + + property = getStringTypeDefAttribute(attribute1Name, attribute1Description, attribute1DescriptionGUID); + properties.add(property); + property = getStringTypeDefAttribute(attribute2Name, attribute2Description, attribute2DescriptionGUID); + properties.add(property); + property = getStringTypeDefAttribute(attribute3Name, attribute3Description, attribute3DescriptionGUID); + properties.add(property); + + entityDef.setPropertiesDefinition(properties); + + return entityDef; + } + + + /** + * The Infrastructure entity describes an asset that is physical infrastructure or part of the software + * platform that supports the data and process assets. + * + * @return Infrastructure EntityDef + */ + private EntityDef getInfrastructureEntity() + { + /* + * Build the Entity + */ + final String guid = "c19746ac-b3ec-49ce-af4b-83348fc55e07"; + final String name = "Infrastructure"; + final String description = "Physical infrastructure or software platform."; + final String descriptionGUID = null; + final String superTypeName = "Asset"; + + EntityDef entityDef = getDefaultEntityDef(guid, + name, + this.archiveBuilder.getEntityDef(superTypeName), + description, + descriptionGUID); + + return entityDef; + } + + + /** + * The Process entity describes a well-defined sequence of activities performed by people or software components. + * + * @return Process EntityDef + */ + private EntityDef getProcessEntity() + { + /* + * Build the Entity + */ + final String guid = "d8f33bd7-afa9-4a11-a8c7-07dcec83c050"; + final String name = "Process"; + final String description = "Well-defined sequence of activities performed by people or software components."; + final String descriptionGUID = null; + final String superTypeName = "Asset"; + + EntityDef entityDef = getDefaultEntityDef(guid, + name, + this.archiveBuilder.getEntityDef(superTypeName), + description, + descriptionGUID); + + return entityDef; + } + + + /** + * The DataSet entity describes a collection of related data. + * + * @return DataSet EntityDef + */ + private EntityDef getDataSetEntity() + { + /* + * Build the Entity + */ + final String guid = "1449911c-4f44-4c22-abc0-7540154feefb"; + final String name = "DataSet"; + final String description = "Collection of related data."; + final String descriptionGUID = null; + final String superTypeName = "Asset"; + + EntityDef entityDef = getDefaultEntityDef(guid, + name, + this.archiveBuilder.getEntityDef(superTypeName), + description, + descriptionGUID); + + return entityDef; + } + + + /** + * The ProcessInput relationship describes the data set(s) that are passed into a process. + * + * @return ProcessInput RelationshipDef + */ + private RelationshipDef getProcessInputRelationship() + { + /* + * Build the relationship + */ + final String guid = "9a6583c4-7419-4d5a-a6e5-26b0033fa349"; + final String name = "ProcessInput"; + final String description = "The DataSets passed into a Process."; + final String descriptionGUID = null; + final RelationshipCategory relationshipCategory = RelationshipCategory.AGGREGATION; + final ClassificationPropagationRule classificationPropagationRule = ClassificationPropagationRule.NONE; + + RelationshipDef relationshipDef = getBasicRelationshipDef(guid, + name, + null, + description, + descriptionGUID, + relationshipCategory, + classificationPropagationRule); + + RelationshipEndDef relationshipEndDef; + + /* + * Set up end 1. + */ + final String end1EntityType = "Process"; + final String end1AttributeName = "consumedByProcess"; + final String end1AttributeDescription = "Processes that consume this DataSet"; + final String end1AttributeDescriptionGUID = null; + final AttributeCardinality end1Cardinality = AttributeCardinality.ANY_NUMBER_UNORDERED; + + relationshipEndDef = getRelationshipEndDef(this.archiveBuilder.getEntityDef(end1EntityType), + end1AttributeName, + end1AttributeDescription, + end1AttributeDescriptionGUID, + end1Cardinality); + relationshipDef.setEndDef1(relationshipEndDef); + + + /* + * Set up end 2. + */ + final String end2EntityType = "DataSet"; + final String end2AttributeName = "processInputData"; + final String end2AttributeDescription = "DataSets consumed by this Process"; + final String end2AttributeDescriptionGUID = null; + final AttributeCardinality end2Cardinality = AttributeCardinality.ANY_NUMBER_UNORDERED; + + relationshipEndDef = getRelationshipEndDef(this.archiveBuilder.getEntityDef(end2EntityType), + end2AttributeName, + end2AttributeDescription, + end2AttributeDescriptionGUID, + end2Cardinality); + relationshipDef.setEndDef2(relationshipEndDef); + + + return relationshipDef; + } + + + /** + * The ProcessOutput relationship describes the data set(s) that are produced by a process. + * + * @return ProcessOutput RelationshipDef + */ + private RelationshipDef getProcessOutputRelationship() + { + /* + * Build the relationship + */ + final String guid = "8920eada-9b05-4368-b511-b8506a4bef4b"; + final String name = "ProcessOutput"; + final String description = "The DataSets produced by a Process."; + final String descriptionGUID = null; + final RelationshipCategory relationshipCategory = RelationshipCategory.AGGREGATION; + final ClassificationPropagationRule classificationPropagationRule = ClassificationPropagationRule.NONE; + + RelationshipDef relationshipDef = getBasicRelationshipDef(guid, + name, + null, + description, + descriptionGUID, + relationshipCategory, + classificationPropagationRule); + + RelationshipEndDef relationshipEndDef; + + /* + * Set up end 1. + */ + final String end1EntityType = "Process"; + final String end1AttributeName = "producedByProcess"; + final String end1AttributeDescription = "Processes that produce this DataSet"; + final String end1AttributeDescriptionGUID = null; + final AttributeCardinality end1Cardinality = AttributeCardinality.ANY_NUMBER_UNORDERED; + + relationshipEndDef = getRelationshipEndDef(this.archiveBuilder.getEntityDef(end1EntityType), + end1AttributeName, + end1AttributeDescription, + end1AttributeDescriptionGUID, + end1Cardinality); + relationshipDef.setEndDef1(relationshipEndDef); + + + /* + * Set up end 2. + */ + final String end2EntityType = "DataSet"; + final String end2AttributeName = "processOutputData"; + final String end2AttributeDescription = "DataSets produced by this Process"; + final String end2AttributeDescriptionGUID = null; + final AttributeCardinality end2Cardinality = AttributeCardinality.ANY_NUMBER_UNORDERED; + + relationshipEndDef = getRelationshipEndDef(this.archiveBuilder.getEntityDef(end2EntityType), + end2AttributeName, + end2AttributeDescription, + end2AttributeDescriptionGUID, + end2Cardinality); + relationshipDef.setEndDef2(relationshipEndDef); + + + return relationshipDef; + } + + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0015 Linked Media Types describe different media (like images and documents) that enhance the description + * of an entity. Media entities can be added to any Referenceable entities. + */ + private void add0015LinkedMediaTypes() + { + this.archiveBuilder.addEnumDef(getMediaUsageEnum()); + + this.archiveBuilder.addEntityDef(getExternalReferenceEntity()); + this.archiveBuilder.addEntityDef(getRelatedMediaEntity()); + + this.archiveBuilder.addRelationshipDef(getExternalReferenceLinkRelationship()); + this.archiveBuilder.addRelationshipDef(getMediaReferenceRelationship()); + } + + private EnumDef getMediaUsageEnum() + { + final String guid = "c6861a72-7485-48c9-8040-876f6c342b61"; + final String name = "MediaUsage"; + final String description = "Defines how a related media reference should be used."; + final String descriptionGUID = null; + + EnumDef enumDef = getEmptyEnumDef(guid, name, description, descriptionGUID); + + ArrayList<EnumElementDef> elementDefs = new ArrayList(); + EnumElementDef elementDef; + + final int element1Ordinal = 0; + final String element1Value = "Icon"; + final String element1Description = "Provides a small image to represent the asset in tree views and graphs."; + final String element1DescriptionGUID = null; + + elementDef = getEnumElementDef(element1Ordinal, element1Value, element1Description, element1DescriptionGUID); + elementDefs.add(elementDef); + + final int element2Ordinal = 1; + final String element2Value = "Thumbnail"; + final String element2Description = "Provides a small image about the asset that can be used in lists."; + final String element2DescriptionGUID = null; + + elementDef = getEnumElementDef(element2Ordinal, element2Value, element2Description, element2DescriptionGUID); + elementDefs.add(elementDef); + + final int element3Ordinal = 2; + final String element3Value = "Illustration"; + final String element3Description = "Illustrates how the asset works or what it contains. It is complementary to the asset's description."; + final String element3DescriptionGUID = null; + + elementDef = getEnumElementDef(element3Ordinal, element3Value, element3Description, element3DescriptionGUID); + elementDefs.add(elementDef); + + final int element4Ordinal = 3; + final String element4Value = "Usage Guidance"; + final String element4Description = "Provides guidance to a person on how to use the asset."; + final String element4DescriptionGUID = null; + + elementDef = getEnumElementDef(element4Ordinal, element4Value, element4Description, element4DescriptionGUID); + elementDefs.add(elementDef); + + final int element5Ordinal = 99; + final String element5Value = "Other"; + final String element5Description = "Another usage."; + final String element5DescriptionGUID = null; + + elementDef = getEnumElementDef(element5Ordinal, element5Value, element5Description, element5DescriptionGUID); + elementDefs.add(elementDef); + + enumDef.setElementDefs(elementDefs); + + return enumDef; + } + + private EntityDef getExternalReferenceEntity() + { + final String guid = "af536f20-062b-48ef-9c31-1ddd05b04c56"; + final String name = "ExternalReference"; + final String description = "A link to more information."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private EntityDef getRelatedMediaEntity() + { + final String guid = "747f8b86-fe7c-4c9b-ba75-979e093cc307"; + final String name = "RelatedMedia"; + final String description = "Images, video or sound media."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getExternalReferenceLinkRelationship() + { + final String guid = "7d818a67-ab45-481c-bc28-f6b1caf12f06"; + final String name = "ExternalReferenceLink"; + final String description = "Link to more information."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getMediaReferenceRelationship() + { + final String guid = "1353400f-b0ab-4ab9-ab09-3045dd8a7140"; + final String name = "MediaReference"; + final String description = "Link to related media such as images, videos and audio."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0017 External Identifiers define identifiers used to identify this entity in other systems. + */ + private void add0017ExternalIdentifiers() + { + this.archiveBuilder.addEnumDef(getKeyPatternEnum()); + + this.archiveBuilder.addEntityDef(getExternalIdEntity()); + + this.archiveBuilder.addRelationshipDef(getExternalIdScopeRelationship()); + this.archiveBuilder.addRelationshipDef(getExternalIdLinkRelationship()); + } + + private EnumDef getKeyPatternEnum() + { + final String guid = "8904df8f-1aca-4de8-9abd-1ef2aadba300"; + final String name = "KeyPattern"; + final String description = "Defines the type of identifier used for an asset."; + final String descriptionGUID = null; + + EnumDef enumDef = getEmptyEnumDef(guid, name, description, descriptionGUID); + + ArrayList<EnumElementDef> elementDefs = new ArrayList(); + EnumElementDef elementDef; + + final int element1Ordinal = 0; + final String element1Value = "Local Key"; + final String element1Description = "Unique key allocated and used within the scope of a single system."; + final String element1DescriptionGUID = null; + + elementDef = getEnumElementDef(element1Ordinal, element1Value, element1Description, element1DescriptionGUID); + elementDefs.add(elementDef); + + final int element2Ordinal = 1; + final String element2Value = "Recycled Key"; + final String element2Description = "Key allocated and used within the scope of a single system that is periodically reused for different records."; + final String element2DescriptionGUID = null; + + elementDef = getEnumElementDef(element2Ordinal, element2Value, element2Description, element2DescriptionGUID); + elementDefs.add(elementDef); + + final int element3Ordinal = 2; + final String element3Value = "Natural Key"; + final String element3Description = "Key derived from an attribute of the entity, such as email address, passport number."; + final String element3DescriptionGUID = null; + + elementDef = getEnumElementDef(element3Ordinal, element3Value, element3Description, element3DescriptionGUID); + elementDefs.add(elementDef); + + final int element4Ordinal = 3; + final String element4Value = "Mirror Key"; + final String element4Description = "Key value copied from another system."; + final String element4DescriptionGUID = null; + + elementDef = getEnumElementDef(element4Ordinal, element4Value, element4Description, element4DescriptionGUID); + elementDefs.add(elementDef); + + final int element5Ordinal = 4; + final String element5Value = "Aggregate Key"; + final String element5Description = "Key formed by combining keys from multiple systems."; + final String element5DescriptionGUID = null; + + elementDef = getEnumElementDef(element5Ordinal, element5Value, element5Description, element5DescriptionGUID); + elementDefs.add(elementDef); + + final int element6Ordinal = 5; + final String element6Value = "Caller's Key"; + final String element6Description = "Key from another system can bey used if system name provided."; + final String element6DescriptionGUID = null; + + elementDef = getEnumElementDef(element6Ordinal, element6Value, element6Description, element6DescriptionGUID); + elementDefs.add(elementDef); + + final int element7Ordinal = 6; + final String element7Value = "Stable Key"; + final String element7Description = "Key value will remain active even if records are merged."; + final String element7DescriptionGUID = null; + + elementDef = getEnumElementDef(element7Ordinal, element7Value, element7Description, element7DescriptionGUID); + elementDefs.add(elementDef); + + final int element8Ordinal = 99; + final String element8Value = "Other"; + final String element8Description = "Another key pattern."; + final String element8DescriptionGUID = null; + + elementDef = getEnumElementDef(element8Ordinal, element8Value, element8Description, element8DescriptionGUID); + elementDefs.add(elementDef); + + return enumDef; + } + + private EntityDef getExternalIdEntity() + { + final String guid = "7c8f8c2c-cc48-429e-8a21-a1f1851ccdb0"; + final String name = "ExternalId"; + final String description = "Alternative identifier used in another system."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getExternalIdScopeRelationship() + { + final String guid = "8c5b1415-2d1f-4190-ba6c-1fdd47f03269"; + final String name = "ExternalIdScope"; + final String description = "Places where an external identifier is recognized."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getExternalIdLinkRelationship() + { + final String guid = "28ab0381-c662-4b6d-b787-5d77208de126"; + final String name = "ExternalIdLink"; + final String description = "Link between an external identifier and an asset."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0020 Property Facets define blocks of properties that are unique to a particular vendor or service. + */ + private void add0020PropertyFacets() + { + this.archiveBuilder.addEntityDef(getPropertyFacetEntity()); + + this.archiveBuilder.addRelationshipDef(getReferenceableFacetRelationship()); + } + + private EntityDef getPropertyFacetEntity() + { + final String guid = "6403a704-aad6-41c2-8e08-b9525c006f85"; + final String name = "PropertyFacet"; + final String description = "Additional properties that support a particular vendor or service."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getReferenceableFacetRelationship() + { + final String guid = "58c87647-ada9-4c90-a3c3-a40ace46b1f7"; + final String name = "ReferenceableFacet"; + final String description = "Link between a property facet and the element it relates to."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0025 Locations define entities that describe physical, logical and cyber locations for Assets. + */ + private void add0025Locations() + { + this.archiveBuilder.addEntityDef(getLocationEntity()); + + this.archiveBuilder.addRelationshipDef(getNestedLocationRelationship()); + this.archiveBuilder.addRelationshipDef(getAdjacentLocationRelationship()); + this.archiveBuilder.addRelationshipDef(getAssetLocationRelationship()); + + this.archiveBuilder.addClassificationDef(getMobileAssetClassification()); + this.archiveBuilder.addClassificationDef(getFixedLocationClassification()); + this.archiveBuilder.addClassificationDef(getSecureLocationClassification()); + this.archiveBuilder.addClassificationDef(getCyberLocationClassification()); + } + + private EntityDef getLocationEntity() + { + final String guid = "3e09cb2b-5f15-4fd2-b004-fe0146ad8628"; + final String name = "Location"; + final String description = "A physical place, digital location or area."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getNestedLocationRelationship() + { + final String guid = "f82a96c2-95a3-4223-88c0-9cbf2882b772"; + final String name = "NestedLocation"; + final String description = "Link between two locations to show one is nested inside another."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getAdjacentLocationRelationship() + { + final String guid = "017d0518-fc25-4e5e-985e-491d91e61e17"; + final String name = "AdjacentLocation"; + final String description = "Link between two locations that are next to one another."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getAssetLocationRelationship() + { + final String guid = "bc236b62-d0e6-4c5c-93a1-3a35c3dba7b1"; + final String name = "AssetLocation"; + final String description = "Location of an Asset."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private ClassificationDef getMobileAssetClassification() + { + final String guid = "b25fb90d-8fa2-4aa9-b884-ff0a6351a697"; + final String name = "MobileAsset"; + final String description = "An asset not restricted to a single physical location."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private ClassificationDef getFixedLocationClassification() + { + final String guid = "bc111963-80c7-444f-9715-946c03142dd2"; + final String name = "FixedLocation"; + final String description = "A location linked to a physical place."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private ClassificationDef getSecureLocationClassification() + { + final String guid = "e7b563c0-fcdd-4ba7-a046-eecf5c4638b8"; + final String name = "SecureLocation"; + final String description = "A location that protects the assets in its care."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private ClassificationDef getCyberLocationClassification() + { + final String guid = "f9ec3633-8ac8-480b-aa6d-5e674b9e1b17"; + final String name = "CyberLocation"; + final String description = "A digital location."; + final String descriptionGUID = null; + + // TODO + return null; + } + + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0030 Hosts and Platforms describe the Software and Hardware platforms hosting Assets. + */ + private void add0030HostsAndPlatforms() + { + this.archiveBuilder.addEnumDef(getEndiannessEnum()); + + this.archiveBuilder.addEntityDef(getITInfrastructureEntity()); + this.archiveBuilder.addEntityDef(getHostEntity()); + this.archiveBuilder.addEntityDef(getOperatingPlatformEntity()); + + this.archiveBuilder.addRelationshipDef(getHostLocationRelationship()); + this.archiveBuilder.addRelationshipDef(getHostOperatingPlatformRelationship()); + } + + private EnumDef getEndiannessEnum() + { + final String guid = "e5612c3a-49bd-4148-8f67-cfdf145d5fd8"; + final String name = "Endianness"; + final String description = "Defines the sequential order in which bytes are arranged into larger numerical values when stored in memory or when transmitted over digital links."; + final String descriptionGUID = null; + + EnumDef enumDef = getEmptyEnumDef(guid, name, description, descriptionGUID); + + ArrayList<EnumElementDef> elementDefs = new ArrayList(); + EnumElementDef elementDef; + + final int element1Ordinal = 0; + final String element1Value = "Big Endian"; + final String element1Description = "Bits or bytes order from the big end."; + final String element1DescriptionGUID = null; + + elementDef = getEnumElementDef(element1Ordinal, element1Value, element1Description, element1DescriptionGUID); + elementDefs.add(elementDef); + + final int element2Ordinal = 1; + final String element2Value = "Little Endian"; + final String element2Description = "Bits or bytes ordered from the little end."; + final String element2DescriptionGUID = null; + + elementDef = getEnumElementDef(element2Ordinal, element2Value, element2Description, element2DescriptionGUID); + elementDefs.add(elementDef); + + return enumDef; + } + + private EntityDef getITInfrastructureEntity() + { + final String guid = "151e6dd1-54a0-4b7f-a072-85caa09d1dda"; + final String name = "ITInfrastructure"; + final String description = "Hardware and base software that supports an IT system."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private EntityDef getHostEntity() + { + final String guid = "1abd16db-5b8a-4fd9-aee5-205db3febe99"; + final String name = "Host"; + final String description = "Named IT infrastructure system that supports multiple software servers."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private EntityDef getOperatingPlatformEntity() + { + final String guid = "bd96a997-8d78-42f6-adf7-8239bc98501c"; + final String name = "OperatingPlatform"; + final String description = "Characteristics of the operating system in use within a host."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getHostLocationRelationship() + { + final String guid = "f3066075-9611-4886-9244-32cc6eb07ea9"; + final String name = "HostLocation"; + final String description = "Defines the location of a host."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getHostOperatingPlatformRelationship() + { + final String guid = "b9179df5-6e23-4581-a8b0-2919e6322b12"; + final String name = "HostOperatingPlatform"; + final String description = "Identifies the operating platform for a host."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0035 Complex Hosts describe virtualization and clustering options for Hosts. + */ + private void add0035ComplexHosts() + { + this.archiveBuilder.addEntityDef(getHostClusterEntity()); + this.archiveBuilder.addEntityDef(getVirtualContainerEntity()); + + this.archiveBuilder.addRelationshipDef(getHostClusterMemberRelationship()); + this.archiveBuilder.addRelationshipDef(getDeployedVirtualContainerRelationship()); + } + + private EntityDef getHostClusterEntity() + { + final String guid = "9794f42f-4c9f-4fe6-be84-261f0a7de890"; + final String name = "HostCluster"; + final String description = "A group of hosts operating together to provide a scalable platform."; + final String descriptionGUID = null; + // TODO + return null; + } + + private EntityDef getVirtualContainerEntity() + { + final String guid = "e2393236-100f-4ac0-a5e6-ce4e96c521e7"; + final String name = "VirtualContainer"; + final String description = "Container-based virtual host."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getHostClusterMemberRelationship() + { + final String guid = "1a1c3933-a583-4b0c-9e42-c3691296a8e0"; + final String name = "HostClusterMember"; + final String description = "Identifies a host as a member of a host cluster."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getDeployedVirtualContainerRelationship() + { + final String guid = "4b981d89-e356-4d9b-8f17-b3a8d5a86676"; + final String name = "DeployedVirtualContainer"; + final String description = "Identifies the real host where a virtual container is deployed to."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0040 Software Servers describe the structure of a software server and its capabilities. + */ + private void add0040SoftwareServers() + { + this.archiveBuilder.addEnumDef(getOperationalStatusEnum()); + + this.archiveBuilder.addEntityDef(getSoftwareServerEntity()); + this.archiveBuilder.addEntityDef(getEndpointEntity()); + this.archiveBuilder.addEntityDef(getSoftwareServerCapabilityEntity()); + + this.archiveBuilder.addRelationshipDef(getServerDeploymentRelationship()); + this.archiveBuilder.addRelationshipDef(getServerSupportedCapabilityRelationship()); + this.archiveBuilder.addRelationshipDef(getServerEndpointRelationship()); + } + + + private EnumDef getOperationalStatusEnum() + { + final String guid = "24e1e33e-9250-4a6c-8b07-05c7adec3a1d"; + final String name = "OperationalStatus"; + final String description = "Defines whether a component is operational."; + final String descriptionGUID = null; + + EnumDef enumDef = getEmptyEnumDef(guid, name, description, descriptionGUID); + + ArrayList<EnumElementDef> elementDefs = new ArrayList(); + EnumElementDef elementDef; + + final int element1Ordinal = 0; + final String element1Value = "Disabled"; + final String element1Description = "The component is not operational."; + final String element1DescriptionGUID = null; + + elementDef = getEnumElementDef(element1Ordinal, element1Value, element1Description, element1DescriptionGUID); + elementDefs.add(elementDef); + + final int element2Ordinal = 1; + final String element2Value = "Enabled"; + final String element2Description = "The component is operational."; + final String element2DescriptionGUID = null; + + elementDef = getEnumElementDef(element2Ordinal, element2Value, element2Description, element2DescriptionGUID); + elementDefs.add(elementDef); + + return enumDef; + } + + + private EntityDef getSoftwareServerEntity() + { + final String guid = "aa7c7884-32ce-4991-9c41-9778f1fec6aa"; + final String name = "SoftwareServer"; + final String description = "Software services to support a runtime environment for applications and data stores."; + final String descriptionGUID = null; + + // TODO + return null; + } + + + private EntityDef getEndpointEntity() + { + final String guid = "dbc20663-d705-4ff0-8424-80c262c6b8e7"; + final String name = "Endpoint"; + final String description = "Description of the network address and related information needed to call a software service."; + final String descriptionGUID = null; + + // TODO + return null; + } + + + private EntityDef getSoftwareServerCapabilityEntity() + { + final String guid = "fe30a033-8f86-4d17-8986-e6166fa24177"; + final String name = "SoftwareServerCapability"; + final String description = "A software capability such as an application, that is deployed to a software server."; + final String descriptionGUID = null; + + // TODO + return null; + } + + + private RelationshipDef getServerDeploymentRelationship() + { + final String guid = "d909eb3b-5205-4180-9f63-122a65b30738"; + final String name = "ServerDeployment"; + final String description = "Defines the host that a software server is deployed to."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getServerSupportedCapabilityRelationship() + { + final String guid = "8b7d7da5-0668-4174-a43b-8f8c6c068dd0"; + final String name = "ServerSupportedCapability"; + final String description = "Identifies a software capability that is deployed to a software server."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getServerEndpointRelationship() + { + final String guid = "2b8bfab4-8023-4611-9833-82a0dc95f187"; + final String name = "ServerEndpoint"; + final String description = "Defines an endpoint associated with a server."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0045 Servers and Assets defines the relationships between SoftwareServers and Assets. + */ + private void add0045ServersAndAssets() + { + this.archiveBuilder.addEnumDef(getServerAssetUseTypeEnum()); + + this.archiveBuilder.addRelationshipDef(getServerAssetUseRelationship()); + } + + + private EnumDef getServerAssetUseTypeEnum() + { + final String guid = "09439481-9489-467c-9ae5-178a6e0b6b5a"; + final String name = "ServerAssetUse"; + final String description = "Defines how a server capability may use an asset."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private RelationshipDef getServerAssetUseRelationship() + { + final String guid = "92b75926-8e9a-46c7-9d98-89009f622397"; + final String name = "AssetServerUse"; + final String description = "Defines that a server capability is using an asset."; + final String descriptionGUID = null; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0070 Networks and Gateways provide a very simple network model. + */ + private void add0070NetworksAndGateways() + { + this.archiveBuilder.addEntityDef(getNetworkEntity()); + this.archiveBuilder.addEntityDef(getNetworkGatewayEntity()); + + this.archiveBuilder.addRelationshipDef(getHostNetworkRelationship()); + this.archiveBuilder.addRelationshipDef(getNetworkGatewayLinkRelationship()); + } + + private EntityDef getNetworkEntity() + { + final String guid = "e0430f59-f021-411a-9d81-883e1ff3f6f6"; + final String name = "ITInfrastructure"; + final String description = "Hardware and base software that supports an IT system."; + final String descriptionGUID = null; + + // TODO + return null; + } + + private EntityDef getNetworkGatewayEntity() + { + final String guid = "9bbae94d-e109-4c96-b072-4f97123f04fd"; + + // TODO + return null; + } + + private RelationshipDef getHostNetworkRelationship() + { + final String guid = "f2bd7401-c064-41ac-862c-e5bcdc98fa1e"; + + // TODO + return null; + } + + + private RelationshipDef getNetworkGatewayLinkRelationship() + { + final String guid = "5bece460-1fa6-41fb-a29f-fdaf65ec8ce3"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + /** + * 0090 Cloud Platforms and Services provides classifications for infrastructure to allow cloud platforms + * and services to be identified. + */ + private void add0090CloudPlatformsAndServices() + { + this.archiveBuilder.addClassificationDef(getCloudProviderClassification()); + this.archiveBuilder.addClassificationDef(getCloudPlatformClassification()); + this.archiveBuilder.addClassificationDef(getCloudServiceClassification()); + } + + private ClassificationDef getCloudProviderClassification() + { + final String guid = "a2bfdd08-d0a8-49db-bc97-7f2406281046"; + + // TODO + return null; + } + + private ClassificationDef getCloudPlatformClassification() + { + final String guid = "1b8f8511-e606-4f65-86d3-84891706ad12"; + + // TODO + return null; + } + + private ClassificationDef getCloudServiceClassification() + { + final String guid = "337e7b1a-ad4b-4818-aa3e-0ff3307b2fbe"; + + // TODO + return null; + } + + /* + * ======================================== + * AREA 1 - collaboration + */ + + private void addArea1Types() + { + this.add0110Actors(); + this.add0120Collections(); + this.add0130Projects(); + this.add0135Meetings(); + this.add0140Communities(); + this.add0150Feedback(); + this.add0160Notes(); + } + + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + /** + * 0110 Actors describe the people and their relationships who are using the Assets. + */ + private void add0110Actors() + { + this.archiveBuilder.addEnumDef(getCrowdSourcingRoleEnum()); + this.archiveBuilder.addEnumDef(getContactMethodTypeEnum()); + + this.archiveBuilder.addEntityDef(getActorProfileEntity()); + this.archiveBuilder.addEntityDef(getTeamEntity()); + this.archiveBuilder.addEntityDef(getPersonEntity()); + this.archiveBuilder.addEntityDef(getUserIdentityEntity()); + this.archiveBuilder.addEntityDef(getContactDetailsEntity()); + + this.archiveBuilder.addRelationshipDef(getContactThroughRelationship()); + this.archiveBuilder.addRelationshipDef(getLeadershipRelationship()); + this.archiveBuilder.addRelationshipDef(getPeerRelationship()); + this.archiveBuilder.addRelationshipDef(getProfileIdentityRelationship()); + this.archiveBuilder.addRelationshipDef(getContributorRelationship()); + } + + private EnumDef getCrowdSourcingRoleEnum() + { + final String guid = "0ded50c2-17cc-4ecf-915e-908e66dbb27f"; + + // TODO + return null; + } + + private EnumDef getContactMethodTypeEnum() + { + final String guid = "30e7d8cd-df01-46e8-9247-a24c5650910d"; + + // TODO + return null; + } + + private EntityDef getActorProfileEntity() + { + final String guid = "5a2f38dc-d69d-4a6f-ad26-ac86f118fa35"; + + // TODO + return null; + } + + private EntityDef getTeamEntity() + { + final String guid = "36db26d5-aba2-439b-bc15-d62d373c5db6"; + + // TODO + return null; + } + + private EntityDef getPersonEntity() + { + final String guid = "ac406bf8-e53e-49f1-9088-2af28bbbd285"; + + // TODO + return null; + } + + private EntityDef getUserIdentityEntity() + { + final String guid = "fbe95779-1f3c-4ac6-aa9d-24963ff16282"; + + // TODO + return null; + } + + private EntityDef getContactDetailsEntity() + { + final String guid = "79296df8-645a-4ef7-a011-912d1cdcf75a"; + + // TODO + return null; + } + + private RelationshipDef getContactThroughRelationship() + { + final String guid = "6cb9af43-184e-4dfa-854a-1572bcf0fe75"; + + // TODO + return null; + } + + private RelationshipDef getLeadershipRelationship() + { + final String guid = "5ebc4fb2-b62a-4269-8f18-e9237a2119ca"; + + // TODO + return null; + } + + private RelationshipDef getPeerRelationship() + { + final String guid = "4a316abe-bccd-4d11-ad5a-4bfb4079b80b"; + + // TODO + return null; + } + + private RelationshipDef getProfileIdentityRelationship() + { + final String guid = "01664609-e777-4079-b543-6baffe910ff1"; + + // TODO + return null; + } + + private RelationshipDef getContributorRelationship() + { + final String guid = "4db83564-b200-4956-94a4-c95a5c30e65a"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0120 Collections defines how to group related Referenceables together + */ + private void add0120Collections() + { + this.archiveBuilder.addEnumDef(getOrderByEnum()); + + this.archiveBuilder.addEntityDef(getCollectionEntity()); + + this.archiveBuilder.addRelationshipDef(getCollectionMembershipRelationship()); + this.archiveBuilder.addRelationshipDef(getActorCollectionRelationship()); + + this.archiveBuilder.addClassificationDef(getFolderClassification()); + this.archiveBuilder.addClassificationDef(getSetClassification()); + } + + + private EnumDef getOrderByEnum() + { + final String guid = "1d412439-4272-4a7e-a940-1065f889fc56"; + + // TODO + return null; + } + + private EntityDef getCollectionEntity() + { + final String guid = "347005ba-2b35-4670-b5a7-12c9ebed0cf7"; + + // TODO + return null; + } + + private RelationshipDef getCollectionMembershipRelationship() + { + final String guid = "5cabb76a-e25b-4bb5-8b93-768bbac005af"; + + // TODO + return null; + } + + private RelationshipDef getActorCollectionRelationship() + { + final String guid = "73cf5658-6a73-4ebc-8f4d-44fdfac0b437"; + + // TODO + return null; + } + + private ClassificationDef getFolderClassification() + { + final String guid = "3c0fa687-8a63-4c8e-8bda-ede9c78be6c7"; + + // TODO + return null; + } + + private ClassificationDef getSetClassification() + { + final String guid = "3947f08d-7412-4022-81fc-344a20dfbb26"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0130 Projects describes the structure of a project and related collections. + */ + private void add0130Projects() + { + this.archiveBuilder.addEntityDef(getProjectEntity()); + + this.archiveBuilder.addRelationshipDef(getProjectHierarchyRelationship()); + this.archiveBuilder.addRelationshipDef(getProjectDependencyRelationship()); + this.archiveBuilder.addRelationshipDef(getProjectTeamRelationship()); + this.archiveBuilder.addRelationshipDef(getProjectResourcesRelationship()); + this.archiveBuilder.addRelationshipDef(getProjectScopeRelationship()); + + this.archiveBuilder.addClassificationDef(getTaskClassification()); + this.archiveBuilder.addClassificationDef(getCampaignClassification()); + } + + private EntityDef getProjectEntity() + { + final String guid = "0799569f-0c16-4a1f-86d9-e2e89568f7fd"; + + // TODO + return null; + } + + private RelationshipDef getProjectHierarchyRelationship() + { + final String guid = "8f1134f6-b9fe-4971-bc57-6e1b8b302b55"; + + // TODO + return null; + } + + private RelationshipDef getProjectDependencyRelationship() + { + final String guid = "5b6a56f1-68e2-4e10-85f0-fda47a4263fd"; + + // TODO + return null; + } + + private RelationshipDef getProjectTeamRelationship() + { + final String guid = "746875af-2e41-4d1f-864b-35265df1d5dc"; + + // TODO + return null; + } + + private RelationshipDef getProjectResourcesRelationship() + { + final String guid = "03d25e7b-1c5b-4352-a472-33aa0ddcad4d"; + + // TODO + return null; + } + + private RelationshipDef getProjectScopeRelationship() + { + final String guid = "bc63ac45-b4d0-4fba-b583-92859de77dd8"; + + // TODO + return null; + } + + private ClassificationDef getTaskClassification() + { + final String guid = "2312b668-3670-4845-a140-ef88d5a6db0c"; + + // TODO + return null; + } + + private ClassificationDef getCampaignClassification() + { + final String guid = "41437629-8609-49ef-8930-8c435c912572"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0135 Meetings defines how to record meetings and todos. + */ + private void add0135Meetings() + { + this.archiveBuilder.addEnumDef(getToDoEnum()); + + this.archiveBuilder.addEntityDef(getMeetingEntity()); + this.archiveBuilder.addEntityDef(getToDoEntity()); + + this.archiveBuilder.addRelationshipDef(getMeetingOnReferenceableRelationship()); + this.archiveBuilder.addRelationshipDef(getTodoOnReferenceableRelationship()); + this.archiveBuilder.addRelationshipDef(getProjectMeetingRelationship()); + } + + + private EnumDef getToDoEnum() + { + final String guid = "7197ea39-334d-403f-a70b-d40231092df7"; + + // TODO + return null; + } + + private EntityDef getMeetingEntity() + { + final String guid = "6bf90c79-32f4-47ad-959c-8fff723fe744"; + + // TODO + return null; + } + + private EntityDef getToDoEntity() + { + final String guid = "93dbc58d-c826-4bc2-b36f-195148d46f86"; + + // TODO + return null; + } + + private RelationshipDef getMeetingOnReferenceableRelationship() + { + final String guid = "a05f918e-e7e2-419d-8016-5b37406df63a"; + + // TODO + return null; + } + + private RelationshipDef getTodoOnReferenceableRelationship() + { + final String guid = "aca1277b-bf1c-42f5-9b3b-fbc2c9047325"; + + // TODO + return null; + } + + private RelationshipDef getProjectMeetingRelationship() + { + final String guid = "af2b5fab-8f83-4a2b-b749-1e6219f61f79"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0140 Communities describe communities of people who have similar interests. + */ + private void add0140Communities() + { + this.archiveBuilder.addEnumDef(getCommunityMembershipTypeEnum()); + + this.archiveBuilder.addEntityDef(getCommunityEntity()); + + this.archiveBuilder.addRelationshipDef(getCommunityMembershipRelationship()); + this.archiveBuilder.addRelationshipDef(getCommunityResourcesRelationship()); + } + + + private EnumDef getCommunityMembershipTypeEnum() + { + final String guid = "b0ef45bf-d12b-4b6f-add6-59c14648d750"; + + // TODO + return null; + } + + private EntityDef getCommunityEntity() + { + final String guid = "fbd42379-f6c3-4f08-b6f7-378565cda993"; + + // TODO + return null; + } + + private RelationshipDef getCommunityMembershipRelationship() + { + final String guid = "7c7da1a3-01b3-473e-972e-606eff0cb112"; + + // TODO + return null; + } + + private RelationshipDef getCommunityResourcesRelationship() + { + final String guid = "484d4fb9-4927-4926-8e6d-03e6c9885254"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0150 Feedback provides all of the collaborative feedback and attachments that can be made by the user + * community of the Assets. + */ + private void add0150Feedback() + { + this.archiveBuilder.addEnumDef(getStarRatingEnum()); + this.archiveBuilder.addEnumDef(getCommentTypeEnum()); + + this.archiveBuilder.addEntityDef(getRatingEntity()); + this.archiveBuilder.addEntityDef(getCommentEntity()); + this.archiveBuilder.addEntityDef(getLikeEntity()); + this.archiveBuilder.addEntityDef(getInformalTagEntity()); + this.archiveBuilder.addEntityDef(getPrivateTagEntity()); + + this.archiveBuilder.addRelationshipDef(getAttachRatingRelationship()); + this.archiveBuilder.addRelationshipDef(getAttachedCommentRelationship()); + this.archiveBuilder.addRelationshipDef(getAttachedLikeRelationship()); + this.archiveBuilder.addRelationshipDef(getAcceptedAnswerRelationship()); + this.archiveBuilder.addRelationshipDef(getAttachedTagRelationship()); + } + + + private EnumDef getStarRatingEnum() + { + final String guid = "77fea3ef-6ec1-4223-8408-38567e9d3c93"; + + // TODO + return null; + } + + private EnumDef getCommentTypeEnum() + { + final String guid = "06d5032e-192a-4f77-ade1-a4b97926e867"; + + // TODO + return null; + } + + private EntityDef getRatingEntity() + { + final String guid = "7299d721-d17f-4562-8286-bcd451814478"; + + // TODO + return null; + } + + private EntityDef getCommentEntity() + { + final String guid = "1a226073-9c84-40e4-a422-fbddb9b84278"; + + // TODO + return null; + } + + private EntityDef getLikeEntity() + { + final String guid = "deaa5ca0-47a0-483d-b943-d91c76744e01"; + + // TODO + return null; + } + + private EntityDef getInformalTagEntity() + { + final String guid = "ba846a7b-2955-40bf-952b-2793ceca090a"; + + // TODO + return null; + } + + private EntityDef getPrivateTagEntity() + { + final String guid = "9b3f5443-2475-4522-bfda-8f1f17e9a6c3"; + + // TODO + return null; + } + + private RelationshipDef getAttachRatingRelationship() + { + final String guid = "0aaad9e9-9cc5-4ad8-bc2e-c1099bab6344"; + + // TODO + return null; + } + + private RelationshipDef getAttachedCommentRelationship() + { + final String guid = "0d90501b-bf29-4621-a207-0c8c953bdac9"; + + // TODO + return null; + } + + private RelationshipDef getAttachedLikeRelationship() + { + final String guid = "e2509715-a606-415d-a995-61d00503dad4"; + + // TODO + return null; + } + + private RelationshipDef getAcceptedAnswerRelationship() + { + final String guid = "ecf1a3ca-adc5-4747-82cf-10ec590c5c69"; + + // TODO + return null; + } + + private RelationshipDef getAttachedTagRelationship() + { + final String guid = "4b1641c4-3d1a-4213-86b2-d6968b6c65ab"; + + // TODO + return null; + } + + + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + + /** + * 0160 Notes describes notelogs and notes within them. Notes are kept but the owners/stewards working on the + * Assets. + */ + private void add0160Notes() + { + this.archiveBuilder.addEntityDef(getNoteEntryEntity()); + this.archiveBuilder.addEntityDef(getNoteLogEntity()); + + this.archiveBuilder.addRelationshipDef(getAttachedNoteLogRelationship()); + this.archiveBuilder.addRelationshipDef(getAttachedNoteLogEntryRelationship()); + } + + private EntityDef getNoteEntryEntity() + { + final String guid = "2a84d94c-ac6f-4be1-a72a-07dcec7b1fe3"; + + // TODO + return null; + } + + private EntityDef getNoteLogEntity() + { + final String guid = "646727c7-9ad4-46fa-b660-265489ad96c6"; + + // TODO + return null; + } + + private RelationshipDef getAttachedNoteLogRelationship() + { + final String guid = "4f798c0c-6769-4a2d-b489-d2714d89e0a4"; + + // TODO + return null; + } + + private RelationshipDef getAttachedNoteLogEntryRelationship() + { + final String guid = "38edecc6-f385-4574-8144-524a44e3e712"; + + // TODO + return null; + } + + /* + * ======================================== + * AREA 2 - connectors and assets + */ + + /** + * Area 2 covers the different types of Assets and the Connection information used by the Open Connector Framework + * (OCF). + */ + private void addArea2Types() + { + this.add0201ConnectorsAndConnections(); + this.add0205ConnectionLinkage(); + this.add0210DataStores(); + this.add0211DataSets(); + this.add0212DeployedAPIs(); + this.add0215SoftwareComponents(); + this.add0217AutomatedProcesses(); + this.add0220FilesAndFolders(); + this.add0221DocumentStores(); + this.add0222GraphStores(); + this.add0223EventsAndLogs(); + this.add0224Databases(); + this.add0225MetadataRepositories(); + this.add0227Keystores(); + this.add0230CodeTables(); + this.add0235InfomationView(); + this.add0237InformationSet(); + this.add0239Reports(); + this.add0240ApplicationsAndProcesses(); + this.add0250DataProcessingEngines(); + this.add0260Transformations(); + this.add0265AnalyticsAssets(); + this.add0270IoTAssets(); + this.add0280ModelAssets(); + } + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + /** + * 0201 Connectors and Connections defines the details of the Connection that describes the connector type + * and endpoint for a specific connector instance. + */ + void add0201ConnectorsAndConnections() + { + this.archiveBuilder.addEntityDef(getConnectionEntity()); + this.archiveBuilder.addEntityDef(getConnectorTypeEntity()); + + this.archiveBuilder.addRelationshipDef(getConnectionEndpointRelationship()); + this.archiveBuilder.addRelationshipDef(getConnectionConnectorTypeRelationship()); + } + + private EntityDef getConnectionEntity() + { + final String guid = "114e9f8f-5ff3-4c32-bd37-a7eb42712253"; + + // TODO + return null; + } + + private EntityDef getConnectorTypeEntity() + { + final String guid = "954421eb-33a6-462d-a8ca-b5709a1bd0d4"; + + // TODO + return null; + } + + private RelationshipDef getConnectionEndpointRelationship() + { + final String guid = "887a7132-d6bc-4b92-a483-e80b60c86fb2"; + + // TODO + return null; + } + + private RelationshipDef getConnectionConnectorTypeRelationship() + { + final String guid = "e542cfc1-0b4b-42b9-9921-f0a5a88aaf96"; + + // TODO + return null; + } + + + /* + * ------------------------------------------------------------------------------------------------------- + */ + + /** + * 0205 Connection Links defines the relationship between the connection and an Asset, plus the nesting + * of connections for information virtualization support. + */ + void add0205ConnectionLinkage() + { + this.archiveBuilder.addEntityDef(getVirtualConnectionEntity()); + + this.archiveBuilder.addRelationshipDef(getEmbeddedConnectionRelationship()); + this.archiveBuilder.addRelationshipDef(getConnectionsToAssetRelationship()); + } + + private EntityDef getVirtualConnectionEntity() + { + final String guid = "82f9c664-e59d-484c-a8f3-17088c23a2f3"; + + // TODO + return null; + } + + private RelationshipDef getEmbeddedConnectionRelationship() + { + final String guid = "eb6dfdd2-8c6f-4f0d-a17d-f6ce4799f64f"; + + // TODO + return null; + } + + private RelationshipDef getConnectionsToAssetRelationship() + { + final String guid = "e777d660-8dbe-453e-8b83-903771f054c0"; + + // TODO + return null; + } + + /* + * ------------------------------------------------------------------------------------------------------- + *
<TRUNCATED>
