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

prod=$*


if [ -z "$prod" ]
then
    echo -n 'Enter product name: '
    read prod
fi

if [ -z "$prod" ]
then
    echo Need product name!
    exit 1
fi

cd content/licenses/exports

# Prepend jar so also works with JVMs that include their own incompatible xalan
java -Xbootclasspath/p:../../../lib/xalan.jar org.apache.xalan.xslt.Process -in index.page/eccnmatrix.xml -xsl bisnotice.xsl -param product "$prod"
