1   package hirsipuu;
2   
3   /**
4    * Luokka taso-olion mallintamiseksi. Taso tiet?? tasonumeronsa ja aiheensa.
5    * @author Anna-Leena Latvala, Toni Purontaka
6    * @version 0.5, 9.3.2008
7    *
8    */
9   public class Taso implements Comparable<Taso> {
10      
11      private int tasonro;    // tason j?rjestysnumero, vaikeusaste
12      private String aihe;    // tason aihe, joka on vinkki sen sanojen aihealueesta
13      
14      /**
15       * Alustetaan taso-olio olemattomaksi tasoksi. Varsinaisen aiheen ja
16       * tasonumeron taso saa parsimalla rivej?, joita Tasot-olio l?hett??.
17       *
18       */
19      public Taso() {
20          tasonro = 0;
21      }
22      
23      /**
24       * Alustetaan taso-oliolle testausta varten suoraan numero ja aihe.
25       * @param nro tason numero
26       * @param kuvaus tason kuvaus
27       */
28      public Taso(int nro, String kuvaus) {
29          tasonro = nro;
30          aihe = kuvaus;
31      }
32      
33      /**
34       * Taso parsii tietonsa m??r?muotoisesta merkkijonosta: 
35       * esim. "1 |    El?imet" 
36       * 
37       * Mik?li tarjotaan v??r?nlaista syntaksia, palauttaa huomion siit?.
38       * 
39       * @param jono parsittava jono
40       * @return   true, jos parsiminen onnistui
41       *          false, jos jono ei ollut syntaksin mukainen.
42       *          
43       * @example
44       * <pre name="test">
45       * Taso taso = new Taso();
46       * taso.parse("   6  |  Kaupunkeja ja n?ht?vyyksi?") === true;
47       * taso.toString() === "(6) Kaupunkeja ja n?ht?vyyksi?";
48       * taso.parse("Kaupunkeja|6") === false;
49       * </pre>
50       */
51      public boolean parse(String jono) {
52          StringBuffer jonotus = new StringBuffer(jono);
53          tasonro = Jono.annaId(jonotus);
54          aihe = Jono.annaMjono(jonotus);
55          return (tasonro > 0 && aihe.length() > 0);
56      }
57      
58      /**
59       * Palauttaa tason ominaisuudet merkkijonona muotoa "1  El?imet".
60       * @return taso merkkijonona
61       * 
62       * @example
63       * <pre name="test">
64       * Taso taso = new Taso(1,"El?imet");
65       * Taso taso2 = new Taso(5,"Kaupunkeja");
66       * taso.toString() === "(1) El?imet";
67       * taso2.toString() === "(5) Kaupunkeja";
68       * </pre>
69       */
70      public String toString() {
71          return "("+ tasonro + ") " + aihe;
72      }
73      
74      /**
75       * Palauttaa tason numeron.
76       * @return tason numero
77       */
78      public int nro() {
79          return tasonro;
80      }
81      
82      /**
83       * Palauttaa tason aiheen tulostettavaa vihjett? varten.
84       * @return aihe
85       */
86      public String kuvaus() {
87          return aihe;
88      }
89      
90      /**
91       * Vertaa taso-olioita kesken??n pelk?st??n tasonumeroiden perusteella. 
92       * @param taso taso, johon t?t? verrataan
93       * @return tasonumeroiden v?linen erotus
94       * 
95       * @example
96       * <pre name="test">
97       * Taso taso = new Taso(1,"El?imet");
98       * Taso taso2 = new Taso(5,"Kaupunkeja");
99       * (taso.compareTo(taso2) < 0) === true;
100      * (taso.compareTo(taso2) > 0) === false;
101      * (taso2.compareTo(taso) > 0) === true;
102      * (taso.compareTo(taso) == 0) === true;
103      * </pre>
104      */
105     public int compareTo(Taso taso) {
106         return (tasonro-taso.tasonro);
107     }
108     
109 
110 }
111