#! /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 "" >> ${xmloutput} else echo "<${element} code='${jlist_min}'>" >> ${xmloutput} echo "${jlist[j]}" >> ${xmloutput} echo "no" >> ${xmloutput} echo "" >> ${xmloutput} fi j=$(( $j + 1 )) done echo "" >> ${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 "" >> ${xmloutput} else echo "<${element} code='${jlist_min}'>" >> ${xmloutput} echo "${jlist[j]}" >> ${xmloutput} echo "no" >> ${xmloutput} echo "" >> ${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 "" >> ${xmloutput} echo "" >> ${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 "" >> ${xmloutput} else echo "<${element} code='${jlist_min}'>" >> ${xmloutput} echo "${jlist[j]}" >> ${xmloutput} echo "no" >> ${xmloutput} echo "" >> ${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 "" >> ${xmloutput} echo "" >> ${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