| Relaatiot.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 * @author Timo Koski
16 *
17 */
18 public class Relaatiot {
19
20 private Collection<Relaatio> alkiot = new ArrayList<Relaatio>();
21
22 /* GETTERIT */
23 /**
24 * @return alkiot
25 */
26 public Collection<Relaatio> getAlkiot() {
27 return alkiot;
28 }
29 /**
30 * @param id
31 * @return r.getHarjSisallot()
32 */
33 public int[] getHarjoituksenSisallot(int id) {
34 for(Relaatio r : alkiot) {
35 if (r.getHarjId() == id)
36 return r.getHarjSisallot();
37 }
38 return new int[] {};
39 }
40
41 /* RELAATION KÄSITTELY: LISÄYS JA POISTO */
42 /**
43 * @param r
44 */
45 public void lisaa(Relaatio r) {
46 alkiot.add(r);
47 }
48 /**
49 * @param id
50 */
51 public void lisaa(int id) {
52 Relaatio r = new Relaatio(id);
53 alkiot.add(r);
54 }
55 /**
56 * @param id
57 * @param sisLista
58 */
59 public void tallennaSisRelaatioon(int id, int[] sisLista) {
60 for (Relaatio r : alkiot) { // käydään kaikki relaatiot läpi
61 if (r.getHarjId() == id) { // verrataan niihin id:tä
62 for (int a : sisLista) { // käydään tuotu sisältölista läpi
63 boolean loytyikoDuplikaattia = false; // apumuuttuja
64 for(int t : r.getHarjSisallot()) { // käydään id-täsmäävän relaation sisällöt läpi
65 if (a == t) { // verrataan int-sisältöjä tuotavaan uuteen sisältöön
66 loytyikoDuplikaattia = true; // jos löytyi duplikaatti, muutetaan apumuuttujan arvo
67 break;
68 }
69 }
70 if (loytyikoDuplikaattia) // jos löytyi duplikaatti
71 continue; // jatketaan seuraavasta sisällöstä
72 r.lisaa(a); // muutoin lisätään uusi sisältö
73 }
74 }
75 }
76 }
77 /**
78 * Tallennetaan uusi sisalto relaatioon.
79 * @param harjoituksenId
80 * @param idAtSelectedIndex
81 */
82 public void tallennaUusiSisaltoRelaatioon(int harjoituksenId, int idAtSelectedIndex) {
83 if (idAtSelectedIndex == -1)
84 return;
85 for (Relaatio r : alkiot) {
86 if (r.getHarjId() == harjoituksenId) {
87 boolean onkoDuplikaattia = false;
88 for (int a : r.getHarjSisallot()) {
89 if (a==idAtSelectedIndex)
90 onkoDuplikaattia = true;
91 }
92 if (!onkoDuplikaattia)
93 r.lisaa(idAtSelectedIndex);
94 }
95 }
96 }
97 /**
98 * Poistetaan valittu sisältö relaatiosta
99 * @param harjoituksenId
100 * @param sisallonId
101 */
102 public void poistaValittuSisaltoRelaatiosta(int harjoituksenId, int sisallonId) {
103 for (Relaatio r : alkiot) {
104 if (r.getHarjId() == harjoituksenId) {
105 r.poistaSisalto(sisallonId);
106
107 }
108 }
109 }
110 /**
111 * @param harjoitusId
112 * @param index
113 */
114 public void poistaRelaatiosta(int harjoitusId, int index) {
115 // TODO Auto-generated method stub
116 for (Relaatio r : alkiot) {
117 if (r.getHarjId() == harjoitusId)
118 r.poista(index);
119 }
120 }
121
122 /* TIEDOSTONKÄSITTELY JA TULKINTA */
123 /**
124 * @param fileName
125 */
126 public void lueTiedostosta(String fileName) {
127 String tiedNimi;
128 tiedNimi = fileName.substring(0,fileName.length()-3);
129 tiedNimi += "rel";
130 BufferedReader fo;
131 String tempRivi;
132 try {
133 fo = new BufferedReader(new FileReader(tiedNimi));
134 while((tempRivi = fo.readLine()) != null) {
135 tulkitse(tempRivi);
136 }
137 } catch (FileNotFoundException e) {
138 // System.err.println("Rel: Tiedostoa ei löydy. Luodaan tallennettaessa.");
139 } catch (IOException e) {
140 // TODO Auto-generated catch block
141 e.printStackTrace();
142 }
143 }
144 /**
145 * @param s
146 */
147 public void tulkitse(String s) {
148 StringBuffer sb = new StringBuffer(s);
149 int id = -1;
150 try {
151 id = Integer.parseInt(Mjonot.erota(sb, '|'));
152 } catch (NumberFormatException e) {
153 // System.err.println("Relaatiot: Ei parseta integeriä.");
154 return;
155 }
156 if (id == -1)
157 return;
158 Relaatio r = new Relaatio(id);
159 while (!sb.toString().equals("")) {
160 r.lisaa(Integer.parseInt(Mjonot.erota(sb,',')));
161 }
162 lisaa(r);
163 }
164 /**
165 * Metodi kirjoittaa tiedostoon (nimi parametrina) harjoitukseen
166 * sidotut sisällöt. Ne luetaan id:n mukaan relaatioista.
167 * @param harjoitukset
168 * @param fileName
169 *
170 */
171 public void kirjoitaTiedostoon(Harjoitukset harjoitukset, String fileName) {
172 String tiedNimi;
173 PrintStream os;
174 tiedNimi = fileName.substring(0,fileName.length()-3);
175 tiedNimi += "rel";
176 try {
177 os = new PrintStream(new FileOutputStream(tiedNimi),false); // TODO:tarkista true-false
178 os.println(";id|sisällöt");
179 for(Harjoitus h: harjoitukset.getAlkiot()) {
180 int a = h.getId();
181 for(Relaatio r : alkiot) {
182 if (r.getHarjId() == a) {
183 os.println(a+"|"+r.toString());
184 break;
185 }
186 }
187 }
188 } catch (FileNotFoundException e) {
189 // TODO Auto-generated catch block
190 e.printStackTrace();
191 }
192 }
193
194 /* TULOSTA JA TOSTRING */
195 /**
196 * Tulosta-metodi, joka hakee tulostettavan datan toStringistä
197 * Parametrina PrintStream.
198 * @param os
199 */
200 public void tulosta(PrintStream os) {
201 os.println(toString());
202 }
203
204 /**
205 * toString, joka palauttaa kaikkien Relaatio-olioiden toStringien tuloksen.
206 */
207 @Override
208 public String toString() {
209 String temp = "";
210 for (Relaatio r: alkiot) {
211 temp += r.toString() + "\n";
212 }
213 return temp;
214 }
215
216 /* PÄÄOHJELMA */
217
218 /**
219 * Pääohjelma luokan testausta varten.
220 * @param args ei käytössä
221 * @example
222 * <pre name="test">
223 * Relaatiot rel = new Relaatiot();
224 * Relaatio p = new Relaatio(4);
225 * Relaatio q = new Relaatio(7);
226 * Relaatio r = new Relaatio(5);
227 * Relaatio s = new Relaatio(1);
228 * Relaatio t = new Relaatio(11);
229 * Relaatio u = new Relaatio(4);
230 * rel.lisaa(p);
231 * rel.lisaa(q);
232 * rel.lisaa(r);
233 * rel.lisaa(s);
234 * rel.lisaa(t);
235 * rel.lisaa(u);
236 *
237 * p.lisaa(1);
238 * p.lisaa(22);
239 * p.lisaa(61);
240 * q.lisaa(4);
241 * r.lisaa(56);
242 * r.lisaa(67);
243 * r.lisaa(8);
244 * r.lisaa(1);
245 * s.lisaa(1);
246 * t.lisaa(2);
247 * u.lisaa(91);
248 * u.lisaa(5);
249 *
250 * String tulos =
251 * "1, 22, 61\n"+
252 * "4\n"+
253 * "56, 67, 8, 1\n"+
254 * "1\n"+
255 * "2\n"+
256 * "91, 5\n";
257 *
258 * rel.toString() === tulos;
259 * </pre>
260 */
261 public static void main(String[] args) {
262
263 Relaatiot r = new Relaatiot();
264
265 Relaatio a = new Relaatio(1);
266 Relaatio b = new Relaatio(2);
267
268 a.lisaa(1);
269 a.lisaa(5);
270 b.lisaa(65);
271 b.lisaa(34);
272 b.lisaa(4);
273
274 r.lisaa(a);
275 r.lisaa(b);
276
277 System.out.println(r.toString());
278 }
279 }
280