#!/bin/bash
# -----------------------------------------------------------------------------
# Tool to create an application from scratch using ONOS Maven archetypes.
# -----------------------------------------------------------------------------

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

type=${1:-bundle}

[ $type = app ] && archetype=bundle || archetype=$type

if [ "$1" = "-?" -o "$1" = "-h" -o "$1" = "--help" ]; then
    echo "usage: $(basename $0) {app|bundle|ui|uitab|uitopo|cli|api} groupId artifactId version package mvn-options"
    echo "        All arguments are optional"
    exit 1
fi

otherOptions=""
[ -n "$1" ] && shift
[ -n "$1" ] && otherOptions="$otherOptions -DgroupId=$1" && shift
[ -n "$1" ] && otherOptions="$otherOptions -DartifactId=$1" && dir=$1 && shift
[ -n "$1" ] && otherOptions="$otherOptions -Dversion=$1" && shift
[ -n "$1" ] && otherOptions="$otherOptions -Dpackage=$1" && shift

set -e

mvn archetype:generate -DarchetypeCatalog=local,remote \
    -DarchetypeGroupId=org.onosproject \
    -DarchetypeArtifactId=onos-$archetype-archetype \
    -DarchetypeVersion=$ONOS_POM_VERSION $otherOptions "$@"

# Patch the pom.xml file to make this an app.
if [ $type = app ]; then
    # We need to add a few lines to the pom.xml to make this an app
    if [ -n "$dir" ] && [ -d $dir ]; then
        egrep -v "        (<!--|-->)" $dir/pom.xml > $dir/pom.app.xml
        mv $dir/pom.app.xml $dir/pom.xml
    else
        echo
        echo "IMPORTANT:"
        echo "To build the application, you need to uncomment the 'onos.app.name' and 'onos.app.origin' properties in the pom.xml"
        echo
    fi
fi
