@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (obj instanceof Observation == false)
            return false;
        Observation other = (Observation) obj;
        if (other.getId() == null ^ this.getId() == null)
            return false;
        if (other.getId() != null && other.getId().equals(this.getId()) == false)
            return false;
        if (other.getStartTime() == null ^ this.getStartTime() == null)
            return false;
        if (other.getStartTime() != null && other.getStartTime().equals(this.getStartTime()) == false)
            return false;
        if (other.getEndTime() == null ^ this.getEndTime() == null)
            return false;
        if (other.getEndTime() != null && other.getEndTime().equals(this.getEndTime()) == false)
            return false;
        if (other.getSourceType() == null ^ this.getSourceType() == null)
            return false;
        if (other.getSourceType() != null && other.getSourceType().equals(this.getSourceType()) == false)
            return false;
        if (other.getSourceARN() == null ^ this.getSourceARN() == null)
            return false;
        if (other.getSourceARN() != null && other.getSourceARN().equals(this.getSourceARN()) == false)
            return false;
        if (other.getLogGroup() == null ^ this.getLogGroup() == null)
            return false;
        if (other.getLogGroup() != null && other.getLogGroup().equals(this.getLogGroup()) == false)
            return false;
        if (other.getLineTime() == null ^ this.getLineTime() == null)
            return false;
        if (other.getLineTime() != null && other.getLineTime().equals(this.getLineTime()) == false)
            return false;
        if (other.getLogText() == null ^ this.getLogText() == null)
            return false;
        if (other.getLogText() != null && other.getLogText().equals(this.getLogText()) == false)
            return false;
        if (other.getLogFilter() == null ^ this.getLogFilter() == null)
            return false;
        if (other.getLogFilter() != null && other.getLogFilter().equals(this.getLogFilter()) == false)
            return false;
        if (other.getMetricNamespace() == null ^ this.getMetricNamespace() == null)
            return false;
        if (other.getMetricNamespace() != null && other.getMetricNamespace().equals(this.getMetricNamespace()) == false)
            return false;
        if (other.getMetricName() == null ^ this.getMetricName() == null)
            return false;
        if (other.getMetricName() != null && other.getMetricName().equals(this.getMetricName()) == false)
            return false;
        if (other.getUnit() == null ^ this.getUnit() == null)
            return false;
        if (other.getUnit() != null && other.getUnit().equals(this.getUnit()) == false)
            return false;
        if (other.getValue() == null ^ this.getValue() == null)
            return false;
        if (other.getValue() != null && other.getValue().equals(this.getValue()) == false)
            return false;
        if (other.getCloudWatchEventId() == null ^ this.getCloudWatchEventId() == null)
            return false;
        if (other.getCloudWatchEventId() != null && other.getCloudWatchEventId().equals(this.getCloudWatchEventId()) == false)
            return false;
        if (other.getCloudWatchEventSource() == null ^ this.getCloudWatchEventSource() == null)
            return false;
        if (other.getCloudWatchEventSource() != null && other.getCloudWatchEventSource().equals(this.getCloudWatchEventSource()) == false)
            return false;
        if (other.getCloudWatchEventDetailType() == null ^ this.getCloudWatchEventDetailType() == null)
            return false;
        if (other.getCloudWatchEventDetailType() != null && other.getCloudWatchEventDetailType().equals(this.getCloudWatchEventDetailType()) == false)
            return false;
        if (other.getHealthEventArn() == null ^ this.getHealthEventArn() == null)
            return false;
        if (other.getHealthEventArn() != null && other.getHealthEventArn().equals(this.getHealthEventArn()) == false)
            return false;
        if (other.getHealthService() == null ^ this.getHealthService() == null)
            return false;
        if (other.getHealthService() != null && other.getHealthService().equals(this.getHealthService()) == false)
            return false;
        if (other.getHealthEventTypeCode() == null ^ this.getHealthEventTypeCode() == null)
            return false;
        if (other.getHealthEventTypeCode() != null && other.getHealthEventTypeCode().equals(this.getHealthEventTypeCode()) == false)
            return false;
        if (other.getHealthEventTypeCategory() == null ^ this.getHealthEventTypeCategory() == null)
            return false;
        if (other.getHealthEventTypeCategory() != null && other.getHealthEventTypeCategory().equals(this.getHealthEventTypeCategory()) == false)
            return false;
        if (other.getHealthEventDescription() == null ^ this.getHealthEventDescription() == null)
            return false;
        if (other.getHealthEventDescription() != null && other.getHealthEventDescription().equals(this.getHealthEventDescription()) == false)
            return false;
        if (other.getCodeDeployDeploymentId() == null ^ this.getCodeDeployDeploymentId() == null)
            return false;
        if (other.getCodeDeployDeploymentId() != null && other.getCodeDeployDeploymentId().equals(this.getCodeDeployDeploymentId()) == false)
            return false;
        if (other.getCodeDeployDeploymentGroup() == null ^ this.getCodeDeployDeploymentGroup() == null)
            return false;
        if (other.getCodeDeployDeploymentGroup() != null && other.getCodeDeployDeploymentGroup().equals(this.getCodeDeployDeploymentGroup()) == false)
            return false;
        if (other.getCodeDeployState() == null ^ this.getCodeDeployState() == null)
            return false;
        if (other.getCodeDeployState() != null && other.getCodeDeployState().equals(this.getCodeDeployState()) == false)
            return false;
        if (other.getCodeDeployApplication() == null ^ this.getCodeDeployApplication() == null)
            return false;
        if (other.getCodeDeployApplication() != null && other.getCodeDeployApplication().equals(this.getCodeDeployApplication()) == false)
            return false;
        if (other.getCodeDeployInstanceGroupId() == null ^ this.getCodeDeployInstanceGroupId() == null)
            return false;
        if (other.getCodeDeployInstanceGroupId() != null && other.getCodeDeployInstanceGroupId().equals(this.getCodeDeployInstanceGroupId()) == false)
            return false;
        if (other.getEc2State() == null ^ this.getEc2State() == null)
            return false;
        if (other.getEc2State() != null && other.getEc2State().equals(this.getEc2State()) == false)
            return false;
        if (other.getRdsEventCategories() == null ^ this.getRdsEventCategories() == null)
            return false;
        if (other.getRdsEventCategories() != null && other.getRdsEventCategories().equals(this.getRdsEventCategories()) == false)
            return false;
        if (other.getRdsEventMessage() == null ^ this.getRdsEventMessage() == null)
            return false;
        if (other.getRdsEventMessage() != null && other.getRdsEventMessage().equals(this.getRdsEventMessage()) == false)
            return false;
        if (other.getS3EventName() == null ^ this.getS3EventName() == null)
            return false;
        if (other.getS3EventName() != null && other.getS3EventName().equals(this.getS3EventName()) == false)
            return false;
        if (other.getStatesExecutionArn() == null ^ this.getStatesExecutionArn() == null)
            return false;
        if (other.getStatesExecutionArn() != null && other.getStatesExecutionArn().equals(this.getStatesExecutionArn()) == false)
            return false;
        if (other.getStatesArn() == null ^ this.getStatesArn() == null)
            return false;
        if (other.getStatesArn() != null && other.getStatesArn().equals(this.getStatesArn()) == false)
            return false;
        if (other.getStatesStatus() == null ^ this.getStatesStatus() == null)
            return false;
        if (other.getStatesStatus() != null && other.getStatesStatus().equals(this.getStatesStatus()) == false)
            return false;
        if (other.getStatesInput() == null ^ this.getStatesInput() == null)
            return false;
        if (other.getStatesInput() != null && other.getStatesInput().equals(this.getStatesInput()) == false)
            return false;
        if (other.getEbsEvent() == null ^ this.getEbsEvent() == null)
            return false;
        if (other.getEbsEvent() != null && other.getEbsEvent().equals(this.getEbsEvent()) == false)
            return false;
        if (other.getEbsResult() == null ^ this.getEbsResult() == null)
            return false;
        if (other.getEbsResult() != null && other.getEbsResult().equals(this.getEbsResult()) == false)
            return false;
        if (other.getEbsCause() == null ^ this.getEbsCause() == null)
            return false;
        if (other.getEbsCause() != null && other.getEbsCause().equals(this.getEbsCause()) == false)
            return false;
        if (other.getEbsRequestId() == null ^ this.getEbsRequestId() == null)
            return false;
        if (other.getEbsRequestId() != null && other.getEbsRequestId().equals(this.getEbsRequestId()) == false)
            return false;
        if (other.getXRayFaultPercent() == null ^ this.getXRayFaultPercent() == null)
            return false;
        if (other.getXRayFaultPercent() != null && other.getXRayFaultPercent().equals(this.getXRayFaultPercent()) == false)
            return false;
        if (other.getXRayThrottlePercent() == null ^ this.getXRayThrottlePercent() == null)
            return false;
        if (other.getXRayThrottlePercent() != null && other.getXRayThrottlePercent().equals(this.getXRayThrottlePercent()) == false)
            return false;
        if (other.getXRayErrorPercent() == null ^ this.getXRayErrorPercent() == null)
            return false;
        if (other.getXRayErrorPercent() != null && other.getXRayErrorPercent().equals(this.getXRayErrorPercent()) == false)
            return false;
        if (other.getXRayRequestCount() == null ^ this.getXRayRequestCount() == null)
            return false;
        if (other.getXRayRequestCount() != null && other.getXRayRequestCount().equals(this.getXRayRequestCount()) == false)
            return false;
        if (other.getXRayRequestAverageLatency() == null ^ this.getXRayRequestAverageLatency() == null)
            return false;
        if (other.getXRayRequestAverageLatency() != null && other.getXRayRequestAverageLatency().equals(this.getXRayRequestAverageLatency()) == false)
            return false;
        if (other.getXRayNodeName() == null ^ this.getXRayNodeName() == null)
            return false;
        if (other.getXRayNodeName() != null && other.getXRayNodeName().equals(this.getXRayNodeName()) == false)
            return false;
        if (other.getXRayNodeType() == null ^ this.getXRayNodeType() == null)
            return false;
        if (other.getXRayNodeType() != null && other.getXRayNodeType().equals(this.getXRayNodeType()) == false)
            return false;
        return true;
    }
Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
redacted from this string using a placeholder value.

@return A string representation of this object.

@see java.lang.Object#toString()
aws-java-sdk-applicationinsights/src/main/java/com/amazonaws/services/applicationinsights/model/Observation.java