# !/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() {
    artifact_count=`expr $child_count - 1`
    # 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='${artifact_count}'>" >> $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]* | grep -v zip` ; 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
genContent
genArtifact

# 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
