1   package kalenteriswing;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   
6   import kalenteri.Harjoitukset;
7   import kalenteri.Harjoitus;
8   import kalenteri.PvmTarkistus;
9   import kalenteri.Relaatio;
10  import kalenteri.Relaatiot;
11  import kalenteri.Sisallot;
12  import kalenteri.Sisalto;
13  import fi.jyu.mit.ohj2.Mjonot;
14  
15  /**
16   * @author Timo Koski
17   *
18   */
19  public class Kalenteri {
20  
21      /* Sisallot ovat kaikille kalentereille samat. Myös lähdetiedosto on sama. */
22      private final static String sisaltoTiedNimi = "SisaltoLista.txt";
23      private static Sisallot sisallot = new Sisallot(sisaltoTiedNimi);
24  
25      private Relaatiot relaatiot;
26      private Harjoitukset harjoitukset;
27      private Collection<String> harjoituksenSisallot = new ArrayList<String>();
28      private int[] harjoituksenSisallotId;
29      private Harjoitus h;
30  
31      /**
32       * Nimi, jolla käyttäjä loggaa sisään, ennen muuttamista tiedostonnimeksi
33       */
34      public String loginName = "";
35  
36      /* MUODOSTAJAT */
37      /**
38       *  Oletusmuodostaja. Luo uudet harjoitukset ja relaatiot-oliot.  
39       */
40      public Kalenteri() {
41          harjoitukset = new Harjoitukset();
42          relaatiot = new Relaatiot();
43      }
44  
45      /* GETTERIT JA SETTERIT, GLOBAALILLE AKTIIVISELLE HARJOITUKSELLE h. */
46      /**
47       * @param id 
48       * @return harjoitukset.getHarjAloitusaika(id)
49       */
50      public String getHarjAloitusaika(int id) {
51          return harjoitukset.getHarjAloitusaika(id);
52      }
53      /**
54       * @param id 
55       * @return harjoitukset.getHarjLopetusaika(id)
56       */
57      public String getHarjLopetusaika(int id) {
58          return harjoitukset.getHarjLopetusaika(id);
59      }
60      /**
61       * @param id 
62       * @return harjoitukset.getPaikkakunta(id)
63       */
64      public String getPaikkakunta(int id) {
65          return harjoitukset.getPaikkakunta(id);
66      }
67      /**
68       * @param id 
69       * @return harjoitukset.getSeura(id)
70       */
71      public String getSeura(int id) {
72          return harjoitukset.getSeura(id);
73      }
74      /**
75       * @param id 
76       * @return harjoitukset.getOpettaja(id)
77       */
78      public String getOpettaja(int id) {
79          return harjoitukset.getOpettaja(id);
80      }
81      /**
82       * @param id
83       * @return harjoitukset.getLisatieto(id)
84       */
85      public String getLisatieto(int id) {
86          return harjoitukset.getLisatieto(id);
87      }
88      /**
89       * @param text
90       */
91      public void setHarjAlkuaika(String text) {
92          h.setAloitusaika(text);
93      }
94      /**
95       * @param text
96       */
97      public void setHarjLoppuaika(String text) {
98          h.setLopetusaika(text);
99      }
100     /**
101      * @param text
102      */
103     public void setPaikkakunta(String text) {
104         h.setPaikka(text);
105     }
106     /**
107      * @param text
108      */
109     public void setSeura(String text) {
110         h.setSeura(text);
111     }
112     /**
113      * @param text
114      */
115     public void setOpettaja(String text) {
116         h.setOpettaja(text);
117     }
118     /**
119      * @param text
120      */
121     public void setLisatieto(String text) {
122         h.setLisatieto(text);
123     }
124 
125     /* HARJOITUSTEN JA SISÄLTÖJEN LISÄYS JA POISTO, SEKÄ HARJOITUKSEN NÄYTTÄMINEN */
126     /**
127      * Hakee ja palauttaa harjoituksen.
128      * @param ind
129      * @return naytaHarjoitus(ind)
130      */
131     public Harjoitus naytaHarjoitus(int ind) {
132         h = harjoitukset.naytaHarjoitus(ind);
133         return h;
134     }
135     /**
136      * @param pvm
137      */
138     public void uusiHarjoitus(String pvm) {
139         h = new Harjoitus(pvm);
140         harjoitukset.lisaa(h);
141         relaatiot.lisaa(h.getId());
142     }
143     /**
144      * @param id
145      */
146     public void poistaHarjoitus(int id) {
147         harjoitukset.poistaHarjoitus(id);
148     }
149     /**
150      * @param uusiSis
151      */
152     public void lisaaSisalto(String uusiSis) {
153         sisallot.lisaaUusiSisalto(uusiSis);
154         sisallot.tallennaTiedostoon(sisaltoTiedNimi);
155     }
156     /**
157      * @param selectedIndex
158      */
159     public void poistaSisalto(int selectedIndex) {
160         if (selectedIndex != -1) {
161             // TODO: poista relaatioista kaikki poistetut sisällöt.
162             sisallot.poista(selectedIndex);
163             sisallot.tallennaTiedostoon(sisaltoTiedNimi);
164         }
165     }
166 
167     /* TIEDOSTOJEN KÄSITTELY */
168     /**
169      * @param tiedostonNimi 
170      */
171     public void lueTiedostosta(String tiedostonNimi) {
172         harjoitukset.lueTiedostosta(tiedostonNimi);
173         relaatiot.lueTiedostosta(tiedostonNimi);
174     }
175     /**
176      * @param fileName 
177      */
178     public void kirjoitaTiedostoon(String fileName) {
179         harjoitukset.kirjoitaTiedostoon(fileName);
180         relaatiot.tallennaSisRelaatioon(h.getId(), getHarjoituksenSisallotId());
181         relaatiot.kirjoitaTiedostoon(harjoitukset, fileName);
182     }
183 
184     /* HARJOITUSTEN SISÄLTÖJEN KÄSITTELY JA RELAATIOT */
185 
186     /**
187      * @param selectedIndex
188      * @return h, globaali aktiivinen Harjoitus
189      */
190     public Harjoitus setValittuHarjoitus(int selectedIndex) {
191         this.h = harjoitukset.naytaHarjoitus(selectedIndex);
192         harjoituksenSisallotId = relaatiot.getHarjoituksenSisallot(h.getId());
193         harjoituksenSisallot = sisallot.getSisallot(harjoituksenSisallotId);
194         return h;
195     }
196 
197     /**
198      * @param selectedIndex
199      * @return harjoituksenSisallot.toArray();
200      */
201     @SuppressWarnings("unused")
202     public Object[] getHarjoituksenSisallot(int selectedIndex) {
203         return harjoituksenSisallot.toArray();
204     }
205 
206     /**
207      * @param selectedIndex
208      */
209     public void lisaaHarjoituksenSisallot(int selectedIndex) {
210         if (selectedIndex != -1) {
211             relaatiot.tallennaUusiSisaltoRelaatioon(h.getId(),sisallot.getIdAtSelectedIndex(selectedIndex));
212             harjoituksenSisallotId = relaatiot.getHarjoituksenSisallot(h.getId());
213             harjoituksenSisallot = sisallot.getSisallot(harjoituksenSisallotId);
214         }
215     }
216 
217     /**
218      * @param selectedValue
219      */
220     public void poistaHarjoituksenSisallot(String selectedValue) {
221         relaatiot.poistaValittuSisaltoRelaatiosta(h.getId(),sisallot.getId(selectedValue));
222         harjoituksenSisallotId = relaatiot.getHarjoituksenSisallot(h.getId());
223         harjoituksenSisallot = sisallot.getSisallot(harjoituksenSisallotId);
224     }
225 
226     /**
227      * @return harjoituksenSisallotId
228      */
229     public int[] getHarjoituksenSisallotId() {
230         return harjoituksenSisallotId;
231     }
232 
233     /* PÄIVÄMÄÄRÄN TARKISTAMINEN */
234 
235     /**
236      * Tarkastetaan päivämäärän syntaksi.
237      * @param pvmSyote 
238      * @return päivämäärän syntaksin oikeellisuus, true jos oikein.
239      */
240     public boolean tarkistaPvm(String pvmSyote) {
241         if (pvmSyote == null)
242             return false;
243         StringBuffer sb = new StringBuffer(pvmSyote);
244         try {
245             int p = Integer.parseInt(Mjonot.erota(sb, '.'));
246             int k = Integer.parseInt(Mjonot.erota(sb, '.'));
247             int v = Integer.parseInt(Mjonot.erota(sb, '.'));
248             return PvmTarkistus.tarkistaPvm(p, k, v);
249         } catch (NumberFormatException ex) {
250             return false;
251         }
252     }
253 
254     /* SISÄLLÖN JA HARJOITUSLISTAN PALAUTTAMINEN */
255 
256     /**
257      * @return toPvmStringTaulu()
258      */
259     public String[] getHarjoitukset() {
260         return harjoitukset.toPvmStringTaulu();
261     }
262 
263     /**
264      * Palautetaan sisalloista haettu sisaltotaulu.
265      * @return toStringTaulu
266      */
267     public Sisalto[] SisallotToString() {
268         return sisallot.toStringTaulu();
269     }
270 
271     /* TULOSTAMINEN */
272 
273     /**
274      * Tulostus-metodi
275      * @param selectedIndex 
276      * @return harjoitukset.tulosta(selectedIndex)
277      */
278     public String tulosta(int selectedIndex) {
279         String tulostus = "";
280         tulostus += harjoitukset.tulosta(selectedIndex);
281         if (selectedIndex != -1) {
282             tulostus += "Harjoituksen Sisällöt:\n";
283             for (Object temp: getHarjoituksenSisallot(selectedIndex))                   
284                 tulostus += (String) temp + "\n";
285             tulostus += "===" + "\n";
286             tulostus += "Lisätiedot:\n"+h.getLisatieto()
287                     +"\n<=== end harjoitus ===>\n";
288         }
289         return tulostus;
290     }
291 
292     /* HAKUTOIMINTO */
293 
294     /**
295      * @param hakusana
296      * @return haettuPvmLista
297      */
298     public Object[] search(String hakusana) {
299         int pituus = hakusana.length();
300         String[] temp = getHarjoitukset();
301         Collection<String> haettuPvmLista = new ArrayList<String>();
302         for (String s : temp) {
303             for (int i=0;i<s.length();i++) {
304             if (i + pituus > s.length())
305                 break;
306             if (s.substring(i, i+pituus).equals(hakusana)) {
307                 boolean onkoDuplikaattia = false;
308                 for (String t : haettuPvmLista) {
309                     if (t.equals(s))
310                         onkoDuplikaattia = true;
311                 }
312                 if (!onkoDuplikaattia)
313                     haettuPvmLista.add(s);
314             }
315             }
316         }
317         return haettuPvmLista.toArray();
318     }
319     
320     /* PÄÄOHJELMA */
321 
322     /**
323      * Pääohjelma luokan testaamiseen.
324      * @param args
325      * @example
326      * <pre name="test">
327      * #import kalenteri.*;
328      * Harjoitukset har = new Harjoitukset();
329      * Harjoitus a = new Harjoitus();
330      * Harjoitus b = new Harjoitus();
331      * String tulos = "000 "+a.getHarjPv()+"."+a.getHarjKk()+"."+a.getHarjVv()+"\n"+
332      *                  "20:00 22:00 \n"+
333      *                  "Forca Natural\n"+
334      *                  "===\n"+
335      *                  "001 "+b.getHarjPv()+"."+b.getHarjKk()+"."+b.getHarjVv()+"\n"+
336      *                  "20:00 22:00 \n"+
337      *                  "Forca Natural\n"+
338      *                  "===\n";
339      * har.lisaa(a);
340      * har.lisaa(b);
341      * har.toString() === tulos;
342      * Relaatiot rel = new Relaatiot();
343      * Relaatio s = new Relaatio(a.getId());
344      * Relaatio q = new Relaatio(b.getId());
345      * tulos =  "1, 4\n"+
346      *          "51, 32, 8\n";
347      * s.lisaa(1);
348      * s.lisaa(4);
349      * q.lisaa(51);
350      * q.lisaa(32);
351      * q.lisaa(8);
352      * rel.lisaa(s);
353      * rel.lisaa(q);
354      * rel.toString() === tulos;
355      * 
356      * Sisallot sis = new Sisallot("");
357      * Sisalto i = new Sisalto("Aú");
358      * Sisalto j = new Sisalto("Martello");
359      * Sisalto k = new Sisalto("Negativa");
360      * Sisalto l = new Sisalto("Rabo-de-arraya");
361      * tulos = "Aú|Martello|Negativa|Rabo-de-arraya|";
362      * sis.lisaa(i);
363      * sis.lisaa(j);
364      * sis.lisaa(k);
365      * sis.lisaa(l);
366      * sis.toString() === tulos;
367      * l.setSisallonNimi("Rabo-de-arraia");
368      * tulos = "Aú|Martello|Negativa|Rabo-de-arraia|";
369      * sis.toString() === tulos;
370      * </pre>
371      */
372     public static void main(String[] args) {
373         Harjoitukset har = new Harjoitukset();
374         Harjoitus a = new Harjoitus();
375         Harjoitus b = new Harjoitus();
376 
377         har.lisaa(a);
378         har.lisaa(b);
379         har.toString();
380 
381         Relaatiot rel = new Relaatiot();
382         Relaatio s = new Relaatio(a.getId());
383         Relaatio q = new Relaatio(b.getId());
384         s.lisaa(1);
385         s.lisaa(4);
386         q.lisaa(51);
387         q.lisaa(32);
388         q.lisaa(8);
389 
390         rel.lisaa(s);
391         rel.lisaa(q);
392         System.out.println(rel.toString());
393 
394         Sisallot sis = new Sisallot("");
395         Sisalto i = new Sisalto("Aú");
396         Sisalto j = new Sisalto("Martello");
397         Sisalto k = new Sisalto("Negativa");
398         Sisalto l = new Sisalto("Rabo-de-arraya");
399 
400         sis.lisaa(i);
401         sis.lisaa(j);
402         sis.lisaa(k);
403         sis.lisaa(l);
404 
405         System.out.println(sis.toString());
406 
407         l.setSisallonNimi("Rabo-de-arraia");
408 
409         System.out.println(sis.toString());
410     }
411 
412 
413 }
414