#!/bin/sh -e
# replace in all files the OLD_VERSION by the NEW_VERSION
# run and tested on linux.
# no need for windows support here although any community
# is always welcome to contibute such thing

#Make sure the current dir is the one of the script.
thisdir=`dirname $0`;
cd $thisdir
thisdir=`pwd`


if [ -z "$NEW_VERSION" ]; then
  #use the first argument as the new version
  if [ -n "$1" ]; then
    NEW_VERSION=$1
  else 
    echo "No NEW_VERSION defined."
    exit 2
  fi
fi
if [ -z "$OLD_VERSION" ]; then
  #read it in the pom.xml
  line=`sed '/<version>.*-SNAPSHOT<\/version>/!d' pom.xml | head -1`
  OLD_VERSION=`echo $line | sed 's/ /\//g' | sed 's/^<version>//g' | sed 's/-SNAPSHOT<\/version>//g'`
fi

# reconstruct the version and buildNumber aka qualifier.
# make the assumption that the completeVersion matches a 4 seg numbers.
#if it does not then make the assumption that this buildNumber is just the forced context qualifier and use 
#the pom.xml's version for the rest of the version.
var=$(echo $NEW_VERSION | awk -F"." '{print $1,$2,$3}')   
set -- $var
if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
  NEW_VERSION=$1.$2.$3
  completeVersion="$NEW_VERSION.qualifier"
else
  echo "Expecting a valid OSGi version: major.minor.update.qualifier; $NEW_VERSION is incorrect"
  exit 2
fi
echo "$completeVersion"

if [ "$2" != "quiet" ]; then
  echo "Change the version from $OLD_VERSION to $NEW_VERSION and set the forceContextQualifier to $buildNumber ? (default yes)"
  read quiet
  [ -n "$quiet" ] && exit 0
  echo "Executing..."
else
  echo "Changing the version from $OLD_VERSION to $NEW_VERSION and set the forceContextQualifier to $buildNumber."
fi

#update the numbers for the release
#sed -i "s/<forceContextQualifier>.*<\/forceContextQualifier>/<forceContextQualifier>$buildNumber<\/forceContextQualifier>/" pom.xml
#update the jetty-version too
#sed -i "s/<jetty-version>.*<\/jetty-version>/<jetty-version>$completeVersion<\/jetty-version>/" pom.xml


#replace in the pom.xml
find . -name pom.xml -type f -exec sed -i 's/'$OLD_VERSION'/'$NEW_VERSION'/g' {} \; 

#replace in the other eclipse files where they end with a .qualifier
OLD_VERSION_QUALIFIER="$OLD_VERSION.qualifier"
NEW_VERSION_QUALIFIER="$NEW_VERSION.qualifier"
echo "$OLD_VERSION_QUALIFIER -> $NEW_VERSION_QUALIFIER"
find . -type f -name feature.xml -exec sed -i "s/$OLD_VERSION_QUALIFIER/$NEW_VERSION_QUALIFIER/g" {} \; 
find . -type f -name categories.xml -exec sed -i "s/$OLD_VERSION_QUALIFIER/$NEW_VERSION_QUALIFIER/g" {} \; 
find . -type f -name category.xml -exec sed -i "s/$OLD_VERSION_QUALIFIER/$NEW_VERSION_QUALIFIER/g" {} \; 
find . -type f -name site.xml -exec sed -i "s/$OLD_VERSION_QUALIFIER/$NEW_VERSION_QUALIFIER/g" {} \; 
find . -type f -name MANIFEST.MF -exec sed -i "s/$OLD_VERSION_QUALIFIER/$NEW_VERSION_QUALIFIER/g" {} \; 
find . -type f -name *.product -exec sed -i "s/$OLD_VERSION_QUALIFIER/$NEW_VERSION_QUALIFIER/g" {} \; 

