source: trunk/mailtousernemo.sh @ 3

Last change on this file since 3 was 2, checked in by smasson, 17 years ago

initial import

File size: 7.9 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# 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 usernemo.dtd
43if [ ! -f usernemo.dtd ]
44then
45  echo "eee : usernemo.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 "<usernemo>" > ${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 usersnemo/usernemo[child::userid='template']/components/component/name
116j=1
117jlist[${j}]="OPA"
118j=$((${j} + 1))
119jlist[${j}]="LIM"
120j=$((${j} + 1))
121jlist[${j}]="TOP"
122j=$((${j} + 1))
123jlist[${j}]="TAM"
124j=$((${j} + 1))
125jlist[${j}]="SAXO"
126j=$((${j} + 1))
127jlist[${j}]="OFF-LINE"
128j=$((${j} + 1))
129jlist[${j}]="AGRIF"
130echo "<${elements}>" >> ${xmloutput}
131components_date=$(grep "components_date=" ${mailbodyfile} | awk -F"=" '{print $2}')
132echo "<components_date>$components_date</components_date>" >> ${xmloutput}
133## find the element
134j=1
135jlistsize=${#jlist[@]}
136while [ ${j} -le ${jlistsize} ]
137do
138  jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
139  # recherche de ${jlist[j]}
140  grep -q "${element}_${jlist_min}" ${mailbodyfile}
141  ok=${?}
142  if [ ${ok} -eq 0 ]
143  then
144     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
145     echo "<name>${jlist[j]}</name>" >> ${xmloutput}
146     echo "<value>yes</value>" >> ${xmloutput}
147     echo "</${element}>"  >> ${xmloutput}
148  else
149     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
150     echo "<name>${jlist[j]}</name>" >> ${xmloutput}
151     echo "<value>no</value>" >> ${xmloutput}
152     echo "</${element}>"  >> ${xmloutput}
153  fi
154  j=$(( $j + 1 ))
155done
156echo "</${elements}>" >> ${xmloutput}
157#
158element=platform
159elements=platforms
160#++ récupérer les usersnemo/usernemo[child::userid='template']/platforms/platform/name
161j=1
162jlist[${j}]="CRAY"
163j=$((${j} + 1))
164jlist[${j}]="IBM"
165j=$((${j} + 1))
166jlist[${j}]="FUJITSU"
167j=$((${j} + 1))
168jlist[${j}]="MAC"
169j=$((${j} + 1))
170jlist[${j}]="NEC"
171j=$((${j} + 1))
172jlist[${j}]="SGI"
173j=$((${j} + 1))
174jlist[${j}]="SUN"
175j=$((${j} + 1))
176jlist[${j}]='PC Cluster'
177echo "<${elements}>" >> ${xmloutput}
178## find the element
179j=1
180jlistsize=${#jlist[@]}
181while [ ${j} -le ${jlistsize} ]
182do
183  # recherche de ${jlist[j]}
184  jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
185  grep -q "${element}_${jlist_min}" ${mailbodyfile}
186  ok=${?}
187  if [ ${ok} -eq 0 ]
188  then
189     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
190     echo "<name>${jlist[j]}</name>" >> ${xmloutput}
191     echo "<value>yes</value>" >> ${xmloutput}
192     echo "</${element}>"  >> ${xmloutput}
193  else
194     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
195     echo "<name>${jlist[j]}</name>" >> ${xmloutput}
196     echo "<value>no</value>" >> ${xmloutput}
197     echo "</${element}>"  >> ${xmloutput}
198  fi
199  j=$(( $j + 1 ))
200done
201#
202# gestion des "others"
203j=1
204jlistsize=${#jlist[@]}
205grep_cmd="grep ${element}_zzz_other ${mailbodyfile} "
206while [ ${j} -le ${jlistsize} ]
207do
208  grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
209  j=$(( $j + 1 ))
210done
211other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
212echo "<${element} code='zzz_other'>" >> ${xmloutput}
213echo "<name>Other</name>" >> ${xmloutput}
214echo "<value>${other}</value>" >> ${xmloutput}
215echo "</${element}>"  >> ${xmloutput}
216echo "</${elements}>" >> ${xmloutput}
217#
218processors=$(grep "processors=" ${mailbodyfile} | awk -F"=" '{print $2}')
219echo "<processors>$processors</processors>" >> ${xmloutput}
220#
221element=compiler
222elements=compilers
223unset jlist
224j=1
225jlist[${j}]="g95"
226j=$((${j} + 1))
227jlist[${j}]="ifort"
228j=$((${j} + 1))
229jlist[${j}]="pgf"
230j=$((${j} + 1))
231jlist[${j}]="sxf90"
232j=$((${j} + 1))
233jlist[${j}]="xlf"
234echo "<${elements}>" >> ${xmloutput}
235## find the element
236j=1
237jlistsize=${#jlist[@]}
238while [ ${j} -le ${jlistsize} ]
239do
240  # recherche de ${jlist[j]}
241  jlist_min=$(echo ${jlist[j]} | tr [:upper:] [:lower:])
242  grep -q "${element}_${jlist_min}" ${mailbodyfile}
243  ok=${?}
244  if [ ${ok} -eq 0 ]
245  then
246     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
247     echo "<name>${jlist[j]}</name>" >> ${xmloutput}
248     echo "<value>yes</value>" >> ${xmloutput}
249     echo "</${element}>"  >> ${xmloutput}
250  else
251     echo "<${element} code='${jlist_min}'>" >> ${xmloutput}
252     echo "<name>${jlist[j]}</name>" >> ${xmloutput}
253     echo "<value>no</value>" >> ${xmloutput}
254     echo "</${element}>"  >> ${xmloutput}
255  fi
256  j=$(( $j + 1 ))
257done
258#
259# gestion des "others"
260j=1
261jlistsize=${#jlist[@]}
262grep_cmd="grep ${element}_zzz_other= ${mailbodyfile} "
263while [ ${j} -le ${jlistsize} ]
264do
265  grep_cmd="${grep_cmd} | grep -v ${element}=${jlist[j]}" #++ -v inutile
266  j=$(( $j + 1 ))
267done
268other=$(eval ${grep_cmd} | awk -F "=" '{print$2}')
269echo "<${element} code='zzz_other'>" >> ${xmloutput}
270echo "<name>Other</name>" >> ${xmloutput}
271echo "<value>${other}</value>" >> ${xmloutput}
272echo "</${element}>"  >> ${xmloutput}
273echo "</${elements}>" >> ${xmloutput}
274#
275echo "</usernemo>" >> ${xmloutput}
276#
277xmloutputfull=/tmp/${xmloutput} # ++
278echo '<?xml version="1.0" encoding="iso-8859-1"?>' > ${xmloutputfull}
279echo '<!DOCTYPE usersnemo SYSTEM "usernemo.dtd">' >> ${xmloutputfull}
280echo '<usersnemo>' >> ${xmloutputfull}
281echo '<date>bidon</date>' >> ${xmloutputfull}
282cat ${xmloutput} >> ${xmloutputfull}
283echo '</usersnemo>' >> ${xmloutputfull}
284#
285# ++ parce que je ne sais pas dire où est la dtd dans la commande xmllint
286cp usernemo.dtd /tmp/
287xmllint --noout --valid ${xmloutputfull} 1>> ${log} 2>> ${log}
288status=${?}
289if [ ${status} -ne 0 ]
290then
291 echo " eee : pb DTD conformance of ${xmloutputfull}"
292 echo " eee : see ${log}"
293 exit 1
294else
295 echo " iii : you can include ${xmloutput} in usernemo.xml" #++ filename path
296 echo " iii : modify date in usernemo.xml" #++ filename path
297fi
298#
299exit 0
Note: See TracBrowser for help on using the repository browser.