#!/bin/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.
#
# tree_visualizer: a convenience script to launch the visualizer code that's
# included with joshua.
#
# Author: Jonny Weese <jonny@cs.jhu.edu>

# Die if any variables are unset.
set -o nounset
# Die if any statement returns non-true.
set -o errexit

# Get variables from the command line.
SOURCE=$1
shift
REFERENCE=$1
shift
N_BEST="$*"

LIB=$JOSHUA/lib

# Build up the classpath: first the Joshua files,
VISUALIZATION_CLASSPATH=$JOSHUA/class
# the Java Unified Network Graph library API,
VISUALIZATION_CLASSPATH="$VISUALIZATION_CLASSPATH:$LIB/jung-api-2.0.jar"
# the JUNG Algorithms,
VISUALIZATION_CLASSPATH="$VISUALIZATION_CLASSPATH:$LIB/jung-algorithms-2.0.jar"
# the JUNG graph implementations,
VISUALIZATION_CLASSPATH="$VISUALIZATION_CLASSPATH:$LIB/jung-graph-impl-2.0.jar"
# and JUNG graph-visualization code.
VISUALIZATION_CLASSPATH="$VISUALIZATION_CLASSPATH:$LIB/jung-visualization-2.0.jar"

java -cp $VISUALIZATION_CLASSPATH \
	joshua.ui.tree_visualizer.browser.Browser \
	$SOURCE \
	$REFERENCE \
	$N_BEST
