RechercheEtiquette.java
01 package fr.isae.tags;
02 
03 /**
04  <code>RechercheEtiquette</code> est une classe permettant de rechercher
05  * une etiquette particuliere dans l'arbre representant l'ontologie. La
06  * recherche se fait par nom et s'effectue en profondeur d'abord.
07  *
08  <p>Created: Tue Nov  9 00:18:48 2010</p>
09  *
10  @author <a href="mailto:garion@isae.fr">Christophe Garion</a>
11  @version 1.0
12  */
13 public class RechercheEtiquette {
14 
15   private Etiquette racine;
16 
17   /**
18    * Creer une nouvelle instance de <code>RechercheEtiquette</code>.
19    *
20    @param racine la racine de l'arbre sur lequel on veut travailler
21    */
22   public RechercheEtiquette(Etiquette racine) {
23     this.racine = racine;
24   }
25 
26   /**
27    * Rechercher une etiquette dans l'arbre par son nom. La recherche
28    * s'effectue en profondeur d'abord.
29    *
30    @param nomEtiquette le nom de l'etiquette a rechercher
31    @return l'instance de <code>Etiquette</code> correspondant au nom
32    *         demande ou <code>null</code> si aucune etiquette de l'arbre
33    *         ne porte ce nom
34    */
35   public Etiquette rechercher(String nomEtiquette) {
36     return this.rechercher(nomEtiquette, this.racine);
37   }
38 
39   private Etiquette rechercher(String nomEtiquette,
40                                Etiquette start) {
41     Etiquette res;
42 
43     if (nomEtiquette.equals(start.getNom())) {
44       return start;
45     }
46 
47     for (Etiquette e : start.getFilles()) {
48       res = rechercher(nomEtiquette, e);
49       if (res != null) {
50         return res;
51       }
52     }
53 
54     return null;
55   }
56 
57   @Override public String toString() {
58     return this.prettyPrint(this.racine, 0);
59   }
60 
61   private String prettyPrint(Etiquette e, int space) {
62     StringBuilder sb = new StringBuilder();
63 
64     for (int i = 0; i < space; i++) {
65       sb.append(" ");
66     }
67     sb.append(e.getNom());
68     sb.append("\n");
69 
70     for (Etiquette fille : e.getFilles()) {
71       sb.append(this.prettyPrint(fille, space + 2));
72     }
73 
74     return sb.toString();
75   }
76 }