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

# Setting the script to fail if anything goes wrong
set -e


# Use this to debug your testcases data. For example:
# find what is the junit folder in use (e.g: junit6337151746263250365)
#
# cd /checkout-folder/tests/integration-tests/target/tmp/junit6337151746263250365
#
# /checkout-folder/scripts/print-data.sh bindings0-L/ journal0-L/ page0-L/
#
# this will generate the usual print-data output


LOCATION=$(dirname "$0")

$LOCATION/../artemis-distribution/target/apache-artemis*bin/apache-artemis*/bin/artemis data print --bindings $1 --journal $2 --paging $3
