#! /bin/sh
#
# module :
# convert email text in xml form folloowing usernemo.dtd
#
# see also bibopa.sh
#
# original location :
# /usr/home/fplod/incas/bibnemo/src/bibnemomaf/mailtousernemo.sh sur aedon.locean-ipsl.upmc.fr
#
# example :
# $ ./mailtousernemo.sh -m data/mail2007-04-25T08:58:16Z.txt -x ginette.xml
#
# see also bibopa.sh
#
# update :
# ++ gestion des comments
# ++ gestion de la signature
# fplod 2007-05-18T08:31:48Z aedon.locean-ipsl.upmc.fr (Darwin)
# add off-line and agrif components
# fplod 2007-05-09T15:03:15Z aedon.locean-ipsl.upmc.fr (Darwin)
# reprise + ajout middlename + ajout components_date
# fplod 2007-04-25T09:15:38Z aedon.locean-ipsl.upmc.fr (Darwin)
# creation
#
set -o posix
command=$(basename ${0} .sh)
log_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
log=/tmp/${command}.${log_date}
#
usage=" Usage : ${command} -m mailbodyfile -x xmloutput"
#
# test if xmllint is available
type xmllint 1> /dev/null 2>&1
status=${?}
if [ ${status} -ne 0 ]
then
echo " eee : xmllint not found"
exit 1
fi
#
# check for usernemo.dtd
if [ ! -f usernemo.dtd ]
then
echo "eee : usernemo.dtd not found"
exit 1
fi
#
while [ ! -z "${1}" ] # ++ pb bash
do
case ${1} in
-m) # mailbodyfile
mailbodyfile=${2}
shift
;;
-x) # xmloutput
xmloutput=${2}
shift
;;
*) # other choice
echo "${usage}"
exit 1
;;
esac
shift # next flag
done
#
set -u
#
# check for mailbodyfile
if [ ! -f ${mailbodyfile} ]
then
echo "eee : ${mailbodyfile} not found"
exit 1
fi
#
# check for xmloutput
#++ err si exist
#
echo "" > ${xmloutput}
echo "" >> ${xmloutput}
echo "" >> ${xmloutput}
author_id=$(grep "author_id=" ${mailbodyfile} | awk -F"=" '{print $2}')
surname=$(grep "personal_surname=" ${mailbodyfile} | awk -F"=" '{print $2}')
firstname=$(grep "personal_firstname=" ${mailbodyfile} | awk -F"=" '{print $2}')
middlename=$(grep "personal_middlename=" ${mailbodyfile} | awk -F"=" '{print $2}')
if [ "${author_id}" = "template" ]
then
author_id=$( echo ${surname} | \
tr "[:lower:]" "[:upper:]" | \
tr " " "_" | \
recode -d -f UTF-8..flat)
author_id=${author_id}_$( echo ${firstname:0:1} | \
tr "[:upper:]" "[:lower:]" | \
recode -d -f UTF-8..flat)
fi
echo "${author_id}" >> ${xmloutput}
#
echo "" >> ${xmloutput}
#
echo "$surname" >> ${xmloutput}
#
echo "$firstname" >> ${xmloutput}
echo "$middlename" >> ${xmloutput}
#
echo "" >> ${xmloutput}
#
email=$(grep "personal_email=" ${mailbodyfile} | awk -F"=" '{print $2}')
echo "$email" >> ${xmloutput}
#
elements=components
element=component
#++ récupérer les usersnemo/usernemo[child::userid='template']/components/component/name
j=1
jlist[${j}]="OPA"
j=$((${j} + 1))
jlist[${j}]="LIM"
j=$((${j} + 1))
jlist[${j}]="TOP"
j=$((${j} + 1))
jlist[${j}]="TAM"
j=$((${j} + 1))
jlist[${j}]="SAXO"
j=$((${j} + 1))
jlist[${j}]="OFF-LINE"
j=$((${j} + 1))
jlist[${j}]="AGRIF"
echo "<${elements}>" >> ${xmloutput}
components_date=$(grep "components_date=" ${mailbodyfile} | awk -F"=" '{print $2}')
echo "$components_date" >> ${xmloutput}
## find the element
j=1
jlistsize=${#jlist[@]}
while [ ${j} -le ${jlistsize} ]
do
jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
# recherche de ${jlist[j]}
grep -q "${element}_${jlist_min}" ${mailbodyfile}
ok=${?}
if [ ${ok} -eq 0 ]
then
echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
echo "${jlist[j]}" >> ${xmloutput}
echo "yes" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
else
echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
echo "${jlist[j]}" >> ${xmloutput}
echo "no" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
fi
j=$(( $j + 1 ))
done
echo "${elements}>" >> ${xmloutput}
#
element=platform
elements=platforms
#++ récupérer les usersnemo/usernemo[child::userid='template']/platforms/platform/name
j=1
jlist[${j}]="CRAY"
j=$((${j} + 1))
jlist[${j}]="IBM"
j=$((${j} + 1))
jlist[${j}]="FUJITSU"
j=$((${j} + 1))
jlist[${j}]="MAC"
j=$((${j} + 1))
jlist[${j}]="NEC"
j=$((${j} + 1))
jlist[${j}]="SGI"
j=$((${j} + 1))
jlist[${j}]="SUN"
j=$((${j} + 1))
jlist[${j}]='PC Cluster'
echo "<${elements}>" >> ${xmloutput}
## find the element
j=1
jlistsize=${#jlist[@]}
while [ ${j} -le ${jlistsize} ]
do
# recherche de ${jlist[j]}
jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
grep -q "${element}_${jlist_min}" ${mailbodyfile}
ok=${?}
if [ ${ok} -eq 0 ]
then
echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
echo "${jlist[j]}" >> ${xmloutput}
echo "yes" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
else
echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
echo "${jlist[j]}" >> ${xmloutput}
echo "no" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
fi
j=$(( $j + 1 ))
done
#
# gestion des "others"
j=1
jlistsize=${#jlist[@]}
grep_cmd="grep ${element}_zzz_other ${mailbodyfile} "
while [ ${j} -le ${jlistsize} ]
do
grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
j=$(( $j + 1 ))
done
other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
echo "<${element} code='zzz_other'>" >> ${xmloutput}
echo "Other" >> ${xmloutput}
echo "${other}" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
echo "${elements}>" >> ${xmloutput}
#
processors=$(grep "processors=" ${mailbodyfile} | awk -F"=" '{print $2}')
echo "$processors" >> ${xmloutput}
#
element=compiler
elements=compilers
unset jlist
j=1
jlist[${j}]="g95"
j=$((${j} + 1))
jlist[${j}]="ifort"
j=$((${j} + 1))
jlist[${j}]="pgf"
j=$((${j} + 1))
jlist[${j}]="sxf90"
j=$((${j} + 1))
jlist[${j}]="xlf"
echo "<${elements}>" >> ${xmloutput}
## find the element
j=1
jlistsize=${#jlist[@]}
while [ ${j} -le ${jlistsize} ]
do
# recherche de ${jlist[j]}
jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
grep -q "${element}_${jlist_min}" ${mailbodyfile}
ok=${?}
if [ ${ok} -eq 0 ]
then
echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
echo "${jlist[j]}" >> ${xmloutput}
echo "yes" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
else
echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
echo "${jlist[j]}" >> ${xmloutput}
echo "no" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
fi
j=$(( $j + 1 ))
done
#
# gestion des "others"
j=1
jlistsize=${#jlist[@]}
grep_cmd="grep ${element}_zzz_other= ${mailbodyfile} "
while [ ${j} -le ${jlistsize} ]
do
grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
j=$(( $j + 1 ))
done
other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
echo "<${element} code='zzz_other'>" >> ${xmloutput}
echo "Other" >> ${xmloutput}
echo "${other}" >> ${xmloutput}
echo "${element}>" >> ${xmloutput}
echo "${elements}>" >> ${xmloutput}
#
echo "" >> ${xmloutput}
#
xmloutputfull=/tmp/${xmloutput} # ++
echo '' > ${xmloutputfull}
echo '' >> ${xmloutputfull}
echo '' >> ${xmloutputfull}
echo 'bidon' >> ${xmloutputfull}
cat ${xmloutput} >> ${xmloutputfull}
echo '' >> ${xmloutputfull}
#
# ++ parce que je ne sais pas dire où est la dtd dans la commande xmllint
cp usernemo.dtd /tmp/
xmllint --noout --valid ${xmloutputfull} 1>> ${log} 2>> ${log}
status=${?}
if [ ${status} -ne 0 ]
then
echo " eee : pb DTD conformance of ${xmloutputfull}"
echo " eee : see ${log}"
exit 1
else
echo " iii : you can include ${xmloutput} in usernemo.xml" #++ filename path
echo " iii : modify date in usernemo.xml" #++ filename path
fi
#
exit 0