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

case "$1" in
"adapter")
    # we need something different in order to pass the classpath of the current project
    # you must specify: cluster name (and -zk param if different from localhost:2181) 
    
    # example : ./s4 adapter -cluster=c1
	shift 1
	<s4_install_dir>/gradlew cp
	java -cp `cat classpath.txt` org.apache.s4.core.S4Node $@
;;
*)
	echo "calling referenced s4 script : <s4_script_path>"
	(cd <s4_install_dir> && <s4_script_path> $@)
;;
esac