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

# cloud-build-api-doc.sh -- builds api documentation.
#set -x
#set -u
TARGETJARDIR="$1"
shift
DEPSDIR="$1"
shift
DISTDIR="$1"
shift

canonical_readlink ()
{
    cd `dirname $1`;
    __filename=`basename $1`;
    if [ -h "$__filename" ]; then
        canonical_readlink `readlink $__filename`;
    else
        echo "`pwd -P`";
    fi
}

thisdir=$(canonical_readlink $0)

PATHSEP=':'
if [[ $OSTYPE == "cygwin" ]] ; then
  PATHSEP=';'
fi

CP=$PATHSEP/

for file in $TARGETJARDIR/*.jar
do
  CP=${CP}$PATHSEP$file
done

for file in $DEPSDIR/*.jar; do
  CP=${CP}$PATHSEP$file
done

java -cp $CP com.cloud.api.doc.ApiXmlDocWriter -d "$DISTDIR" $*

if [ $? -ne 0 ]
then
       exit 1
fi

set -e
(cd "$DISTDIR/xmldoc"
 cp "$thisdir"/*.java .
 cp "$thisdir"/*.xsl .
 sed -e 's,%API_HEADER%,User API,g' "$thisdir/generatetoc_header.xsl" >generatetocforuser.xsl
 sed -e 's,%API_HEADER%,Root Admin API,g' "$thisdir/generatetoc_header.xsl" >generatetocforadmin.xsl
 sed -e 's,%API_HEADER%,Domain Admin API,g' "$thisdir/generatetoc_header.xsl" >generatetocfordomainadmin.xsl

 python "$thisdir/gen_toc.py" $(find . -type f)

 cat generatetocforuser_include.xsl >>generatetocforuser.xsl
 cat generatetocforadmin_include.xsl >>generatetocforadmin.xsl
 cat generatetocfordomainadmin_include.xsl >>generatetocfordomainadmin.xsl

 cat "$thisdir/generatetoc_footer.xsl" >>generatetocforuser.xsl
 cat "$thisdir/generatetoc_footer.xsl" >>generatetocforadmin.xsl
 cat "$thisdir/generatetoc_footer.xsl" >>generatetocfordomainadmin.xsl

 mkdir -p html/user html/domain_admin html/root_admin
 cp -r "$thisdir/includes" html
 cp -r "$thisdir/images" html

 javac -cp . *.java
 java -cp . XmlToHtmlConverter
)
