http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ConnectedAssetInterface.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ConnectedAssetInterface.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ConnectedAssetInterface.java new file mode 100644 index 0000000..a87740c --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ConnectedAssetInterface.java @@ -0,0 +1,67 @@ +/** + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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.omas.connectedasset; + +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.InvalidParameterException; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.PropertyServerException; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.UnrecognizedConnectionGUIDException; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.UserNotAuthorizedException; +import org.apache.atlas.omas.connectedasset.properties.AssetUniverse; + +/** + * ConnectedAssetInterface is the OMAS client interface of the Connected Asset OMAS. + * + */ +public interface ConnectedAssetInterface +{ + /** + * Returns a comprehensive collection of properties about the requested asset. + * + * @param userId - String - userId of user making request. + * @param assetGUID - String - unique id for asset. + * + * @return AssetUniverse - a comprehensive collection of properties about the asset. + + * @throws InvalidParameterException - one of the parameters is null or invalid. + * @throws PropertyServerException - There is a problem retrieving the asset properties from + * the property server. + * @throws UserNotAuthorizedException - the requesting user is not authorized to issue this request. + */ + AssetUniverse getAssetProperties(String userId, + String assetGUID) throws InvalidParameterException, + PropertyServerException, + UserNotAuthorizedException; + + + /** + * Returns a comprehensive collection of properties about the asset linked to the supplied connection. + * + * @param userId - identifier for calling user + * @param connectionGUID - uniqueId for the connection. + * @return AssetUniverse - a comprehensive collection of properties about the connected asset. + * @throws InvalidParameterException - one of the parameters is null or invalid. + * @throws PropertyServerException - There is a problem retrieving the connected asset properties from + * the property server. + * @throws UnrecognizedConnectionGUIDException - the supplied GUID is not recognized by the property server. + */ + AssetUniverse getAssetPropertiesByConnection(String userId, + String connectionGUID) throws InvalidParameterException, + UnrecognizedConnectionGUIDException, + PropertyServerException; +}
http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/admin/ConnectedAssetAdmin.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/admin/ConnectedAssetAdmin.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/admin/ConnectedAssetAdmin.java new file mode 100644 index 0000000..4d467a6 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/admin/ConnectedAssetAdmin.java @@ -0,0 +1,80 @@ +/* + * 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.omas.connectedasset.admin; + + +import org.apache.atlas.omag.configuration.properties.AccessServiceConfig; +import org.apache.atlas.omag.configuration.registration.AccessServiceAdmin; +import org.apache.atlas.omag.ffdc.exception.OMAGConfigurationErrorException; +import org.apache.atlas.omrs.auditlog.OMRSAuditLog; +import org.apache.atlas.omrs.metadatacollection.repositoryconnector.OMRSRepositoryConnector; +import org.apache.atlas.omrs.topicconnectors.OMRSTopicConnector; + +public class ConnectedAssetAdmin implements AccessServiceAdmin +{ + private OMRSRepositoryConnector repositoryConnector = null; + private OMRSTopicConnector omrsTopicConnector = null; + private AccessServiceConfig accessServiceConfig = null; + private OMRSAuditLog auditLog = null; + private String serverUserName = null; + + + /** + * Default constructor + */ + public ConnectedAssetAdmin() + { + } + + /** + * Initialize the access service. + * + * @param accessServiceConfigurationProperties - specific configuration properties for this access service. + * @param enterpriseOMRSTopicConnector - connector for receiving OMRS Events from the cohorts + * @param enterpriseOMRSRepositoryConnector - connector for querying the cohort repositories + * @param auditLog - audit log component for logging messages. + * @param serverUserName - user id to use on OMRS calls where there is no end user. + * @throws OMAGConfigurationErrorException - invalid parameters in the configuration properties. + */ + public void initialize(AccessServiceConfig accessServiceConfigurationProperties, + OMRSTopicConnector enterpriseOMRSTopicConnector, + OMRSRepositoryConnector enterpriseOMRSRepositoryConnector, + OMRSAuditLog auditLog, + String serverUserName) throws OMAGConfigurationErrorException + { + this.accessServiceConfig = accessServiceConfigurationProperties; + this.omrsTopicConnector = enterpriseOMRSTopicConnector; + + this.repositoryConnector = enterpriseOMRSRepositoryConnector; + + this.auditLog = auditLog; + this.serverUserName = serverUserName; + + } + + + /** + * Shutdown the access service. + */ + public void shutdown() + { + /* + * Nothing to do until set up out topic. + */ + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAsset.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAsset.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAsset.java new file mode 100644 index 0000000..b2f3010 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAsset.java @@ -0,0 +1,117 @@ +/* + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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.omas.connectedasset.client; + +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.InvalidParameterException; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.PropertyServerException; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.UnrecognizedConnectionGUIDException; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.UserNotAuthorizedException; +import org.apache.atlas.omas.connectedasset.properties.AssetUniverse; +import org.apache.atlas.omas.connectedasset.ConnectedAssetInterface; + + +/** + * ConnectedAsset is the OMAS client library implementation of the ConnectedAsset OMAS. + * ConnectedAsset provides the metadata for the ConnectedAssetProperties API that is + * supported by all Open Connector Framework (OCF) + * connectors. It provides access to the metadata about the Asset that the connector is linked to. + */ +public class ConnectedAsset implements ConnectedAssetInterface +{ + /* + * The URL of the server where OMAS is active + */ + private String omasServerURL = null; + + + /** + * Default Constructor used once a connector is created. + * + * @param omasServerURL - unique id for the connector instance + */ + public ConnectedAsset(String omasServerURL) + { + /* + * Save OMAS Server URL + */ + this.omasServerURL = omasServerURL; + } + + + + /** + * Returns a comprehensive collection of properties about the requested asset. + * + * @param userId - String - userId of user making request. + * @param assetGUID - String - unique id for asset. + * + * @return AssetUniverse - a comprehensive collection of properties about the asset. + + * @throws InvalidParameterException - one of the parameters is null or invalid. + * @throws PropertyServerException - There is a problem retrieving the asset properties from + * the property server. + * @throws UserNotAuthorizedException - the requesting user is not authorized to issue this request. + */ + public AssetUniverse getAssetProperties(String userId, + String assetGUID) throws InvalidParameterException, + PropertyServerException, + UserNotAuthorizedException + { + return null; + } + + + /** + * Returns a comprehensive collection of properties about the asset linked to the supplied connection. + * + * @param connectionGUID - unique identifier for the connection + * @return AssetUniverse - a comprehensive collection of properties about the connected asset + * @throws PropertyServerException - There is a problem retrieving the connected asset properties from + * the metadata repository. + */ + public AssetUniverse getAssetPropertiesByConnection(String connectionGUID) throws PropertyServerException + { + AssetUniverse extractedAssetProperties = null; + + /* + * Set up the OMAS URL in the asset universe + */ + + return extractedAssetProperties; + } + + + /** + * Returns a comprehensive collection of properties about the asset linked to the supplied connection. + * + * @param connectionGUID - uniqueId for the connection. + * @return AssetUniverse - a comprehensive collection of properties about the connected asset. + * @throws InvalidParameterException - one of the parameters is null or invalid. + * @throws PropertyServerException - There is a problem retrieving the connected asset properties from + * the property server. + * @throws UnrecognizedConnectionGUIDException - the supplied GUID is not recognized by the property server. + */ + public AssetUniverse getAssetPropertiesByConnection(String userId, + String connectionGUID) throws InvalidParameterException, + UnrecognizedConnectionGUIDException, + PropertyServerException + { + return null; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAssetProperties.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAssetProperties.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAssetProperties.java new file mode 100644 index 0000000..a1d8590 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/client/ConnectedAssetProperties.java @@ -0,0 +1,174 @@ +/* + * 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.omas.connectedasset.client; + +import org.apache.atlas.ocf.ffdc.PropertyServerException; +import org.apache.atlas.ocf.properties.Classifications; +import org.apache.atlas.ocf.properties.ElementType; +import org.apache.atlas.ocf.properties.Connection; + +import org.apache.atlas.omas.connectedasset.properties.AssetUniverse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * ConnectedAssetProperties is associated with a Connector. Connectors provide access to + * assets. ConnectedAssetProperties returns properties (metadata) about the connector's asset. + * + * It is a generic interface for all types of open metadata assets. However, it assumes the asset's metadata model + * inherits from <b>Asset</b> (see model 0010 in Area 0). + * + * The ConnectedAssetProperties returns metadata about the asset at three levels of detail: + * <ul> + * <li><b>assetSummary</b> - used for displaying details of the asset in summary lists or hover text</li> + * <li><b>assetDetail</b> - used to display all of the information known about the asset with summaries + * of the relationships to other metadata entities</li> + * <li><b>assetUniverse</b> - used to define the broader context for the asset</li> + * </ul> + * + * ConnectedAssetProperties is a base class for the connector's metadata API that returns null, + * for the asset's properties. Metadata repository implementations extend this class to add their + * implementation of the refresh() method that calls to the metadata repository to populate the metadata properties. + */ +public class ConnectedAssetProperties extends org.apache.atlas.ocf.properties.ConnectedAssetProperties +{ + private String omasServerURL; + private String connectorInstanceId; + private Connection connection; + private String userId; + + private ConnectedAsset connectedAsset; + + private static final Logger log = LoggerFactory.getLogger(ConnectedAssetProperties.class); + + /** + * Typical constructor. + * + * @param userId - identifier of calling user + * @param omasServerURL - url of server + * @param connectorInstanceId - unique identifier of connector. + * @param connection - connection information for connector. + */ + public ConnectedAssetProperties(String userId, + String omasServerURL, + String connectorInstanceId, + Connection connection) + { + super(); + + this.userId = userId; + this.omasServerURL = omasServerURL; + this.connectorInstanceId = connectorInstanceId; + this.connection = connection; + + this.connectedAsset = new ConnectedAsset(omasServerURL); + } + + + /** + * Copy/clone constructor. + * + * @param templateProperties - template to copy. + */ + public ConnectedAssetProperties(ConnectedAssetProperties templateProperties) + { + super(templateProperties); + + this.connection = templateProperties.connection; + this.connectorInstanceId = templateProperties.connectorInstanceId; + this.omasServerURL = templateProperties.omasServerURL; + this.userId = templateProperties.userId; + + this.connectedAsset = new ConnectedAsset(omasServerURL); + } + + + /** + * Request the values in the ConnectedAssetProperties are refreshed with the current values from the + * metadata repository. + * + * @throws PropertyServerException - there is a problem connecting to the server to retrieve metadata. + */ + + public void refresh() throws PropertyServerException + { + AssetUniverse assetUniverse = null; + + try + { + assetUniverse = connectedAsset.getAssetPropertiesByConnection(connection.getGUID()); + } + catch (Throwable error) + { + /* + * Construct PropertyErrorException + */ + } + + if (assetUniverse == null) + { + super.assetProperties = null; + return; + } + + ElementType elementType = null; + Classifications classifications = null; + + + if (assetUniverse.getType() != null) + { + elementType = new ElementType(assetUniverse.getType().getElementTypeId(), + assetUniverse.getType().getElementTypeName(), + assetUniverse.getType().getElementTypeVersion(), + assetUniverse.getType().getElementTypeDescription(), + assetUniverse.getType().getElementAccessServiceURL(), + assetUniverse.getType().getElementOrigin(), + assetUniverse.getType().getElementHomeMetadataCollectionId()); + } + + + if (assetUniverse.getClassifications() != null) + { + + } + super.assetProperties = new org.apache.atlas.ocf.properties.AssetUniverse(elementType, + assetUniverse.getGUID(), + assetUniverse.getURL(), + assetUniverse.getQualifiedName(), + assetUniverse.getDisplayName(), + assetUniverse.getShortDescription(), + assetUniverse.getDescription(), + assetUniverse.getOwner(), + classifications, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/ConnectedAssetErrorCode.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/ConnectedAssetErrorCode.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/ConnectedAssetErrorCode.java new file mode 100644 index 0000000..84bf572 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/ConnectedAssetErrorCode.java @@ -0,0 +1,194 @@ +/* + * 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.omas.connectedasset.ffdc; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.MessageFormat; +import java.util.Arrays; + +/** + * The ConnectedAssetErrorCode is used to define first failure data capture (FFDC) for errors that occur when + * working with + * OCF Connectors. + * It is used in conjunction with all Connected Asset OMAS Exceptions, both Checked and Runtime (unchecked). + * + * The 5 fields in the enum are: + * <ul> + * <li>HTTP Error Code - for translating between REST and JAVA - Typically the numbers used are:</li> + * <li><ul> + * <li>500 - internal error</li> + * <li>400 - invalid parameters</li> + * <li>404 - not found</li> + * <li>409 - data conflict errors - eg item already defined</li> + * </ul></li> + * <li>Error Message Id - to uniquely identify the message</li> + * <li>Error Message Text - includes placeholder to allow additional values to be captured</li> + * <li>SystemAction - describes the result of the error</li> + * <li>UserAction - describes how a user should correct the error</li> + * </ul> + */ +public enum ConnectedAssetErrorCode +{ + SERVER_URL_NOT_SPECIFIED(400, "OMAS-CONNECTEDASSET-400-001", + "The OMAS Server URL is null", + "The system is unable to connect to the OMAS Server to populate the ConnectedAssetProperties object.", + "Retry the request when the OMAS Service is available."), + SERVER_URL_MALFORMED(400, "OMAS-CONNECTEDASSET-400-002", + "The OMAS Server URL {0} is not in a recognized format", + "The system is unable to connect to the OMAS Server to populate the ConnectedAssetProperties object.", + "Retry the request when the OMAS Service is available."), + NULL_CONNECTION(400, "OMAS-CONNECTEDASSET-400-003", + "The connection passed to OMASConnectedAssetProperties for connector {0} is null.", + "The system is unable to populate the ConnectedAssetProperties object because it needs the connection to identify the asset.", + "Look for other error messages to identify what caused this error. When the issue is resolved, retry the request."), + NULL_CONNECTION_ID(400, "OMAS-CONNECTEDASSET-400-004", + "The connection \'{0}\' passed to OMASConnectedAssetProperties has a null GUID inside it.", + "The system is unable to populate the ConnectedAssetProperties object because it needs the connection to identify the asset.", + "Look for other error messages to identify what caused this error. When the issue is resolved, retry the request."), + NULL_RELATED_ASSET(400, "OMAS-CONNECTEDASSET-400-005", + "The related asset is null.", + "The system is unable to populate the RelatedAssetProperties object because it needs the URL to identify the asset.", + "Look for other error messages to identify what caused this error. When the issue is resolved, retry the request."), + NULL_PROPERTY_NAME(400, "OMAS-CONNECTEDASSET-400-006 ", + "Null property name passed to operation {0} of type {1}", + "A request to set an additional property failed because the property name passed was null", + "Recode the call to the property object with a valid property name and retry."), + NULL_CLASSIFICATION_NAME(400, "OMAS-CONNECTEDASSET-400-007 ", + "No classification name for entity {0} of type {1}", + "A classification with a null name is assigned to an entity. This value should come from a metadata repository, and always be filled in.", + "Look for other error messages to identify the source of the problem. Identify the metadata repository where the asset came from. Correct the cause of the error and then retry."), + NULL_TAG_NAME(400, "OMAS-CONNECTEDASSET-400-008 ", + "Null tag name passed to operation {0} of type {1}", + "A request to set the name of an informal tag property failed because the name passed was null", + "Recode the call to the property object with a valid name and retry."), + SERVER_NOT_AVAILABLE(404, "OMAS-CONNECTEDASSET-404-001", + "The OMAS Server is not available", + "The system is unable to populate the ConnectedAssetProperties object.", + "Retry the request when the OMAS Service is available.") + ; + + private int httpErrorCode; + private String errorMessageId; + private String errorMessage; + private String systemAction; + private String userAction; + + private static final Logger log = LoggerFactory.getLogger(ConnectedAssetErrorCode.class); + + + /** + * The constructor for ConnectedAssetErrorCode expects to be passed one of the enumeration rows defined in + * ConnectedAssetErrorCode above. For example: + * + * ConnectedAssetErrorCode errorCode = ConnectedAssetErrorCode.SERVER_NOT_AVAILABLE; + * + * This will expand out to the 5 parameters shown below. + * + * @param newHTTPErrorCode - error code to use over REST calls + * @param newErrorMessageId - unique Id for the message + * @param newErrorMessage - text for the message + * @param newSystemAction - description of the action taken by the system when the error condition happened + * @param newUserAction - instructions for resolving the error + */ + ConnectedAssetErrorCode(int newHTTPErrorCode, String newErrorMessageId, String newErrorMessage, String newSystemAction, String newUserAction) + { + this.httpErrorCode = newHTTPErrorCode; + this.errorMessageId = newErrorMessageId; + this.errorMessage = newErrorMessage; + this.systemAction = newSystemAction; + this.userAction = newUserAction; + } + + + public int getHTTPErrorCode() + { + return httpErrorCode; + } + + + /** + * Returns the unique identifier for the error message. + * + * @return errorMessageId + */ + public String getErrorMessageId() + { + return errorMessageId; + } + + + /** + * Returns the error message with placeholders for specific details. + * + * @return errorMessage (unformatted) + */ + public String getUnformattedErrorMessage() + { + return errorMessage; + } + + + /** + * Returns the error message with the placeholders filled out with the supplied parameters. + * + * @param params - strings that plug into the placeholders in the errorMessage + * @return errorMessage (formatted with supplied parameters) + */ + public String getFormattedErrorMessage(String... params) + { + if (log.isDebugEnabled()) + { + log.debug(String.format("<== OCFErrorCode.getMessage(%s)", Arrays.toString(params))); + } + + MessageFormat mf = new MessageFormat(errorMessage); + String result = mf.format(params); + + if (log.isDebugEnabled()) + { + log.debug(String.format("==> OCFErrorCode.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 + */ + public String getSystemAction() + { + return systemAction; + } + + + /** + * Returns instructions of how to resolve the issue reported in this exception. + * + * @return userAction + */ + public String getUserAction() + { + return userAction; + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/README.md ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/README.md b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/README.md new file mode 100644 index 0000000..02e6a7f --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/README.md @@ -0,0 +1,46 @@ +<!-- + ~ 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 + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ 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. + --> + +# ConnectedAsset OMAS FFDC + +Package org.apache.atlas.omas.connectedasset.ffdc provides the +first failure data capture support for the ConnectedAsset OMAS module. +This includes an error code enum, +a runtime exception, a base class for checked exceptions plus +implementation of each specific checked exception. + +The error code enum (ConnectedAssetErrorCode) has an entry for each unique situation +where an exception is returned. Each entry defines: + +* A unique id for the error +* An HTTP error code for rest calls +* A unique message Id +* Message text with place holders for specific values +* A description of the cause of the error and system action as a result. +* A description of how to correct the error (if known) + +Each exception (whether a checked or runtime exception) has two constructors. + +* The first constructor is used when a new error has been detected. + +* The second constructor is used when another exception has been caught. +This caught exception is passed on the constructor so it is effectively +embedded in the ConnectedAsset OMAS exception. + +Both constructors take the values from the ConnectedAssetErrorCode +enum to define the cause and resolution. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetCheckedExceptionBase.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetCheckedExceptionBase.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetCheckedExceptionBase.java new file mode 100644 index 0000000..7ebb080 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetCheckedExceptionBase.java @@ -0,0 +1,175 @@ +/* + * 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.omas.connectedasset.ffdc.exceptions; + +/** + * ConnectedAssetCheckedExceptionBase provides a checked exception for reporting errors found when using + * the Connected Asset OMAS services. + * + * Typically these errors are either configuration or operational errors that can be fixed by an administrator. + * However, there may be the odd bug that surfaces here. + * The ConnectedAssetErrorCode can be used with + * this exception to populate it with standard messages. The aim is to be able to uniquely identify the cause + * and remedy for the error. + */ +public class ConnectedAssetCheckedExceptionBase extends Exception +{ + /* + * These default values are only seen if this exception is initialized using one of its superclass constructors. + */ + private int reportedHTTPCode; + private String reportingClassName; + private String reportingActionDescription; + private String reportedErrorMessage; + private String reportedSystemAction; + private String reportedUserAction; + private Throwable reportedCaughtException = null; + + + /** + * This is the typical constructor used for creating a ConnectedAssetCheckedExceptionBase. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + */ + public ConnectedAssetCheckedExceptionBase(int httpCode, + String className, + String actionDescription, + String errorMessage, + String systemAction, + String userAction) + { + super(errorMessage); + this.reportedHTTPCode = httpCode; + this.reportingClassName = className; + this.reportingActionDescription = actionDescription; + this.reportedErrorMessage = errorMessage; + this.reportedSystemAction = systemAction; + this.reportedUserAction = userAction; + } + + + /** + * This is the constructor used for creating a ConnectedAssetCheckedExceptionBase + * that resulted from a previous error. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + * @param caughtError - the error that resulted in this exception. + */ + public ConnectedAssetCheckedExceptionBase(int httpCode, + String className, + String actionDescription, + String errorMessage, + String systemAction, + String userAction, + Throwable caughtError) + { + super(errorMessage, caughtError); + this.reportedHTTPCode = httpCode; + this.reportingClassName = className; + this.reportingActionDescription = actionDescription; + this.reportedErrorMessage = errorMessage; + this.reportedSystemAction = systemAction; + this.reportedUserAction = userAction; + this.reportedCaughtException = caughtError; + } + + + /** + * Return the HTTP response code to use with this exception. + * + * @return reportedHTTPCode + */ + public int getReportedHTTPCode() + { + return reportedHTTPCode; + } + + /** + * The class that created this exception. + * + * @return reportingClassName + */ + public String getReportingClassName() + { + return reportingClassName; + } + + + /** + * The type of request that the class was performing when the condition occurred that resulted in this + * exception. + * + * @return reportingActionDescription + */ + public String getReportingActionDescription() + { + return reportingActionDescription; + } + + + /** + * A formatted short description of the cause of the condition that resulted in this exception. + * + * @return reportedErrorMessage + */ + public String getErrorMessage() + { + return reportedErrorMessage; + } + + + /** + * A description of the action that the system took as a result of the error condition. + * + * @return reportedSystemAction + */ + public String getReportedSystemAction() + { + return reportedSystemAction; + } + + + /** + * A description of the action necessary to correct the error. + * + * @return reportedUserAction + */ + public String getReportedUserAction() + { + return reportedUserAction; + } + + + /** + * An exception that was caught and wrapped by this exception. If a null is returned, then this exception is + * newly created and not the result of a previous exception. + * + * @return reportedCaughtException + */ + public Throwable getReportedCaughtException() { return reportedCaughtException; } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetRuntimeException.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetRuntimeException.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetRuntimeException.java new file mode 100644 index 0000000..a48f746 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/ConnectedAssetRuntimeException.java @@ -0,0 +1,158 @@ +/* + * 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.omas.connectedasset.ffdc.exceptions; + +/** + * ConnectedAssetRuntimeException is used for all runtime exceptions generated by the connected asset OMAS. + * It is used in conjunction with the ConnectedAssetErrorCode to provide first failure data capture for these errors. + */ +public class ConnectedAssetRuntimeException extends RuntimeException +{ + /* + * These default values are only seen if this exception is initialized using one of its superclass constructors. + */ + private int reportedHTTPCode = 500; + private String reportingClassName = "<Unknown>"; + private String reportingActionDescription = "<Unknown>"; + private String reportedErrorMessage = "<Unknown>"; + private String reportedSystemAction = "<Unknown>"; + private String reportedUserAction = "<Unknown>"; + private Throwable reportedCaughtException = null; + + + /** + * This is the typical constructor used for creating an ConnectedAssetRuntimeException. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + */ + public ConnectedAssetRuntimeException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction) + { + super(errorMessage); + this.reportedHTTPCode = httpCode; + this.reportingClassName = className; + this.reportingActionDescription = actionDescription; + this.reportedErrorMessage = errorMessage; + this.reportedSystemAction = systemAction; + this.reportedUserAction = userAction; + } + + + /** + * This is the constructor used for creating a ConnectedAssetRuntimeException that is the result of + * another error being thrown. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + * @param caughtError - previous error causing this exception + */ + public ConnectedAssetRuntimeException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction, Throwable caughtError) + { + super(errorMessage, caughtError); + this.reportedHTTPCode = httpCode; + this.reportingClassName = className; + this.reportingActionDescription = actionDescription; + this.reportedErrorMessage = errorMessage; + this.reportedSystemAction = systemAction; + this.reportedUserAction = userAction; + this.reportedCaughtException = caughtError; + } + + + /** + * Return the HTTP response code to use with this exception. + * + * @return reportedHTTPCode + */ + public int getReportedHTTPCode() + { + return reportedHTTPCode; + } + + /** + * The class that created this exception. + * + * @return reportingClassName + */ + public String getReportingClassName() + { + return reportingClassName; + } + + + /** + * The type of request that the class was performing when the condition occurred that resulted in this + * exception. + * + * @return reportingActionDescription + */ + public String getReportingActionDescription() + { + return reportingActionDescription; + } + + + /** + * A formatted short description of the cause of the condition that resulted in this exception. + * + * @return reportedErrorMessage + */ + public String getErrorMessage() + { + return reportedErrorMessage; + } + + + /** + * A description of the action that the system took as a result of the error condition. + * + * @return reportedSystemAction + */ + public String getReportedSystemAction() + { + return reportedSystemAction; + } + + + /** + * A description of the action necessary to correct the error. + * + * @return reportedUserAction + */ + public String getReportedUserAction() + { + return reportedUserAction; + } + + + /** + * An exception that was caught and wrapped by this exception. If a null is returned, then this exception is + * newly created and not the result of a previous exception. + * + * @return reportedCaughtException + */ + public Throwable getReportedCaughtException() { return reportedCaughtException; } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/InvalidParameterException.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/InvalidParameterException.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/InvalidParameterException.java new file mode 100644 index 0000000..d8b16bc --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/InvalidParameterException.java @@ -0,0 +1,58 @@ +/* + * 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.omas.connectedasset.ffdc.exceptions; + + +/** + * The InvalidParameterException is thrown by theConnectedAsset OMAS when a parameters is null or an invalid + * value. + */ +public class InvalidParameterException extends ConnectedAssetCheckedExceptionBase +{ + /** + * This is the typical constructor used for creating a InvalidParameterException. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + */ + public InvalidParameterException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction); + } + + + /** + * This is the constructor used for creating a InvalidParameterException that resulted from a previous error. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + * @param caughtError - the error that resulted in this exception. + * */ + public InvalidParameterException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction, Throwable caughtError) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction, caughtError); + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/PropertyServerException.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/PropertyServerException.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/PropertyServerException.java new file mode 100644 index 0000000..7e71368 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/PropertyServerException.java @@ -0,0 +1,57 @@ +/* + * 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.omas.connectedasset.ffdc.exceptions; + +/** + * The PropertyServerException is thrown by the Connected OMAS when it is not able to communicate with the + * property server. + */ +public class PropertyServerException extends ConnectedAssetCheckedExceptionBase +{ + /** + * This is the typical constructor used for creating a PropertyServerException. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + */ + public PropertyServerException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction); + } + + + /** + * This is the constructor used for creating a PropertyServerException that resulted from a previous error. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + * @param caughtError - the error that resulted in this exception. + * */ + public PropertyServerException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction, Throwable caughtError) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction, caughtError); + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UnrecognizedConnectionGUIDException.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UnrecognizedConnectionGUIDException.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UnrecognizedConnectionGUIDException.java new file mode 100644 index 0000000..2e3a351 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UnrecognizedConnectionGUIDException.java @@ -0,0 +1,59 @@ +/* + * 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.omas.connectedasset.ffdc.exceptions; + + +/** + * The UnrecognizedConnectionGUIDException is thrown by the Connected Asset OMAS when the unique identifier (guid) + * used to request a connection object from the property server is either unrecognized, or is the identifier + * for a different type of object. + */ +public class UnrecognizedConnectionGUIDException extends ConnectedAssetCheckedExceptionBase +{ + /** + * This is the typical constructor used for creating a UnrecognizedConnectionGUIDException. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + */ + public UnrecognizedConnectionGUIDException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction); + } + + + /** + * This is the constructor used for creating a UnrecognizedConnectionGUIDException that resulted from a previous error. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + * @param caughtError - the error that resulted in this exception. + */ + public UnrecognizedConnectionGUIDException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction, Throwable caughtError) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction, caughtError); + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UserNotAuthorizedException.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UserNotAuthorizedException.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UserNotAuthorizedException.java new file mode 100644 index 0000000..2cf5476 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/ffdc/exceptions/UserNotAuthorizedException.java @@ -0,0 +1,58 @@ +/* + * 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.omas.connectedasset.ffdc.exceptions; + + +/** + * The UserNotAuthorizedException is thrown by the Connected Asset OMAS when a userId passed on a request is not + * authorized to perform the requested action. + */ +public class UserNotAuthorizedException extends ConnectedAssetCheckedExceptionBase +{ + /** + * This is the typical constructor used for creating a UserNotAuthorizedException. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + */ + public UserNotAuthorizedException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction); + } + + + /** + * This is the constructor used for creating a UserNotAuthorizedException that resulted from a previous error. + * + * @param httpCode - http response code to use if this exception flows over a rest call + * @param className - name of class reporting error + * @param actionDescription - description of function it was performing when error detected + * @param errorMessage - description of error + * @param systemAction - actions of the system as a result of the error + * @param userAction - instructions for correcting the error + * @param caughtError - the error that resulted in this exception. + * */ + public UserNotAuthorizedException(int httpCode, String className, String actionDescription, String errorMessage, String systemAction, String userAction, Throwable caughtError) + { + super(httpCode, className, actionDescription, errorMessage, systemAction, userAction, caughtError); + } +} http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/AdditionalProperties.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/AdditionalProperties.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/AdditionalProperties.java new file mode 100644 index 0000000..689cda0 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/AdditionalProperties.java @@ -0,0 +1,149 @@ +/* + * 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.omas.connectedasset.properties; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import org.apache.atlas.omas.connectedasset.ffdc.ConnectedAssetErrorCode; +import org.apache.atlas.omas.connectedasset.ffdc.exceptions.ConnectedAssetRuntimeException; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; + + +/** + * The AdditionalProperties class provides support for arbitrary properties to be added to a properties object. + * It wraps a java.util.Map map object built around HashMap. + */ +@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown=true) +public class AdditionalProperties extends PropertyBase +{ + private Map<String,Object> additionalProperties = new HashMap<>(); + + /** + * Constructor for a new set of additional properties that are connected either directly or indirectly to an asset. + */ + public AdditionalProperties() + { + super(); + } + + + /** + * Copy/clone Constructor for additional properties that are connected to an asset. + * + * @param templateProperties - template object to copy. + */ + public AdditionalProperties(AdditionalProperties templateProperties) + { + super(templateProperties); + + /* + * An empty properties object is created in the private variable declaration so nothing to do. + */ + if (templateProperties != null) + { + /* + * Process templateProperties if they are not null + */ + Iterator<String> propertyNames = templateProperties.getPropertyNames(); + + if (propertyNames != null) + { + while (propertyNames.hasNext()) + { + String newPropertyName = propertyNames.next(); + Object newPropertyValue = templateProperties.getProperty(newPropertyName); + + additionalProperties.put(newPropertyName, newPropertyValue); + } + } + } + } + + + /** + * Returns a list of the additional stored properties for the element. + * If no stored properties are present then null is returned. + * + * @return list of additional properties + */ + public Iterator<String> getPropertyNames() + { + return additionalProperties.keySet().iterator(); + } + + + /** + * Returns the requested additional stored property for the element. + * If no stored property with that name is present then null is returned. + * + * @param name - String name of the property to return. + * @return requested property value. + */ + public Object getProperty(String name) + { + return additionalProperties.get(name); + } + + + /** + * Adds or updates an additional property. + * If a null is supplied for the property name, an OCF runtime exception is thrown. + * If a null is supplied for the property value, the property is removed. + * + * @param newPropertyName - name + * @param newPropertyValue - value + */ + public void setProperty(String newPropertyName, Object newPropertyValue) + { + final String methodName = "setProperty"; + + if (newPropertyName == null) + { + /* + * Build and throw exception. + */ + ConnectedAssetErrorCode errorCode = ConnectedAssetErrorCode.NULL_PROPERTY_NAME; + String errorMessage = errorCode.getErrorMessageId() + + errorCode.getFormattedErrorMessage(methodName, this.getClass().getName()); + + throw new ConnectedAssetRuntimeException(errorCode.getHTTPErrorCode(), + this.getClass().getName(), + methodName, + errorMessage, + errorCode.getSystemAction(), + errorCode.getUserAction()); + } + else if (newPropertyValue == null) + { + additionalProperties.remove(newPropertyName); + } + else + { + additionalProperties.put(newPropertyName, newPropertyValue); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Analysis.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Analysis.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Analysis.java new file mode 100644 index 0000000..e400d7f --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Analysis.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.omas.connectedasset.properties; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.ArrayList; +import java.util.List; + +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; + +/** + * Analysis returns the Annotations for the connected asset. + * Annotations are created by Open Discovery Framework (ODF) discovery services. Each Annotation + * contains the results of a particular type of analysis. + * + * The Analysis class holds a full list of all of the Annotation and offers methods for retrieving + * different subsets of the Annotations. + */ +@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown=true) +public class Analysis extends PropertyBase +{ + private List<Annotation> allAnnotations = null; + + + /** + * Default Constructor + */ + public Analysis() + { + super(); + } + + + /** + * Copy/clone constructor - the parentAsset is passed separately to the template because it is also + * likely to be being cloned in the same operation and we want the analysis clone to point to the + * asset clone and not the original asset. + * + * @param templateAnalysis - template for setting up the properties. + */ + public Analysis(Analysis templateAnalysis) + { + super(templateAnalysis); + + /* + * Only create a child object if the template is not null. + */ + if (templateAnalysis != null) + { + List<Annotation> templateAllAnnotations = templateAnalysis.getAnnotations(); + + if (templateAllAnnotations != null) + { + /* + * Copy over the annotations ensuring the parent asset is this object's parent, not the template's parent. + */ + allAnnotations = new ArrayList<>(templateAnalysis.getAnnotations()); + } + } + } + + + /** + * Return an iterator containing all of the annotations for this asset. + * + * @return Annotations - list of annotations + */ + public List<Annotation> getAnnotations() + { + return new ArrayList<>(allAnnotations); + } + + + /** + * Initialize Analysis with a new set of annotations. This overrides any annotations previously held + * by Analysis. + * + * @param newAnnotations - new annotations + */ + public void setAnnotations(List<Annotation> newAnnotations) + { + /* + * A copy of the annotations is taken to be sure the pointers are all at the start. + */ + allAnnotations = new ArrayList<>(newAnnotations); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/f57fd7f0/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Annotation.java ---------------------------------------------------------------------- diff --git a/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Annotation.java b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Annotation.java new file mode 100644 index 0000000..174ef33 --- /dev/null +++ b/omas-connectedasset/src/main/java/org/apache/atlas/omas/connectedasset/properties/Annotation.java @@ -0,0 +1,472 @@ +/* + * 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.omas.connectedasset.properties; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.Date; + +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; + +/** + * An annotation describes the results of an analysis undertaken by an Open Discovery Framework (ODF) discovery service. + * It describes when the analysis happened, the type of analysis and the results. + */ +@JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown=true) +public class Annotation extends ElementHeader +{ + /* + * Details from the AnnotationReport entity + */ + private String reportName = null; + private String reportDescription = null; + private Date creationDate = null; + private AdditionalProperties analysisParameters = null; + + /* + * Details from the Annotation entity itself + */ + private String annotationType = null; + private String summary = null; + private int confidenceLevel = 0; + private String expression = null; + private String explanation = null; + private String analysisStep = null; + private String jsonProperties = null; + private AnnotationStatus annotationStatus = null; + + /* + * Details from the latest AnnotationReview entity. + */ + private Date reviewDate = null; + private String steward = null; + private String reviewComment = null; + + /* + * Additional properties added directly to the Annotation entity and supported by + * the sub-types of Annotation. + */ + private AdditionalProperties additionalProperties = null; + + + /** + * Default Constructor + */ + public Annotation() + { + super(); + } + + + /** + * Copy/clone Constructor + * + * @param templateAnnotation - template object to copy. + */ + public Annotation(Annotation templateAnnotation) + { + /* + * Remember the parent + */ + super(templateAnnotation); + + if (templateAnnotation != null) + { + /* + * Copy the properties from the template into this annotation. + */ + this.reportName = templateAnnotation.getReportName(); + this.reportDescription = templateAnnotation.getReportDescription(); + this.creationDate = templateAnnotation.getCreationDate(); + this.analysisParameters = templateAnnotation.getAnalysisParameters(); + this.annotationType = templateAnnotation.getAnnotationType(); + this.summary = templateAnnotation.getSummary(); + this.confidenceLevel = templateAnnotation.getConfidenceLevel(); + this.expression = templateAnnotation.getExpression(); + this.explanation = templateAnnotation.getExplanation(); + this.analysisStep = templateAnnotation.getAnalysisStep(); + this.jsonProperties = templateAnnotation.getJsonProperties(); + this.annotationStatus = templateAnnotation.getAnnotationStatus(); + this.reviewDate = templateAnnotation.getReviewDate(); + this.steward = templateAnnotation.getSteward(); + this.reviewComment = templateAnnotation.getReviewComment(); + this.additionalProperties = new AdditionalProperties(templateAnnotation.getAdditionalProperties()); + } + } + + + /** + * Return the name of the discovery analysis report that created this annotation. + * + * @return String - report name + */ + public String getReportName() + { + return reportName; + } + + + /** + * Set up the discovery analysis report name. + * + * @param reportName - report name string. + */ + public void setReportName(String reportName) + { + this.reportName = reportName; + } + + /** + * Return the discovery analysis report description that this annotation is a part of. + * + * @return String - report description + */ + public String getReportDescription() + { + return reportDescription; + } + + + /** + * Annotations are created as part of a DiscoveryAnalysisReport. This property contains the overall + * report description associated with this annotation. + * + * @param reportDescription - String for the report description + */ + public void setReportDescription(String reportDescription) + { + this.reportDescription = reportDescription; + } + + + /** + * Return the creation date for the annotation. If this date is not known then null is returned. + * + * @return Date that the annotation was created. + */ + public Date getCreationDate() { + return creationDate; + } + + + /** + * Set up the creation date for the annotation. This value should be available. It is supplied on the + * DiscoveryAnalysisReport entity. However, if no creation data is available, this property is stored as null. + * + * @param creationDate - Date that annotation was created. + */ + public void setCreationDate(Date creationDate) + { + this.creationDate = creationDate; + } + + + /** + * Return the properties that hold the parameters used to drive the discovery service's analysis. + * + * @return AdditionalProperties - object storing the analysis parameters + */ + public AdditionalProperties getAnalysisParameters() + { + return analysisParameters; + } + + + /** + * Set up the properties that hold the parameters used to drive the discovery service's analysis. + * + * @param analysisParameters - Properties for the analysis parameters + */ + public void setAnalysisParameters(AdditionalProperties analysisParameters) + { + this.analysisParameters = analysisParameters; + } + + + /** + * Return the informal name for the type of annotation. + * + * @return String - annotation type + */ + public String getAnnotationType() + { + return annotationType; + } + + + /** + * Set up the informal name for the type of annotation. The formal name in the model is given in the + * ElementType. + * + * @param annotationType - String for annotation type + */ + public void setAnnotationType(String annotationType) + { + this.annotationType = annotationType; + } + + + /** + * Return the summary description for the annotation. + * + * @return String - summary of annotation + */ + public String getSummary() + { + return summary; + } + + + /** + * Set up the summary description of the annotation. + * + * @param summary - String for summary + */ + public void setSummary(String summary) + { + this.summary = summary; + } + + + /** + * Return the confidence level of the discovery service that the annotation is correct. + * + * @return int - confidence level + */ + public int getConfidenceLevel() + { + return confidenceLevel; + } + + + /** + * Set up the confidence level of the discovery service that the annotation is correct. + * + * @param confidenceLevel - int for confidence level + */ + public void setConfidence(int confidenceLevel) + { + this.confidenceLevel = confidenceLevel; + } + + + /** + * Return the expression that represent the relationship between the annotation and the asset. + * + * @return String - expression + */ + public String getExpression() + { + return expression; + } + + + /** + * Set up the expression that represent the relationship between the annotation and the asset. + * + * @param expression - string for expression + */ + public void setExpression(String expression) + { + this.expression = expression; + } + + + /** + * Return the explanation for the annotation. + * + * @return String - explanation + */ + public String getExplanation() { + return explanation; + } + + + /** + * Set up the explanation for the annotation. + * + * @param explanation - String for the explanation + */ + public void setExplanation(String explanation) + { + this.explanation = explanation; + } + + + /** + * Return a description of the analysis step that the discovery service was in when it created the annotation. + * + * @return String - analysis step + */ + public String getAnalysisStep() + { + return analysisStep; + } + + + /** + * Set up the description of the analysis step that the discovery service was in when it created the annotation. + * + * @param analysisStep - String describing the analysis step + */ + public void setAnalysisStep(String analysisStep) + { + this.analysisStep = analysisStep; + } + + + /** + * Return the JSON properties associated with the annotation. + * + * @return String - JSON properties of annotation + */ + public String getJsonProperties() + { + return jsonProperties; + } + + + /** + * Set up the JSON properties associated with the annotation. + * + * @param jsonProperties String - JSON properties of annotation + */ + public void setJsonProperties(String jsonProperties) + { + this.jsonProperties = jsonProperties; + } + + + /** + * Return the current status of the annotation. + * + * @return AnnotationStatus - current status of annotation + */ + public AnnotationStatus getAnnotationStatus() + { + return annotationStatus; + } + + /** + * Set up the current status of the annotation. + * + * @param annotationStatus - AnnotationStatus enum + */ + public void setAnnotationStatus(AnnotationStatus annotationStatus) + { + this.annotationStatus = annotationStatus; + } + + + /** + * Return the date that this annotation was reviewed. If no review has taken place then this property is null. + * + * @return Date - review date + */ + public Date getReviewDate() + { + return reviewDate; + } + + + /** + * Set up the date that this annotation was reviewed. If no review has taken place then this property is null. + * + * @param reviewDate - date review conducted + */ + public void setReviewDate(Date reviewDate) + { + this.reviewDate = reviewDate; + } + + + /** + * Return the name of the steward that reviewed the annotation. + * + * @return String - steward's name. + */ + public String getSteward() + { + return steward; + } + + + /** + * Set up the name of the steward that reviewed the annotation. + * + * @param steward String name of steward that reviewed the annotation. + */ + public void setSteward(String steward) + { + this.steward = steward; + } + + + /** + * Return any comments made by the steward during the review. + * + * @return String - review comment + */ + public String getReviewComment() + { + return reviewComment; + } + + + /** + * Set the comment made by the steward as part of the review of the annotation. The comment covers the + * whole review which may have looked at multiple annotations so the comment may not necessarily + * refer to this annotation. + * + * @param reviewComment - string comment + */ + public void setReviewComment(String reviewComment) + { + this.reviewComment = reviewComment; + } + + + /** + * Return the additional properties for the Annotation. + * + * @return AdditionalProperties - additional properties object + */ + public AdditionalProperties getAdditionalProperties() + { + return additionalProperties; + } + + + /** + * Set up the additional properties for the annotation. These are a combination of the additional + * properties from the Annotation entity and any properties introduced by the subtypes of annotation. + * The naming convention for subtype property names is entityName.attributeName.value. If the property + * is a map then the map contents are named entityName.attributeName.propertyName.propertyValue. + * + * @param additionalProperties - additional properties object for annotation. + */ + public void setAdditionalProperties(AdditionalProperties additionalProperties) + { + this.additionalProperties = additionalProperties; + } +} \ No newline at end of file
