source: trunk/mailtousernemo.sh @ 11

Last change on this file since 11 was 4, checked in by pinsard, 17 years ago

bug fix for Off-line and PC Cluster. see ticket:1

  • Property svn:keywords set to Id
File size: 8.6 KB
Line 
1#! /bin/sh
2#
3# module :
4# convert email text in xml form folloowing usernemo.dtd
5#
6# see also bibopa.sh
7#
8# original location :
9# /usr/home/fplod/incas/bibnemo/src/bibnemomaf/mailtousernemo.sh sur aedon.locean-ipsl.upmc.fr
10#
11# example :
12# $ ./mailtousernemo.sh -m data/mail2007-04-25T08:58:16Z.txt -x ginette.xml
13#
14# see also bibopa.sh
15#
16# update :
17# ++ gestion des comments
18# ++ gestion de la signature
19# $Id$
20# fplod 2007-06-06T09:27:55Z aedon.locean-ipsl.upmc.fr (Darwin)
21# correction for Off-Line and PC Cluster
22# fplod 2007-05-18T08:31:48Z aedon.locean-ipsl.upmc.fr (Darwin)
23# add off-line and agrif components
24# fplod 2007-05-09T15:03:15Z aedon.locean-ipsl.upmc.fr (Darwin)
25# reprise + ajout middlename + ajout components_date
26# fplod 2007-04-25T09:15:38Z aedon.locean-ipsl.upmc.fr (Darwin)
27# creation
28#
29set -o posix
30command=$(basename ${0} .sh)
31log_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
32log=/tmp/${command}.${log_date}
33#
34usage=" Usage : ${command} -m mailbodyfile -x xmloutput"
35#
36# test if xmllint is available
37type xmllint 1> /dev/null 2>&1
38status=${?}
39if [ ${status} -ne 0 ]
40then
41 echo " eee : xmllint not found"
42 exit 1
43fi
44#
45# check for usernemo.dtd
46if [ ! -f usernemo.dtd ]
47then
48  echo "eee : usernemo.dtd not found"
49  exit 1
50fi
51#
52while [ ! -z "${1}" ] # ++ pb bash
53do
54 case ${1} in
55 -m) # mailbodyfile
56  mailbodyfile=${2}
57  shift
58 ;;
59 -x) # xmloutput
60  xmloutput=${2}
61  shift
62 ;;
63 *) # other choice
64  echo "${usage}"
65  exit 1
66 ;;
67 esac
68 shift # next flag
69done
70#
71set -u
72#
73# check for mailbodyfile
74if [ ! -f ${mailbodyfile} ]
75then
76  echo "eee : ${mailbodyfile} not found"
77  exit 1
78fi
79#
80# check for xmloutput
81#++ err si exist
82#
83echo "<usernemo>" > ${xmloutput}
84echo "<!-- mailbodyfile : ${mailbodyfile} " >> ${xmloutput}
85cat ${mailbodyfile} >> ${xmloutput}
86echo "-->" >> ${xmloutput}
87echo "<!-- ${log_date} -->" >> ${xmloutput}
88author_id=$(grep "author_id=" ${mailbodyfile} | awk -F"=" '{print $2}')
89surname=$(grep "personal_surname=" ${mailbodyfile} | awk -F"=" '{print $2}')
90firstname=$(grep "personal_firstname=" ${mailbodyfile} | awk -F"=" '{print $2}')
91middlename=$(grep "personal_middlename=" ${mailbodyfile} | awk -F"=" '{print $2}')
92if [ "${author_id}" = "template" ]
93then
94 author_id=$( echo ${surname} | \
95 tr "[:lower:]" "[:upper:]" | \
96 tr " " "_"  | \
97 recode -d -f UTF-8..flat)
98 author_id=${author_id}_$( echo ${firstname:0:1} | \
99 tr "[:upper:]" "[:lower:]" | \
100 recode -d -f UTF-8..flat)
101fi
102echo "<userid>${author_id}</userid>" >> ${xmloutput}
103#
104echo "<personname>" >> ${xmloutput}
105#
106echo "<surname>$surname</surname>" >> ${xmloutput}
107#
108echo "<firstname>$firstname</firstname>" >> ${xmloutput}
109echo "<othername role='mi'>$middlename</othername>" >> ${xmloutput}
110#
111echo "</personname>" >> ${xmloutput}
112#
113email=$(grep "personal_email=" ${mailbodyfile} | awk -F"=" '{print $2}')
114echo "<email>$email</email>" >> ${xmloutput}
115#
116elements=components
117element=component
118#++ récupérer les usersnemo/usernemo[child::userid='template']/components/component/name
119unset jlist
120unset jlist_name
121j=1
122jlist[${j}]="OPA"
123jlist_name[${j}]="OPA"
124j=$((${j} + 1))
125jlist[${j}]="LIM"
126jlist_name[${j}]="LIM"
127j=$((${j} + 1))
128jlist[${j}]="TOP"
129jlist_name[${j}]="TOP"
130j=$((${j} + 1))
131jlist[${j}]="TAM"
132jlist_name[${j}]="TAM"
133j=$((${j} + 1))
134jlist[${j}]="SAXO"
135jlist_name[${j}]="SAXO"
136j=$((${j} + 1))
137jlist[${j}]="offline"
138jlist_name[${j}]="Off-line"
139j=$((${j} + 1))
140jlist[${j}]="AGRIF"
141jlist_name[${j}]="AGRIF"
142echo "<${elements}>" >> ${xmloutput}
143components_date=$(grep "components_date=" ${mailbodyfile} | awk -F"=" '{print $2}')
144echo "<components_date>$components_date</components_date>" >> ${xmloutput}
145## find the element
146j=1
147jlistsize=${#jlist[@]}
148while [ ${j} -le ${jlistsize} ]
149do
150  jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
151  # recherche de ${jlist[j]}
152  grep -q "${element}_${jlist_min}" ${mailbodyfile}
153  ok=${?}
154  if [ ${ok} -eq 0 ]
155  then
156     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
157     echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
158     echo "<value>yes</value>" >> ${xmloutput}
159     echo "</${element}>"  >> ${xmloutput}
160  else
161     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
162     echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
163     echo "<value>no</value>" >> ${xmloutput}
164     echo "</${element}>"  >> ${xmloutput}
165  fi
166  j=$(( $j + 1 ))
167done
168echo "</${elements}>" >> ${xmloutput}
169#
170element=platform
171elements=platforms
172#++ récupérer les usersnemo/usernemo[child::userid='template']/platforms/platform/name
173unset jlist
174unset jlist_name
175j=1
176jlist[${j}]="CRAY"
177jlist_name[${j}]="CRAY"
178j=$((${j} + 1))
179jlist[${j}]="IBM"
180jlist_name[${j}]="IBM"
181j=$((${j} + 1))
182jlist[${j}]="FUJITSU"
183jlist_name[${j}]="FUJITSU"
184j=$((${j} + 1))
185jlist[${j}]="MAC"
186jlist_name[${j}]="MAC"
187j=$((${j} + 1))
188jlist[${j}]="NEC"
189jlist_name[${j}]="NEC"
190j=$((${j} + 1))
191jlist[${j}]="SGI"
192jlist_name[${j}]="SGI"
193j=$((${j} + 1))
194jlist[${j}]="SUN"
195jlist_name[${j}]="SUN"
196j=$((${j} + 1))
197jlist[${j}]='pccluster'
198jlist_name[${j}]="PC Cluster"
199echo "<${elements}>" >> ${xmloutput}
200## find the element
201j=1
202jlistsize=${#jlist[@]}
203while [ ${j} -le ${jlistsize} ]
204do
205  # recherche de ${jlist[j]}
206  jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
207  grep -q "${element}_${jlist_min}" ${mailbodyfile}
208  ok=${?}
209  if [ ${ok} -eq 0 ]
210  then
211     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
212     echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
213     echo "<value>yes</value>" >> ${xmloutput}
214     echo "</${element}>"  >> ${xmloutput}
215  else
216     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
217     echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
218     echo "<value>no</value>" >> ${xmloutput}
219     echo "</${element}>"  >> ${xmloutput}
220  fi
221  j=$(( $j + 1 ))
222done
223#
224# gestion des "others"
225j=1
226jlistsize=${#jlist[@]}
227grep_cmd="grep ${element}_zzz_other ${mailbodyfile} "
228while [ ${j} -le ${jlistsize} ]
229do
230  grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
231  j=$(( $j + 1 ))
232done
233other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
234echo "<${element} code='zzz_other'>" >> ${xmloutput}
235echo "<name>Other</name>" >> ${xmloutput}
236echo "<value>${other}</value>" >> ${xmloutput}
237echo "</${element}>"  >> ${xmloutput}
238echo "</${elements}>" >> ${xmloutput}
239#
240processors=$(grep "processors=" ${mailbodyfile} | awk -F"=" '{print $2}')
241echo "<processors>$processors</processors>" >> ${xmloutput}
242#
243element=compiler
244elements=compilers
245unset jlist
246unset jlist_name
247j=1
248jlist[${j}]="g95"
249jlist_name[${j}]="g95"
250j=$((${j} + 1))
251jlist[${j}]="ifort"
252jlist_name[${j}]="ifort"
253j=$((${j} + 1))
254jlist[${j}]="pgf"
255jlist_name[${j}]="pgf"
256j=$((${j} + 1))
257jlist[${j}]="sxf90"
258jlist_name[${j}]="sxf90"
259j=$((${j} + 1))
260jlist[${j}]="xlf"
261jlist_name[${j}]="xlf"
262echo "<${elements}>" >> ${xmloutput}
263## find the element
264j=1
265jlistsize=${#jlist[@]}
266while [ ${j} -le ${jlistsize} ]
267do
268  # recherche de ${jlist[j]}
269  jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
270  grep -q "${element}_${jlist_min}" ${mailbodyfile}
271  ok=${?}
272  if [ ${ok} -eq 0 ]
273  then
274     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
275     echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
276     echo "<value>yes</value>" >> ${xmloutput}
277     echo "</${element}>"  >> ${xmloutput}
278  else
279     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
280     echo "<name>${jlist_name[j]}</name>" >> ${xmloutput}
281     echo "<value>no</value>" >> ${xmloutput}
282     echo "</${element}>"  >> ${xmloutput}
283  fi
284  j=$(( $j + 1 ))
285done
286#
287# gestion des "others"
288j=1
289jlistsize=${#jlist[@]}
290grep_cmd="grep ${element}_zzz_other= ${mailbodyfile} "
291while [ ${j} -le ${jlistsize} ]
292do
293  grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
294  j=$(( $j + 1 ))
295done
296other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
297echo "<${element} code='zzz_other'>" >> ${xmloutput}
298echo "<name>Other</name>" >> ${xmloutput}
299echo "<value>${other}</value>" >> ${xmloutput}
300echo "</${element}>"  >> ${xmloutput}
301echo "</${elements}>" >> ${xmloutput}
302#
303echo "</usernemo>" >> ${xmloutput}
304#
305xmloutputfull=/tmp/${xmloutput} # ++
306echo '<?xml version="1.0" encoding="iso-8859-1"?>' > ${xmloutputfull}
307echo '<!DOCTYPE usersnemo SYSTEM "usernemo.dtd">' >> ${xmloutputfull}
308echo '<usersnemo>' >> ${xmloutputfull}
309echo '<date>bidon</date>' >> ${xmloutputfull}
310cat ${xmloutput} >> ${xmloutputfull}
311echo '</usersnemo>' >> ${xmloutputfull}
312#
313# ++ parce que je ne sais pas dire où est la dtd dans la commande xmllint
314cp usernemo.dtd /tmp/
315xmllint --noout --valid ${xmloutputfull} 1>> ${log} 2>> ${log}
316status=${?}
317if [ ${status} -ne 0 ]
318then
319 echo " eee : pb DTD conformance of ${xmloutputfull}"
320 echo " eee : see ${log}"
321 exit 1
322else
323 echo " iii : you can include ${xmloutput} in usernemo.xml" #++ filename path
324 echo " iii : modify date in usernemo.xml" #++ filename path
325fi
326#
327exit 0
Note: See TracBrowser for help on using the repository browser.