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 }
|