| Sisallot.java |
1 package kalenteri;
2
3 import java.io.BufferedReader;
4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6 import java.io.FileReader;
7 import java.io.IOException;
8 import java.io.PrintStream;
9 import java.util.ArrayList;
10 import java.util.Collection;
11
12 import fi.jyu.mit.ohj2.Mjonot;
13
14 /**
15 * Sisallot-luokka, joka ylläpitää sisältöjä.
16 * @author Timo Koski
17 *
18 */
19 public class Sisallot {
20
21 private Sisalto[] sisaltoTaulu;
22 private int lkm;
23
24 /* MUODOSTAJAT */
25 /**
26 * Oletusmuodostaja
27 * Luo 5-paikkaisen taulukon.
28 * Tiedoston nimi, mistä lista päivitetään.
29 * @param tiedNimi
30 */
31 public Sisallot(String tiedNimi) {
32 this(5, tiedNimi);
33 }
34 /**
35 * Muodostaja, joka luo parametrina tuodun int-kokoisen taulukon
36 * Tiedoston nimi, mistä lista päivitetään.
37 * @param koko
38 * @param tiedNimi
39 */
40 public Sisallot(int koko, String tiedNimi) {
41 this.sisaltoTaulu = new Sisalto[koko];
42 haeTiedostosta(tiedNimi);
43 }
44
45 /* GETTERIT */
46 /**
47 * @param sisNimi
48 * @return s.getId()
49 */
50 public int getId(String sisNimi) {
51 Sisalto s;
52 for (int i=0;i<lkm;i++) {
53 s = sisaltoTaulu[i];
54 if (s.toString().equals(sisNimi))
55 return s.getId();
56 }
57 return -1;
58 }
59 /**
60 * @param indeksi
61 * @return sisaltoTaulu[indeksi].getSisallonNimi()
62 */
63 public String getSisNimi(int indeksi) {
64 try {
65 return sisaltoTaulu[indeksi].getSisallonNimi();
66 } catch (ArrayIndexOutOfBoundsException ex) {
67 System.err.println("Sisallot: Sisältöviitteet ulkona taulusta.");
68 ex.printStackTrace();
69 }
70 return null;
71 }
72 /**
73 * @param id
74 * @return sisaltoTaulu[i].getSisallonNimi();
75 */
76 public String getSisNimiId(int id) {
77 for (int i=0;i<lkm;i++) {
78 if (sisaltoTaulu[i].getId() == id)
79 return sisaltoTaulu[i].getSisallonNimi();
80 }
81 return null;
82 }
83 /**
84 * Palauttaa sisällöt, jotka vastaavat parametrina tuodun
85 * int-taulukon iideitä. Jos Collection jää tyhjäksi, palautetaankin
86 * tyhjä arraylist.
87 * @param harjoituksenSisallotId
88 * @return harjoituksenSisallot tai new ArrayList<String>() {}
89 */
90 public Collection<String> getSisallot(int[] harjoituksenSisallotId) {
91 Collection<String> harjoituksenSisallot = new ArrayList<String>();
92 for(int a : harjoituksenSisallotId) {
93 for(int i=0;i<lkm;i++) {
94 if(sisaltoTaulu[i].getId()==a)
95 harjoituksenSisallot.add(sisaltoTaulu[i].getSisallonNimi());
96 }
97 }
98 if(!harjoituksenSisallot.isEmpty())
99 return harjoituksenSisallot;
100
101 return new ArrayList<String>() {
102
103 /**
104 * Jos harjoituksenSisällöt jäävät tyhjäksi
105 * palautetaan tyhjä ArrayList<String>
106 */
107 private static final long serialVersionUID = 1L;};
108 }
109 /**
110 * @param selectedIndex
111 * @return sisaltoTaulu[selectedIndex].getId()
112 */
113 public int getIdAtSelectedIndex(int selectedIndex) {
114 if (selectedIndex < 0 || selectedIndex > lkm)
115 return -1;
116 return sisaltoTaulu[selectedIndex].getId();
117 }
118
119 /* LISÄÄMINEN, TAULUKON SUURENTAMINEN JA POISTAMINEN */
120 /**
121 * Lisää taulukkoon yhden Sisältö olion.
122 * Jos taulukkoon ei sovi, kutsuu suurenna-metodia.
123 * @param s
124 */
125 public void lisaa(Sisalto s) {
126 if (sisaltoTaulu.length <= lkm)
127 suurenna();
128 sisaltoTaulu[lkm++] = s;
129 }
130 /**
131 * @param uusiSis
132 */
133 public void lisaaUusiSisalto(String uusiSis) {
134 Sisalto s = new Sisalto(uusiSis);
135 lisaa(s);
136 }
137 /**
138 * Metodi suurentaa taulukkoa viidellä.
139 */
140 public void suurenna() {
141 Sisalto[] temp = sisaltoTaulu;
142 sisaltoTaulu = new Sisalto[lkm + 5];
143 this.lkm = 0;
144 for(Sisalto s: temp)
145 lisaa(s);
146 }
147 /**
148 * Poistetaan taulukosta parametrina tuotu sisältö-olio.
149 * @param poistettava
150 */
151 public void poista(Sisalto poistettava) {
152 for (int i=0;i<lkm;i++) {
153 if (poistettava.equals(sisaltoTaulu[i]))
154 poista(i--);
155 }
156 }
157 /**
158 * Poistetaan taulukosti int-parametrin osoittava alkio.
159 * @param poistettava
160 */
161 public void poista(int poistettava) {
162 for(int j=poistettava;j<lkm-1;j++) {
163 sisaltoTaulu[j] = sisaltoTaulu[j+1];
164 }
165 sisaltoTaulu[lkm-1] = null;
166 lkm--;
167 }
168
169 /* TIEDOSTON KÄSITTELY */
170 /**
171 * Haetaan tiedostosta sisältölista.
172 * @param tiedNimi
173 */
174 public void haeTiedostosta(String tiedNimi) {
175 if (tiedNimi.equals("")) // @version ht5
176 return;
177 BufferedReader fi;
178 Sisalto s;
179 String temp;
180 StringBuffer sb;
181 try {
182 fi = new BufferedReader(new FileReader(tiedNimi));
183 while (( temp = fi.readLine()) != null) {
184 if (temp.charAt(0) == ';')
185 continue;
186 sb = new StringBuffer(temp);
187 temp = Mjonot.erota(sb,'|');
188 s = new Sisalto(sb.toString());
189 lisaa(s);
190 }
191 fi.close();
192 } catch(FileNotFoundException ex) {
193 System.err.println("Ongelma tiedoston lukemisessa: " + ex.getMessage());
194 return;
195 } catch(IOException ex) {
196 System.err.println("Ongelma tiedoston lukemisessa: " + ex.getMessage());
197 return;
198 }
199 }
200 /**
201 * @param sisaltoTiedNimi
202 */
203 public void tallennaTiedostoon(String sisaltoTiedNimi) {
204 PrintStream fo;
205 try {
206 fo = new PrintStream(new FileOutputStream(sisaltoTiedNimi));
207 fo.println(";");
208 fo.println(";id | sisällön nimi");
209 Sisalto s;
210 for (int i=0;i<lkm;i++) {
211 s = sisaltoTaulu[i];
212 fo.println(s.getId() + "|" + s.getSisallonNimi());
213 }
214 } catch (FileNotFoundException ex) {
215 ex.printStackTrace();
216 }
217 }
218
219 /* TULOSTAMINEN, SISALTOTAULUKON PALAUTUS JA TOSTRING */
220 /**
221 * Tulostetaan taulukon sisältö parametrin tuotuun PrintStreamiin.
222 * @param os
223 */
224 public void tulosta(PrintStream os) {
225 String erotin = "\n";
226 for(int i=0;i<lkm;i++) {
227 os.print(sisaltoTaulu[i]+erotin);
228 }
229 }
230 /**
231 * @return sisaltoTaulu
232 */
233 public Sisalto[] toStringTaulu() {
234 return sisaltoTaulu;
235 }
236 /**
237 * toString, toimii kuten tulosta-metodi.
238 * Palauttaa tempin, johon kerää koko tulostuksen.
239 * @return temp
240 */
241 @Override
242 public String toString() {
243 String erotin = "\n";
244 String temp = "";
245 for(int i=0;i<lkm;i++) {
246 temp += (sisaltoTaulu[i]+erotin);
247 }
248 return temp;
249 }
250
251 /* PÄÄOHJELMA */
252 /**
253 * Pääohjelma luokan testaamiseksi.
254 * @param args ei käytössä
255 * @example
256 * <pre name="test">
257 * Sisallot t = new Sisallot("");
258 * String tulos = "Martelo|Meia lua de frente|Benção|";
259 * String tulos2 = "Martelo|Benção|";
260 * Sisalto a = new Sisalto("Martelo");
261 * Sisalto b = new Sisalto("Meia lua de frente");
262 * Sisalto c = new Sisalto("Benção");
263 * t.lisaa(a);
264 * t.lisaa(b);
265 * t.lisaa(c);
266 * t.toString() === tulos;
267 * t.poista(b);
268 * t.toString() === tulos2;
269 * </pre>
270 */
271 public static void main(String[] args) {
272 Sisallot s = new Sisallot("SisaltoLista.txt");
273 Sisalto a = new Sisalto("Armada");
274 s.lisaa(a);
275 s.tulosta(System.out);
276 }
277 }
278