#!/bin/bash
# -----------------------------------------------------------------------------
# Packages ONOS distributable into onos.tar.gz
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

# Bail on any errors
set -e

rm -fr $ONOS_STAGE # Remove this when package script is completed

# Make sure we have the original apache karaf bits first
[ ! -d $M2_REPO ] && echo "M2 repository $M2_REPO not found" && exit 1
[ ! -f $KARAF_ZIP -a ! -f $KARAF_TAR ] && echo "Apache Karaf bits $KARAF_ZIP or $KARAF_TAR not found" && exit 1
[ -d $ONOS_STAGE ] && echo "ONOS stage $ONOS_STAGE already exists" && exit 1

# Create the stage directory and warp into it
mkdir -p $ONOS_STAGE
cd $ONOS_STAGE

# Unroll the Apache Karaf bits, prune them and make ONOS top-level directories.
[ -f $KARAF_ZIP ] && unzip -q $KARAF_ZIP && rm -rf $KARAF_DIST/demos
[ -f $KARAF_TAR ] && tar zxf $KARAF_TAR && rm -rf $KARAF_DIST/demos
mkdir bin

# Stage the ONOS admin scripts and patch in Karaf service wrapper extras
cp -r $ONOS_ROOT/tools/package/bin .
cp -r $ONOS_ROOT/tools/package/debian $ONOS_STAGE/debian
cp -r $ONOS_ROOT/tools/package/etc/* $KARAF_DIST/etc

# Stage the ONOS bundles
mkdir -p $KARAF_DIST/system/org/onlab 
cp -r $M2_REPO/org/onlab $KARAF_DIST/system/org/

export ONOS_FEATURES="${ONOS_FEATURES:-webconsole,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-fwd,onos-app-foo}"

# Cellar Patching --------------------------------------------------------------

# Patch the Apache Karaf distribution file to add Cellar features repository
#perl -pi.old -e "s|^(featuresRepositories=.*)|\1,mvn:org.apache.karaf.cellar/apache-karaf-cellar/3.0.0/xml/features|" \
#    $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg

# Patch the Apache Karaf distribution file to load ONOS features
#perl -pi.old -e 's|^(featuresBoot=.*)|\1,cellar|' \
#    $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg

# ONOS Patching ----------------------------------------------------------------

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

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

# Patch the Apache Karaf distribution with ONOS branding bundle
cp $M2_REPO/org/onlab/onos/onos-branding/$ONOS_POM_VERSION/onos-branding-*.jar \
    $ONOS_STAGE/$KARAF_DIST/lib

# Patch in the ONOS version file
echo $ONOS_VERSION > $ONOS_STAGE/VERSION

# Now package up the ONOS tar file
cd $ONOS_STAGE_ROOT
COPYFILE_DISABLE=1 tar zcf $ONOS_TAR $ONOS_BITS
ls -l $ONOS_TAR >&2
rm -r $ONOS_STAGE
