--- /dev/null
+/*
+ * ============LICENSE_START==========================================
+ * Copyright (c) 2019 PANTHEON.tech s.r.o.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ *
+ */
+package org.onap.ccsdk.distribution.lighty;
+
+import io.lighty.core.controller.impl.config.ControllerConfiguration;
+import io.lighty.core.controller.impl.util.ControllerConfigUtils;
+import io.lighty.modules.northbound.restconf.community.impl.config.RestConfConfiguration;
+import io.lighty.modules.northbound.restconf.community.impl.util.RestConfConfigUtils;
+import java.net.InetAddress;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Main class of the CCSDK lighty.io application. In order to start the application run main method. Path to
+ * the configuration file can be provided as argument. If not, then default configuration will be used.
+ */
+public class Main {
+
+ private static final Logger LOG = LoggerFactory.getLogger(Main.class);
+
+ private ShutdownHook shutdownHook;
+
+ public static void main(String[] args) {
+ Main app = new Main();
+ app.start(args, true);
+ }
+
+ public void start(String[] args, boolean registerShutdownHook) {
+ long startTime = System.nanoTime();
+ LOG.info(".__ .__ .__ __ .__ _________ _________ _________________ "
+ + " ____ __.");
+ LOG.info("| | |__| ____ | |___/ |_ ___.__. |__| ____ \\_ ___ \\\\_ ___ \\ / _____/\\___"
+ + "___ \\ | |/ _|");
+ LOG.info("| | | |/ ___\\| | \\ __< | | | |/ _ \\ ______ / \\ \\// \\ \\/ \\_____ \\ "
+ + " | | \\| <");
+ LOG.info("| |_| / /_/ > Y \\ | \\___ | | ( <_> ) /_____/ \\ \\___\\ \\____/ \\ |"
+ + " ` \\ | \\");
+ LOG.info("|____/__\\___ /|___| /__| / ____| /\\ |__|\\____/ \\______ /\\______ /_______ //___"
+ + "____ /____|__ \\");
+ LOG.info(" /_____/ \\/ \\/ \\/ \\/ \\/ \\/ "
+ + " \\/ \\/");
+
+ LOG.info("Starting lighty.io CCSDK application ...");
+ LOG.info("https://lighty.io/");
+ LOG.info("https://github.com/PantheonTechnologies/lighty-core");
+ try {
+ if (args.length > 0) {
+ Path configPath = Paths.get(args[0]);
+ LOG.info("Using configuration from file {} ...", configPath);
+ //1. get controller configuration
+ ControllerConfiguration singleNodeConfiguration =
+ ControllerConfigUtils.getConfiguration(Files.newInputStream(configPath));
+ //2. get RESTCONF NBP configuration
+ RestConfConfiguration restConfConfiguration = RestConfConfigUtils
+ .getRestConfConfiguration(Files.newInputStream(configPath));
+ //3. start lighty
+ startLighty(singleNodeConfiguration, restConfConfiguration, registerShutdownHook);
+ } else {
+ LOG.info("Using default configuration ...");
+ Set<YangModuleInfo> modelPaths = Stream.concat(RestConfConfigUtils.YANG_MODELS.stream(),
+ CcsdkLightyModule.YANG_MODELS.stream()).collect(Collectors.toSet());
+ //1. get controller configuration
+ ControllerConfiguration defaultSingleNodeConfiguration =
+ ControllerConfigUtils.getDefaultSingleNodeConfiguration(modelPaths);
+ //2. get RESTCONF NBP configuration
+ RestConfConfiguration restConfConfig =
+ RestConfConfigUtils.getDefaultRestConfConfiguration();
+ restConfConfig.setInetAddress(InetAddress.getLocalHost());
+ restConfConfig.setHttpPort(8181);
+ //3. start lighty
+ startLighty(defaultSingleNodeConfiguration, restConfConfig, registerShutdownHook);
+ }
+ float duration = (System.nanoTime() - startTime)/1_000_000f;
+ LOG.info("lighty.io and CCSDK started in {}ms", duration);
+ } catch (Exception e) {
+ LOG.error("Main CCSDK lighty.io application exception: ", e);
+ }
+ }
+
+ private void startLighty(ControllerConfiguration singleNodeConfiguration,
+ RestConfConfiguration restConfConfiguration, boolean registerShutdownHook)
+ throws ExecutionException, InterruptedException {
+ CcsdkLightyApplication ccsdkLightyApplication = new CcsdkLightyApplication(singleNodeConfiguration,
+ restConfConfiguration);
+
+ if (registerShutdownHook) {
+ shutdownHook = new ShutdownHook(ccsdkLightyApplication);
+ Runtime.getRuntime().addShutdownHook(shutdownHook);
+ }
+
+ ccsdkLightyApplication.start().get();
+ }
+
+ private static class ShutdownHook extends Thread {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ShutdownHook.class);
+ private final CcsdkLightyApplication ccsdkLightyApplication;
+
+ ShutdownHook(CcsdkLightyApplication ccsdkLightyApplication) {
+ this.ccsdkLightyApplication = ccsdkLightyApplication;
+ }
+
+ @Override
+ public void run() {
+ LOG.info("lighty.io and CCSDK shutting down ...");
+ long startTime = System.nanoTime();
+ try {
+ ccsdkLightyApplication.shutdown();
+ } catch (Exception e) {
+ LOG.error("Exception while shutting down lighty.io CCSDK application:", e);
+ }
+ float duration = (System.nanoTime() - startTime)/1_000_000f;
+ LOG.info("lighty.io and CCSDK stopped in {}ms", duration);
+ }
+
+ }
+}