http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchive.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchive.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchive.java new file mode 100644 index 0000000..58c5c2a --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchive.java @@ -0,0 +1,116 @@ +/* + * 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.properties; + +/** + * OpenMetadataArchive defines the structure of the properties inside of an open metadata archive. + * There are 3 sections: + * <ul> + * <li> + * ArchiveProperties - provides details of the source and contents of the archive. + * </li> + * <li> + * TypeStore - a list of new TypeDefs and patches to existing TypeDefs. + * </li> + * <li> + * InstanceStore - a list of new metadata instances (Entities and Relationships). + * </li> + * </ul> + */ +public class OpenMetadataArchive +{ + private OpenMetadataArchiveProperties archiveProperties = null; + private OpenMetadataArchiveTypeStore archiveTypeStore = null; + private OpenMetadataArchiveInstanceStore archiveInstanceStore = null; + + + /** + * Default constructor relies on the initialization of variables in their type declaration. + */ + public OpenMetadataArchive() + { + } + + + /** + * Return details of the archive. + * + * @return OpenMetadataArchiveProperties object + */ + public OpenMetadataArchiveProperties getArchiveProperties() + { + return archiveProperties; + } + + + /** + * Set the archive properties for a new archive. + * + * @param archiveProperties - the descriptive properties of the archive + */ + public void setArchiveProperties(OpenMetadataArchiveProperties archiveProperties) + { + this.archiveProperties = archiveProperties; + } + + + /** + * Return the TypeStore for this archive. The TypeStore contains TypeDefs and TypeDef patches. + * + * @return OpenMetadataArchiveTypeStore object + */ + public OpenMetadataArchiveTypeStore getArchiveTypeStore() + { + return archiveTypeStore; + } + + + /** + * Set up the TypeStore for this archive. The TypeStore contains TypeDefs and TypeDef patches. + * + * @param archiveTypeStore - OpenMetadataArchiveTypeStore object + */ + public void setArchiveTypeStore(OpenMetadataArchiveTypeStore archiveTypeStore) + { + this.archiveTypeStore = archiveTypeStore; + } + + + /** + * Return the InstanceStore for this archive. The InstanceStore contains entity and relationship metadata + * instances. + * + * @return OpenMetadataArchiveInstanceStore object + */ + public OpenMetadataArchiveInstanceStore getArchiveInstanceStore() + { + return archiveInstanceStore; + } + + + /** + * Set up the InstanceStore for this archive. The InstanceStore contains entity and relationship metadata + * instances. + * + * @param archiveInstanceStore - OpenMetadataArchiveInstanceStore object + */ + public void setArchiveInstanceStore(OpenMetadataArchiveInstanceStore archiveInstanceStore) + { + this.archiveInstanceStore = archiveInstanceStore; + } +}
http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveInstanceStore.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveInstanceStore.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveInstanceStore.java new file mode 100644 index 0000000..1d9b79b --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveInstanceStore.java @@ -0,0 +1,86 @@ +/* + * 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.properties; + + +import org.apache.atlas.omrs.metadatacollection.properties.instances.EntityDetail; +import org.apache.atlas.omrs.metadatacollection.properties.instances.Relationship; + +import java.util.ArrayList; + +/** + * OpenMetadataArchiveInstanceStore defines the contents of the InstanceStore in an open metadata archive. It + * consists of a list of entities and a list of relationships. + */ +public class OpenMetadataArchiveInstanceStore +{ + private ArrayList<EntityDetail> entities = null; + private ArrayList<Relationship> relationships = null; + + + /** + * Default constructor relying on the initialization of variables in their declaration. + */ + public OpenMetadataArchiveInstanceStore() + { + } + + + /** + * Return the list of entities defined in the open metadata archive. + * + * @return list of entities + */ + public ArrayList<EntityDetail> getEntities() + { + return entities; + } + + + /** + * Set up the list of entities defined in the open metadata archive. + * + * @param entities - list of entities + */ + public void setEntities(ArrayList<EntityDetail> entities) + { + this.entities = entities; + } + + + /** + * Return the list of relationships defined in this open metadata archive. + * + * @return list of relationships + */ + public ArrayList<Relationship> getRelationships() + { + return relationships; + } + + + /** + * Set up the list of relationships defined in this open metadata archive. + * + * @param relationships - list of relationship objects + */ + public void setRelationships(ArrayList<Relationship> relationships) + { + this.relationships = relationships; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveProperties.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveProperties.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveProperties.java new file mode 100644 index 0000000..3ebb17a --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveProperties.java @@ -0,0 +1,222 @@ +/* + * 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.properties; + + +import java.util.ArrayList; +import java.util.Date; + +/** + * OpenMetadataArchiveProperties defines the properties of an open metadata archive. This includes the following + * properties: + * <ul> + * <li> + * Unique identifier (GUID) of the archive. + * </li> + * <li> + * Archive name. + * </li> + * <li> + * Archive description. + * </li> + * <li> + * Archive Type (CONTENT_PACK or METADATA_EXPORT). + * </li> + * <li> + * Originator name (organization or person). + * </li> + * <li> + * Creation date + * </li> + * <li> + * GUIDs for archives that this archive depends on. + * </li> + * </ul> + */ +public class OpenMetadataArchiveProperties +{ + private String archiveGUID = null; + private String archiveName = null; + private String archiveDescription = null; + private OpenMetadataArchiveType archiveType = null; + private String originatorName = null; + private Date creationDate = null; + private ArrayList<String> dependsOnArchives = null; + + + /** + * Default constructor that relies on initialization of variables in their declaration. + */ + public OpenMetadataArchiveProperties() + { + } + + + /** + * Return the unique identifier for this archive. + * + * @return String guid + */ + public String getArchiveGUID() + { + return archiveGUID; + } + + + /** + * Set up the unique identifier for this open metadata archive. + * + * @param archiveGUID - String guid + */ + public void setArchiveGUID(String archiveGUID) + { + this.archiveGUID = archiveGUID; + } + + + /** + * Return the descriptive name for this open metadata archive. + * + * @return String name + */ + public String getArchiveName() + { + return archiveName; + } + + + /** + * Set up the descriptive name for this open metadata archive. + * + * @param archiveName - String name + */ + public void setArchiveName(String archiveName) + { + this.archiveName = archiveName; + } + + + /** + * Return the description for this open metadata archive. + * + * @return String description + */ + public String getArchiveDescription() + { + return archiveDescription; + } + + + /** + * Set up the description for this open metadata archive. + * + * @param archiveDescription - String description + */ + public void setArchiveDescription(String archiveDescription) + { + this.archiveDescription = archiveDescription; + } + + + /** + * Return the type of this open metadata archive. + * + * @return OpenMetadataArchiveType enum + */ + public OpenMetadataArchiveType getArchiveType() + { + return archiveType; + } + + + /** + * Set up the type of this open metadata archive. + * + * @param archiveType - OpenMetadataArchiveType enum + */ + public void setArchiveType(OpenMetadataArchiveType archiveType) + { + this.archiveType = archiveType; + } + + + /** + * Return the name of the originator of this open metadata archive (persona or organization). + * + * @return String name + */ + public String getOriginatorName() + { + return originatorName; + } + + + /** + * Set up the name of the originator of this open metadata archive (persona or organization). + * + * @param originatorName - String name + */ + public void setOriginatorName(String originatorName) + { + this.originatorName = originatorName; + } + + + /** + * Return the date that this open metadata archive was created. + * + * @return Date object + */ + public Date getCreationDate() + { + return creationDate; + } + + + /** + * Set up the date that this open metadata archive was created. + * + * @param creationDate - Date object + */ + public void setCreationDate(Date creationDate) + { + this.creationDate = creationDate; + } + + + /** + * Return the list of GUIDs for open metadata archives that need to be loaded before this one. + * + * @return list of guids + */ + public ArrayList<String> getDependsOnArchives() + { + return dependsOnArchives; + } + + + /** + * Set up the list of GUIDs for open metadata archives that need to be loaded before this one. + * + * @param dependsOnArchives - list of guids + */ + public void setDependsOnArchives(ArrayList<String> dependsOnArchives) + { + this.dependsOnArchives = dependsOnArchives; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveType.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveType.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveType.java new file mode 100644 index 0000000..fc764b6 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveType.java @@ -0,0 +1,79 @@ +/* + * 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.properties; + +public enum OpenMetadataArchiveType +{ + CONTENT_PACK (1, "ContentPack", + "A collection of metadata elements that define a standard or support a specific use case."), + METADATA_EXPORT (2, "MetadataExport", + "A collection of metadata elements that have been extracted from a specific open metadata repository."); + + + private int archiveTypeCode; + private String archiveTypeName; + private String archiveTypeDescription; + + + /** + * Constructor fo an enum instance. + * + * @param archiveTypeCode - code number for the archive type + * @param archiveTypeName - name for the archive type + * @param archiveTypeDescription - default description ofr the archive type + */ + OpenMetadataArchiveType(int archiveTypeCode, String archiveTypeName, String archiveTypeDescription) + { + this.archiveTypeCode = archiveTypeCode; + this.archiveTypeName = archiveTypeName; + this.archiveTypeDescription = archiveTypeDescription; + } + + + /** + * Return the code number for the archive type. + * + * @return int code number + */ + public int getArchiveTypeCode() + { + return archiveTypeCode; + } + + + /** + * Return the printable name for the archive type. + * + * @return String archive type name + */ + public String getArchiveTypeName() + { + return archiveTypeName; + } + + + /** + * Return the default description of the archive type. + * + * @return String archive description + */ + public String getArchiveTypeDescription() + { + return archiveTypeDescription; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveTypeStore.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveTypeStore.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveTypeStore.java new file mode 100644 index 0000000..d170ff2 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/properties/OpenMetadataArchiveTypeStore.java @@ -0,0 +1,111 @@ +/* + * 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.properties; + +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 java.util.ArrayList; + + +/** + * OpenMetadataArchiveTypeStore defines the contents of the TypeStore in an open metadata archive. The TypeStore + * contains a list of types used for attributes, a list of type definition (TypeDef) patches to update existing types + * and a list of TypeDefs for new types of classifications, entities and relationships. + */ +public class OpenMetadataArchiveTypeStore +{ + private ArrayList<AttributeTypeDef> attributeTypeDefs = null; + private ArrayList<TypeDefPatch> typeDefPatches = null; + private ArrayList<TypeDef> newTypeDefs = null; + + + /** + * Default constructor for OpenMetadataArchiveTypeStore relies on variables being initialized in their declaration. + */ + public OpenMetadataArchiveTypeStore() + { + } + + + /** + * Return the list of attribute types used in this archive. + * + * @return list of AttributeTypeDef objects + */ + public ArrayList<AttributeTypeDef> getAttributeTypeDefs() + { + return attributeTypeDefs; + } + + + /** + * Set up the list of attribute types used in this archive. + * + * @param attributeTypeDefs - list of AttributeTypeDef objects + */ + public void setAttributeTypeDefs(ArrayList<AttributeTypeDef> attributeTypeDefs) + { + this.attributeTypeDefs = attributeTypeDefs; + } + + + /** + * Return the list of TypeDef patches from this archive. + * + * @return list of TypeDef objects + */ + public ArrayList<TypeDefPatch> getTypeDefPatches() + { + return typeDefPatches; + } + + + /** + * Set up the list of TypeDef patches from this archive. + * + * @param typeDefPatches - list of TypeDef objects + */ + public void setTypeDefPatches(ArrayList<TypeDefPatch> typeDefPatches) + { + this.typeDefPatches = typeDefPatches; + } + + + /** + * Return the list of new TypeDefs in this open metadata archive. + * + * @return list of TypeDef objects + */ + public ArrayList<TypeDef> getNewTypeDefs() + { + return newTypeDefs; + } + + + /** + * Set up the list of new TypeDefs in this open metadata archive. + * + * @param newTypeDefs - list of TypeDef objects + */ + public void setNewTypeDefs(ArrayList<TypeDef> newTypeDefs) + { + this.newTypeDefs = newTypeDefs; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStore.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStore.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStore.java new file mode 100644 index 0000000..ac5dfd6 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStore.java @@ -0,0 +1,72 @@ +/* + * 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.store; + + +import org.apache.atlas.omrs.archivemanager.properties.OpenMetadataArchive; + +/** + * <p> + * OpenMetadataArchiveStore is the interface for a connector to an open metadata archive. The open metadata archive + * is a collection of type definitions (TypeDefs) and metadata instances (Entities and Relationships) that can be + * loaded into an open metadata repository. + * </p> + * <p> + * An open metadata archive has 3 sections: + * </p> + * <ul> + * <li> + * Archive properties + * </li> + * <li> + * Type store - ordered list of types + * </li> + * <li> + * Instance store - list of entities and relationships + * </li> + * </ul> + */ +public interface OpenMetadataArchiveStore +{ + /** + * Open the archive and retrieve archive contents (if any) + */ + void openArchive(); + + + /** + * Return the contents of the archive. + * + * @return OpenMetadataArchive object + */ + OpenMetadataArchive getArchiveContents(); + + + /** + * Set new contents into the archive. This overrides any content previously stored. + * + * @param archiveContents - OpenMetadataArchive object + */ + void setArchiveContents(OpenMetadataArchive archiveContents); + + + /** + * Close the archive - this releases the connection and any resources held. + */ + void closeArchive(); +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreConnectorBase.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreConnectorBase.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreConnectorBase.java new file mode 100644 index 0000000..b0bd643 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreConnectorBase.java @@ -0,0 +1,27 @@ +/* + * 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.store; + +import org.apache.atlas.ocf.ConnectorBase; + +/** + * OpenMetadataArchiveStoreConnectorBase is the base class for connectors that support the OpenMetadataArchiveStore + */ +public abstract class OpenMetadataArchiveStoreConnectorBase extends ConnectorBase implements OpenMetadataArchiveStore +{ +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreProviderBase.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreProviderBase.java b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreProviderBase.java new file mode 100644 index 0000000..463dd10 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/archivemanager/store/OpenMetadataArchiveStoreProviderBase.java @@ -0,0 +1,41 @@ +/* + * 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.store; + +import org.apache.atlas.ocf.ConnectorProviderBase; + +/** + * The OpenMetadataArchiveProviderStoreBase provides a base class for the connector provider supporting OMRS + * open metadata archive stores. It extends ConnectorProviderBase which does the creation of connector instances. + * The subclasses of OpenMetadataArchiveStoreProviderBase must initialize ConnectorProviderBase with the Java class + * name of the audit log connector implementation (by calling super.setConnectorClassName(className)). + * Then the connector provider will work. + */ +public abstract class OpenMetadataArchiveStoreProviderBase extends ConnectorProviderBase +{ + /** + * Default Constructor + */ + public OpenMetadataArchiveStoreProviderBase() + { + /* + * Nothing to do + */ + } +} + http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditCode.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditCode.java b/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditCode.java new file mode 100644 index 0000000..8e66f8b --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditCode.java @@ -0,0 +1,500 @@ +/* + * 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.auditlog; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.MessageFormat; +import java.util.Arrays; + +/** + * The OMRSAuditCode is used to define the message content for the OMRS Audit Log. + * + * The 5 fields in the enum are: + * <ul> + * <li>Log Message Id - to uniquely identify the message</li> + * <li>Severity - is this an event, decision, action, error or exception</li> + * <li>Log Message Text - includes placeholder to allow additional values to be captured</li> + * <li>Additional Information - further parameters and data relating to the audit message (optional)</li> + * <li>SystemAction - describes the result of the situation</li> + * <li>UserAction - describes how a user should correct the situation</li> + * </ul> + */ +public enum OMRSAuditCode +{ + OMRS_INITIALIZING("OMRS-AUDIT-0001", + OMRSAuditLogRecordSeverity.INFO, + "The Open Metadata Repository Services (OMRS) is initializing", + "The local server has started up the OMRS.", + "No action is required. This is part of the normal operation of the server."), + + ENTERPRISE_ACCESS_INITIALIZING("OMRS-AUDIT-0002", + OMRSAuditLogRecordSeverity.INFO, + "Enterprise access through the Enterprise Repository Services is initializing", + "The local server has started the enterprise access support provided by the " + + "enterprise repository services.", + "No action is required. This is part of the normal operation of the server."), + + LOCAL_REPOSITORY_INITIALIZING("OMRS-AUDIT-0003", + OMRSAuditLogRecordSeverity.INFO, + "The local repository is initializing with metadata collection id {0}", + "The local server has started to initialize the local repository.", + "No action is required. This is part of the normal operation of the server."), + + METADATA_HIGHWAY_INITIALIZING("OMRS-AUDIT-0004", + OMRSAuditLogRecordSeverity.INFO, + "Connecting to the metadata highway", + "The local server has started to initialize the communication with the open metadata " + + "repository cohorts.", + "No action is required. This is part of the normal operation of the server."), + + COHORT_INITIALIZING("OMRS-AUDIT-0005", + OMRSAuditLogRecordSeverity.INFO, + "Connecting to cohort {0}", + "The local server has started to initialize the communication with the named " + + "open metadata repository cohort.", + "No action is required. This is part of the normal operation of the server."), + + COHORT_CONFIG_ERROR("OMRS-AUDIT-0006", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Configuration error detected while connecting to cohort {0}", + "The local server has started to initialize the communication with the named " + + "open metadata repository cohort and a configuration error was detected.", + "Review the exception and resolve the issue it documents. " + + "Then disconnect and reconnect this server to the cohort."), + + OMRS_INITIALIZED("OMRS-AUDIT-0007", + OMRSAuditLogRecordSeverity.INFO, + "The Open Metadata Repository Services (OMRS) has initialized", + "The local server has completed the initialization of the OMRS.", + "No action is required. This is part of the normal operation of the server."), + + COHORT_DISCONNECTING("OMRS-AUDIT-0008", + OMRSAuditLogRecordSeverity.INFO, + "Disconnecting from cohort {0}", + "The local server has started to shutdown the communication with the named " + + "open metadata repository cohort.", + "No action is required. This is part of the normal operation of the server."), + + COHORT_PERMANENTLY_DISCONNECTING("OMRS-AUDIT-0009", + OMRSAuditLogRecordSeverity.INFO, + "Unregistering from cohort {0}", + "The local server has started to unregister from all future communication with the named " + + "open metadata repository cohort.", + "No action is required. This is part of the normal operation of the server."), + + OMRS_DISCONNECTING("OMRS-AUDIT-0010", + OMRSAuditLogRecordSeverity.INFO, + "The Open Metadata Repository Services (OMRS) is about to disconnect from the open metadata repositories.", + "The local server has completed the initialization of the OMRS.", + "No action is required. This is part of the normal operation of the server."), + + OMRS_DISCONNECTED("OMRS-AUDIT-0011", + OMRSAuditLogRecordSeverity.INFO, + "The Open Metadata Repository Services (OMRS) has disconnected from the open metadata repositories.", + "The local server has completed the disconnection of the OMRS.", + "No action is required. This is part of the normal operation of the server."), + + NO_LOCAL_REPOSITORY("OMRS-AUDIT-0012", + OMRSAuditLogRecordSeverity.INFO, + "No events will be sent to the open metadata repository cohort {0} because the local metadata collection id is null.", + "The local server will not send outbound events because there is no local metadata repository.", + "Validate that the server is configured without a local metadata repository. " + + "If there should be a metadata repository then, verify the server configuration is" + + "correct and look for errors that have occurred during server start up." + + "If necessary, correct the configuration and restart the server."), + + NULL_TOPIC_CONNECTOR("OMRS-AUDIT-0013", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send or receive events for cohort {0} because the connector to the OMRS Topic failed to initialize", + "The local server will not connect to the cohort.", + "The connection to the connector is configured in the server configuration. " + + "Review previous error messages to determine the precise error in the " + + "start up configuration. " + + "Correct the configuration and reconnect the server to the cohort. "), + + REGISTERED_WITH_COHORT("OMRS-AUDIT-0101", + OMRSAuditLogRecordSeverity.INFO, + "Registering with open metadata repository cohort {0} using metadata collection id {1}", + "The local server has sent a registration event to the other members of the cohort.", + "No action is required. This is part of the normal operation of the server."), + + RE_REGISTERED_WITH_COHORT("OMRS-AUDIT-0102", + OMRSAuditLogRecordSeverity.INFO, + "Refreshing registration information from open metadata repository cohort {0}", + "The local server has sent a registration refresh request to the other members of the cohort as " + + "part of its routine to re-connect with the open metadata repository cohort.", + "No action is required. This is part of the normal operation of the server."), + + UNREGISTERING_FROM_COHORT("OMRS-AUDIT-0103", + OMRSAuditLogRecordSeverity.INFO, + "Unregistering with open metadata repository cohort {0} using metadata collection id {1}", + "The local server has sent a unregistration event to the other members of the cohort as " + + "part of its routine to permanently disconnect with the open metadata repository cohort.", + "No action is required. This is part of the normal operation of the server."), + + SEND_REGISTRY_EVENT_ERROR("OMRS-AUDIT-0104", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send a registry event for cohort {0} due to an error in the OMRS Topic Connector", + "The local server is unable to properly manage registration events for the metadata " + + "repository cohort. The cause of the error is recorded in the accompanying exception.", + "Review the exception and resolve the issue it documents. " + + "Then disconnect and reconnect this server to the cohort."), + + REFRESHING_REGISTRATION_WITH_COHORT("OMRS-AUDIT-0105", + OMRSAuditLogRecordSeverity.INFO, + "Refreshing registration with open metadata repository cohort {0} using " + + "metadata collection id {1} at the request of server {2}", + "The local server has sent a re-registration event to the other members of the cohort in " + + "response to a registration refresh event from another member of the cohort.", + "No action is required. This is part of the normal operation of the server."), + + INCOMING_CONFLICTING_LOCAL_METADATA_COLLECTION_ID("OMRS-AUDIT-0106", + OMRSAuditLogRecordSeverity.ACTION, + "Registration request for this server in cohort {0} was rejected by server {1} that " + + "hosts metadata collection {2} because the local metadata " + + "collection id {3} is not unique for this cohort", + "The local server will not receive metadata from the open metadata repository " + + "with the same metadata collection id. " + + "There is a chance of metadata integrity issues since " + + "a metadata instance can be updated in two places.", + "It is necessary to update the local metadata collection Id to remove the conflict."), + + INCOMING_CONFLICTING_METADATA_COLLECTION_ID("OMRS-AUDIT-0107", + OMRSAuditLogRecordSeverity.ACTION, + "Two servers in cohort {0} are using the same metadata collection identifier {1}", + "The local server will not be able to distinguish ownership of metadata " + + "from these open metadata repositories" + + "with the same metadata collection id. " + + "There is a chance of metadata integrity issues since " + + "a metadata instance can be updated in two places.", + "It is necessary to update the local metadata collection Id to remove the conflict."), + + INCOMING_BAD_CONNECTION("OMRS-AUDIT-0108", + OMRSAuditLogRecordSeverity.ACTION, + "Registration error occurred in cohort {0} because remote server {1} that hosts " + + "metadata collection {2} is unable to use connection {3} to create a " + + "connector to this local server", + "The remote server will not be able to query metadata from this local server.", + "This error may be caused because the connection is incorrectly " + + "configured, or that the jar file for the connector is not available in the remote server."), + + NEW_MEMBER_IN_COHORT("OMRS-AUDIT-0109", + OMRSAuditLogRecordSeverity.INFO, + "A new registration request has been received for cohort {0} from server {1} that " + + "hosts metadata collection {2}", + "The local server will process the registration request and if the parameters are correct, " + + "it will accept the new member.", + "No action is required. This is part of the normal operation of the server."), + + MEMBER_LEFT_COHORT("OMRS-AUDIT-0110", + OMRSAuditLogRecordSeverity.INFO, + "Server {0} hosting metadata collection {1} has left cohort {2}", + "The local server will process the incoming unregistration request and if the parameters are correct, " + + "it will remove the former member from its cohort registry store.", + "No action is required. This is part of the normal operation of the server. " + + "Any metadata from this remote repository that is stored in the local repository will no longer be updated. " + + "It may be kept in the local repository for reference or removed by calling the administration REST API."), + + REFRESHED_MEMBER_IN_COHORT("OMRS-AUDIT-0111", + OMRSAuditLogRecordSeverity.INFO, + "A re-registration request has been received for cohort {0} from server {1} that " + + "hosts metadata collection {2}", + "The local server will process the registration request and if the parameters are correct, " + + "it will accept the latest registration values for this member.", + "No action is required. This is part of the normal operation of the server."), + + OUTGOING_CONFLICTING_METADATA_COLLECTION_ID("OMRS-AUDIT-0112", + OMRSAuditLogRecordSeverity.ACTION, + "Registration request received from cohort {0} was rejected by the " + + "local server because the remote server {1} is using a metadata " + + "collection Id {2} that is not unique in the cohort", + "The remote server will not exchange metadata with this local server.", + "It is necessary to update the TypeDef to remove the conflict " + + "before the remote server will exchange metadata with this server."), + + OUTGOING_BAD_CONNECTION("OMRS-AUDIT-0113", + OMRSAuditLogRecordSeverity.ACTION, + "Registration error occurred in cohort {0} because the local server is not able to use " + + "the remote connection {1} supplied by server {2} that hosts metadata " + + "collection {3} to create a connector to its metadata repository", + "The local server is not able to query metadata from the remote server.", + "This error may be caused because the connection is incorrectly " + + "configured, or that the jar file for the connector is not available in the " + + "local server."), + + CREATE_REGISTRY_FILE("OMRS-AUDIT-0114", + OMRSAuditLogRecordSeverity.INFO, + "Creating new cohort registry store {0}", + "The local server is creating a new cohort registry store. " + + "The local server should continue to operate correctly.", + "Verify that the local server is connecting to the open metadata repository cohort for" + + "the first time."), + + UNUSABLE_REGISTRY_FILE("OMRS-AUDIT-0115", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to write to cohort registry store {0}", + "The local server can not write to the cohort registry store. " + + "This is a serious issue because the local server is not able to record its " + + "interaction with other servers in the cohort.", + "Shutdown the local server and resolve the issue with the repository store."), + + NULL_MEMBER_REGISTRATION("OMRS-AUDIT-0116", + OMRSAuditLogRecordSeverity.ERROR, + "Unable to read or write to cohort registry store {0} because registration information is null", + "The local server can not manage a member registration in the cohort registry store because " + + "the registration information is null. " + + "This is a serious issue because the local server is not able to record its " + + "interaction with other servers in the cohort.", + "Shutdown the local server and resolve the issue with the cohort registry."), + + MISSING_MEMBER_REGISTRATION("OMRS-AUDIT-0117", + OMRSAuditLogRecordSeverity.ERROR, + "Unable to process the remote registration for {0} from cohort registry store {1} " + + "because registration information is not stored", + "The local server can not process a member registration event from the cohort registry store " + + "because the registration information is not stored. " + + "This may simply be a timing issue. " + + "However, it may be the result of an earlier issue with the " + + "local cohort registry store.", + "Verify that there are no issues with writing to the cohort registry store."), + + INCOMING_CONFLICTING_TYPEDEFS("OMRS-AUDIT-0201", + OMRSAuditLogRecordSeverity.ACTION, + "Server {1} in cohort {0} that hosts metadata collection {2} has detected that " + + "TypeDef {3} ({4}) in the local " + + "server conflicts with TypeDef {5} ({6}) in the remote server", + "The remote server may not be able to exchange metadata with this local server.", + "It is necessary to update the TypeDef to remove the conflict before the " + + "remote server will exchange metadata with this server."), + + INCOMING_TYPEDEF_PATCH_MISMATCH("OMRS-AUDIT-0202", + OMRSAuditLogRecordSeverity.ACTION, + "Registration request for this server in cohort {0} was rejected by server {1} that " + + "hosts metadata collection {2} because TypeDef {3} ({4}) in the local " + + "server is at versionName {5} which is different from this TypeDef in the " + + "remote server which is at versionName {6}", + "The remote server may not be able to exchange metadata with this local server.", + "It is necessary to update the TypeDef to remove the conflict to ensure that the remote server " + + "can exchange metadata with this server."), + + OUTGOING_CONFLICTING_TYPEDEFS("OMRS-AUDIT-0203", + OMRSAuditLogRecordSeverity.ACTION, + "The local server has detected a conflict in cohort {0} in the registration request " + + "from server {1} that hosts metadata collection {2}. TypeDef " + + "{3} ({4}) in the local server conflicts with TypeDef {5} ({6}) in the remote server", + "The local server will not exchange metadata with this remote server.", + "It is necessary to update the TypeDef to remove the conflict before the local " + + "server will exchange metadata with this server."), + + OUTGOING_TYPEDEF_PATCH_MISMATCH("OMRS-AUDIT-0204", + OMRSAuditLogRecordSeverity.ACTION, + "The local server in cohort {0} has rejected a TypeDef update from server {1} that hosts metadata " + + "collection {2} because the versionName of TypeDef {3} ({4}) in the local server " + + "is at versionName {5} is different from this TypeDef in the remote server " + + "which is at versionName {6}", + "The local server will not exchange metadata with this remote server.", + "It is necessary to update the TypeDef to remove the conflict before the local server will " + + "exchange metadata with the remote server."), + + OUTGOING_TYPE_MISMATCH("OMRS-AUDIT-0205", + OMRSAuditLogRecordSeverity.ACTION, + "The local server in cohort {0} has rejected a TypeDef update from server {1} that hosts " + + "metadata collection {2} because the versionName of TypeDef {3} ({4}) in the local " + + "server is at versionName {5} is different from this TypeDef in the remote server " + + "which is at versionName {6}", + "The local server will not exchange metadata with this remote server.", + "It is necessary to update the TypeDef to remove the conflict before the local server will " + + "exchange metadata with the remote server."), + + PROCESS_UNKNOWN_EVENT("OMRS-AUDIT-8001", + OMRSAuditLogRecordSeverity.EVENT, + "Received unknown event: {0}", + "The local server has received an unknown event from another member of the metadata repository " + + "cohort and is unable to process it. " + + "This is possible if a server in the cohort is at a higher level than this server and " + + "is using a more advanced versionName of the protocol. " + + "The local server should continue to operate correctly.", + "Verify that the event is a new event type introduced after this server was written."), + + NULL_OMRS_EVENT_RECEIVED("OMRS-AUDIT-9002", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to process a received event because its content is null", + "The system is unable to process an incoming event.", + "This may be caused by an internal logic error or the receipt of an incompatible OMRSEvent"), + + SEND_TYPEDEF_EVENT_ERROR("OMRS-AUDIT-9003", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send a TypeDef event for cohort {0} due to an error in the OMRS Topic Connector", + "The local server is unable to properly manage TypeDef events for the metadata " + + "repository cohort. The cause of the error is recorded in the accompanying exception.", + "Review the exception and resolve the issue it documents. " + + "Then disconnect and reconnect this server to the cohort."), + + SEND_INSTANCE_EVENT_ERROR("OMRS-AUDIT-9005", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send or receive a metadata instance event for cohort {0} due to an error in the OMRS Topic Connector", + "The local server is unable to properly manage the replication of metadata instances for " + + "the metadata repository cohort. The cause of the error is recorded in the accompanying exception.", + "Review the exception and resolve the issue it documents. " + + "Then disconnect and reconnect this server to the cohort."), + + NULL_REGISTRY_PROCESSOR("OMRS-AUDIT-9006", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send or receive a registry event because the event processor is null", + "The local server is unable to properly manage registration events for the metadata " + + "repository cohort.", + "This is an internal logic error. Raise a JIRA, including the audit log, to get this fixed."), + + NULL_TYPEDEF_PROCESSOR("OMRS-AUDIT-9007", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send or receive a TypeDef event because the event processor is null", + "The local server is unable to properly manage the exchange of TypeDefs for the metadata " + + "repository cohort.", + "This is an internal logic error. Raise a JIRA, including the audit log, to get this fixed."), + + NULL_INSTANCE_PROCESSOR("OMRS-AUDIT-9008", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send or receive a metadata instance event because the event processor is null", + "The local server is unable to properly manage the replication of metadata instances for " + + "the metadata repository cohort.", + "This is an internal logic error. Raise a JIRA, including the audit log, to get this fixed."), + + NULL_OMRS_CONFIG("OMRS-AUDIT-9009", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to initialize part of the Open Metadata Repository Service (OMRS) because the configuration is null", + "The local server is unable to properly manage the replication of metadata instances for " + + "the metadata repository cohort.", + "This is an internal logic error. Raise a JIRA, including the audit log, to get this fixed."), + + SENT_UNKNOWN_EVENT("OMRS-AUDIT-9010", + OMRSAuditLogRecordSeverity.EXCEPTION, + "Unable to send an event because the event is of an unknown type", + "The local server may not be communicating properly with other servers in " + + "the metadata repository cohort.", + "This is an internal logic error. Raise a JIRA, including the audit log, to get this fixed.") + + ; + + private String logMessageId; + private OMRSAuditLogRecordSeverity severity; + private String logMessage; + private String systemAction; + private String userAction; + + private static final Logger log = LoggerFactory.getLogger(OMRSAuditCode.class); + + + /** + * The constructor for OMRSAuditCode expects to be passed one of the enumeration rows defined in + * OMRSAuditCode above. For example: + * + * OMRSAuditCode auditCode = OMRSAuditCode.SERVER_NOT_AVAILABLE; + * + * This will expand out to the 4 parameters shown below. + * + * @param messageId - unique Id for the message + * @param severity - severity of the message + * @param message - text for the message + * @param systemAction - description of the action taken by the system when the condition happened + * @param userAction - instructions for resolving the situation, if any + */ + OMRSAuditCode(String messageId, + OMRSAuditLogRecordSeverity severity, + String message, + String systemAction, + String userAction) + { + this.logMessageId = messageId; + this.severity = severity; + this.logMessage = message; + this.systemAction = systemAction; + this.userAction = userAction; + } + + + /** + * Returns the unique identifier for the error message. + * + * @return logMessageId + */ + public String getLogMessageId() + { + return logMessageId; + } + + + /** + * Return the severity of the audit log record. + * + * @return OMRSAuditLogRecordSeverity enum + */ + public OMRSAuditLogRecordSeverity getSeverity() + { + return severity; + } + + /** + * Returns the log message with the placeholders filled out with the supplied parameters. + * + * @param params - strings that plug into the placeholders in the logMessage + * @return logMessage (formatted with supplied parameters) + */ + public String getFormattedLogMessage(String... params) + { + if (log.isDebugEnabled()) + { + log.debug(String.format("<== OMRS Audit Code.getMessage(%s)", Arrays.toString(params))); + } + + MessageFormat mf = new MessageFormat(logMessage); + String result = mf.format(params); + + if (log.isDebugEnabled()) + { + log.debug(String.format("==> OMRS Audit Code.getMessage(%s): %s", Arrays.toString(params), result)); + } + + return result; + } + + + + /** + * Returns a description of the action taken by the system when the condition that caused this exception was + * detected. + * + * @return systemAction String + */ + public String getSystemAction() + { + return systemAction; + } + + + /** + * Returns instructions of how to resolve the issue reported in this exception. + * + * @return userAction String + */ + public String getUserAction() + { + return userAction; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLog.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLog.java b/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLog.java new file mode 100644 index 0000000..5f63c92 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLog.java @@ -0,0 +1,197 @@ +/* + * 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.auditlog; + + +import org.apache.atlas.omrs.auditlog.store.OMRSAuditLogRecord; +import org.apache.atlas.omrs.auditlog.store.OMRSAuditLogRecordOriginator; +import org.apache.atlas.omrs.auditlog.store.OMRSAuditLogReportingComponent; +import org.apache.atlas.omrs.auditlog.store.OMRSAuditLogStore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; + +/** + * OMRSAuditLog is a class for managing the audit logging of activity for the OMRS components. Each auditing component + * will have their own instance of an OMRSAuditLog. OMRSAuditLog will ensure audit log records are written to + * disk in the common OMRSAuditLog for this local server. + * + * There are different levels of log record to cover all of the activity of the OMRS. + * + * This audit log is critical to validate the behavior of the OMRS, particularly in the initial interaction of + * a new metadata repository to the OMRS Cohort. + */ +public class OMRSAuditLog +{ + static private final OMRSAuditLogRecordOriginator originator = new OMRSAuditLogRecordOriginator(); + static private OMRSAuditLogStore auditLogStore = null; + + private static final Logger log = LoggerFactory.getLogger(OMRSAuditLog.class); + + private OMRSAuditLogReportingComponent reportingComponent = null; + + + /** + * Initialize the static values used in all log records. These values help to pin-point the source of messages + * when audit log records from many servers are consolidated into centralized operational tooling. + * + * @param localServerName - name of the local server + * @param localServerType - type of the local server + * @param localOrganizationName - name of the organization that owns the local server + * @param auditLogStore - destination for the audit log records + */ + public static void initialize(String localServerName, + String localServerType, + String localOrganizationName, + OMRSAuditLogStore auditLogStore) + { + OMRSAuditLog.originator.setServerName(localServerName); + OMRSAuditLog.originator.setServerType(localServerType); + OMRSAuditLog.originator.setOrganizationName(localOrganizationName); + + OMRSAuditLog.auditLogStore = auditLogStore; + } + + + /** + * Set up the local metadata collection Id. This is null if there is no local repository. + * + * @param localMetadataCollectionId - String unique identifier for the metadata collection + */ + public static void setLocalMetadataCollectionId(String localMetadataCollectionId) + { + OMRSAuditLog.originator.setMetadataCollectionId(localMetadataCollectionId); + } + + + /** + * Typical constructor - Each component using the Audit log will create their own OMRSAuditLog instance and + * will push log records to it. + * + * @param reportingComponent - information about the component that will use this instance of the audit log. + */ + public OMRSAuditLog(OMRSAuditingComponent reportingComponent) + { + this.reportingComponent = new OMRSAuditLogReportingComponent(reportingComponent.getComponentId(), + reportingComponent.getComponentName(), + reportingComponent.getComponentDescription(), + reportingComponent.getComponentWikiURL()); + } + + + /** + * Log an audit log record for an event, decision, error, or exception detected by the OMRS. + * + * @param actionDescription - description of the activity creating the audit log record + * @param logMessageId - id for the audit log record + * @param severity - is this an event, decision, error or exception? + * @param logMessage - description of the audit log record including specific resources involved + * @param additionalInformation - additional data to help resolve issues of verify behavior + * @param systemAction - the related action taken by the OMRS. + * @param userAction - details of any action that an administrator needs to take. + */ + public void logRecord(String actionDescription, + String logMessageId, + OMRSAuditLogRecordSeverity severity, + String logMessage, + String additionalInformation, + String systemAction, + String userAction) + { + if (severity != null) + { + if ((severity == OMRSAuditLogRecordSeverity.ERROR) || (severity == OMRSAuditLogRecordSeverity.EXCEPTION)) + { + log.error("New Audit Log Record", actionDescription, logMessageId, severity, logMessage, additionalInformation, systemAction, userAction); + } + else + { + log.info("New Audit Log Record", actionDescription, logMessageId, severity, logMessage, additionalInformation, systemAction, userAction); + } + } + else + { + severity = OMRSAuditLogRecordSeverity.UNKNOWN; + } + + if (auditLogStore != null) + { + ArrayList<String> additionalInformationArray = null; + + if (additionalInformation != null) + { + additionalInformationArray = new ArrayList<>(); + additionalInformationArray.add(additionalInformation); + } + + OMRSAuditLogRecord logRecord = new OMRSAuditLogRecord(originator, + reportingComponent, + severity.getSeverityName(), + logMessageId, + logMessage, + additionalInformationArray, + systemAction, + userAction); + try + { + auditLogStore.storeLogRecord(logRecord); + } + catch (Throwable error) + { + log.error("Error writing audit log: ", logRecord, error); + } + } + } + + /** + * Log details of an unexpected exception detected by the OMRS. These exceptions typically mean that the local + * server is not configured correctly, or there is a logic error in the code. When exceptions are logged, it is + * important that they are investigated and the cause corrected since the local repository is not able to operate + * as a proper peer in the metadata repository cluster whilst these conditions persist. + * + * @param actionDescription - description of the activity in progress when the error occurred + * @param logMessageId - id for the type of exception caught + * @param severity - severity of the error + * @param logMessage - description of the exception including specific resources involved + * @param additionalInformation - additional data to help resolve issues of verify behavior + * @param systemAction - the action taken by the OMRS in response to the error. + * @param userAction - details of any action that an administrator needs to take. + * @param caughtException - the original exception. + */ + public void logException(String actionDescription, + String logMessageId, + OMRSAuditLogRecordSeverity severity, + String logMessage, + String additionalInformation, + String systemAction, + String userAction, + Throwable caughtException) + { + if (caughtException != null) + { + this.logRecord(actionDescription, + logMessageId, + severity, + logMessage, + additionalInformation + caughtException.toString(), + systemAction, + userAction); + } + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/8a57e657/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLogRecordSeverity.java ---------------------------------------------------------------------- diff --git a/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLogRecordSeverity.java b/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLogRecordSeverity.java new file mode 100644 index 0000000..61b1e16 --- /dev/null +++ b/omrs/src/main/java/org/apache/atlas/omrs/auditlog/OMRSAuditLogRecordSeverity.java @@ -0,0 +1,122 @@ +/* + * 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.auditlog; + +/** + * OMRSAuditLogRecordSeverity defines the different levels of severity for log records stored in the OMRSAuditLogRecord. + * <ul> + * <li> + * UNKNOWN - Uninitialized Severity - if this is seen then there is a logic error in the audit log processing. + * </li> + * <li> + * INFO - An activity occurred as part of the normal operation of the open metadata repository. + * </li> + * <li> + * EVENT - An OMRS Event was sent to or received from members of an open metadata repository cohort. + * </li> + * <li> + * DECISION - A decision has been made related to the interaction of the local metadata repository and the + * rest of the open metadata repository cohort. + * </li> + * <li> + * ACTION - A situation has been detected that requires administrator intervention. + * </li> + * <li> + * ERROR - An unexpected error occurred, possibly caused by an incompatibility between the local metadata repository + * and one of the remote repositories. The local repository may restrict some of the metadata interchange + * functions as a result. + * </li> + * <li> + * EXCEPTION - Unexpected exception occurred. This means that the local repository needs some administration + * attention to correct configuration or fix a logic error because it is not operating as a proper peer in the + * metadata repository cluster. + * </li> + * </ul> + */ +public enum OMRSAuditLogRecordSeverity +{ + UNKNOWN (0, "<Unknown>", "Uninitialized Severity."), + INFO (1, "Information", "The server is providing information about its normal operation."), + EVENT (2, "Event", "An OMRSEvent was exchanged amongst members of the metadata repository cohort."), + DECISION (3, "Decision", "A decision has been made related to the interaction of the local metadata repository and the rest of the cohort."), + ACTION (4, "Action", "Action is required by the administrator. " + + "At a minimum, the situation needs to be investigated and if necessary, corrective action taken."), + ERROR (5, "Error", "An error occurred, possibly caused by an incompatibility between the local metadata repository \n" + + "and one of the remote repositories. " + + "The local repository may restrict some of the metadata interchange \n" + + "functions as a result."), + EXCEPTION (6, "Exception", "Unexpected exception occurred. This means that the local repository needs some administration\n" + + " attention to correct configuration or fix a logic error because it is not operating as a proper peer in the\n" + + " metadata repository cohort."); + + + private int severityCode; + private String severityName; + private String severityDescription; + + + /** + * Typical constructor sets up the selected enum value. + * + * @param severityCode - numeric of this enum. + * @param severityName - name of enum. + * @param severityDescription - default description of enum.. + */ + OMRSAuditLogRecordSeverity(int severityCode, + String severityName, + String severityDescription) + { + this.severityCode = severityCode; + this.severityName = severityName; + this.severityDescription = severityDescription; + } + + /** + * Return the code for this enum. + * + * @return int numeric for this enum + */ + public int getSeverityCode() + { + return severityCode; + } + + + /** + * Return the name of this enum. + * + * @return String name + */ + public String getSeverityName() + { + return severityName; + } + + + /** + * Return the default description of this enum. This description is in English. Natural language translations can be + * created using a Resource Bundle indexed by the severity code. This description is a fall back when the resource + * bundle is not available. + * + * @return String default description + */ + public String getSeverityDescription() + { + return severityDescription; + } +}
