#! /bin/bash

function cpp2c () {

src=$1
target=$2
newname=$3
suffix=repository

if [ ! -e "${src}" ]; then
  echo "${src} does not exist."
  exit 1
fi

if [ ! -e "${target}" ]; then
  echo "${target} does not exist."
  exit 1
fi

build=${target}

if [ -z "${newname}" ]; then
  build=${target}/`basename ${src}`
  srcisrepo=0
else
  build=${target}/${newname}
  srcisrepo=1
fi

# Sanity check (operate on one or fewer repositories)
if [ -e "${build}" ]; then
  num=`find ${build} -name compositeContent.xml | wc -l`
  if [ ${num} -gt 1 ]; then
    echo "Too many composite repositories under ${build}. Aborting."
    exit 1
  fi
fi

mkdir -p ${build}
cp -rp ${src}/* ${build}

for repo in compositeContent.xml compositeArtifacts.xml ; do
  children=$(xmllint -xpath '/repository/children/child/@location' `find ${src} -name ${repo}`)
  for child in ${children} ; do
    childLoc=`echo ${child} | cut -d'"' -f2`
    if [ ${srcisrepo} -eq 1 ]; then
      newChildLoc=$(realpath -m --relative-to=${build} ${src}/${childLoc})
    else
      newChildLoc=$(realpath -m --relative-to=`find ${build} -type d -name ${suffix}` `find ${src} -type d -name ${suffix}`/${childLoc})
    fi
    sed -i "s|${childLoc}|${newChildLoc}|g" `find ${build} -name ${repo}`
  done
done

# Add 'files.count' to ensure visibility on downloads page (if promotion)
if [ -z "${newname}" ]; then
  echo 1 > ${build}/files.count
fi

# Take into account fixed paths in index.html that must change
# Take into account relative paths to images that must change
if [ -e ${build}/index.html ]; then
  sed -i "/For HTTP access/ s|[NISR]-builds|downloads/drops|g" ${build}/index.html
  sed -i "s|\.\./\.\./commonFiles|\.\./\.\./\.\./commonFiles|g" ${build}/index.html
fi



}

function mkp2c () {

name=$1
src=$2
target=$3

timestamp=$(date -u +"v%Y%m%d%H%M%S")

if [ ! -e "${src}" ]; then
  echo "${src} does not exist."
  exit 1
fi

if [ ! -e "${target}" ]; then
  echo "${target} does not exist."
  exit 1
fi

mkdir -p ${target}/${name}
loc=$(realpath -m --relative-to=${target}/${name} ${src}/repository)

pushd ${target}/${name}

cat << EOF > compositeArtifacts.xml
<?compositeArtifactRepository version='1.0.0'?>
<repository name='Eclipse Orbit Composite Site ${name}'
    type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' version='1.0.0'>
  <properties size='1'>
    <property name='p2.timestamp' value='${timestamp}'/>
  </properties>
  <children size='1'>
    <child location='${loc}'/>
  </children>
</repository>
EOF

cat << EOF > compositeContent.xml
<?compositeMetadataRepository version='1.0.0'?>
<repository name='Eclipse Orbit Composite Site ${name}'
    type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' version='1.0.0'>
  <properties size='1'>
    <property name='p2.timestamp' value='${timestamp}'/>
  </properties>
  <children size='1'>
    <child location='${loc}'/>
  </children>
</repository>
EOF

popd

}
