| Jasenet.java |
1 package kerho;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6
7 import kanta.PerusTietueet;
8 import kanta.SailoException;
9
10 /**
11 * Kerhon jäsenistö, joka osaa mm. lisätä uuden jäsenen
12 *
13 * @author Vesa Lappalainen
14 * @version 1.0, 22.02.2003
15 * @version 1.1, 19.02.2012
16 * @version 1.2, 15.03.2012
17 * @version 1.3, 24.03.2012 - Tietueet
18 *
19 * @example
20 * <pre name="test_lisaa">
21 * // lisaa(Jasen)
22 * #PACKAGEIMPORT
23 * #import kanta.SailoException;
24 * #import java.util.*;
25 * Jasenet jasenet = new Jasenet();
26 * Jasen aku1 = new Jasen(), aku2 = new Jasen();
27 * jasenet.getLkm() === 0;
28 * jasenet.lisaa(aku1); jasenet.getLkm() === 1;
29 * jasenet.lisaa(aku2); jasenet.getLkm() === 2;
30 * jasenet.lisaa(aku1); jasenet.getLkm() === 3;
31 * Iterator<Jasen> iter = jasenet.iterator();
32 * Jasen jasen0 = iter.next();
33 * Jasen jasen1 = iter.next();
34 * jasen0 === aku1;
35 * jasen1 === aku2;
36 * iter.next() === aku1;
37 * jasen1 == aku1 === false;
38 * jasen1 == aku2 === true;
39 * jasenet.lisaa(aku1); jasenet.getLkm() === 4;
40 * jasenet.lisaa(aku1); jasenet.getLkm() === 5;
41 *
42 * jasenet = new Jasenet();
43 * for (int i=0; i<200; i++) {
44 * jasenet.lisaa(aku1); jasenet.getLkm() === 2*i+1;
45 * jasenet.lisaa(aku2); jasenet.getLkm() === 2*i+2;
46 * }
47 * </pre>
48 *
49 * @example
50 * <pre name="test_poista">
51 * // poista(int)
52 * Jasenet jasenet = new Jasenet();
53 * Jasen aku1 = new Jasen(), aku2 = new Jasen(), aku3 = new Jasen();
54 * aku1.rekisteroi(); aku2.rekisteroi(); aku3.rekisteroi();
55 * int id1 = aku1.getTunnusNro();
56 * jasenet.lisaa(aku1); jasenet.lisaa(aku2); jasenet.lisaa(aku3);
57 * jasenet.poista(id1+1) === 1;
58 * jasenet.annaId(id1+1) === null; jasenet.getLkm() === 2;
59 * jasenet.poista(id1) === 1; jasenet.getLkm() === 1;
60 * jasenet.poista(id1+3) === 0; jasenet.getLkm() === 1;
61 * </pre>
62 *
63 * @exmpale
64 * <pre name="test_iterator">
65 * #THROWS CloneNotSupportedException
66 * // iterator()
67 * #PACKAGEIMPORT
68 * Jasenet jasenet = new Jasenet();
69 * Jasen aku1 = new Jasen(), aku2 = new Jasen();
70 * aku1.rekisteroi(); aku2.rekisteroi();
71 * jasenet.getLkm() === 0;
72 * jasenet.korvaaTaiLisaa(aku1); jasenet.getLkm() === 1;
73 * jasenet.korvaaTaiLisaa(aku2); jasenet.getLkm() === 2;
74 * Jasen aku3 = aku1.clone();
75 * aku3.aseta(3,"kkk");
76 * Iterator<Jasen> iter = jasenet.iterator();
77 * Jasen jasen0 = iter.next();
78 * jasenet.korvaaTaiLisaa(aku3); jasenet.getLkm() === 2;
79 * iter = jasenet.iterator();
80 * jasen0 = iter.next();
81 * jasen0 === aku3;
82 * jasen0 == aku3 === true;
83 * jasen0 == aku1 === false;
84 * </pre>
85 *
86 * @example
87 * <pre name="test_tiedosto">
88 * #THROWS SailoException
89 * // lueTiedosto(String), talleta()
90 * #import java.io.File;
91 *
92 * Jasenet jasenet = new Jasenet();
93 * Jasen aku1 = new Jasen(), aku2 = new Jasen();
94 * aku1.vastaaAkuAnkka();
95 * aku2.vastaaAkuAnkka();
96 * String tiedNimi = "testikelmit";
97 * File ftied = new File(tiedNimi+".dat");
98 * ftied.delete();
99 * jasenet.lueTiedostosta(tiedNimi); #THROWS SailoException
100 * jasenet.lisaa(aku1);
101 * jasenet.lisaa(aku2);
102 * jasenet.talleta();
103 * jasenet = new Jasenet(); // Poistetaan vanhat luomalla uusi
104 * jasenet.lueTiedostosta(tiedNimi); // johon ladataan tiedot tiedostosta.
105 * Iterator<Jasen> i = jasenet.iterator();
106 * i.next().toString() === aku1.toString();
107 * i.next().toString() === aku2.toString();
108 * i.hasNext() === false;
109 * jasenet.lisaa(aku2);
110 * jasenet.talleta();
111 * ftied.delete() === true;
112 * File fbak = new File(tiedNimi+".bak");
113 * fbak.delete() === true;
114 * </pre>
115 *
116 * @example
117 * <pre name="test_etsi">
118 * // etsi(String,int)
119 * Jasenet jasenet = new Jasenet();
120 * Jasen jasen1 = new Jasen(); jasen1.parse("1|Ankka Aku|030201-115H|Ankkakuja 6|");
121 * Jasen jasen2 = new Jasen(); jasen2.parse("2|Ankka Tupu||030552-123B|");
122 * Jasen jasen3 = new Jasen(); jasen3.parse("3|Susi Sepe|121237-121V||131313|Perämetsä");
123 * Jasen jasen4 = new Jasen(); jasen4.parse("4|Ankka Iines|030245-115V|Ankkakuja 9");
124 * Jasen jasen5 = new Jasen(); jasen5.parse("5|Ankka Roope|091007-408U|Ankkakuja 12");
125 * jasenet.lisaa(jasen1); jasenet.lisaa(jasen2); jasenet.lisaa(jasen3); jasenet.lisaa(jasen4); jasenet.lisaa(jasen5);
126 * List<Jasen> loytyneet;
127 * loytyneet = (List<Jasen>)jasenet.etsi("*s*",1);
128 * loytyneet.size() === 2;
129 * loytyneet.get(0) == jasen4 === true;
130 * loytyneet.get(1) == jasen3 === true;
131 *
132 * loytyneet = (List<Jasen>)jasenet.etsi("*7-*",2);
133 * loytyneet.size() === 2;
134 * loytyneet.get(0) == jasen5 === true;
135 * loytyneet.get(1) == jasen3 === true;
136 * </pre>
137 * @exmpale
138 *
139 * <pre name="test_annaId">
140 * // annaId(int)
141 * Jasenet jasenet = new Jasenet();
142 * Jasen aku1 = new Jasen(), aku2 = new Jasen(), aku3 = new Jasen();
143 * aku1.rekisteroi(); aku2.rekisteroi(); aku3.rekisteroi();
144 * int id1 = aku1.getTunnusNro();
145 * jasenet.lisaa(aku1); jasenet.lisaa(aku2); jasenet.lisaa(aku3);
146 * jasenet.annaId(id1 ) == aku1 === true;
147 * jasenet.annaId(id1+1) == aku2 === true;
148 * jasenet.annaId(id1+2) == aku3 === true;
149 * </pre>
150 */
151 public class Jasenet extends PerusTietueet<Jasen> {
152 private String kokoNimi = "";
153
154
155 /**
156 * Oletusmuodostaja jolla tulee täysin dynaaminen koko.
157 */
158 public Jasenet() {
159 super(new Jasen());
160 }
161
162
163
164
165
166 /**
167 * Palauttaa viitteen i:teen jäseneen.
168 * @param i monennenko jäsenen viite halutaan
169 * @return viite jäseneen, jonka indeksi on i
170 * @throws IndexOutOfBoundsException jos i ei ole sallitulla alueella
171 public Jasen anna(int i) throws IndexOutOfBoundsException {
172 if (i < 0 || lkm <= i) throw new IndexOutOfBoundsException("Laiton indeksi: " + i);
173 return alkiot[i];
174 }
175 */
176
177 /**
178 * Lukee rivit tiedoston alusta
179 * @param fi virta josta luetaan
180 * @throws IOException jos jokin menee vikaan
181 * @throws SailoException jos tieto virheellistä
182 */
183 @Override
184 protected void lueAlkurivit(BufferedReader fi) throws IOException, SailoException {
185 kokoNimi = fi.readLine();
186 if (kokoNimi == null) throw new SailoException("Kerhon nimi puuttuu");
187 String rivi = fi.readLine();
188 if (rivi == null) throw new SailoException("Maksimikoko puuttuu");
189 }
190
191
192 /**
193 * Tiedoston alkuun tulevat rivit
194 * @param fo virta johon talletetaan
195 */
196 @Override
197 protected void teeAlkutalletus(PrintWriter fo) {
198 fo.println(getKokoNimi());
199 fo.println(getLkm());
200 }
201
202
203 /**
204 * Palauttaa Kerhon koko nimen
205 * @return Kerhon koko nimi merkkijononna
206 */
207 public String getKokoNimi() {
208 return kokoNimi;
209 }
210
211
212 /**
213 * Testiohjelma jäsenistölle
214 * @param args ei käytössä
215 */
216 public static void main(String args[]) {
217 Jasenet jasenet = new Jasenet();
218
219 Jasen aku = new Jasen(), aku2 = new Jasen();
220 aku.rekisteroi();
221 aku.vastaaAkuAnkka();
222 aku2.rekisteroi();
223 aku2.vastaaAkuAnkka();
224
225 jasenet.lisaa(aku);
226 jasenet.lisaa(aku2);
227
228 System.out.println("============= Jäsenet testi =================");
229
230 int i = 0;
231 for (Jasen jasen:jasenet) {
232 System.out.println("Jäsen paikassa: " + i++);
233 jasen.tulosta(System.out);
234 }
235
236 }
237
238 }
239