http://git-wip-us.apache.org/repos/asf/atlas/blob/b0ecc36a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveHelper.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveHelper.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveHelper.java deleted file mode 100644 index 7994b08..0000000 --- a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveHelper.java +++ /dev/null @@ -1,619 +0,0 @@ -/* - * 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; - -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; - -/** - * OMRSArchiveHelper provides utility methods to help in the construction of open metadata archives. - */ -public class OMRSArchiveHelper -{ - private OMRSArchiveBuilder archiveBuilder; - private String archiveGUID; - private String originatorName; - private Date creationDate; - private long versionNumber; - private String versionName; - - - /** - * Constructor receives information about the archive being built. - * - * @param archiveBuilder - archive builder with the archive contents in it. - * @param archiveGUID - unique identifier for the archive. - * @param originatorName - name of the person / process creating the archive. - * @param creationDate - date that the archive was first built. - * @param versionNumber - version number of the archive. - * @param versionName - version name for the archive. - */ - public OMRSArchiveHelper(OMRSArchiveBuilder archiveBuilder, - String archiveGUID, - String originatorName, - Date creationDate, - long versionNumber, - String versionName) - { - this.archiveBuilder = archiveBuilder; - this.archiveGUID = archiveGUID; - this.originatorName = originatorName; - this.creationDate = creationDate; - this.versionNumber = versionNumber; - this.versionName = versionName; - } - - - /** - * 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 - */ - public PrimitiveDef getPrimitiveDef(PrimitiveDefCategory primitiveDefCategory) - { - PrimitiveDef primitiveDef = new PrimitiveDef(primitiveDefCategory); - - primitiveDef.setGUID(primitiveDefCategory.getGUID()); - primitiveDef.setName(primitiveDefCategory.getName()); - primitiveDef.setVersion(versionNumber); - primitiveDef.setVersionName(versionName); - - return primitiveDef; - } - - - /** - * Create a CollectionDef for an Array. 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 description - short default description of the enum type - * @param descriptionGUID - guid of the glossary term describing this collection type - * @param arrayType - type of the array. - * @return Filled out CollectionDef - */ - public CollectionDef getArrayCollectionDef(String guid, - String description, - String descriptionGUID, - PrimitiveDefCategory arrayType) - { - CollectionDef collectionDef = new CollectionDef(CollectionDefCategory.OM_COLLECTION_ARRAY); - - collectionDef.setGUID(guid); - collectionDef.setName("array<" + arrayType.getName() + ">"); - collectionDef.setDescription(description); - collectionDef.setDescriptionGUID(descriptionGUID); - - ArrayList<PrimitiveDefCategory> argumentList = new ArrayList<>(); - argumentList.add(arrayType); - collectionDef.setArgumentTypes(argumentList); - - return collectionDef; - } - - - /** - * Create a CollectionDef for a map. 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 description - short default description of the enum type - * @param descriptionGUID - guid of the glossary term describing this collection type - * @param propertyKeyType - type of the key for the map. - * @param propertyValueType - type of map value. - * @return Filled out CollectionDef - */ - public CollectionDef getMapCollectionDef(String guid, - String description, - String descriptionGUID, - PrimitiveDefCategory propertyKeyType, - PrimitiveDefCategory propertyValueType) - { - CollectionDef collectionDef = new CollectionDef(CollectionDefCategory.OM_COLLECTION_MAP); - - collectionDef.setGUID(guid); - collectionDef.setName("map<" + propertyKeyType.getName() + "," + propertyValueType.getName() + ">"); - collectionDef.setDescription(description); - collectionDef.setDescriptionGUID(descriptionGUID); - collectionDef.setVersion(versionNumber); - collectionDef.setVersionName(versionName); - - ArrayList<PrimitiveDefCategory> argumentList = new ArrayList<>(); - argumentList.add(propertyKeyType); - argumentList.add(propertyValueType); - collectionDef.setArgumentTypes(argumentList); - - 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 - */ - public 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); - enumDef.setVersion(versionNumber); - enumDef.setVersionName(versionName); - - 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 - */ - public 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 - */ - public 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 TypeDefAttribute of type string - */ - public TypeDefAttribute getStringTypeDefAttribute(String attributeName, - String attributeDescription, - String attributeDescriptionGUID) - { - TypeDefAttribute attribute = new TypeDefAttribute(); - - attribute.setAttributeName(attributeName); - attribute.setAttributeDescription(attributeDescription); - attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); - attribute.setAttributeType(this.archiveBuilder.getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_STRING.getName())); - 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; - } - - - /** - * Return an attribute with the supplied name and description that is of type int. 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 TypeDefAttribute of type string - */ - public TypeDefAttribute getIntTypeDefAttribute(String attributeName, - String attributeDescription, - String attributeDescriptionGUID) - { - TypeDefAttribute attribute = new TypeDefAttribute(); - - attribute.setAttributeName(attributeName); - attribute.setAttributeDescription(attributeDescription); - attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); - attribute.setAttributeType(this.archiveBuilder.getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_INT.getName())); - 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; - } - - - /** - * Return an attribute with the supplied name and description that is of type date. 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 TypeDefAttribute of type string - */ - public TypeDefAttribute getDateTypeDefAttribute(String attributeName, - String attributeDescription, - String attributeDescriptionGUID) - { - TypeDefAttribute attribute = new TypeDefAttribute(); - - attribute.setAttributeName(attributeName); - attribute.setAttributeDescription(attributeDescription); - attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); - attribute.setAttributeType(this.archiveBuilder.getPrimitiveDef(PrimitiveDefCategory.OM_PRIMITIVE_TYPE_DATE.getName())); - 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; - } - - - /** - * Return an attribute with the supplied name and description that is an array of strings. - * 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 TypeDefAttribute of type string - */ - public TypeDefAttribute getArrayStringTypeDefAttribute(String attributeName, - String attributeDescription, - String attributeDescriptionGUID) - { - TypeDefAttribute attribute = new TypeDefAttribute(); - - attribute.setAttributeName(attributeName); - attribute.setAttributeDescription(attributeDescription); - attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); - attribute.setAttributeType(this.archiveBuilder.getCollectionDef("array<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; - } - - - /** - * Return an attribute with the supplied name and description that is of a map from string to 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 TypeDefAttribute of type string - */ - public TypeDefAttribute getMapStringStringTypeDefAttribute(String attributeName, - String attributeDescription, - String attributeDescriptionGUID) - { - TypeDefAttribute attribute = new TypeDefAttribute(); - - attribute.setAttributeName(attributeName); - attribute.setAttributeDescription(attributeDescription); - attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); - attribute.setAttributeType(this.archiveBuilder.getCollectionDef("map<string,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; - } - - - /** - * Return an attribute with the supplied name, type and description. 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 enumTypeName - name of the enum type for this attribute - * @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 TypeDefAttribute of type string - */ - public TypeDefAttribute getEnumTypeDefAttribute(String enumTypeName, - String attributeName, - String attributeDescription, - String attributeDescriptionGUID) - { - TypeDefAttribute attribute = new TypeDefAttribute(); - - attribute.setAttributeName(attributeName); - attribute.setAttributeDescription(attributeDescription); - attribute.setAttributeDescriptionGUID(attributeDescriptionGUID); - attribute.setAttributeType(this.archiveBuilder.getEnumDef(enumTypeName)); - 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. - */ - public 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. - */ - public 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 validEntityDef - which entities can this classification be linked to. - * @param propagatable - can the classification propagate over relationships? - * @return ClassificationDef with no attributes defined. - */ - public ClassificationDef getClassificationDef(String guid, - String name, - TypeDefLink superType, - String description, - String descriptionGUID, - TypeDefLink validEntityDef, - 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. - */ - ArrayList<TypeDefLink> validEntityDefs = new ArrayList<>(); - validEntityDefs.add(validEntityDef); - classificationDef.setValidEntityDefs(validEntityDefs); - classificationDef.setPropagatable(propagatable); - - return classificationDef; - } -}
http://git-wip-us.apache.org/repos/asf/atlas/blob/b0ecc36a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveManager.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveManager.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveManager.java deleted file mode 100644 index c640928..0000000 --- a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveManager.java +++ /dev/null @@ -1,433 +0,0 @@ -/* - * 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; - -import org.apache.atlas.omrs.archivemanager.opentypes.OpenMetadataTypesArchive; -import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchive; -import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchiveInstanceStore; -import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchiveProperties; -import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchiveTypeStore; -import org.apache.atlas.omrs.archivemanager.store.OpenMetadataArchiveStoreConnector; -import org.apache.atlas.omrs.auditlog.OMRSAuditCode; -import org.apache.atlas.omrs.auditlog.OMRSAuditLog; -import org.apache.atlas.omrs.auditlog.OMRSAuditingComponent; -import org.apache.atlas.omrs.eventmanagement.events.OMRSInstanceEventProcessor; -import org.apache.atlas.omrs.eventmanagement.events.OMRSTypeDefEventProcessor; -import org.apache.atlas.omrs.localrepository.repositorycontentmanager.OMRSRepositoryContentManager; -import org.apache.atlas.omrs.metadatacollection.properties.instances.EntityDetail; -import org.apache.atlas.omrs.metadatacollection.properties.instances.Relationship; -import org.apache.atlas.omrs.metadatacollection.properties.typedefs.AttributeTypeDef; -import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDef; -import org.apache.atlas.omrs.metadatacollection.properties.typedefs.TypeDefPatch; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * OMRSArchiveManager manages the loading and unloading of open metadata archives from the local OMRS repository. - * An open metadata archive provides pre-built definitions for types and metadata instances. - */ -public class OMRSArchiveManager -{ - private List<OpenMetadataArchiveStoreConnector> openMetadataArchiveStores = new ArrayList<>(); - private OMRSRepositoryContentManager repositoryContentManager = null; - private OMRSInstanceEventProcessor localInstanceEventProcessor = null; - - - /* - * The audit log provides a verifiable record of the open metadata archives that have been loaded into - * the open metadata repository. The Logger is for standard debug. - */ - private static final OMRSAuditLog auditLog = new OMRSAuditLog(OMRSAuditingComponent.ARCHIVE_MANAGER); - - /** - * Constructor to save the initial list of open metadata archives from the server startup configuration. - * These will be processed as soon as the event processors are supplied from the local repository. - * - * @param startUpOpenMetadataArchives - initial list of open metadata archives provided in startup configuration - */ - public OMRSArchiveManager(List<OpenMetadataArchiveStoreConnector> startUpOpenMetadataArchives) - { - if (startUpOpenMetadataArchives != null) - { - this.openMetadataArchiveStores = new ArrayList<>(startUpOpenMetadataArchives); - } - } - - - /** - * Close down any open archives. - */ - public void close() - { - for (OpenMetadataArchiveStoreConnector archiveStore : openMetadataArchiveStores) - { - if (archiveStore != null) - { - try - { - archiveStore.disconnect(); - } - catch (Throwable error) - { - /* - * nothing to do - */ - } - } - } - } - - - /** - * The local repository is accessed through its inbound event processors. A server will always have - * the local Content Manager and TypeDef Processor but the local Instance Processor is only available - * if the local server has a metadata repository defined. - * - * @param repositoryContentManager - typeDef processor for the local repository - * @param instanceProcessor - instance processor for the local repository - */ - public void setLocalRepository(OMRSRepositoryContentManager repositoryContentManager, - OMRSInstanceEventProcessor instanceProcessor) - { - this.repositoryContentManager = repositoryContentManager; - this.localInstanceEventProcessor = instanceProcessor; - - /* - * The repository content manager is seeded with all of the open metadata types. - */ - processOpenMetadataTypes(); - - /* - * Once the open metadata types are in place, the archive stores are processed. - */ - for (OpenMetadataArchiveStoreConnector archiveStore : this.openMetadataArchiveStores) - { - processOpenMetadataArchiveStore(archiveStore, repositoryContentManager, instanceProcessor); - } - } - - - /** - * Add a new archive to the local repository. If there are problems processing the archive, an exception is thrown. - * This method allows archives to be loaded into a running server. - * - * @param archiveStore - new open metadata archive to process - */ - public void addOpenMetadataArchive(OpenMetadataArchiveStoreConnector archiveStore) - { - this.processOpenMetadataArchiveStore(archiveStore, repositoryContentManager, localInstanceEventProcessor); - this.openMetadataArchiveStores.add(archiveStore); - } - - - /** - * Unpack and process the contents an open metadata archive store, passing its contents to the local - * repository (if it exists). - */ - private void processOpenMetadataTypes() - { - OpenMetadataTypesArchive openMetadataTypesArchive = new OpenMetadataTypesArchive(); - OpenMetadataArchive openMetadataTypes = openMetadataTypesArchive.getOpenMetadataArchive(); - - repositoryContentManager.setOpenMetadataTypesOriginGUID(openMetadataTypesArchive.getArchiveGUID()); - processOpenMetadataArchive(openMetadataTypes, repositoryContentManager, localInstanceEventProcessor); - } - - /** - * Unpack and process the contents an open metadata archive store, passing its contents to the local - * repository (if it exists). - * - * @param archiveStore - open metadata archive store to process - */ - private void processOpenMetadataArchiveStore(OpenMetadataArchiveStoreConnector archiveStore, - OMRSTypeDefEventProcessor typeDefProcessor, - OMRSInstanceEventProcessor instanceProcessor) - { - if (archiveStore != null) - { - /* - * Each archive store has a header, a section of new type definitions (TypeDefs) and a section of - * metadata instances. - */ - OpenMetadataArchive archiveContent = archiveStore.getArchiveContents(); - - if (archiveContent == null) - { - final String actionDescription = "Process Open Metadata Archive"; - - OMRSAuditCode auditCode = OMRSAuditCode.EMPTY_ARCHIVE; - auditLog.logRecord(actionDescription, - auditCode.getLogMessageId(), - auditCode.getSeverity(), - auditCode.getFormattedLogMessage(), - null, - auditCode.getSystemAction(), - auditCode.getUserAction()); - } - else - { - processOpenMetadataArchive(archiveContent, typeDefProcessor, instanceProcessor); - } - } - } - - - /** - * Step through the content of an open metadata archive, passing its contents to the local repository (if it - * exists). - * - * @param archiveContent - open metadata archive to process - */ - private void processOpenMetadataArchive(OpenMetadataArchive archiveContent, - OMRSTypeDefEventProcessor typeDefProcessor, - OMRSInstanceEventProcessor instanceProcessor) - { - OMRSAuditCode auditCode; - final String actionDescription = "Process Open Metadata Archive"; - - OpenMetadataArchiveProperties archiveProperties = archiveContent.getArchiveProperties(); - - if (archiveProperties != null) - { - auditCode = OMRSAuditCode.PROCESSING_ARCHIVE; - auditLog.logRecord(actionDescription, - auditCode.getLogMessageId(), - auditCode.getSeverity(), - auditCode.getFormattedLogMessage(archiveProperties.getArchiveName()), - null, - auditCode.getSystemAction(), - auditCode.getUserAction()); - - - OpenMetadataArchiveTypeStore archiveTypeStore = archiveContent.getArchiveTypeStore(); - OpenMetadataArchiveInstanceStore archiveInstanceStore = archiveContent.getArchiveInstanceStore(); - - int typeCount = 0; - int instanceCount = 0; - - - if (archiveTypeStore != null) - { - typeCount = this.processTypeDefStore(archiveProperties, archiveTypeStore, typeDefProcessor); - } - - if (archiveInstanceStore != null) - { - instanceCount = this.processInstanceStore(archiveProperties, archiveInstanceStore, instanceProcessor); - } - - auditCode = OMRSAuditCode.COMPLETED_ARCHIVE; - auditLog.logRecord(actionDescription, - auditCode.getLogMessageId(), - auditCode.getSeverity(), - auditCode.getFormattedLogMessage(Integer.toString(typeCount), - Integer.toString(instanceCount), - archiveProperties.getArchiveName()), - null, - auditCode.getSystemAction(), - auditCode.getUserAction()); - } - else - { - auditCode = OMRSAuditCode.NULL_PROPERTIES_IN_ARCHIVE; - auditLog.logRecord(actionDescription, - auditCode.getLogMessageId(), - auditCode.getSeverity(), - auditCode.getFormattedLogMessage(), - null, - auditCode.getSystemAction(), - auditCode.getUserAction()); - } - } - - - /** - * The TypeStore is in two parts. First there is an optional list of patches to existing TypeDefs. - * Then an optional list of new TypeDefs. It is possible that this archive has been processed before - * and so any duplicates detected are ignored. However, conflicting TypeDefs are detected. - * Any problems found in applying the archive contents are recorded on the audit log. - * - * @param archiveProperties - properties of the archive used for logging - * @param archiveTypeStore - TypeStore from the archive - * @return type count - */ - private int processTypeDefStore(OpenMetadataArchiveProperties archiveProperties, - OpenMetadataArchiveTypeStore archiveTypeStore, - OMRSTypeDefEventProcessor typeDefProcessor) - { - List<TypeDefPatch> typeDefPatches = archiveTypeStore.getTypeDefPatches(); - List<AttributeTypeDef> newAttributeTypeDefs = archiveTypeStore.getAttributeTypeDefs(); - List<TypeDef> newTypeDefs = archiveTypeStore.getNewTypeDefs(); - int typeCount = 0; - - if (typeDefProcessor != null) - { - String sourceName = OMRSAuditingComponent.ARCHIVE_MANAGER.getComponentName(); - String originatorMetadataCollectionId = archiveProperties.getArchiveGUID(); - String originatorServerName = archiveProperties.getArchiveName(); - String originatorServerType = null; - String originatorName = archiveProperties.getOriginatorName(); - String originatorOrganizationName = archiveProperties.getOriginatorOrganization(); - - /* - * Originator name can not be null since it is used as the userId for calls to the repository - */ - if (originatorName == null) - { - originatorName = sourceName; - } - - if (archiveProperties.getArchiveType() != null) - { - originatorServerType = archiveProperties.getArchiveType().getArchiveTypeName(); - } - - if (typeDefPatches != null) - { - for (TypeDefPatch typeDefPatch : typeDefPatches) - { - if (typeDefPatch != null) - { - typeDefProcessor.processUpdatedTypeDefEvent(originatorName, - originatorMetadataCollectionId, - originatorServerName, - originatorServerType, - originatorOrganizationName, - typeDefPatch); - typeCount ++; - } - } - } - - if (newAttributeTypeDefs != null) - { - for (AttributeTypeDef newAttributeTypeDef : newAttributeTypeDefs) - { - if (newAttributeTypeDef != null) - { - typeDefProcessor.processNewAttributeTypeDefEvent(originatorName, - originatorMetadataCollectionId, - originatorServerName, - originatorServerType, - originatorOrganizationName, - newAttributeTypeDef); - - typeCount ++; - } - } - } - - if (newTypeDefs != null) - { - for (TypeDef newTypeDef : newTypeDefs) - { - if (newTypeDef != null) - { - typeDefProcessor.processNewTypeDefEvent(originatorName, - originatorMetadataCollectionId, - originatorServerName, - originatorServerType, - originatorOrganizationName, - newTypeDef); - typeCount ++; - } - } - } - } - - return typeCount; - } - - - /** - * The InstanceStore is in two parts - an optional list of entities followed by an optional list - * of relationships. It is possible that this archive has been processed before - * and so any duplicates detected are ignored. However, conflicting instances are detected. - * Any problems found in applying the archive contents are recorded on the audit log. - * - * @param archiveProperties - properties describing the archive used in logging - * @param archiveInstanceStore - the instance store to process - * @param instanceProcessor - the processor to add the instances to the local repository. It may be null - * if there is no local repository configured for this server. - * @return instance count - */ - private int processInstanceStore(OpenMetadataArchiveProperties archiveProperties, - OpenMetadataArchiveInstanceStore archiveInstanceStore, - OMRSInstanceEventProcessor instanceProcessor) - { - List<EntityDetail> entities = archiveInstanceStore.getEntities(); - List<Relationship> relationships = archiveInstanceStore.getRelationships(); - int instanceCount = 0; - - if (instanceProcessor != null) - { - String sourceName = OMRSAuditingComponent.ARCHIVE_MANAGER.getComponentName(); - String originatorMetadataCollectionId = archiveProperties.getArchiveGUID(); - String originatorServerName = archiveProperties.getArchiveName(); - String originatorServerType = null; - String originatorOrganizationName = archiveProperties.getOriginatorName(); - - if (archiveProperties.getArchiveType() != null) - { - originatorServerType = archiveProperties.getArchiveType().getArchiveTypeName(); - } - - if (entities != null) - { - for (EntityDetail entity : entities) - { - if (entity != null) - { - instanceProcessor.processNewEntityEvent(sourceName, - originatorMetadataCollectionId, - originatorServerName, - originatorServerType, - originatorOrganizationName, - entity); - - instanceCount ++; - } - } - } - - - if (relationships != null) - { - for (Relationship relationship : relationships) - { - if (relationship != null) - { - instanceProcessor.processNewRelationshipEvent(sourceName, - originatorMetadataCollectionId, - originatorServerName, - originatorServerType, - originatorOrganizationName, - relationship); - - instanceCount ++; - } - } - } - } - - return instanceCount; - } -} http://git-wip-us.apache.org/repos/asf/atlas/blob/b0ecc36a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveWriter.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveWriter.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveWriter.java deleted file mode 100644 index ea9fbfe..0000000 --- a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveWriter.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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; - - -import org.apache.atlas.ocf.Connector; -import org.apache.atlas.ocf.ConnectorBroker; -import org.apache.atlas.ocf.properties.Connection; -import org.apache.atlas.omrs.admin.OMRSConfigurationFactory; -import org.apache.atlas.omrs.archivemanager.opentypes.OpenMetadataTypesArchive; -import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchive; -import org.apache.atlas.omrs.archivemanager.store.OpenMetadataArchiveStore; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * OMRSArchiveWriter creates physical open metadata archive files for the supplied open metadata archives - * encoded in OMRS. - */ -public class OMRSArchiveWriter -{ - private static final Logger log = LoggerFactory.getLogger(OMRSArchiveWriter.class); - - /** - * Default constructor - */ - public OMRSArchiveWriter() - { - } - - - /** - * Opens up an open metadata archive store connector. - * - * @param connection - connection information for the open metadata archive. - * @return open metadata archive store connector - */ - private OpenMetadataArchiveStore getOpenMetadataArchive(Connection connection) - { - OpenMetadataArchiveStore openMetadataArchiveStore = null; - - try - { - ConnectorBroker connectorBroker = new ConnectorBroker(); - Connector connector = connectorBroker.getConnector(connection); - - openMetadataArchiveStore = (OpenMetadataArchiveStore)connector; - - log.debug("Created connector to open metadata archive store"); - - } - catch (Throwable error) - { - log.error("Unexpected exception occurred: " + error.getMessage()); - log.error("Exception: " + error.toString()); - } - - return openMetadataArchiveStore; - } - - - /** - * Generates and writes out an open metadata archive containing all of the open metadata types. - */ - private void writeOpenMetadataArchiveTypes() - { - OMRSConfigurationFactory configurationFactory = new OMRSConfigurationFactory(); - Connection connection = configurationFactory.getOpenMetadataTypesConnection(); - - OpenMetadataArchiveStore openMetadataArchiveStore = this.getOpenMetadataArchive(connection); - OpenMetadataTypesArchive openMetadataTypesArchive = new OpenMetadataTypesArchive(); - OpenMetadataArchive openMetadataArchive = openMetadataTypesArchive.getOpenMetadataArchive(); - - openMetadataArchiveStore.setArchiveContents(openMetadataArchive); - } - - - /** - * Main program to control the archive writer. - * - * @param args - ignored arguments - */ - public static void main(String[] args) - { - OMRSArchiveWriter archiveWriter = new OMRSArchiveWriter(); - - archiveWriter.writeOpenMetadataArchiveTypes(); - - /* - * Calls to create other standard archives will go here. - */ - } -}