com.microsoft.applicationinsights.test.framework.telemetries.TelemetryItem.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.applicationinsights.test.framework.telemetries.TelemetryItem.java

Source

/*
 * ApplicationInsights-Java
 * Copyright (c) Microsoft Corporation
 * All rights reserved.
 *
 * MIT License
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this
 * software and associated documentation files (the ""Software""), to deal in the Software
 * without restriction, including without limitation the rights to use, copy, modify, merge,
 * publish, distribute, sublicense, and/or sell copies of the Software, and to permit
 * persons to whom the Software is furnished to do so, subject to the following conditions:
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
 * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

package com.microsoft.applicationinsights.test.framework.telemetries;

import com.microsoft.applicationinsights.internal.util.LocalStringsUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.net.URISyntaxException;
import java.util.Properties;

/**
 * Created by moralt on 05/05/2015.
 */
public abstract class TelemetryItem extends Properties {
    private DocumentType docType;

    /**
     * Initializes a new TelemetryItem object
     * @param docType The document type of the telemetry item
     */
    public TelemetryItem(DocumentType docType) {
        this.docType = docType;
    }

    public TelemetryItem(DocumentType docType, JSONObject jsonObject) throws URISyntaxException, JSONException {
        this(docType);

        initTelemetryItemWithCommonProperties(jsonObject);
    }

    protected abstract String[] getDefaultPropertiesToCompare();

    public DocumentType getDocType() {
        return this.docType;
    }

    /**
     * Tests if the properties of the this item equals to the properties of another telemetry item
     * @param obj The other object
     * @return True if equals, otherwise false.
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj == null || !(obj instanceof TelemetryItem)) {
            return false;
        }

        TelemetryItem telemetry = (TelemetryItem) obj;

        if (telemetry.getDocType() != this.getDocType()) {
            return false;
        }

        for (String propertyName : getDefaultPropertiesToCompare()) {
            if (telemetry.getProperty(propertyName) == null && this.getProperty(propertyName) == null) {
                continue;
            }

            if (telemetry.getProperty(propertyName) == null || this.getProperty(propertyName) == null
                    || !telemetry.getProperty(propertyName).equalsIgnoreCase(this.getProperty(propertyName))) {
                System.out.println("Mismatch for property name '" + propertyName + "': '"
                        + telemetry.getProperty(propertyName) + "' '" + getProperty(propertyName) + "'.");
                return false;
            }
        }

        return true;
    }

    /**
     * Returns the Hashcode of the ID of this object
     * @return The Hashcode of the ID of this object
     */
    @Override
    public int hashCode() {
        int hash = 0;
        for (String propertyName : getDefaultPropertiesToCompare()) {
            String property = getProperty(propertyName);

            if (!LocalStringsUtils.isNullOrEmpty(property)) {
                hash ^= property.hashCode();
            }
        }

        return hash;
    }

    private void initTelemetryItemWithCommonProperties(JSONObject json) throws URISyntaxException, JSONException {
        System.out.println("Extracting JSON common properties (" + this.docType + ")");
        JSONObject context = json.getJSONObject("context");

        JSONObject sessionJson = context.getJSONObject("session");
        String sessionId = !sessionJson.isNull("id") ? sessionJson.getString("id") : "";

        JSONObject userJson = context.getJSONObject("user");
        String userId = !userJson.isNull("anonId") ? userJson.getString("anonId") : "";

        String operationId = context.getJSONObject("operation").getString("id");
        String operationName = context.getJSONObject("operation").getString("name");

        JSONObject custom = context.getJSONObject("custom");
        JSONArray dimensions = custom.getJSONArray("dimensions");

        String runId = null;
        for (int i = 0; i < dimensions.length(); i++) {
            JSONObject jsonObject = dimensions.getJSONObject(i);
            if (!jsonObject.isNull("runid")) {
                runId = jsonObject.getString("runid");
                break;
            }
        }

        this.setProperty("userId", userId);
        this.setProperty("sessionId", sessionId);
        this.setProperty("runId", runId);
        this.setProperty("operationId", operationId);
        this.setProperty("operationName", operationName);
    }
}