summaryrefslogtreecommitdiffstats
path: root/sli/recording/pom.xml
blob: e8fc29f01f26a12d2500e1e0cdc3693ea6959a33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.onap.ccsdk.parent</groupId>
		<artifactId>binding-parent</artifactId>
		<version>1.2.1-SNAPSHOT</version>
		<relativePath/>
	</parent>

	<groupId>org.onap.ccsdk.sli.core</groupId>
	<artifactId>sli-recording</artifactId>
	<version>0.4.1-SNAPSHOT</version>
	<packaging>bundle</packaging>

	<name>ccsdk-sli-core :: sli :: ${project.artifactId}</name>
	<description>SLI Recording is an OSGi bundle that implements recording service for the service logic record node.</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.onap.ccsdk.sli.core</groupId>
				<artifactId>dblib-provider</artifactId>
				<version>${project.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<dependencies>
		<dependency>
			<groupId>org.onap.ccsdk.sli.core</groupId>
			<artifactId>sli-common</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.core</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
		</dependency>

		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.opendaylight.controller</groupId>
			<artifactId>sal-binding-api</artifactId>
		</dependency>

		<!-- Testing Dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<scope>test</scope>
		</dependency>

	</dependencies>
</project>
/* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*
 * ============LICENSE_START==========================================
 * ONAP Portal SDK
 * ===================================================================
 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
 * ===================================================================
 *
 * Unless otherwise specified, all software contained herein is licensed
 * under the Apache License, Version 2.0 (the "License");
 * you may not use this software 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.
 *
 * Unless otherwise specified, all documentation contained herein is licensed
 * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
 * you may not use this documentation except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *             https://creativecommons.org/licenses/by/4.0/
 *
 * Unless required by applicable law or agreed to in writing, documentation
 * 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.
 *
 * ============LICENSE_END============================================
 *
 *
 */
package org.onap.portalsdk.analytics.system.fusion.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Method;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.onap.portalsdk.analytics.controller.Action;
import org.onap.portalsdk.analytics.controller.ErrorHandler;
import org.onap.portalsdk.analytics.error.RaptorException;
import org.onap.portalsdk.analytics.error.RaptorRuntimeException;
import org.onap.portalsdk.analytics.model.runtime.ErrorJSONRuntime;
import org.onap.portalsdk.analytics.system.Globals;
import org.onap.portalsdk.analytics.util.AppConstants;
import org.onap.portalsdk.core.controller.RestrictedBaseController;
import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

@Controller
@RequestMapping("/")
public class RaptorController extends RestrictedBaseController {

    private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorController.class);
    private static final String IS_EMBEDDED = "isEmbedded";
    private static final String ACTION_NOT_FOUND = "Action not found";

    @RequestMapping(value = { "/report" }, method = RequestMethod.GET)
    public ModelAndView report(HttpServletRequest request) {
        request.getSession().setAttribute(IS_EMBEDDED, false);
        return new ModelAndView("report");
    }

    @RequestMapping(value = { "/reportDS1" }, method = RequestMethod.GET)
    public ModelAndView reportDS1(HttpServletRequest request) {
        request.getSession().setAttribute(IS_EMBEDDED, false);
        return new ModelAndView("reportDS1");
    }

    @RequestMapping(value = { "/report_embedded" }, method = RequestMethod.GET)
    public ModelAndView reportEmbedded(HttpServletRequest request) {
        request.getSession().setAttribute(IS_EMBEDDED, true);
        return new ModelAndView("report_embedded");
    }

    @RequestMapping(value = { "/report_sample" }, method = RequestMethod.GET)
    public ModelAndView reportSample(HttpServletRequest request) {
        return new ModelAndView("report_sample");
    }

    @RequestMapping(value = { "/report_import.htm" }, method = RequestMethod.GET)
    public ModelAndView reportImport(HttpServletRequest request) throws IOException {
        String viewName = "report_import";
        Action action = null;
        String actionKey = "report.import";
        ServletContext servletContext = request.getSession().getServletContext();
        if (!Globals.isSystemInitialized()) {
            Globals.initializeSystem(servletContext);
        }
        try {
            action = Globals.getRaptorActionMapping().getAction(actionKey);
            if (action == null)
                throw new RaptorRuntimeException(ACTION_NOT_FOUND);
        } catch (RaptorException e) {
            logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
                    + actionKey + "]. RaptorException: " + e.getMessage()));
            viewName = new ErrorHandler().processFatalError(request,
                    new RaptorRuntimeException("[Controller.processRequest]Invalid raptor action [" + actionKey
                            + "]. Exception: " + e.getMessage()));
        }
        return new ModelAndView(viewName, "model", null);
    }

    @RequestMapping(value = { "/report_wizard.htm" }, method = { RequestMethod.POST, RequestMethod.GET })
    public ModelAndView reportWizard(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String viewName = "";
        String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
        actionKey = nvl(actionKey, "report.run");
        Action action = null;
        ServletContext servletContext = request.getSession().getServletContext();
        if (!Globals.isSystemInitialized()) {
            Globals.initializeSystem(servletContext);
        }
        try {
            action = Globals.getRaptorActionMapping().getAction(actionKey);
            if (action == null) {
                throw new RaptorRuntimeException(ACTION_NOT_FOUND);
            }
        } catch (RaptorException e) {
            logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
                    + actionKey + "]. RaptorException: " + e.getMessage()));
            viewName = (new ErrorHandler()).processFatalError(request,
                    new RaptorRuntimeException("[Controller.processRequest]Invalid raptor action [" + actionKey
                            + "]. Exception: " + e.getMessage()));
            ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
            errorJSONRuntime.setErrormessage(e.toString());
            errorJSONRuntime.setStacktrace(getStackTrace(e));
            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            String jsonInString = "";
            try {
                jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
            } catch (Exception ex) {
                logger.debug(EELFLoggerDelegate.debugLogger, "Exception in JSON mapper", ex);
            }
        }

        try {
            Class<?>[] paramTypes = new Class[2];
            paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
            paramTypes[1] = Class.forName("java.lang.String");

            if (action != null) {
                Class<?> handlerClass = Class.forName(action.getControllerClass());
                Object handler = handlerClass.newInstance();
                Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(), paramTypes);

                Object[] paramValues = new Object[2];
                paramValues[0] = request;
                paramValues[1] = action.getJspName();
                viewName = (String) handlerMethod.invoke(handler, paramValues);
            } else {
                throw new RaptorRuntimeException(ACTION_NOT_FOUND);
            }
        } catch (Exception e) {
            logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
                    + actionKey + "]. Exception: " + e.getMessage()));
            viewName = (new ErrorHandler()).processFatalError(request,
                    new RaptorRuntimeException(
                            "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
                                    + e.getMessage()));

            ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
            errorJSONRuntime.setErrormessage(e.toString());
            errorJSONRuntime.setStacktrace(getStackTrace(e));
            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            String jsonInString = "";
            try {
                jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
            } catch (Exception ex) {
                logger.debug(EELFLoggerDelegate.debugLogger, "Exception in JSON mapper", ex);
            }
        }
        return new ModelAndView(viewName, "model", null);
    }

    private String nvl(String s) {
        return (s == null) ? "" : s;
    }

    private String nvl(String s, String sDefault) {
        return nvl(s).equals("") ? sDefault : s;
    }

    public static String getStackTrace(Throwable aThrowable) {
        Writer result = new StringWriter();
        PrintWriter printWriter = new PrintWriter(result);
        aThrowable.printStackTrace(printWriter);
        return result.toString();
    }

}