#!/bin/bash
#$Id: simsys_www,v 1.48 2023/03/14 02:36:34 marcum Exp $

#*******************************************************************************
# Create www site package archive files for SimSys files.
#*******************************************************************************

# ==============================================================================
# Required definitions
# ==============================================================================

script_path="`readlink $0`"

if [ "${script_path}" = "" ]; then

	script_path="$0"
fi

www_group=simsys

www_site_host=$USER@Web.HPC.MsState.Edu 
www_site_data_dir=/www/data/www.simcenter.msstate.edu/software
local_www_site_data_dir=$HOME/www/software

# ==============================================================================
# Include required functions
# ==============================================================================

. "`dirname ${script_path}`/script_functions/set_sys_dir"
. "`dirname ${script_path}`/script_functions/set_version_dir"

#===============================================================================
# Help function
#===============================================================================

my_list_usage ()
{
	echo "
Update SimSys package archive files on local or web server www site.

`basename $0` [-h,-help] [-special] [-v version_name] [-web] packages

	-h		: List usage.
	-help		: List usage.
	-special	: Update package archive files in sub-directory special.
			  Not applicable with [-web] option.
	-v version_name	: Use \"version_name\" system directory for all
			  files included within package (the default is to use
			  ${sys_dir}).
			  Not applicable with [-web] option.
	-web		: Update package archive files on web server www site.
	packages	: Update package archive files for /"packages/".
			  Packages are predefined for AFLR2, AFLR3, AFLR3_LIB,
			  AFLR4, AFLR4_LIB, AFLR_LIB, BLOOM3, BLOOM3_LIB,
			  grid_tools (includes GRID_TOOLS and GRID_TOOLS_SRC),
			  doc, ug_io (includes UG_IO and UG_IO_SRC), and ALL
			  (all predefined package archive files listed here).
"
}

#===============================================================================
# Main script
#===============================================================================

set_sys_dir

#-------------------------------------------------------------------------------
# List documentation
#-------------------------------------------------------------------------------

if [ "$1" = "" ]; then

	my_list_usage
	exit
fi

#-------------------------------------------------------------------------------
# Set input options
#-------------------------------------------------------------------------------

umask 007

input_package_list=
package_sub_dir=
update_web_server=

while [ X"$1" != X-- ]; do

	case "$1"
	in

		"")		set -- -- $@
				;;

		-h|-help)	my_list_usage
				exit
				;;

		-special)	package_sub_dir=special
				shift 1
				;;

		-v)		if [ "$2" = "" ]; then
					echo "
*** option $1 also requires a version name ***"
					my_list_usage
					exit
				fi
				set_version_dir $2
				sys_dir="${version_dir}"
				shift 2
				;;

		-web)		update_web_server="yes"
				shift 1
				;;

		-*)		echo "
*** invalid option $1 ***"
				my_list_usage
				exit
				;;

		*)		input_package_list="${input_package_list} $1"
				shift 1
				;;
	esac
done

if [ "${input_package_list}" = "" ]; then

	echo "
*** no packages specified ***"
	my_list_usage
	exit
fi

#-------------------------------------------------------------------------------
# Create tar package archive files
#-------------------------------------------------------------------------------

if [ "${update_web_server}" = "" ]; then
	echo "
Using directory ${sys_dir} for package archive file contents"
fi

package_name_list="\
AFLR2 \
AFLR3 \
AFLR_LIB \
AFLR3_LIB \
AFLR43 \
AFLR4 \
AFLR4_LIB \
BLOOM3 \
BLOOM3_LIB \
grid_tools \
doc \
ug_io \
"

package_list=""

for input_package in ${input_package_list}; do

	if [ "${input_package}" = "ALL" ]; then

		if [ "${update_web_server}" ]; then

			echo "
Updating documentation/ files on web server www site..."

			rsync -Cauv --delete --exclude=*.php --exclude=*.bak --exclude=common --exclude=disabled --exclude=REPORTS --exclude=TEMPLATE --exclude=CHEM_GROUP --exclude=LOCI_GROUP ${local_www_site_data_dir}/documentation/ ${www_site_host}:${www_site_data_dir}/documentation/

			echo "
Updating public/ files on web server www site ..."

			rsync -Cauv --delete --exclude=*.php --exclude=*.bak --exclude=common --exclude=disabled --exclude=REPORTS --exclude=TEMPLATE --exclude=CHEM_GROUP --exclude=LOCI_GROUP ${local_www_site_data_dir}/public/ ${www_site_host}:${www_site_data_dir}/public/

			echo "
Updating downloads/ files on web server www site ..."

			rsync -Cauv --delete --exclude=*.php --exclude=*.bak --exclude=common --exclude=disabled --exclude=REPORTS --exclude=TEMPLATE --exclude=CHEM_GROUP --exclude=LOCI_GROUP ${local_www_site_data_dir}/downloads/ ${www_site_host}:${www_site_data_dir}/downloads/
			echo ""

			exit
		fi

		package_list="${package_name_list}"

		break
	else
		found_flag=

		for package in ${package_name_list}; do

			if [ "${input_package}" = "${package}" ]; then

				package_list="${package_list} ${input_package}"
				found_flag="yes"
				break
			fi
		done

		if [ "${found_flag}" = "" ]; then
			echo "
*** no package named ${input_package} found ***"
			my_list_usage
			exit
		fi
	fi
done

input_package_list="${package_list}"

update_package_list=""

for input_package in ${input_package_list}; do

	if [ "${input_package}" = "grid_tools" ]; then

		update_package_list="${update_package_list} GRID_TOOLS GRID_TOOLS_SRC"

	elif [ "${input_package}" = "ug_io" ]; then

		update_package_list="${update_package_list} UG_IO UG_IO_SRC"
	else
		update_package_list="${update_package_list} ${input_package}"
	fi
done

for package in ${update_package_list}; do

	if [ "${package}" = "doc" ]; then

		if [ "${update_web_server}" ]; then

			echo "
Updating documentation/ files on web server www site..."

			rsync -Cauv --delete --exclude=*.php --exclude=*.bak --exclude=common --exclude=disabled --exclude=REPORTS --exclude=TEMPLATE --exclude=CHEM_GROUP --exclude=LOCI_GROUP ${local_www_site_data_dir}/documentation/ ${www_site_host}:${www_site_data_dir}/documentation/

		else

			doc_dir_list="aflr2 aflr2c aflr3 aflr4 aflr43 bloom3 grid_tools ug_io uvmap system"

			for dir in ${doc_dir_list}; do
				echo "
Updating documentation/${dir} files on local www site..."

				rsync -Cauv --delete --exclude=*.bak --exclude=*.docx --exclude=docx --exclude=.DS_Store --exclude=Obsolete --exclude=Save --exclude=Testing --exclude=docx ${sys_dir}/doc/${dir}/ ${local_www_site_data_dir}/documentation/${dir}/
			done
		fi
	else
		package_dir=${package}
		delete_flag="--delete"
		sys_file_list="\
README_packages.pdf \
README_install.pdf \
README.pdf"

		if [ "${package}" = "AFLR2" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
Release_Notes_aflr2.txt \
Release_Notes_aflr2c.txt"

		elif [ "${package}" = "AFLR3" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
Release_Notes_aflr3.txt"

		elif [ "${package}" = "AFLR_LIB" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
OpenLicense.pdf \
Release_Notes_aflr3.txt \
Release_Notes_aflr4.txt \
README_developer_install.pdf"

		elif [ "${package}" = "AFLR3_LIB" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
OpenLicense.pdf \
Release_Notes_aflr3.txt \
README_developer_install.pdf"

		elif [ "${package}" = "AFLR43" ]; then

			package_dir="AFLR3"

			sys_file_list="${sys_file_list} \
License.pdf \
Release_Notes_aflr43.txt"

		elif [ "${package}" = "AFLR4" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
Release_Notes_aflr4.txt"

		elif [ "${package}" = "AFLR4_LIB" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
OpenLicense.pdf \
Release_Notes_aflr4.txt \
README_developer_install.pdf"

		elif [ "${package}" = "BLOOM3" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
Release_Notes_bloom3.txt"

		elif [ "${package}" = "BLOOM3_LIB" ]; then

			sys_file_list="${sys_file_list} \
License.pdf \
OpenLicense.pdf \
Release_Notes_bloom3.txt \
README_developer_install.pdf"

		elif [ "${package}" = "GRID_TOOLS" ] || [ "${package}" = "GRID_TOOLS_SRC" ]; then

			package_dir="GRID_TOOLS"
			sys_file_list="${sys_file_list} \
OpenLicense.pdf \
README_developer_install.pdf"

		elif [ "${package}" = "UG_IO" ] || [ "${package}" = "UG_IO_SRC" ]; then

			package_dir=ug_io
			delete_flag=

			sys_file_list="${sys_file_list} \
OpenLicense.pdf \
Release_Notes_ug_io.txt \
README_developer_install.pdf"

		fi

		if [ "${update_web_server}" ]; then

			if [ "${package_dir}" = "ug_io" ]; then
				echo "
Updating public/${package_dir} files on web server www site ..."

				rsync -Cauv --delete --exclude=*.php --exclude=*.bak --exclude=common --exclude=disabled --exclude=REPORTS --exclude=TEMPLATE --exclude=CHEM_GROUP --exclude=LOCI_GROUP ${local_www_site_data_dir}/public/ ${www_site_host}:${www_site_data_dir}/public/
			else
				echo "
Updating downloads/${package_dir} files on web server www site ..."

				rsync -Cauv --delete --exclude=*.php --exclude=*.bak --exclude=common --exclude=disabled --exclude=REPORTS --exclude=TEMPLATE --exclude=CHEM_GROUP --exclude=LOCI_GROUP ${local_www_site_data_dir}/downloads/${package_dir}/ ${www_site_host}:${www_site_data_dir}/downloads/${package_dir}/
			fi
		else

			dir="${local_www_site_data_dir}/downloads/${package_dir}"

			chmod u+rwx,g+rwxs,o+rx ${dir} 2> /dev/null

			if [ "${package_sub_dir}" ]; then

				dir="${dir}/${package_sub_dir}"
			fi

			cd ${dir}

			/bin/rm -f ${package},*.*.*,*.*

			echo "
Creating new ${package} package archive files in ${dir}..."

			${script_dir}/simsys_archive -quiet -v ${sys_dir} ${package}

			echo "
Updating ${package} License and README files in ${dir}..."

			for file in ${sys_file_list}; do

				rsync -Cauv ${sys_dir}/doc/system/${file} ./${file} > /dev/null 2>&1
			done

			chmod ug+rw,o+r * 2> /dev/null
		fi
	fi
done

echo ""
