blob: 6d58fee3c552e0cde054a09a554fe632c9be4893 [file] [log] [blame]
#! /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.
#
function addAccumuloAPI() {
local srcDir="$1" api apiPath
# Validate each source directory before populating JShell-Init file
if [[ ! -d "$srcDir" ]]; then
echo "$srcDir is not a valid directory. Please make sure it exists."
exit 1
fi
# Extract API info from provided source directory
mapfile -t api < <(find "$srcDir" -type f -name '*.java' -print0 | xargs -0 -n1 dirname | sort -u)
# Load in API and format source directory into Java import statements
for apiPath in "${api[@]}"; do
echo "import ${apiPath##*/java/}.*;" | tr / .
done
echo
}
function main() {
local SOURCE bin scriptPath mainBase corePath
# Establish Accumulo's main base directory
SOURCE="${BASH_SOURCE[0]}"
while [[ -h "${SOURCE}" ]]; do
bin="$( cd -P "$( dirname "${SOURCE}" )" && pwd )"
SOURCE="$(readlink "${SOURCE}")"
[[ "${SOURCE}" != /* ]] && SOURCE="${bin}/${SOURCE}"
done
# Establish file and folder paths for JShell config
scriptPath="$( cd -P "$( dirname "${SOURCE}" )" && pwd )"
mainBase="$( cd -P "${scriptPath}"/../../../.. && pwd )"
corePath="$mainBase/core/src/main/java/org/apache/accumulo/core"
# Create new jshell-init file
mkdir -p "$mainBase/assemble/target"
echo 'Generating JShell-Init file'
{
echo '// Accumulo Client API'
addAccumuloAPI "$corePath/client"
echo '// Accumulo Data API'
addAccumuloAPI "$corePath/data"
echo '// Accumulo Security API'
addAccumuloAPI "$corePath/security"
echo '// Accumulo MiniCluster API'
addAccumuloAPI "$mainBase/minicluster/src/main/java/org/apache/accumulo/minicluster"
echo '// Accumulo Hadoop API'
addAccumuloAPI "$mainBase/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoop/mapreduce"
echo '// Essential Hadoop API'
echo 'import org.apache.hadoop.io.Text;'
echo
echo '// Initialization code'
echo 'System.out.println("Preparing JShell for Apache Accumulo");'
echo
} > "$mainBase/assemble/target/jshell-init.jsh"
}
main "$@"