#!/bin/sh

BUNDLEURL=$1
GROUPID=$2
VERSION=$3
CLASSIFIER=$4

[ "${BUNDLEURL}" = "" ] && echo && echo "You must specify a bundle URL!" && echo && exit

WORKDIR=bundle.tmp

SCRIPTDIR=`dirname ${0}`

[ -d $SCRIPTDIR ] || SCRIPTDIR=.

echo "Script directory is: ${SCRIPTDIR}"

# repo dir relative to WORKDIR
REPODIR=$HOME/repository-staging/to-ibiblio/maven
REPO2DIR=$HOME/repository-staging/to-ibiblio/maven2

rm -rf $WORKDIR > /dev/null 2>&1

mkdir $WORKDIR

cd $WORKDIR

echo "Retrieving URL: '${BUNDLEURL}'"
wget -Umaven --no-check-certificate $BUNDLEURL
BUNDLE=`echo $BUNDLEURL | sed -e 's#^.*/##;'`

echo $BUNDLE
mv $BUNDLE tmp.jar
BUNDLE=tmp.jar

(

  echo "Unzipping original bundle."
  jar xf $BUNDLE || unzip $BUNDLE

  # copy files in subdirs to workdir
  echo "Copying files to working directory."
  for d in `find ./* -type d` ; do
    for f in `find $d -type f` ; do cp $f .; done;
  done

  echo "Searching for POM:"
  echo "...checking for 'pom.xml'"
  POM=pom.xml
  if [ ! -f ${POM} ]
  then
    echo "...checking for 'project.xml'"
    POM=project.xml
  fi

  if [ ! -f ${POM} ]
  then
    echo "...searching for **/*.pom"
    POM=`find . -iname *.pom`
  fi

  [ "" == "${POM}" ] && echo && echo "Cannot deploy without the pom.xml or project.xml file!" && echo && exit
  [ ! -f ${POM} ] && echo && echo "Cannot deploy without the pom.xml or project.xml file!" && echo && exit

  echo "POM is: '${POM}'"
  dos2unix ${POM}
  less $POM

  if [ ! -z $VERSION ]
  then
    version=$VERSION
  else
    version=`cat ${POM} | tr '\n' ' ' | sed 's#<build>.*</build>##' | sed 's#<versions>.*</versions>##' | sed 's#<dependencies>.*</dependencies>##' | sed 's#<reporting>.*</reporting>##' | sed 's#<parent>.*</parent>##' | grep '<version>' | sed -e 's#^.*<version>##;s#</version>.*$##'`

    if [ -z $version ]
    then
      version=`grep currentVersion ${POM} | sed -e 's#^.*<currentVersion>##;s#</currentVersion>.*$##'`
    fi
  fi

  artifactId=`cat ${POM} | tr '\n' ' ' | sed 's#<build>.*</build>##' | sed 's#<dependencies>.*</dependencies>##' | sed 's#<contributors>.*</contributors>##' | sed 's#<dependencies>.*</dependencies>##' | sed 's#<reporting>.*</reporting>##' | sed 's#<parent>.*</parent>##' | grep '<artifactId>' | sed -e 's#^.*<artifactId>##;s#</artifactId>.*$##'`

  if [ -z $artifactId ]
  then
    artifactId=`cat ${POM} | tr '\n' ' ' | sed 's#<build>.*</build>##' | sed 's#<versions>.*</versions>##' | sed 's#<developers>.*</developers>##' | sed 's#<dependencies>.*</dependencies>##' | sed 's#<reporting>.*</reporting>##' | sed 's#<contributors>.*</contributors>##' | sed 's#<parent>.*</parent>##' | grep '<id>' | sed -e 's#^.*<id>##;s#</id>.*$##'`
  fi
  
  if [ ! -z $GROUPID ]
  then
    groupId=${GROUPID}
  else
    groupId=`cat ${POM} | tr '\n' ' ' | sed 's#<build>.*</build>##' | sed 's#<dependencies>.*</dependencies>##' | sed 's#<reporting>.*</reporting>##' | sed 's#<parent>.*</parent>##' | grep '<groupId>' | sed -e 's#^.*<groupId>##;s#</groupId>.*$##'`  

    if [ -z $groupId ]
    then
      groupId=${artifactId}
    fi
  fi

  version=`echo ${version} | sed -e 's/ *$//'`
  artifactId=`echo ${artifactId} | sed -e 's/ *$//'`
  groupId=`echo ${groupId} | sed -e 's/ *$//'`  
  groupDir=`echo ${groupId} | sed -e 's/\./\//g'`  

  maven2=`cat ${POM} | grep '<modelVersion>'`

  echo
  if [ -z "${maven2}" ]
  then
    echo " ========= WARNING: Maven 1 POM won't be converted to Maven 2 ========="
  fi

  echo
  echo "   version: [${version}]"
  echo "   groupId: [${groupId}]"  
  echo "artifactId: [${artifactId}]"
  echo

  if [ -d $REPO2DIR/${groupDir} ]
  then
    echo "The group already exists"
  else
    echo "The group does NOT already exist"
  fi

  echo
  echo -n Hit Enter to continue or Ctrl-C to abort...
  read

  cp ${POM} ${artifactId}-${version}.pom
  cp ${POM}.asc ${artifactId}-${version}.pom.asc

  m2dir=$REPO2DIR/${groupDir}/${artifactId}/${version}

  mkdir -p ${m2dir}

  if [ ! -z "${maven2}" ]
  then
    # Maven 2
    cp -i ${artifactId}-${version}.pom ${m2dir}
    cp -i ${artifactId}-${version}.pom.asc ${m2dir}
    md5sum  ${m2dir}/${artifactId}-${version}.pom > ${m2dir}/${artifactId}-${version}.pom.md5
    sha1sum ${m2dir}/${artifactId}-${version}.pom > ${m2dir}/${artifactId}-${version}.pom.sha1
  fi

  echo "Deploying JAR ..."

  jar=${artifactId}-${version}.jar 
  if [ ! -z ${CLASSIFIER} ]; then
    jar=${artifactId}-${version}-${CLASSIFIER}.jar
  fi
  cp -i ${jar} ${m2dir}
  cp -i ${jar}.asc ${m2dir}
  if [ -f ${m2dir}/${jar} ];
  then
    md5sum  ${m2dir}/${jar} > ${m2dir}/${jar}.md5
    sha1sum ${m2dir}/${jar} > ${m2dir}/${jar}.sha1
  fi
  
  if [ -f ${artifactId}-${version}-sources.jar ]
  then
    echo "Deploying Java sources ..."
    cp -i ${artifactId}-${version}-sources.jar ${m2dir}
    cp -i ${artifactId}-${version}-sources.jar.asc ${m2dir}
    md5sum  ${m2dir}/${artifactId}-${version}-sources.jar > ${m2dir}/${artifactId}-${version}-sources.jar.md5
    sha1sum ${m2dir}/${artifactId}-${version}-sources.jar > ${m2dir}/${artifactId}-${version}-sources.jar.sha1
  else
    echo "No Java sources available in upload bundle, skipping ..."
  fi

  if [ -f ${artifactId}-${version}-javadoc.jar ]
  then
    echo "Deploying Javadocs ..."
    cp -i ${artifactId}-${version}-javadoc.jar ${m2dir}
    cp -i ${artifactId}-${version}-javadoc.jar.asc ${m2dir}
    md5sum  ${m2dir}/${artifactId}-${version}-javadoc.jar > ${m2dir}/${artifactId}-${version}-javadoc.jar.md5
    sha1sum ${m2dir}/${artifactId}-${version}-javadoc.jar > ${m2dir}/${artifactId}-${version}-javadoc.jar.sha1
  else
    echo "No Javadocs available in upload bundle, skipping ..."
  fi

)  
