http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/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 index 437bd7b..c640928 100644 --- a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveManager.java +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveManager.java @@ -18,11 +18,12 @@ package org.apache.atlas.omrs.archivemanager; import org.apache.atlas.omrs.archivemanager.opentypes.OpenMetadataTypesArchive; -import org.apache.atlas.omrs.archivemanager.store.OpenMetadataArchiveStore; 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; @@ -30,12 +31,14 @@ 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. @@ -43,9 +46,9 @@ import java.util.ArrayList; */ public class OMRSArchiveManager { - ArrayList<OpenMetadataArchiveStore> openMetadataArchiveStores = new ArrayList<>(); - OMRSRepositoryContentManager repositoryContentManager = null; - OMRSInstanceEventProcessor localInstanceEventProcessor = null; + private List<OpenMetadataArchiveStoreConnector> openMetadataArchiveStores = new ArrayList<>(); + private OMRSRepositoryContentManager repositoryContentManager = null; + private OMRSInstanceEventProcessor localInstanceEventProcessor = null; /* @@ -53,8 +56,6 @@ public class OMRSArchiveManager * the open metadata repository. The Logger is for standard debug. */ private static final OMRSAuditLog auditLog = new OMRSAuditLog(OMRSAuditingComponent.ARCHIVE_MANAGER); - private static final Logger log = LoggerFactory.getLogger(OMRSArchiveManager.class); - /** * Constructor to save the initial list of open metadata archives from the server startup configuration. @@ -62,14 +63,11 @@ public class OMRSArchiveManager * * @param startUpOpenMetadataArchives - initial list of open metadata archives provided in startup configuration */ - public OMRSArchiveManager(ArrayList<OpenMetadataArchiveStore> startUpOpenMetadataArchives) + public OMRSArchiveManager(List<OpenMetadataArchiveStoreConnector> startUpOpenMetadataArchives) { if (startUpOpenMetadataArchives != null) { - for (OpenMetadataArchiveStore archiveStore : startUpOpenMetadataArchives) - { - this.openMetadataArchiveStores.add(archiveStore); - } + this.openMetadataArchiveStores = new ArrayList<>(startUpOpenMetadataArchives); } } @@ -79,11 +77,20 @@ public class OMRSArchiveManager */ public void close() { - for (OpenMetadataArchiveStore archiveStore : openMetadataArchiveStores) + for (OpenMetadataArchiveStoreConnector archiveStore : openMetadataArchiveStores) { if (archiveStore != null) { - archiveStore.closeArchive(); + try + { + archiveStore.disconnect(); + } + catch (Throwable error) + { + /* + * nothing to do + */ + } } } } @@ -111,7 +118,7 @@ public class OMRSArchiveManager /* * Once the open metadata types are in place, the archive stores are processed. */ - for (OpenMetadataArchiveStore archiveStore : this.openMetadataArchiveStores) + for (OpenMetadataArchiveStoreConnector archiveStore : this.openMetadataArchiveStores) { processOpenMetadataArchiveStore(archiveStore, repositoryContentManager, instanceProcessor); } @@ -124,7 +131,7 @@ public class OMRSArchiveManager * * @param archiveStore - new open metadata archive to process */ - public void addOpenMetadataArchive(OpenMetadataArchiveStore archiveStore) + public void addOpenMetadataArchive(OpenMetadataArchiveStoreConnector archiveStore) { this.processOpenMetadataArchiveStore(archiveStore, repositoryContentManager, localInstanceEventProcessor); this.openMetadataArchiveStores.add(archiveStore); @@ -150,9 +157,9 @@ public class OMRSArchiveManager * * @param archiveStore - open metadata archive store to process */ - private void processOpenMetadataArchiveStore(OpenMetadataArchiveStore archiveStore, - OMRSTypeDefEventProcessor typeDefProcessor, - OMRSInstanceEventProcessor instanceProcessor) + private void processOpenMetadataArchiveStore(OpenMetadataArchiveStoreConnector archiveStore, + OMRSTypeDefEventProcessor typeDefProcessor, + OMRSInstanceEventProcessor instanceProcessor) { if (archiveStore != null) { @@ -164,17 +171,22 @@ public class OMRSArchiveManager if (archiveContent == null) { - // TODO log Error + 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); } } - else - { - // TODO log empty Archive store - } } @@ -188,31 +200,62 @@ public class OMRSArchiveManager OMRSTypeDefEventProcessor typeDefProcessor, OMRSInstanceEventProcessor instanceProcessor) { - OpenMetadataArchiveProperties archiveProperties = archiveContent.getArchiveProperties(); - OpenMetadataArchiveTypeStore archiveTypeStore = archiveContent.getArchiveTypeStore(); - OpenMetadataArchiveInstanceStore archiveInstanceStore = archiveContent.getArchiveInstanceStore(); + OMRSAuditCode auditCode; + final String actionDescription = "Process Open Metadata Archive"; - // TODO Log that the open metadata archive is being processed + 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) { - this.processTypeDefStore(archiveProperties, archiveTypeStore, typeDefProcessor); + typeCount = this.processTypeDefStore(archiveProperties, archiveTypeStore, typeDefProcessor); } if (archiveInstanceStore != null) { - this.processInstanceStore(archiveProperties, archiveInstanceStore, instanceProcessor); + 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 { - // TODO Log that the archive is invalid + auditCode = OMRSAuditCode.NULL_PROPERTIES_IN_ARCHIVE; + auditLog.logRecord(actionDescription, + auditCode.getLogMessageId(), + auditCode.getSeverity(), + auditCode.getFormattedLogMessage(), + null, + auditCode.getSystemAction(), + auditCode.getUserAction()); } - - - // TODO log that processing complete } @@ -224,13 +267,16 @@ public class OMRSArchiveManager * * @param archiveProperties - properties of the archive used for logging * @param archiveTypeStore - TypeStore from the archive + * @return type count */ - private void processTypeDefStore(OpenMetadataArchiveProperties archiveProperties, + private int processTypeDefStore(OpenMetadataArchiveProperties archiveProperties, OpenMetadataArchiveTypeStore archiveTypeStore, OMRSTypeDefEventProcessor typeDefProcessor) { - ArrayList<TypeDefPatch> typeDefPatches = archiveTypeStore.getTypeDefPatches(); - ArrayList<TypeDef> newTypeDefs = archiveTypeStore.getNewTypeDefs(); + List<TypeDefPatch> typeDefPatches = archiveTypeStore.getTypeDefPatches(); + List<AttributeTypeDef> newAttributeTypeDefs = archiveTypeStore.getAttributeTypeDefs(); + List<TypeDef> newTypeDefs = archiveTypeStore.getNewTypeDefs(); + int typeCount = 0; if (typeDefProcessor != null) { @@ -238,7 +284,16 @@ public class OMRSArchiveManager String originatorMetadataCollectionId = archiveProperties.getArchiveGUID(); String originatorServerName = archiveProperties.getArchiveName(); String originatorServerType = null; - String originatorOrganizationName = archiveProperties.getOriginatorName(); + 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) { @@ -251,12 +306,31 @@ public class OMRSArchiveManager { if (typeDefPatch != null) { - typeDefProcessor.processUpdatedTypeDefEvent(sourceName, + 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 ++; } } } @@ -267,16 +341,19 @@ public class OMRSArchiveManager { if (newTypeDef != null) { - typeDefProcessor.processNewTypeDefEvent(sourceName, + typeDefProcessor.processNewTypeDefEvent(originatorName, originatorMetadataCollectionId, originatorServerName, originatorServerType, originatorOrganizationName, newTypeDef); + typeCount ++; } } } } + + return typeCount; } @@ -290,13 +367,15 @@ public class OMRSArchiveManager * @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 void processInstanceStore(OpenMetadataArchiveProperties archiveProperties, + private int processInstanceStore(OpenMetadataArchiveProperties archiveProperties, OpenMetadataArchiveInstanceStore archiveInstanceStore, OMRSInstanceEventProcessor instanceProcessor) { - ArrayList<EntityDetail> entities = archiveInstanceStore.getEntities(); - ArrayList<Relationship> relationships = archiveInstanceStore.getRelationships(); + List<EntityDetail> entities = archiveInstanceStore.getEntities(); + List<Relationship> relationships = archiveInstanceStore.getRelationships(); + int instanceCount = 0; if (instanceProcessor != null) { @@ -323,6 +402,8 @@ public class OMRSArchiveManager originatorServerType, originatorOrganizationName, entity); + + instanceCount ++; } } } @@ -340,9 +421,13 @@ public class OMRSArchiveManager originatorServerType, originatorOrganizationName, relationship); + + instanceCount ++; } } } } + + return instanceCount; } }
http://git-wip-us.apache.org/repos/asf/atlas/blob/a1fd4068/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 new file mode 100644 index 0000000..ea9fbfe --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/OMRSArchiveWriter.java @@ -0,0 +1,108 @@ +/* + * 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. + */ + } +}