update sliapi-springboot 38/102438/2
authorSmokowski, Kevin (ks6305) <kevin.smokowski@att.com>
Wed, 26 Feb 2020 18:42:16 +0000 (18:42 +0000)
committerKevin Smokowski <kevin.smokowski@att.com>
Wed, 26 Feb 2020 18:46:59 +0000 (18:46 +0000)
format source, use provider base and minor changes

Issue-ID: CCSDK-2121
Signed-off-by: Smokowski, Kevin (ks6305) <kevin.smokowski@att.com>
Change-Id: I4066ce5e15b1fa298b6e3de6ed8d7d1794b12013

sliapi/springboot/README.md
sliapi/springboot/pom.xml
sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/ExecuteGraphController.java
sliapi/springboot/src/main/java/org/onap/ccsdk/sli/core/sliapi/springboot/RestconfApiController.java

index 5737072..3e47f34 100644 (file)
@@ -1,10 +1,29 @@
 This directory contains a demo springboot implementation of the SLI-API healthcheck method.
 
 To start this server, run:
-
-java -jar -DserviceLogicDirectory=src/main/resources target/sliapi-springboot-{version}.jar
+mvn -DserviceLogicDirectory=src/main/resources spring-boot:run
 
 This will start a servlet on port 8080.  To test to that servlet, post a blank
 message to that port:
 
-curl http://127.0.0.1:8080/SLI-API:healthcheck -X POST -H "Content-Type: application/json"
\ No newline at end of file
+curl http://127.0.0.1:8080/restconf/operations/SLI-API:healthcheck -X POST -H "Content-Type: application/json"
+
+Requests can also be sent to `http://localhost:8080/executeGraph`
+
+The graph details need to match a graph which has been loaded and activated
+
+An example request
+```
+{
+    "graphDetails": {
+        "module": "prov",
+        "rpc": "test",
+        "mode": "sync"
+    },
+    "input": {
+        "name": "Hello World",
+        "test": "one",
+        "mixed": "cAsE"
+    }
+}
+```
\ No newline at end of file
index be6bb62..e9d5a9d 100644 (file)
 <?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>
+       <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.onap.ccsdk.parent</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.2-SNAPSHOT</version>
-    </parent>
+       <parent>
+               <groupId>org.onap.ccsdk.parent</groupId>
+               <artifactId>spring-boot-starter-parent</artifactId>
+               <version>1.5.2-SNAPSHOT</version>
+       </parent>
 
-    <groupId>org.onap.ccsdk.sli.core</groupId>
-    <artifactId>sliapi-springboot</artifactId>
-    <version>0.7.1-SNAPSHOT</version>
-    <packaging>jar</packaging>
+       <groupId>org.onap.ccsdk.sli.core</groupId>
+       <artifactId>sliapi-springboot</artifactId>
+       <version>0.7.1-SNAPSHOT</version>
+       <packaging>jar</packaging>
 
-    <name>sliapi-springboot</name>
+       <name>sliapi-springboot</name>
 
-    <dependencies>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.9.2</version>
-        </dependency>
+       <dependencies>
+               <dependency>
+                       <groupId>io.swagger</groupId>
+                       <artifactId>swagger-annotations</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-web</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-data-jpa</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>io.springfox</groupId>
+                       <artifactId>springfox-swagger2</artifactId>
+                       <version>2.9.2</version>
+               </dependency>
+               <dependency>
+                       <groupId>io.springfox</groupId>
+                       <artifactId>springfox-swagger-ui</artifactId>
+                       <version>2.9.2</version>
+               </dependency>
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>sli-provider-base</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.google.code.gson</groupId>
+                       <artifactId>gson</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.derby</groupId>
+                       <artifactId>derby</artifactId>
+                       <scope>runtime</scope>
+               </dependency>
+       </dependencies>
 
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
-            <artifactId>sli-provider</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.derby</groupId>
-            <artifactId>derby</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>io.swagger</groupId>
-                <artifactId>swagger-codegen-maven-plugin</artifactId>
-                <version>2.3.1</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>generate</goal>
-                        </goals>
-                        <configuration>
-                            <inputSpec>${project.basedir}/../model/src/main/resources/sli-api.20161110.yaml</inputSpec>
-                            <language>spring</language>
-                            <apiPackage>org.onap.ccsdk.sli.core.sliapi.springboot</apiPackage>
-                            <modelPackage>org.onap.ccsdk.sli.core.sliapi.model</modelPackage>
-                            <invokerPackage>org.onap.ccsdk.sli.core.sliapi.springboot</invokerPackage>
-                            <generateApis>true</generateApis>
-                            <generateApiTests>true</generateApiTests>
-                            <ignoreFileOverride>${project.basedir}/.swagger-codegen-ignore</ignoreFileOverride>
-                            <withXml>true</withXml>
-                            <configOptions>
-                                <java8>true</java8>
-                                <springBootVersion>2.2.4-RELEASE</springBootVersion>
-                            </configOptions>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>io.swagger</groupId>
+                               <artifactId>swagger-codegen-maven-plugin</artifactId>
+                               <version>2.3.1</version>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>generate</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <output>target/generated-sources</output>
+                                                       <inputSpec>${project.basedir}/../model/src/main/resources/sli-api.20161110.yaml</inputSpec>
+                                                       <language>spring</language>
+                                                       <apiPackage>org.onap.ccsdk.sli.core.sliapi.springboot</apiPackage>
+                                                       <modelPackage>org.onap.ccsdk.sli.core.sliapi.model</modelPackage>
+                                                       <invokerPackage>org.onap.ccsdk.sli.core.sliapi.springboot</invokerPackage>
+                                                       <generateApis>true</generateApis>
+                                                       <generateApiTests>true</generateApiTests>
+                                                       <ignoreFileOverride>${project.basedir}/.swagger-codegen-ignore</ignoreFileOverride>
+                                                       <withXml>true</withXml>
+                                                       <configOptions>
+                                                               <java8>true</java8>
+                                                               <springBootVersion>2.2.4-RELEASE</springBootVersion>
+                                                       </configOptions>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.springframework.boot</groupId>
+                               <artifactId>spring-boot-maven-plugin</artifactId>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>repackage</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                       </plugin>
+               </plugins>
+       </build>
 </project>
index 6c02410..79499d5 100644 (file)
@@ -1,19 +1,16 @@
 package org.onap.ccsdk.sli.core.sliapi.springboot;
 
 import java.util.HashMap;
-import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 
-import com.google.gson.*;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.core.sli.SvcLogicLoader;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl;
+import org.onap.ccsdk.sli.core.sli.provider.base.HashMapResolver;
 import org.onap.ccsdk.sli.core.sli.provider.base.InMemorySvcLogicStore;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver;
+import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase;
+import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.SpringApplication;
@@ -24,87 +21,89 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 
 @Controller
 @EnableAutoConfiguration
 public class ExecuteGraphController {
-    static SvcLogicService svc;
-    private static final Logger LOGGER = LoggerFactory.getLogger(ExecuteGraphController.class);
+       static SvcLogicServiceBase svc;
+       private static final Logger LOGGER = LoggerFactory.getLogger(ExecuteGraphController.class);
 
-    @RequestMapping(value = "/executeGraph", method = RequestMethod.POST)
-    @ResponseBody
-    public HashMap<String, String> executeGraph(@RequestBody String input) {
-        LOGGER.error("In request");
-        LOGGER.error(input);
+       @RequestMapping(value = "/executeGraph", method = RequestMethod.POST)
+       @ResponseBody
+       public HashMap<String, String> executeGraph(@RequestBody String input) {
+               LOGGER.error("In request");
+               LOGGER.error(input);
 
-        HashMap<String, String> hash = new HashMap<String, String>();
-        Properties parms = new Properties();
+               HashMap<String, String> hash = new HashMap<String, String>();
+               Properties parms = new Properties();
 
-        hash.put("status", "success");
-        JsonObject jsonInput = new Gson().fromJson(input, JsonObject.class);
-        JsonObject passthroughObj = jsonInput.get("input").getAsJsonObject();
+               hash.put("status", "success");
+               JsonObject jsonInput = new Gson().fromJson(input, JsonObject.class);
+               JsonObject passthroughObj = jsonInput.get("input").getAsJsonObject();
 
-        writeResponseToCtx(passthroughObj.toString(), parms, "input");
+               writeResponseToCtx(passthroughObj.toString(), parms, "input");
 
-        JsonObject inputObject = jsonInput.get("graphDetails").getAsJsonObject();
-        try {
-            // Any of these can throw a nullpointer exception
-            String calledModule = inputObject.get("module").getAsString();
-            String calledRpc = inputObject.get("rpc").getAsString();
-            String modeStr = inputObject.get("mode").getAsString();
-            // execute should only throw a SvcLogicException
-            Properties respProps = svc.execute(calledModule, calledRpc, null, modeStr, parms);
-            for (Entry<Object, Object> prop : respProps.entrySet()) {
-                hash.put((String) prop.getKey(), (String) prop.getValue());
-            }
-        } catch (NullPointerException npe) {
-            HashMap<String, String> errorHash = new HashMap<String, String>();
-            errorHash.put("error-message", "check that you populated module, rpc and or mode correctly.");
-            return errorHash;
-        } catch (SvcLogicException e) {
-            HashMap<String, String> errorHash = new HashMap<String, String>();
-            errorHash.put("status", "failure");
-            errorHash.put("message", e.getMessage());
-            return errorHash;
-        }
-        return hash;
-    }
+               JsonObject inputObject = jsonInput.get("graphDetails").getAsJsonObject();
+               try {
+                       // Any of these can throw a nullpointer exception
+                       String calledModule = inputObject.get("module").getAsString();
+                       String calledRpc = inputObject.get("rpc").getAsString();
+                       String modeStr = inputObject.get("mode").getAsString();
+                       // execute should only throw a SvcLogicException
+                       Properties respProps = svc.execute(calledModule, calledRpc, null, modeStr, parms);
+                       for (Entry<Object, Object> prop : respProps.entrySet()) {
+                               hash.put((String) prop.getKey(), (String) prop.getValue());
+                       }
+               } catch (NullPointerException npe) {
+                       HashMap<String, String> errorHash = new HashMap<String, String>();
+                       errorHash.put("error-message", "check that you populated module, rpc and or mode correctly.");
+                       return errorHash;
+               } catch (SvcLogicException e) {
+                       HashMap<String, String> errorHash = new HashMap<String, String>();
+                       errorHash.put("status", "failure");
+                       errorHash.put("message", e.getMessage());
+                       return errorHash;
+               }
+               return hash;
+       }
 
-    public static void writeResponseToCtx(String resp, Properties ctx, String prefix) {
-        JsonParser jp = new JsonParser();
-        JsonElement element = jp.parse(resp);
-        writeJsonObject(element.getAsJsonObject(), ctx, prefix + ".");
-    }
+       public static void writeResponseToCtx(String resp, Properties ctx, String prefix) {
+               JsonParser jp = new JsonParser();
+               JsonElement element = jp.parse(resp);
+               writeJsonObject(element.getAsJsonObject(), ctx, prefix + ".");
+       }
 
-    public static void writeJsonObject(JsonObject obj, Properties ctx, String root) {
-        for (Entry<String, JsonElement> entry : obj.entrySet()) {
-            if (entry.getValue().isJsonObject()) {
-                writeJsonObject(entry.getValue().getAsJsonObject(), ctx, root + entry.getKey() + ".");
-            } else if (entry.getValue().isJsonArray()) {
-                JsonArray array = entry.getValue().getAsJsonArray();
-                ctx.put(root + entry.getKey() + "_length", String.valueOf(array.size()));
-                Integer arrayIdx = 0;
-                for (JsonElement element : array) {
-                    if (element.isJsonObject()) {
-                        writeJsonObject(element.getAsJsonObject(), ctx, root + entry.getKey() + "[" + arrayIdx + "].");
-                    }
-                    arrayIdx++;
-                }
-            } else {
-                ctx.put(root + entry.getKey(), entry.getValue().getAsString());
-            }
-        }
-    }
+       public static void writeJsonObject(JsonObject obj, Properties ctx, String root) {
+               for (Entry<String, JsonElement> entry : obj.entrySet()) {
+                       if (entry.getValue().isJsonObject()) {
+                               writeJsonObject(entry.getValue().getAsJsonObject(), ctx, root + entry.getKey() + ".");
+                       } else if (entry.getValue().isJsonArray()) {
+                               JsonArray array = entry.getValue().getAsJsonArray();
+                               ctx.put(root + entry.getKey() + "_length", String.valueOf(array.size()));
+                               Integer arrayIdx = 0;
+                               for (JsonElement element : array) {
+                                       if (element.isJsonObject()) {
+                                               writeJsonObject(element.getAsJsonObject(), ctx, root + entry.getKey() + "[" + arrayIdx + "].");
+                                       }
+                                       arrayIdx++;
+                               }
+                       } else {
+                               ctx.put(root + entry.getKey(), entry.getValue().getAsString());
+                       }
+               }
+       }
 
-    public static void main(String[] args) throws Exception {
-        InMemorySvcLogicStore store = new InMemorySvcLogicStore();
-        SvcLogicLoader loader = new SvcLogicLoader(System.getProperty("serviceLogicDirectory"), store);
-
-        loader.loadAndActivate();
-        SvcLogicResolver resolver = new SvcLogicClassResolver();
-
-
-        svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(), resolver);
-        SpringApplication.run(ExecuteGraphController.class, args);
-    }
+       public static void main(String[] args) throws Exception {
+               InMemorySvcLogicStore store = new InMemorySvcLogicStore();
+               SvcLogicLoader loader = new SvcLogicLoader(System.getProperty("serviceLogicDirectory"), store);
+               loader.loadAndActivate();
+               SvcLogicResolver resolver = new HashMapResolver();
+               svc = new SvcLogicServiceImplBase(store, resolver);
+               SpringApplication.run(ExecuteGraphController.class, args);
+       }
 }
index 1c22da4..8d2553a 100644 (file)
 package org.onap.ccsdk.sli.core.sliapi.springboot;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.*;
-import org.onap.ccsdk.sli.core.sli.*;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService;
-import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl;
-import org.onap.ccsdk.sli.core.sli.provider.base.InMemorySvcLogicStore;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Optional;
+import java.util.Properties;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.onap.ccsdk.sli.core.sli.ConfigurationException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicLoader;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
+import org.onap.ccsdk.sli.core.sli.provider.base.HashMapResolver;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver;
-import org.onap.ccsdk.sli.core.sliapi.model.ExecuteGraphInput;
-import org.onap.ccsdk.sli.core.sliapi.model.HealthcheckInput;
+import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceBase;
+import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase;
 import org.onap.ccsdk.sli.core.sliapi.model.ResponseFields;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.boot.SpringApplication;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 @javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2020-02-20T12:50:11.207-05:00")
 
 @Controller
 public class RestconfApiController implements RestconfApi {
 
-    private final ObjectMapper objectMapper;
-
-    private final HttpServletRequest request;
-
-    private static SvcLogicService svc;
-    Logger log = LoggerFactory.getLogger(RestconfApiController.class);
-
-    @org.springframework.beans.factory.annotation.Autowired
-    public RestconfApiController(ObjectMapper objectMapper, HttpServletRequest request) {
-        this.objectMapper = objectMapper;
-        this.request = request;
-
-        SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProviderImpl();
-        SvcLogicStore store = null;
-        try {
-            store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties());
-        } catch (SvcLogicException e) {
-            log.error("Cannot create SvcLogicStore", e);
-            return;
-        }
-
-        String serviceLogicDirectory = System.getProperty("serviceLogicDirectory");
-        System.out.println("serviceLogicDirectory is "+serviceLogicDirectory);
-        SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, store);
-
-        try {
-            loader.loadAndActivate();
-        } catch (IOException e) {
-            log.error("Cannot load directed graphs", e);
-        }
-        SvcLogicResolver resolver = new SvcLogicClassResolver();
-
-
-        try {
-            svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(), resolver);
-        } catch (SvcLogicException e) {
-            log.error("Cannot execute directed graph", e);
-        }
-    }
-
-    @Override
-    public ResponseEntity<ResponseFields> healthcheck() {
-        SvcLogicContext ctx = new SvcLogicContext();
-        ResponseFields resp = new ResponseFields();
-
-
-        try {
-
-            log.info("Calling SLI-API:healthcheck DG");
-            Properties inputProps = new Properties();
-            Properties respProps = svc.execute("sli", "healthcheck" , null, "sync", inputProps);
-            if (respProps == null) {
-                log.info("DG execution returned no properties!");
-            } else {
-                log.info("DG execution returned properties");
-                for (String key: respProps.stringPropertyNames()) {
-                    log.info("DG returned property "+key+" = "+respProps.getProperty(key));
-                }
-            }
-            resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y"));
-            resp.setResponseCode(respProps.getProperty("error-code", "200"));
-            resp.setResponseMessage(respProps.getProperty("error-message", "Success"));
-
-            return(new ResponseEntity<>(resp, HttpStatus.OK));
-        }
-        catch (Exception e) {
-            resp.setAckFinalIndicator("true");
-            resp.setResponseCode("500");
-            resp.setResponseMessage(e.getMessage());
-            log.error("Error calling healthcheck directed graph", e);
-
-        }
-
-        return(new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR));
-
-    }
-
-    @Override
-    public Optional<ObjectMapper> getObjectMapper() {
-        return Optional.ofNullable(objectMapper);
-    }
-
-    @Override
-    public Optional<HttpServletRequest> getRequest() {
-        return Optional.ofNullable(request);
-    }
-
-
-
-
+       private final ObjectMapper objectMapper;
+       private final HttpServletRequest request;
+       private static SvcLogicServiceBase svc;
+       private static final Logger log = LoggerFactory.getLogger(RestconfApiController.class);
+
+       @org.springframework.beans.factory.annotation.Autowired
+       public RestconfApiController(ObjectMapper objectMapper, HttpServletRequest request) {
+               this.objectMapper = objectMapper;
+               this.request = request;
+
+               SvcLogicPropertiesProvider propProvider = new SvcLogicPropertiesProvider() {
+
+                       @Override
+                       public Properties getProperties() {
+                               Properties props = new Properties();
+                               String propPath = "src/main/resources/svclogic.properties";
+                               System.out.println(propPath);
+                               try (FileInputStream fileInputStream = new FileInputStream(propPath)) {
+                                       props = new Properties();
+                                       props.load(fileInputStream);
+                               } catch (final IOException e) {
+                                       log.error("Failed to load properties for file: {}", propPath,
+                                                       new ConfigurationException("Failed to load properties for file: " + propPath, e));
+                               }
+                               return props;
+                       }
+               };
+
+               SvcLogicStore store = null;
+               try {
+                       store = SvcLogicStoreFactory.getSvcLogicStore(propProvider.getProperties());
+               } catch (SvcLogicException e) {
+                       log.error("Cannot create SvcLogicStore", e);
+                       return;
+               }
+
+               String serviceLogicDirectory = System.getProperty("serviceLogicDirectory");
+               System.out.println("serviceLogicDirectory is " + serviceLogicDirectory);
+               SvcLogicLoader loader = new SvcLogicLoader(serviceLogicDirectory, store);
+
+               try {
+                       loader.loadAndActivate();
+               } catch (IOException e) {
+                       log.error("Cannot load directed graphs", e);
+               }
+               SvcLogicResolver resolver = new HashMapResolver();
+
+               svc = new SvcLogicServiceImplBase(store, resolver);
+
+       }
+
+       @Override
+       public ResponseEntity<ResponseFields> healthcheck() {
+               ResponseFields resp = new ResponseFields();
+
+               try {
+                       log.info("Calling SLI-API:healthcheck DG");
+                       Properties inputProps = new Properties();
+                       Properties respProps = svc.execute("sli", "healthcheck", null, "sync", inputProps);
+                       if (respProps == null) {
+                               log.info("DG execution returned no properties!");
+                       } else {
+                               log.info("DG execution returned properties");
+                               for (String key : respProps.stringPropertyNames()) {
+                                       log.info("DG returned property " + key + " = " + respProps.getProperty(key));
+                               }
+                       }
+                       resp.setAckFinalIndicator(respProps.getProperty("ack-final-indicator", "Y"));
+                       resp.setResponseCode(respProps.getProperty("error-code", "200"));
+                       resp.setResponseMessage(respProps.getProperty("error-message", "Success"));
+
+                       return (new ResponseEntity<>(resp, HttpStatus.OK));
+               } catch (Exception e) {
+                       resp.setAckFinalIndicator("true");
+                       resp.setResponseCode("500");
+                       resp.setResponseMessage(e.getMessage());
+                       log.error("Error calling healthcheck directed graph", e);
+
+               }
+               return (new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR));
+       }
+
+       @Override
+       public Optional<ObjectMapper> getObjectMapper() {
+               return Optional.ofNullable(objectMapper);
+       }
+
+       @Override
+       public Optional<HttpServletRequest> getRequest() {
+               return Optional.ofNullable(request);
+       }
 
 }