source: ether_statistics/domain/interface/com/medias/annuaire/Annuaire.java @ 569

Last change on this file since 569 was 569, checked in by vmipsl, 12 years ago

Nouveau projet

File size: 8.6 KB
Line 
1package com.medias.annuaire;
2
3import com.medias.ConversionException;
4import com.medias.utils.Entity;
5import com.medias.xml.XMLBuilder;
6import com.medias.xml.metadata.Contact;
7import com.medias.xml.metadata.Metadata;
8import org.apache.struts.action.ActionMessage;
9import org.apache.struts.action.ActionMessages;
10import org.jdom.Element;
11import org.jdom.JDOMException;
12
13import java.io.IOException;
14import java.util.ArrayList;
15import java.util.Iterator;
16import java.util.List;
17
18/**
19 * @author combaz
20 *
21 * Created on 22 févr. 2005
22 */
23public class Annuaire implements Entity
24{
25        /**
26     *
27     */
28    private static final long serialVersionUID = 1L;
29
30    /**
31         * L'attribut que l'on prend pour constituer le login
32         */
33        public static String LOGIN_FIELD = "mail";
34       
35        public static String KWD_FIELD = "mdp";
36       
37        private String xmlFileName;
38       
39        private ArrayList<Object> contacts;
40       
41        public Annuaire(String file) {
42                this.xmlFileName = file;
43                this.contacts = new ArrayList<Object>();
44                try {
45                        this.update();
46                }
47                catch(Exception e){
48                        e.printStackTrace();
49                }
50        }
51       
52        /**
53         * @return Returns the contacts.
54         */
55        public Object[] getContacts() {
56                if(this.contacts.isEmpty()) {
57                        Contact pers = new Contact();
58                        this.contacts.add(pers);
59                }
60                return this.contacts.toArray();
61        }
62        /**
63         * @param contacts The contacts to set.
64         */
65        public void setContacts(Contact[] contacts) {
66                this.contacts = new ArrayList<Object>();
67                for(int i=0; i<contacts.length; i++)
68                        this.contacts.add(contacts[i]);
69        }
70        /**
71         * @return Returns the xmlFileName.
72         */
73        public String getXmlFileName() {
74                return xmlFileName;
75        }
76        /**
77         * @param xmlFileName The xmlFileName to set.
78         */
79        public void setXmlFileName(String xmlFileName) {
80                this.xmlFileName = xmlFileName;
81        }
82       
83        public void fromXmlElement(Element el) throws ConversionException {
84                List<?> p = el.getChildren("personne");
85                Iterator<?> it = p.iterator();
86               
87                if((p==null)) {
88                        throw new ConversionException(ConversionException.ERROR_fromXml + "Annuaire !");
89                }
90
91                while(it.hasNext()){
92                        Element child = (Element)it.next();
93                        Personne pers = new Personne();
94                        pers.fromXmlElement(child);
95                        this.contacts.add(pers);
96                }
97        }
98       
99        public Element toXmlElement(String title) {
100                ArrayList<Element> pl = new ArrayList<Element>();
101                for(int i = 0; i<this.contacts.size(); i++) {
102                        Personne pers = (Personne)this.contacts.get(i);
103                        Element p = pers.toXmlElement("personne");
104                        pl.add(p);
105                }
106                Element result = new Element(title);
107                result.addContent(pl);
108               
109                return result;
110        }
111       
112        public ArrayList<Element> getPersonnes(String login) throws IOException, JDOMException {
113                ArrayList<Element> result = new ArrayList<Element>();
114                XMLBuilder builder = new XMLBuilder();
115                builder.readXml(this.xmlFileName);
116                List<?> personnes = builder.getRoot().getChildren("personne");
117                Iterator<?> it = personnes.iterator();
118               
119                while(it.hasNext()) {
120                        Element pers = (Element) it.next();
121                        Element key = pers.getChild(Annuaire.LOGIN_FIELD);
122                        if(key.getText().equals(login))
123                                result.add(pers);
124                }
125               
126                return result;
127        }
128       
129        public Personne getPersonne(String login, String pwd) throws IOException, JDOMException, ConversionException {
130                ArrayList<Element> selection = this.getPersonnes(login);
131                Iterator<Element> it = selection.iterator();
132               
133                while(it.hasNext()) {
134                        Element pers = it.next();
135                        if(pers.getChild(Annuaire.KWD_FIELD).getText().equals(pwd)) {
136                                Personne p = new Personne();
137                                p.fromXmlElement(pers);
138                                return p;
139                        }
140                }
141               
142                return null;
143        }
144       
145//      private boolean jeuHasRole (String jeu, String role) {
146//              /* Recherche d'un contact ayant le role dans le jeu */
147//              Iterator it = this.contacts.iterator();
148//              while(it.hasNext()) {
149//                      Contact pers = (Contact) it.next();
150//                      if(pers.getRole().equalsIgnoreCase(role)) {
151//                              return true;
152//                      }
153//              }
154//             
155//              return false;
156//      }
157       
158        /**
159         * A partir d'un contact récupéré dans une métadonnée, va ajouter la personne correspondante à l'annuaire si elle
160         * n'existe pas, ou bien, dans le cas contraire, remettre simplement à jour la liste de jeux qui lui est associée.
161         * Pour un jeu donné, il ne peut y avoir qu'une seule personne par rÃŽle.
162         * @param c Le contact à ajouter
163         * @param jeu Le jeu associé à ce contact.
164         * @throws IOException
165         */
166        public boolean addPersonne(Contact c, String jeu, ActionMessages messages) throws IOException{
167                /* On vérifie si une autre personne détient le rÃŽle de la personne à ajouter au niveau du jeu. Si tel est le
168                 * cas, la personne n'est ni ajouté à l'annuaire, ni au jeu */
169               
170//              String role = c.getRole();
171//              if (!jeuHasRole (jeu, role)) {
172                        Personne p = new Personne();
173                        p.fromContact(c);
174                        ArrayList<String> l = new ArrayList<String>();
175                        l.add(jeu);
176                        p.setJeux(l);
177                        boolean res = this.addPersonne(p,messages);
178                        c.setMdp(p.getMdp());
179                        return res;
180//              }
181        }
182       
183        /**
184         * Ajoute une personne à l'annuaire si elle n'existe pas encore, ou compléter la liste de jeux qui lui est associée.
185         * @param p la personne à ajouter
186         * @return true si la personne a bien été ajoutée, false si la personne existait déjà.
187         */
188        private boolean addPersonne(Personne p, ActionMessages messages) throws IOException {
189                boolean result = false;
190               
191                if(!this.contains(p)){
192                        this.contacts.add(p);
193                        result = true;
194                }
195                else {
196                        Iterator<Object> it = this.contacts.iterator();
197                        //on trouve l'enregistrement dans l'annuaire correspondant à la personne à mettre à jour
198                        while(it.hasNext()){
199                                Personne pers = (Personne)it.next();
200                                if(pers.equals(p)) {
201                                        // Si la personne existe déjà mais que le mot de passe saisi est différent, on l'indique par un message d'info
202                                        if (!pers.getMdp().toLowerCase().equals(p.getMdp().trim().toLowerCase())) {
203                                                messages.add("warning", new ActionMessage("data.upload.newSet.pwdexist",pers.getMail(),pers.getMdp()));
204                                                p.setMdp(pers.getMdp());
205                                        }
206                                        Iterator<String> pit = p.getJeux().iterator();
207                                        ArrayList<String> l = pers.getJeux();
208                                        //on parcourt les jeux à rajouter et on ajoute ceux qui manquent
209                                        while(pit.hasNext()) {
210                                                String jeu = (String) pit.next();
211                                                if(!l.contains(jeu)) {
212                                                        l.add(jeu);
213                                                }
214                                        }
215                                        pers.setJeux(l);
216                                }
217                                       
218                        }
219                }
220                return result;
221        }
222       
223        public void createXmlFile() throws IOException {
224                Element root = this.toXmlElement("annuaire");
225                XMLBuilder builder = new XMLBuilder(root);
226                builder.writeXml(this.getXmlFileName());
227        }
228
229        /**
230         * Remet à jour le fichier com.medias.xml d'annuaire à partir des contacts associés à un jeu de données.
231         * @param metadata      Les métadonnées associées au jeu, dans lesquelles on va trouver les contacts en question
232         * @throws IOException
233         */
234        public int update(Metadata metadata, ActionMessages messages) throws IOException {
235                //le nom du jeu, à associer aux contacts dans l'annuaire,
236                String jeu = metadata.getPres().getNom();
237                Iterator<Contact> meta_it = metadata.getPres().getContactsList().iterator();
238                //pour chacun des contacts trouvés, on complÚte l'annuaire,
239                int nbPersonnesAPrevenir=0;
240                while(meta_it.hasNext()) {
241                        Contact pers = meta_it.next();
242                        if((pers.getMail() != null) && (pers.getMail().length() != 0)) {
243                                this.addPersonne(pers,jeu,messages);
244                                nbPersonnesAPrevenir++;
245                        }
246                }
247               
248                //puis, on vérifie la cohérence (en cas de suppression de contacts associés au jeu)
249                Iterator<Object> annu_it = this.contacts.iterator();
250                while(annu_it.hasNext()) {
251                        Personne pers = (Personne) annu_it.next();
252                        Iterator<String> jeu_it = pers.getJeux().iterator();
253                        boolean remove = false;
254                        while((!remove)&&(jeu_it.hasNext())) {
255                                String jeu_pers = (String) jeu_it.next();
256                                if(jeu_pers.equals(jeu)) {
257                                        remove = true;
258                                        meta_it = metadata.getPres().getContactsList().iterator();
259                                        while(meta_it.hasNext()) {
260                                                Contact contact = meta_it.next();
261                                                Personne p = new Personne();
262                                                p.fromContact(contact);
263                                                if(pers.equals(p))
264                                                        remove = false;
265                                        }
266                                        if(remove==true) {
267                                                pers.getJeux().remove(jeu);
268                                        }
269                                }
270                        }
271                }
272                this.createXmlFile();
273                return nbPersonnesAPrevenir;
274        }
275       
276        public void update() throws IOException, JDOMException, ConversionException {
277                XMLBuilder builder = new XMLBuilder();
278                builder.readXml(this.xmlFileName);
279                Element root = builder.getRoot();
280                this.fromXmlElement(root);
281        }
282       
283        public boolean contains(Personne p) {
284                Iterator<Object> it = this.contacts.iterator();
285                while(it.hasNext()){
286                        Personne pers = (Personne) it.next();
287                        if(pers.equals(p))
288                                return true;
289                }
290                return false;
291        }
292       
293        public void deleteSet(String setName) throws IOException {
294                Iterator<Object> pers_it = this.contacts.iterator();
295                while(pers_it.hasNext()) {
296                        Personne pers = (Personne) pers_it.next();
297                        pers.removeSet(setName);
298                }
299                this.createXmlFile();
300        }
301}
Note: See TracBrowser for help on using the repository browser.