#/bin/sh

set -x

cd $(dirname $0)

echo '<html><head><link rel="stylesheet" href="default.css">' > index.html

echo '<title>Eclipse Jetty Downloads</title></head>' >> index.html

echo '<body>' >> index.html

echo '<center><img src="http://www.eclipse.org/jetty/images/jetty-logo-80x22.png" alt="Jetty logo"/></center>' >> index.html

echo '<h1>Jetty Downloads</h1>' >> index.html

echo '<p><b>Jetty Website</b>: <a href="http://www.eclipse.org/jetty">http://www.eclipse.org/jetty</a></p>' >> index.html

echo '<p><b>Jetty Documentation Hub</b>: <a href="http://www.eclipse.org/jetty/documentation">http://www.eclipse.org/jetty/documentation</a></p>' >> index.html

echo '<p>The latest release of all minor releases are below, earlier releases in a minor release version are available under the archived releases link below.</p>' >> index.html

echo '<table border=0>' >> index.html

echo '<tr><td align=LEFT valign=TOP colspan="2" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Downloads</font></b></td></tr>' >> index.html

find * -maxdepth 1 -type d -name dist | sort -r | while read DIST
do
  F=$(dirname $DIST)
  echo $DIST $F

  echo "<tr><th align=right>$F:</th><td>" >> index.html
  [ $(ls $F/dist/ | wc -l) -gt 1 ] && echo "<a href=$F/dist/jetty-distribution-$(expr $F/dist/*.zip : '.*-\([0-9].*\).zip').zip>.zip</a> <a href=$F/dist/jetty-distribution-$(expr $F/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz').tar.gz>.tgz</a> <a href=$F/dist/>(all)</a></td>" >> index.html
  echo "</td><td>" >> index.html
  [ -d $F/apidocs ] && echo "<a href=$F/apidocs>apidocs</a>" >> index.html
  echo "</td><td>" >> index.html
  [ -d $F/xref ] && echo "<a href=$F/xref>xref</a>" >> index.html
  echo "</td><td>" >> index.html
  if [ -d $F/repository ]; then
    echo "<a href=$F/repository>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-7.x/$F ]; then
    echo "<a href=updates/jetty-bundles-7.x/$F>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-8.x/$F ]; then
    echo "<a href=updates/jetty-bundles-8.x/$F>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-9.x/$F ]; then
    echo "<a href=updates/jetty-bundles-9.x/$F>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-9.1.x/$F ]; then
    echo "<a href=updates/jetty-bundles-9.1.x/$F>P2</a>" >> index.html
  fi
  echo "</td><td>" >> index.html
  [ -d $F/dist-eclipse ] && echo "<a href=$F/dist-eclipse/>EclipseRTJetty</a>" >> index.html
  echo "</td><td>" >> index.html
  case $F in
    stable-7* ) echo "Stable $(expr stable-7/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
    ;;
    stable-8* ) echo "Stable $(expr stable-8/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
    ;;    
    stable-9* ) echo "Stable $(expr stable-9/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
    ;;
    *M[0-9] ) echo "Milestone $(date -r $F '+%Y-%m-%d')" >> index.html
    ;;
    *RC[0-9] ) echo "Release Candidate $(date -r $F '+%Y-%m-%d')" >> index.html
    ;;
    *v* ) echo "Release" >> index.html
    ;;
  esac


  echo "</td></tr>" >> index.html

  echo '<html><head><link rel="stylesheet" href="../../default.css">' > $F/dist/index.html 
  echo "<h1>$F:</h1>" >> $F/dist/index.html
  echo '<ul>' >> $F/dist/index.html
  echo '<li><a href=http://download.eclipse.org/jetty/>all jetty distributions</a></li>' >> $F/dist/index.html

  find $F/dist -type f | while read D
  do
    D=$(basename $D)
    [ $D != index.html ] && echo "<li><a href=http://eclipse.org/downloads/download.php?file=/jetty/$F/dist/$D&r=1>$D</a>" >> $F/dist/index.html
  done
  echo '</ul>' >> $F/dist/index.html
  echo "<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1149868-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>" >> $F/dist/index.html
  echo '</body></html>' >> $F/dist/index.html
done
echo '</table>' >> index.html

echo '<br/>' >> index.html

echo '<p>Note: Releases are *.zip and *tar.gz files.  There are also other files containing signatures and checksums under (all) that you can use to validate content.</p>' >> index.html

echo '<p>You can find all archived Jetty releases (for Jetty 7+) <a href="http://archive.eclipse.org/jetty/index.html">here</a>.</p><br/><br/>' >> index.html

echo '<h3>Jetty P2 Repositories</h3>' >> index.html

echo "<p>These are not for general use and are provided strictly for OSGI users.</p>" >> index.html

echo "<p>Composite Jetty7  P2 repo - <a href="http://download.eclipse.org/jetty/updates/jetty-bundles-7.x">jetty-bundles-7.x</a></p>" >> index.html
echo "<p>Composite Jetty8 P2 repo - <a href="updates/jetty-bundles-8.x">http://download.eclipse.org/jetty/updates/jetty-bundles-8.x</a></p>" >> index.html

echo "<p>Composite Jetty9 P2 repo - <a href="updates/jetty-bundles-9.x">http://download.eclipse.org/jetty/updates/jetty-bundles-9.x</a></p>" >> index.html


echo '<p><a href=orbit>Jetty orbit dependencies</a></p>' >> index.html

  echo "<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1149868-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>" >> index.html

echo '</body></html>' >> index.html

cd orbit

echo '<html><head><link rel="stylesheet" href="../default.css">' > index.html
echo '<h1>Jetty-Orbit@eclipse downloads</h1>' > index.html
echo '<ul>' >> index.html
find -name '*.jar' | sort | while read JAR
do
  echo "<li><a href=$JAR/dist/>$(basename $JAR)</a></li>" >> index.html
done
echo '</ul>' >> index.html
  echo "<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1149868-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>" >> index.html

echo '</body></html>' >> index.html

cd /home/data/httpd/archive.eclipse.org/jetty

echo '<html><head><link rel="stylesheet" href="http://download.eclipse.org/jetty/default.css">' > index.html
echo '<h1>Jetty Archived Releases</h1>' >> index.html

echo '<table border=0>' >> index.html

find * -maxdepth 1 -type d -name dist | sort -r | while read DIST
do
  F=$(dirname $DIST)
  echo $DIST $F

  echo "<tr><th align=right>$F:</th><td>" >> index.html
  [ $(ls $F/dist/ | wc -l) -gt 1 ] && echo "<a href=$F/dist/>download</a></td>" >> index.html
  echo "</td><td>" >> index.html
  [ -d $F/apidocs ] && echo "<a href=$F/apidocs>apidocs</a>" >> index.html
  echo "</td><td>" >> index.html
  [ -d $F/xref ] && echo "<a href=$F/xref>xref</a>" >> index.html
  echo "</td><td>" >> index.html
  if [ -d $F/repository ]; then
    echo "<a href=$F/repository>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-7.x/$F ]; then
    echo "<a href=updates/jetty-bundles-7.x/$F/repository>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-8.x/$F ]; then
    echo "<a href=updates/jetty-bundles-8.x/$F/repository>P2</a>" >> index.html
  elif [ -d updates/jetty-bundles-9.x/$F ]; then
    echo "<a href=updates/jetty-bundles-9.x/$F>P2</a>" >> index.html
  fi
  echo "</td><td>" >> index.html
  [ -d $F/dist-eclipse ] && echo "<a href=$F/dist-eclipse/>EclipseRTJetty</a>" >> index.html
  echo "</td><td>" >> index.html
  case $F in
    stable* ) echo "Stable $(expr stable-7/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
    ;;
    *M[0-9] ) echo "Milestone $(date -r $F '+%Y-%m-%d')" >> index.html
    ;;
    *RC[0-9] ) echo "Release Candidate $(date -r $F '+%Y-%m-%d')" >> index.html
    ;;
    *v* ) echo "Release" >> index.html
    ;;
  esac


  echo "</td></tr>" >> index.html
 
  echo '<html><head><link rel="stylesheet" href="http://download.eclipse.org/jetty/default.css">' > $F/dist/index.html

  echo "<h1>$F:</h1>" >> $F/dist/index.html
  echo '<ul>' >> $F/dist/index.html
  echo '<li><a href=http://download.eclipse.org/jetty/>all jetty distributions</a></li>' >> $F/dist/index.html
  find $F/dist -type f | while read D
  do
    D=$(basename $D)
    [ $D != index.html ] && echo "<li><a href=http://eclipse.org/downloads/download.php?file=/jetty/$F/dist/$D&r=1>$D</a>" >> $F/dist/index.html
  done
  echo '</ul>' >> $F/dist/index.html
  echo "<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1149868-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>" >> $F/dist/index.html
echo '</body></html>' >> $F/dist/index.html
done
echo '</table>' >> index.html
  echo "<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1149868-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>" >> index.html
echo '</body></html>' >> index.html


