com.Grande.GSM.BACCWS_WAR.WS.REST.EOS.FirmwareDefinitionsEndpoint.java Source code

Java tutorial

Introduction

Here is the source code for com.Grande.GSM.BACCWS_WAR.WS.REST.EOS.FirmwareDefinitionsEndpoint.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.Grande.GSM.BACCWS_WAR.WS.REST.EOS;

import com.Grande.GSM.BACCWS_WAR.DataObjects.Database.FirmwareDefinition;
import com.Grande.GSM.BACCWS_WAR.DataObjects.QueryResponse;
import com.Grande.GSM.BACCWS_WAR.DataObjects.SenchaFilter;
import com.Grande.GSM.BACCWS_WAR.Utilities.SimpleLogging;
import com.Grande.GSM.BACCWS_WAR.Utilities.Translations;
import com.google.common.base.Stopwatch;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

/**
 * REST Web Service
 *
 * @author rich
 */
@Path("/")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public class FirmwareDefinitionsEndpoint {

    // <editor-fold defaultstate="collapsed" desc="****** Class member vars ******">
    @Inject
    private Translations trnBN;
    private final String strThreadId;
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="****** Bean State Methods ******">
    public FirmwareDefinitionsEndpoint() {
        this.strThreadId = String.valueOf(Thread.currentThread().getId());
        SimpleLogging.vLogEvent(this.strThreadId, "Constructor called");
    }
    // </editor-fold>

    @GET
    public String fetchFirmwareDefinitionsByMakeModel(@QueryParam("make") final String strMake,
            @QueryParam("model") final String strModel) {

        // <editor-fold defaultstate="collapsed" desc="****** Method vars ******">
        final Stopwatch timer = new Stopwatch();
        final QueryResponse qRes = new QueryResponse();
        String strResponse = null;
        FirmwareDefinition fdThis = null;
        // start the execution timer
        timer.start();
        // </editor-fold>

        try {

            qRes.vSetNode(java.net.InetAddress.getLocalHost().getHostName());

            fdThis = this.trnBN.pGetFirmwareDefinitionByMakeAndModel(strMake, strModel)
                    .orElseThrow(() -> new Exception(
                            "Make/model \"" + strMake + "/" + strModel + "\" not found in the firmware table"));
            qRes.vSetSuccessFlag(true);
            qRes.vAddResult(fdThis);

        } catch (Exception e) {

            // <editor-fold defaultstate="collapsed" desc="****** Handle failures ******">
            qRes.vSetSuccessFlag(false);
            // handle NPE differently since getMessage() is null
            if (e instanceof NullPointerException) {
                qRes.vSetMessage("NPE occured when serializing result to JSON! " + "File: "
                        + e.getStackTrace()[0].getFileName() + ", " + "Method: "
                        + e.getStackTrace()[0].getMethodName() + ", " + "Line: "
                        + e.getStackTrace()[0].getLineNumber());
            } else {
                qRes.vSetMessage(e.getMessage());
            }
            SimpleLogging.vLogException(this.strThreadId, e);
            // </editor-fold>

        } finally {

            // <editor-fold defaultstate="collapsed" desc="****** Stop timer, convert response to JSON ******">
            timer.stop();
            qRes.vSetRoundTrip(String.valueOf(timer.elapsedTime(TimeUnit.SECONDS)) + "."
                    + String.valueOf(timer.elapsedTime(TimeUnit.MILLISECONDS)));
            strResponse = this.trnBN.strQueryResponseToJSON(qRes);
            SimpleLogging.vLogEvent(this.strThreadId + "|" + qRes.strGetRoundTripInSeconds() + "s",
                    "retrieved " + qRes.intGetDataCount() + " records");
            // </editor-fold>

        }
        return strResponse;
    }

    public String fetchFirmwareDefinitions(@QueryParam("filter") String strFilter) {

        // <editor-fold defaultstate="collapsed" desc="****** Method vars ******">
        final Stopwatch timer = new Stopwatch();
        final QueryResponse qRes = new QueryResponse();
        String strResponse = null;
        String strMake = null;
        String strModel = null;
        List<SenchaFilter> lstFilters = null;
        List<FirmwareDefinition> lstFirmwareDefs = null;
        // start the execution timer
        timer.start();
        // </editor-fold>

        try {
            qRes.vSetNode(java.net.InetAddress.getLocalHost().getHostName());

            // <editor-fold defaultstate="collapsed" desc="****** No filters (return all records) ******">
            if (strFilter == null || strFilter.equals("")) {
                SimpleLogging.vLogEvent(this.strThreadId, "No filter detected, fetching all definitions");
                lstFirmwareDefs = this.trnBN.lstGetFirmwareDefinitions();
                SimpleLogging.vLogEvent(this.strThreadId, "Returning " + lstFirmwareDefs.size() + " definitions");
                // </editor-fold>

                // <editor-fold defaultstate="collapsed" desc="****** Evaluate/apply Sencha filters ******">
            } else {

                // <editor-fold defaultstate="collapsed" desc="****** Filter extraction logic ******">
                // Deserialize the filters
                SimpleLogging.vLogEvent(this.strThreadId, "Processing filter JSON: " + strFilter);
                lstFilters = this.trnBN.lstDeserializeSenchaFilter(strFilter);
                // extract filters that contain 'make' and 'model'
                //lstFilters = this.trnBN.lstFilterSenchaFiltersByStrings(lstFilters, "make", "model");
                SimpleLogging.vLogEvent(this.strThreadId,
                        "Extracted " + lstFilters.size() + " make/model filters: " + lstFilters);
                // </editor-fold>

                // <editor-fold defaultstate="collapsed" desc="****** Filter handling logic ******">
                lstFirmwareDefs = this.trnBN.lstGetFirmwareDefinitionByFilter(lstFilters);
                SimpleLogging.vLogEvent(this.strThreadId, "Returning " + lstFirmwareDefs.size() + " definitions");
                // </editor-fold>
            }
            qRes.vAddResult(lstFirmwareDefs.toArray());
            for (int x = 0; x < lstFirmwareDefs.size(); x++) {
                qRes.vAddResult(lstFirmwareDefs.get(x));
            }
            qRes.vSetSuccessFlag(true);
            // </editor-fold>

        } catch (Exception e) {

            // <editor-fold defaultstate="collapsed" desc="****** Handle failures ******">
            qRes.vSetSuccessFlag(false);
            // handle NPE differently since getMessage() is null
            if (e instanceof NullPointerException) {
                qRes.vSetMessage("NPE occured when serializing result to JSON! " + "File: "
                        + e.getStackTrace()[0].getFileName() + ", " + "Method: "
                        + e.getStackTrace()[0].getMethodName() + ", " + "Line: "
                        + e.getStackTrace()[0].getLineNumber());
            } else {
                qRes.vSetMessage(e.getMessage());
            }
            SimpleLogging.vLogException(this.strThreadId, e);
            // </editor-fold>

        } finally {

            // <editor-fold defaultstate="collapsed" desc="****** Stop timer, convert response to JSON ******">
            timer.stop();
            qRes.vSetRoundTrip(String.valueOf(timer.elapsedTime(TimeUnit.SECONDS)) + "."
                    + String.valueOf(timer.elapsedTime(TimeUnit.MILLISECONDS)));
            strResponse = this.trnBN.strQueryResponseToJSON(qRes);
            SimpleLogging.vLogEvent(this.strThreadId + "|" + qRes.strGetRoundTripInSeconds() + "s",
                    "retrieved " + qRes.intGetDataCount() + " records");
            // </editor-fold>

        }
        return strResponse;
    }

}