#!/bin/bash
# -----------------------------------------------------------------------------
# Packages ONOS distributable into onos.tar.gz, onos.zip or a deb file
# -----------------------------------------------------------------------------

set -e

OUT=$1
KARAF_TAR=$2
ONOS_VERSION=$3
BRANDING=$4
#FIXME karaf version
KARAF_VERSION="3.0.5"

PREFIX="onos-1.6.0"

# Unroll the Apache Karaf bits, prune them and make ONOS top-level directories.
tar xf $KARAF_TAR

# Unroll the Apache Karaf bits, prune them and make ONOS top-level directories.
KARAF_DIR=$(ls -d apache*)
rm -rf $KARAF_DIR/demos

# Patch the log-file size in place to increase it to 10 MB
perl -pi.old -e "s/maxFileSize=1MB/maxFileSize=10MB/g" \
    $KARAF_DIR/etc/org.ops4j.pax.logging.cfg

# Patch-in proper Karaf version into the startup script
sed -i.bk "s/apache-karaf-\$KARAF_VERSION/$KARAF_DIR/g" bin/onos-service
sed -i.bk "s/apache-karaf-\$KARAF_VERSION/$KARAF_DIR/g" bin/onos-client
rm -f bin/*.bk
mv bin/onos-client bin/onos
chmod a+x bin/onos-service bin/onos

export BOOT_FEATURES="standard,ssh,scr,war,webconsole,onos-api,onos-core,onos-incubator,onos-cli,onos-rest,onos-gui"
#FIXME
#[ "$ONOS_SECURITY_MODE" = true ] && enable_security_mode

# Patch the Apache Karaf distribution file to add ONOS features repository
perl -pi.old -e "s|^(featuresRepositories=).*|\1mvn:org.apache.karaf.features/standard/$KARAF_VERSION/xml/features,mvn:org.onosproject/onos-features/$ONOS_VERSION/xml/features|" \
    $KARAF_DIR/etc/org.apache.karaf.features.cfg

# Patch the Apache Karaf distribution file to load default ONOS boot features
perl -pi.old -e "s|^(featuresBoot=).*|\1$BOOT_FEATURES|" \
    $KARAF_DIR/etc/org.apache.karaf.features.cfg

# Patch the karaf start script to disable user interrupts
perl -pi.old -e "s|(-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true)|\1 -Dkaraf.ignoreInterrupts=true|" \
    $KARAF_DIR/bin/karaf

# Patch the Apache Karaf distribution with ONOS branding bundle
cp $BRANDING $KARAF_DIR/lib

# **** Moving karaf to subdirectory ****
mkdir $PREFIX
mv $KARAF_DIR $PREFIX

# Stage the ONOS admin scripts and patch in Karaf service wrapper extras
cp -r bin $PREFIX
cp -r init $PREFIX
cp -r etc/* $PREFIX/$KARAF_DIR/etc/

zip -q -0 -r $OUT $PREFIX

#FIXME
# Stage all builtin ONOS apps for factory install
#onos-stage-apps $ONOS_STAGE/apps $ONOS_STAGE/$KARAF_DIST/system
# Mark the org.onosproject.drivers app active by default
#touch $ONOS_STAGE/apps/org.onosproject.drivers/active

# copy in features and repos
# Patch in the ONOS version file
#echo $ONOS_VERSION > $ONOS_STAGE/VERSION


#function enable_security_mode() {
#    echo "Enabling security mode ONOS..."
#
#    # SM-ONOS step 1: downgrade felix config admin
#    FELIX_CFG_ADMIN=${FELIX_CFG_ADMIN:-~/Downloads/org.apache.felix.configadmin-1.6.0.jar}
#    if [ ! -f $FELIX_CFG_ADMIN ]; then
#        echo "Downloading $FELIX_CFG_ADMIN..."
#        curl -sL http://archive.apache.org/dist/felix/org.apache.felix.configadmin-1.6.0.jar > $FELIX_CFG_ADMIN
#    fi
#    [ ! -f $FELIX_CFG_ADMIN ] && \
#        echo "Felix config admin not found: $FELIX_CFG_ADMIN" && exit 1
#
#    mkdir -p $ONOS_STAGE/$KARAF_DIST/system/org/apache/felix/org.apache.felix.configadmin/1.6.0
#    cp $FELIX_CFG_ADMIN $ONOS_STAGE/$KARAF_DIST/system/org/apache/felix/org.apache.felix.configadmin/1.6.0
#    perl -pi.old -e "s|org.apache.felix.configadmin/1.8.0|org.apache.felix.configadmin/1.6.0|g" \
#        $ONOS_STAGE/$KARAF_DIST/etc/startup.properties
#
#    # SM-ONOS step 2: stage ONOS Felix framework security (this is already done by karaf assembly); end
#
#    # SM-ONOS step 3.1: configure karaf
#    perl -pi.old -e "s|#java.security.policy|java.security.policy|" \
#        $ONOS_STAGE/$KARAF_DIST/etc/system.properties
#    perl -pi.old -e "s|#org.osgi.framework.security|org.osgi.framework.security|" \
#        $ONOS_STAGE/$KARAF_DIST/etc/system.properties
#
#    # SM-ONOS step 3.2: update featuresBoot
#    export BOOT_FEATURES="onos-security,$BOOT_FEATURES"
#}

