# !/bin/sh
#set -x

RELEASE_SITE_DIR=/home/data/httpd/download.eclipse.org/rt/eclipselink/updates
RELEASE_SITE_NAME="EclipseLink Release Repository"
MILESTONE_SITE_DIR=/home/data/httpd/download.eclipse.org/rt/eclipselink/milestone-updates
MILESTONE_SITE_NAME="EclipseLink Milestone Repository"
NIGHTLY_SITE_DIR=/home/data/httpd/download.eclipse.org/rt/eclipselink/nightly-updates
NIGHTLY_SITE_NAME="EclipseLink Nightly Build Repository"
CMD_ERROR=false
SITE_DIR=$1
SITE_NAME=$2
if [ "${SITE_DIR}" = "release" ]
then
    SITE_DIR=${RELEASE_SITE_DIR}
    SITE_NAME=${RELEASE_SITE_NAME}
fi
if [ "${SITE_DIR}" = "milestone" ]
then
    SITE_DIR=${MILESTONE_SITE_DIR}
    SITE_NAME=${MILESTONE_SITE_NAME}
fi
if [ "${SITE_DIR}" = "nightly" ]
then
    SITE_DIR=${NIGHTLY_SITE_DIR}
    SITE_NAME=${NIGHTLY_SITE_NAME}
fi

if [ "${SITE_DIR}" = "" ]
then
    echo "ERROR: Site location must be specified!"
    CMD_ERROR=true
fi
if [ ! -d ${SITE_DIR} ]
then
    echo "ERROR: Need to generate the children repositories before generating the composite!"
    CMD_ERROR=true
fi
if [ "${SITE_NAME}" = "" ]
then
    echo "ERROR: Site name must be specified!"
    CMD_ERROR=true
fi
if [ "${CMD_ERROR}" = "true" ]
then
            echo "USAGE: ./buildCompositeP2.sh site_dir site_name"
            echo "   where:"
            echo "      site_dir  = the location of the compositeRepository with"
            echo "                  child repositories already present under it"
            echo "      site_name = string designating the compositeRepository name"
            exit
fi

# safe temp directory
tmp=${TMPDIR-/tmp}
tmp=$tmp/somedir.$RANDOM.$RANDOM.$RANDOM.$$
(umask 077 && mkdir $tmp) || {
  echo "Could not create temporary directory! Exiting." 1>&2
  exit 1
}

#------- Subroutines -------#
unset genContent
genContent() {
    # Generate the nightly build table
    echo "<?xml version='1.0' encoding='UTF-8'?>" > $tmp/content.xml
    echo "<?compositeMetadataRepository version='1.0.0'?>" >> $tmp/content.xml
    echo "<repository name='&quot;${SITE_NAME}&quot;' type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' version='1.0.0'>" >> $tmp/content.xml
    echo "  <properties size='1'>" >> $tmp/content.xml
    echo "    <property name='p2.timestamp' value='1267023743270'/>" >> $tmp/content.xml
    echo "  </properties>" >> $tmp/content.xml
    echo "  <children size='${child_count}'>" >> $tmp/content.xml
    echo "    <child location='categories'/>" >> $tmp/content.xml
    cat $tmp/children.xml >> $tmp/content.xml
    echo "  </children>" >> $tmp/content.xml
    echo "</repository>" >> $tmp/content.xml
}

unset genArtifact
genArtifact() {
    # Generate the nightly build table
    echo "<?xml version='1.0' encoding='UTF-8'?>" > $tmp/artifact.xml
    echo "<?compositeArtifactRepository version='1.0.0'?>" >> $tmp/artifact.xml
    echo "<repository name='&quot;${SITE_NAME}&quot;' type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' version='1.0.0'>" >> $tmp/artifact.xml
    echo "  <properties size='1'>" >> $tmp/artifact.xml
    echo "    <property name='p2.timestamp' value='1267023743270'/>" >> $tmp/artifact.xml
    echo "  </properties>" >> $tmp/artifact.xml
    echo "  <children size='${child_count}'>" >> $tmp/artifact.xml
    echo "    <child location='categories'/>" >> $tmp/artifact.xml
    cat $tmp/children.xml >> $tmp/artifact.xml
    echo "  </children>" >> $tmp/artifact.xml
    echo "</repository>" >> $tmp/artifact.xml
}

unset genChildren
genChildren() {
    for child in `ls -dr [0-9]*` ; do
        child_count=`expr $child_count + 1`
        echo "    <child location='${child}'/>" >> $tmp/children.xml
    done
}

#------- MAIN -------#
cd ${SITE_DIR}
echo "generating Composite Repository..."
echo "    At:     '${SITE_DIR}'"
echo "    Called: '${SITE_NAME}'"

#  child_count is 1 because there will always be a child
#  for the categories (which wo't be counted)
child_count=1
genChildren
genArtifact
genContent

# Copy the completed file to the server, and cleanup
mv -f $tmp/content.xml  ${SITE_DIR}/compositeContent.xml
mv -f $tmp/artifact.xml ${SITE_DIR}/compositeArtifacts.xml
rm -rf $tmp
