#!/bin/sh
################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You 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.
#
################################################################################
echo Building...
DIRNAME=`dirname "$0"`
PROGNAME=`basename "$0"`
if [ -f "$DIRNAME/setenv.sh" ]; then
  . "$DIRNAME/setenv.sh"
fi
mvn clean install -P \!integration-tests,rat,\!run-tests -DskipTests
if [ $? -ne 0 ]
then
    exit 1;
fi
pushd package/target
echo Uncompressing Unomi package...
tar zxvf unomi-$UNOMI_VERSION.tar.gz
if [ -f "../../GeoLite2-City.mmdb" ]; then
  echo Installing GeoLite2 City database...
  cp ../../GeoLite2-City.mmdb unomi-$UNOMI_VERSION/etc
fi
if [ -f "../../allCountries.zip" ]; then
  echo Installing Geonames countries database...
  cp ../../allCountries.zip unomi-$UNOMI_VERSION/etc
fi
cd unomi-$UNOMI_VERSION/bin
echo echo Apache Unomi features installed, use [unomi:start] to start it.
./karaf debug
popd

