#!/usr/bin/env bash

# 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.

## Run Fuseki, include development code if it looks like it's available.

function check_dir() {
    local NAME="$1"
    local DIR="$2"
    if [ ! -e "$DIR" ]
    then
	echo "$NAME: '$DIR' does not exist" 1>&2
	exit 1
    fi
    if [ ! -d "$DIR" ]
    then
	echo "$NAME: '$DIR' exists but is not a directory" 1>&2
    exit 1
    fi
}

export FUSEKI_HOME="${FUSEKI_HOME:-$PWD}"
check_dir "FUSEKI_HOME" "$FUSEKI_HOME"

export FUSEKI_BASE="${FUSEKI_BASE:-$FUSEKI_HOME/run}"
check_dir "FUSEKI_BASE" "$FUSEKI_BASE"

CPF="$FUSEKI_HOME/fuseki.classpath"
if [ ! -e "$CPF" ]; then
    echo "Need to create Fuseki classpath file"
    echo "Ensure maven is upto date with the latest snapshots and then run"
    echo -e "( cd $FUSEKI_HOME ; \n  mvn dependency:build-classpath -Dmdep.outputFile=fuseki.classpath )"
    exit 1
fi
CP="$(cat $CPF)"

# Add development directories.
if [ -e "$FUSEKI_HOME/classes" ]
then
    CP="$FUSEKI_HOME/classes:$CP"
elif [ -e "$FUSEKI_HOME/target/classes" ]
then
    CP="$FUSEKI_HOME/target/classes:$CP"
fi

# Prepend any development directories here
DEVDIRS="jena-core jena-tdb jena-arq jena-text jena-fuseki2/jena-fuseki-core jena-fuseki2/jena-fuseki-webapp"
for X in $DEVDIRS
do
    CPX="$FUSEKI_HOME/../../$X/target/classes"
    if [ -e "$CPX" ]
    then
	CP="$CPX:$CP"
    fi
done

## echo "$CP"
## exit

FUSEKI_LOG="" #${FUSEKI_LOG:-}

if [ -z "$JAVA" ]
then
    if [ -z "$JAVA_HOME" ]
    then
       JAVA=$(which java)
    else
        JAVA=$JAVA_HOME/bin/java
    fi
fi

if [ -z "$JAVA" ]
then
    (
	echo "Cannot find a Java JDK."
	echo "Please set either set JAVA or JAVA_HOME and put java (>=1.8) in your PATH."
    ) 1>&2
  exit 1
fi

JVM_ARGS=${JVM_ARGS:--Xmx1200M}

# Debug assistence
## echo "++++ Classpath:"
## echo "$(echo $CP | sed -e "s/:/\n/g")"
## exit

exec "$JAVA" -cp "$CP" $JVM_ARGS $FUSEKI_LOG org.apache.jena.fuseki.cmd.FusekiCmd "$@"

# Run as war file.
# java -jar jetty-runner.jar fuseki-server.war
