#!/bin/bash
# -----------------------------------------------------------------------------
# Starts ONOS Apache Karaf container
# -----------------------------------------------------------------------------

# uncomment the following line for performance testing
#export JAVA_OPTS="${JAVA_OPTS:--Xms8G -Xmx8G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps}"

# uncomment the following line for Netty TLS encryption
# Do modify the keystore location/password and truststore location/password accordingly
#export JAVA_OPTS="${JAVA_OPTS:--DenableNettyTLS=true -Djavax.net.ssl.keyStore=/home/ubuntu/onos.jks -Djavax.net.ssl.keyStorePassword=222222 -Djavax.net.ssl.trustStore=/home/ubuntu/onos.jks -Djavax.net.ssl.trustStorePassword=222222}"

set -e  # exit on error
set -u  # exit on undefined variable

# If ONOS_HOME is set, respect its value.
# If ONOS_HOME is not set (e.g. in the init or service environment),
# set it based on this script's path.
ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)}
KARAF_ARGS=
SYS_APPS=drivers
ONOS_APPS=${ONOS_APPS:-}  # Empty means don't activate any new apps

cd $ONOS_HOME

# Parse out arguments destinted for karaf invocation v. arguments that
# will be processed in line
while [ $# -gt 0 ]; do
  case $1 in
    apps-clean)
      # Deactivate all applications
      find ${ONOS_HOME}/apps -name "active" -exec rm \{\} \;
      ;;
    *)
      KARAF_ARGS+=" $1"
      ;;
  esac
  shift
done

# Activate the system required applications (SYS_APPS) as well as any
# specified applications in the var ONOS_APPS
for app in ${SYS_APPS//,/ } ${ONOS_APPS//,/ }; do
    if  [ -d "${ONOS_HOME}/apps/org.onosproject.$app/" ]; then
        touch ${ONOS_HOME}/apps/org.onosproject.$app/active
    elif [ -d "${ONOS_HOME}/apps/$app" ]; then
        touch ${ONOS_HOME}/apps/$app/active
    else
        echo "[WARN] Don't know how to activate $app"
    fi
done

exec ${ONOS_HOME}/apache-karaf-$KARAF_VERSION/bin/karaf $KARAF_ARGS
