io.swagger.api.impl.LogApiServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for io.swagger.api.impl.LogApiServiceImpl.java

Source

/*
  * Copyright (c) 2017 {TECNALIA}.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the The MIT License (MIT).
* which accompanies this distribution, and is available at
* http://opensource.org/licenses/MIT
*
* Contributors:
*    Gorka Benguria Elguezabal {TECNALIA}
*    Gorka Mikel Echevarra {TECNALIA}
* Initially developed in the context of OPERANDO EU project www.operando.eu
 */
package io.swagger.api.impl;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Properties;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import io.swagger.api.ApiResponseMessage;
import io.swagger.api.LogApiService;
import io.swagger.api.NotFoundException;
import io.swagger.model.LogResponse;
import io.swagger.model.LogResponseExt;

@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaJerseyServerCodegen", date = "2016-06-06T10:10:57.937Z")
public class LogApiServiceImpl extends LogApiService {
    private Connection connection = null;
    private Statement statement = null;
    private ResultSet resultSet = null;

    // @Override
    public Response getLogsTest(String dateFrom, String dateTo, String logLevel, String requesterType,
            String requesterId, String logPriority, String title, String keyWords, String logType,
            String affectedUserId, SecurityContext securityContext) throws NotFoundException {
        // do some magic!

        String strSelect;
        strSelect = composeSqlQuery(dateFrom, dateTo, logLevel, requesterType, requesterId, logPriority, title,
                keyWords, logType, affectedUserId, "");

        Properties props;
        props = loadDbProperties();

        connection = getDbConnection(props);
        try {
            statement = connection.createStatement();
            resultSet = statement.executeQuery(strSelect);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ArrayList<LogResponse> logResponsesArray = null;
        try {
            // resultSet.next();
            // value=resultSet.getString("DATED");
            logResponsesArray = composeResultsFromResultSet();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return Response.ok()
                .entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic! " + logResponsesArray.size()))
                .build();
    }

    /**
     * @throws SQLException
     */
    private ArrayList<LogResponse> composeResultsFromResultSet() throws SQLException {
        ArrayList<LogResponse> logResponsesArray = new ArrayList<LogResponse>();
        LogResponse logResponse;

        while (resultSet.next()) {
            logResponse = new LogResponse();
            logResponse.setLogDate(resultSet.getString("DATED"));
            // GBE: Attention!!! if the value is in lowercase it crashes, we add
            // a uppercase function
            if (resultSet.getString("LEVEL") != null)
                logResponse.setLogLevel(resultSet.getString("LEVEL").toUpperCase());

            if (resultSet.getString("LOGPRIORITY") != null)
                logResponse.setLogPriority(resultSet.getString("LOGPRIORITY").toUpperCase());
            logResponse.setRequesterId(resultSet.getString("REQUESTERID"));
            if (resultSet.getString("REQUESTERTYPE") != null)
                logResponse.setRequesterType(resultSet.getString("REQUESTERTYPE").toUpperCase());
            logResponse.setTitle(resultSet.getString("TITLE"));
            logResponse.setDescription(resultSet.getString("MESSAGE"));
            if (resultSet.getString("LOGTYPE") != null)
                logResponse.setLogType(resultSet.getString("LOGTYPE").toUpperCase());
            logResponse.setAffectedUserId(resultSet.getString("AFFECTEDUSERID"));

            logResponsesArray.add(logResponse);
        }

        /*
         * | USER_ID | DATED | LOGGER | LEVEL | REQUESTERTYPE | REQUESTERID |
         * LOGPRIORITY | KEYWORDS | TITLE | MESSAGE
         */
        return logResponsesArray;
    }

    private ArrayList<LogResponseExt> composeResultsFromResultSetExt() throws SQLException {
        ArrayList<LogResponseExt> logResponsesArray = new ArrayList<LogResponseExt>();
        LogResponseExt logResponseExt;

        while (resultSet.next()) {
            logResponseExt = new LogResponseExt();
            logResponseExt.setLogDate(resultSet.getString("DATED"));
            // GBE: Attention!!! if the value is in lowercase it crashes, we add
            // a uppercase function
            if (resultSet.getString("LEVEL") != null)
                logResponseExt.setLogLevel(resultSet.getString("LEVEL").toUpperCase());

            if (resultSet.getString("LOGPRIORITY") != null)
                logResponseExt.setLogPriority(resultSet.getString("LOGPRIORITY").toUpperCase());
            logResponseExt.setRequesterId(resultSet.getString("REQUESTERID"));
            if (resultSet.getString("REQUESTERTYPE") != null)
                logResponseExt.setRequesterType(resultSet.getString("REQUESTERTYPE").toUpperCase());
            logResponseExt.setTitle(resultSet.getString("TITLE"));
            logResponseExt.setDescription(resultSet.getString("MESSAGE"));
            if (resultSet.getString("LOGTYPE") != null)
                logResponseExt.setLogType(resultSet.getString("LOGTYPE").toUpperCase());
            logResponseExt.setAffectedUserId(resultSet.getString("AFFECTEDUSERID"));
            if (resultSet.getString("OSP") != null)
                logResponseExt.setOspId(resultSet.getString("OSP"));
            if (resultSet.getString("REQUESTEDFIELDS") != null)
                logResponseExt.setArrayRequestedFields(parseToArray(resultSet.getString("REQUESTEDFIELDS")));
            if (resultSet.getString("GRANTEDFIELDS") != null)
                logResponseExt.setArrayGrantedFields(parseToArray(resultSet.getString("GRANTEDFIELDS")));

            logResponsesArray.add(logResponseExt);
        }

        /*
         * | USER_ID | DATED | LOGGER | LEVEL | REQUESTERTYPE | REQUESTERID |
         * LOGPRIORITY | KEYWORDS | TITLE | MESSAGE
         */
        return logResponsesArray;
    }

    private ArrayList<String> parseToArray(String strToParse) {
        ArrayList<String> arrayToReturn = new ArrayList<String>();
        if (strToParse != null) {
            if (strToParse.length() > 0) {
                Gson gson = new Gson();
                TypeToken<ArrayList<String>> token = new TypeToken<ArrayList<String>>() {
                };
                arrayToReturn = gson.fromJson(strToParse, token.getType());
            }
        }
        return (arrayToReturn);
    }

    private Connection getDbConnection(Properties props) {
        Connection connection = null;

        try {
            Class.forName(props.getProperty("jdbc.driverClassName"));
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            connection = DriverManager.getConnection(props.getProperty("jdbc.url"),
                    props.getProperty("jdbc.username"), props.getProperty("jdbc.password"));
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return connection;
    }

    @Override
    public Response getLogs(String dateFrom, String dateTo, String logLevel, String requesterType,
            String requesterId, String logPriority, String title, String keyWords, String logType,
            String affectedUserId, String ospId, SecurityContext securityContext) throws NotFoundException {
        String strSelect;
        strSelect = composeSqlQuery(dateFrom, dateTo, logLevel, requesterType, requesterId, logPriority, title,
                keyWords, logType, affectedUserId, ospId);

        // GBE added code to get db information form a properties file
        Properties props;
        props = loadDbProperties();

        connection = getDbConnection(props);
        try {
            statement = connection.createStatement();
            resultSet = statement.executeQuery(strSelect);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ArrayList<LogResponseExt> logResponsesArray = null;
        try {
            // resultSet.next();
            // value=resultSet.getString("DATED");
            logResponsesArray = composeResultsFromResultSetExt();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return Response.ok().entity(logResponsesArray).build();
    }

    /**
     * @param dateFrom
     * @param dateTo
     * @param logLevel
     * @param requesterType
     * @param requesterId
     * @param logPriority
     * @param title
     * @param keyWords
     * @param logType
     * @param affectedUserId
     * @param ospId
     * @return
     */
    private String composeSqlQuery(String dateFrom, String dateTo, String logLevel, String requesterType,
            String requesterId, String logPriority, String title, String keyWords, String logType,
            String affectedUserId, String ospId) {
        String strSelect = "select * from operando_logdb.LOGS";
        StringBuffer strBufferSelect = new StringBuffer(strSelect);
        String keyValue = "";
        boolean boolAnd = false;
        boolean boolOr = false;
        ArrayList<String> arrayListKeyWords = null;

        if (!(((dateFrom == "") || (dateFrom == null)) && ((dateTo == "") || (dateTo == null))
                && ((logLevel == "") || (logLevel == null)) && ((requesterType == "") || (requesterType == null))
                && ((requesterId == "") || (requesterId == null)) && ((logPriority == "") || (logPriority == null))
                && ((title == "") || (title == null)) && (keyWords == null)
                && ((logType == "") || (logType == null))
                && ((affectedUserId == "") || (affectedUserId == null)))) {
            strBufferSelect.append(" WHERE ");
            if (dateFrom != null) {
                if (!dateFrom.equals("")) {
                    strBufferSelect.append("DATED >= '" + dateFrom + "'");
                    boolAnd = true;
                }
            }
            if (dateTo != null) {
                if (!dateTo.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("DATED <= '" + dateTo + "'");
                    boolAnd = true;
                }
            }
            if (logLevel != null) {
                if (!logLevel.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("LEVEL='" + logLevel + "'");
                    boolAnd = true;
                }
            }
            if (requesterType != null) {
                if (!requesterType.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("REQUESTERTYPE='" + requesterType + "'");
                    boolAnd = true;
                }
            }
            if (requesterId != null) {
                if (!requesterId.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("REQUESTERID='" + requesterId + "'");
                    boolAnd = true;
                }
            }
            if (logPriority != null) {
                if (!logPriority.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("LOGPRIORITY='" + logPriority + "'");
                    boolAnd = true;
                }
            }
            if (title != null) {
                if (!title.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("TITLE LIKE '%" + title + "%'");
                    boolAnd = true;
                }
            }
            if (keyWords != null) {
                if (keyWords.length() > 0) {
                    Gson gson = new Gson();
                    TypeToken<ArrayList<String>> token = new TypeToken<ArrayList<String>>() {
                    };
                    arrayListKeyWords = gson.fromJson(keyWords, token.getType());
                    ListIterator<String> listIterator = arrayListKeyWords.listIterator();
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    while (listIterator.hasNext()) {
                        keyValue = listIterator.next();
                        if (boolOr)
                            strBufferSelect.append(" || ");
                        strBufferSelect.append("KEYWORDS LIKE '%" + keyValue + "%'");
                        boolOr = true;
                    }
                }
            }
            if (logType != null) {
                if (!logType.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("LOGTYPE='" + logType + "'");
                    boolAnd = true;
                }
            }
            if (affectedUserId != null) {
                if (!affectedUserId.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("AFFECTEDUSERID='" + affectedUserId + "'");
                    boolAnd = true;
                }
            }
            if (ospId != null) {
                if (!ospId.equals("")) {
                    if (boolAnd)
                        strBufferSelect.append(" AND ");
                    strBufferSelect.append("OSP='" + ospId + "'");
                    boolAnd = true;
                }
            }
            strSelect = strBufferSelect.toString();
        }

        return strSelect;
    }

    /**
     * 
     */
    private Properties loadDbProperties() {
        Properties props;
        props = new Properties();

        InputStream fis = null;
        try {
            fis = this.getClass().getClassLoader().getResourceAsStream("/db.properties");
            props.load(fis);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return props;
    }

}