source: trunk/mailtousernemo.sh @ 31

Last change on this file since 31 was 31, checked in by pinsard, 16 years ago

remove nemo in elements names and filenames

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