hydrograph.server.execution.tracking.utils.ExecutionTrackingUtils.java Source code

Java tutorial

Introduction

Here is the source code for hydrograph.server.execution.tracking.utils.ExecutionTrackingUtils.java

Source

/********************************************************************************
l * Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
 * Licensed 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 hydrograph.server.execution.tracking.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import hydrograph.server.execution.tracking.client.main.HydrographMain;

/**
 * The Class ExecutionTrackingUtils.
 */
public class ExecutionTrackingUtils {

    /** The Constant logger. */
    private final static Logger logger = Logger.getLogger(ExecutionTrackingUtils.class);

    /** The Constant PORT_NO. */
    private static final String PORT_NO = "EXECUTION_TRACKING_PORT";

    /** The Constant LOCAL_URL. */
    private static final String LOCAL_URL = "WEBSOCKET_LOCAL_HOST";

    /** The Constant TRACKING_ROUTE. */
    private static final String TRACKING_ROUTE = "WEBSOCKET_ROUTE";

    private static final String STATUS_FREQUENCY = "STATUS_FREQUENCY";

    private static final long defaultStatusFrequency = 2000;

    /** The route. */
    private String route = "/executionTracking";

    /** The host. */
    private String host = "ws://localhost:";

    /** The port no. */
    private String portNo = "8004";

    private long statusFrequency = defaultStatusFrequency;

    private String PROPERTY_FILE = "socket-server.properties";

    /** The Constant INSTANCE. */
    public static final ExecutionTrackingUtils INSTANCE = new ExecutionTrackingUtils();

    /**
     * Instantiates a new execution tracking utils.
     */
    private ExecutionTrackingUtils() {
    }

    /**
     * Gets the tracking url.
     *
     * @return the tracking url
     */
    public String getTrackingUrl(String trackingClientSocketPort) {
        if (!StringUtils.isNotBlank(trackingClientSocketPort)) {
            loadPropertyFile();
        } else {
            portNo = trackingClientSocketPort;
        }
        String url = host + portNo + route;

        logger.info("Hydrograph Execution Tracking URL: " + url);
        return url;
    }

    /**
     * Gets the port no.
     *
     * @return the port no
     */
    public String getPortNo() {
        return portNo;
    }

    public long getStatusFrequency() {
        return statusFrequency;
    }

    /**
     * This function will load property file to initialize the parameters values.
     *
     */
    public void loadPropertyFile() {
        try (FileInputStream stream = getExternalPropertyFilePath();
                InputStream inputStream = this.getClass().getResourceAsStream(getInternalPropertyFilePath());) {
            Properties properties = new Properties();

            if (stream != null) {
                properties.load(stream);
            } else {

                properties.load(inputStream);
            }

            if (!properties.isEmpty()) {
                portNo = properties.getProperty(PORT_NO);
                host = properties.getProperty(LOCAL_URL);
                route = properties.getProperty(TRACKING_ROUTE);
                String frequency = properties.getProperty(STATUS_FREQUENCY);
                statusFrequency = Long.parseLong(frequency);
            }
        } catch (IOException exception) {
            logger.error("Failed to load properties file", exception);
        }
    }

    private String getInternalPropertyFilePath() {
        String filePath = "/" + PROPERTY_FILE;
        return filePath;
    }

    private FileInputStream getExternalPropertyFilePath() {
        int index = 0;
        String dirPath = "";
        FileInputStream fileInputStream = null;
        try {
            Path path = Paths.get(HydrographMain.class.getProtectionDomain().getCodeSource().getLocation().toURI());
            String filePath = path.toString();
            index = filePath.lastIndexOf(File.separator);
            dirPath = filePath.substring(0, index) + File.separator + PROPERTY_FILE;

            File file = new File(dirPath);
            if (file.exists()) {
                fileInputStream = new FileInputStream(file);
            }
        } catch (URISyntaxException exception) {
            logger.error("File Path does not exist:" + dirPath, exception);
        } catch (FileNotFoundException exception) {
            logger.error("File not found: " + dirPath, exception);
        }
        return fileInputStream;
    }
}