1   package kalenteri;
2   
3   import java.io.OutputStream;
4   import java.io.PrintStream;
5   import fi.jyu.mit.ohj2.*;
6   
7   /**
8    * Yksittäinen harjoitus.
9    * @author Timo Koski
10   * @version 1.0 / 25.2.2012
11   */
12  
13  public class Harjoitus {
14  
15      private int id;
16      private String pvm = "";
17      private int pv = 1;
18      private int kk = 1;
19      private int vv = 2012;
20      private String paikka = "";
21      private String alkuaika = "";
22      private String loppuaika = "";
23      private String seura = "";
24      private String opettaja = "";
25      private String lisatieto = "";
26      private boolean onkoRoda = false;
27  
28      private static int next_id = 0;
29  
30      /* MUODOSTAJAT JA REKISTERÖINTI */
31      /**
32       * Oletusmuodostaja.
33       * @version Kutsuu toista muodostajaa satunnaismerkkijonolla 
34       */
35      public Harjoitus() {
36          this("01.01.2012");
37      }
38      /**
39       * Muodostaja, johon parametrina päivämäärä-String.
40       * Luo automaattisesti uuden prototyyppiharjoituksen
41       * ja rekisteroi sen.
42       * @param pvm
43       */
44      public Harjoitus(String pvm) {
45          StringBuffer sb = new StringBuffer(pvm);
46          try { 
47              this.pvm = pvm;
48              this.pv = Integer.parseInt(Mjonot.erota(sb,'.'));
49              this.kk = Integer.parseInt(Mjonot.erota(sb,'.'));
50              this.vv = Integer.parseInt(sb.toString());
51          } catch (NumberFormatException ex) {
52              System.err.println("Virhe luettaessa päivämäärää tiedostosta.\nAsetetaan päivämääräksi oletukset.");
53          }
54          uusiHarj();
55          rekisteroi();
56      }
57      /**
58       * Esimerkkiharjoitustyöstä lainattu rekisteröimismetodi.
59       * @return id
60       */
61      public int rekisteroi() {
62          id = next_id;
63          next_id++;
64          return id;
65      }
66  
67      /* APUMETODEJA: UUSIHARJOITUS VAKIOARVOILLA JA RANDOM PVM */
68      /**
69       * Apumetodi, jolla luodaan uusi harjoitus arvotulla päivämäärällä
70       * ja muilla vakioarvoilla.
71       * @version ht5
72       */
73      public void uusiHarj() {
74          this.alkuaika = "20:00";
75          this.loppuaika = "22:00";
76          this.seura = "Forca Natural";
77          this.onkoRoda = true;
78      }
79      /**
80       * Metodi, joka arpoo päivämäärä-Stringin.
81       * @version ht5
82       * @return pvm, arvottu
83       */
84      public static String getRndPvm() {
85          String pvm = "" + Math.random()*28 + "." + Math.random()*12 + ".2011";
86          return pvm;
87      }
88  
89      /* SETTERIT JA GETTERIT */
90      /**
91       * @param id
92       */
93      public void setId(int id) {
94          this.id = id;
95      }
96      /**
97       * Asetetaan päivämäärä randomina. 
98       * @version ht5
99       */
100     public void setPvm() {
101         this.pv = (int) (Math.random()*28);
102         this.kk = (int) (Math.random()*12);
103         this.vv = (int) (2010 + (Math.random()*2));
104     }
105     /**
106      * Palauttaa harjoituksen yksilöivän id:n.
107      * @return id
108      */
109     public int getId() {
110         return id;
111     }
112     /**
113      * Päivämäärän syöttämismetodi.
114      * @param pvmSyote
115      */
116     public void setPvm(String pvmSyote) {
117         String tempSyote;
118         if (!pvmSyote.equals("")) { 
119             StringBuffer sb = new StringBuffer(pvmSyote);
120             this.pvm = pvmSyote;
121             tempSyote = Mjonot.erota(sb,'.');
122             this.pv = Integer.parseInt(tempSyote);
123             tempSyote = Mjonot.erota(sb,'.');
124             this.kk = Integer.parseInt(tempSyote);
125             tempSyote = Mjonot.erota(sb,'.');
126             this.vv = Integer.parseInt(tempSyote);
127         }
128     }
129     /**
130      * Haetaan String-muotoinen päivämäärä.
131      * @version ht5
132      * @return pvm
133      */
134     public String getHarjPvm() {
135         return pvm;
136     }
137     /**
138      * Haetaan harjoituksen päivän arvo.
139      * @return pv
140      */
141     public int getHarjPv() {
142         return pv;
143     }
144     /**
145      * Haetaan harjoituksen kuukauden arvo.
146      * @return kk
147      */
148     public int getHarjKk() {
149         return kk;
150     }
151     /**
152      * Haetaan harjoituksen vuoden arvo.
153      * @return vv
154      */
155     public int getHarjVv() {
156         return vv;
157     }
158     /**
159      * Haetaan aloitusaika merkkijonona.
160      * @return  alkuaika
161      */
162     public String getAloitusAika() {
163         return alkuaika;
164     }
165     /**
166      * Haetaan lopetusaika merkkijonona.
167      * @return loppuaika
168      */
169     public String getLopetusAika() {
170         return loppuaika;
171     }
172     /**
173      * Asetetaan aloitus- ja lopetusaika.
174      * @param aloitusAika
175      */
176     public void setAloitusaika(String aloitusAika){
177         this.alkuaika = aloitusAika;
178     }
179     /**
180      * @param lopetusAika
181      */
182     public void setLopetusaika(String lopetusAika) {
183         this.loppuaika = lopetusAika;
184     }
185     /**
186      * Haetaan harjoituksen paikka merkkijonona.
187      * @return paikka
188      */
189     public String getPaikka() {
190         return paikka;
191     }
192     /**
193      * Asetetaan paikka merkkijonona.
194      * @param paikka
195      */
196     public void setPaikka(String paikka) {
197         this.paikka = paikka;
198     }
199     /**
200      * Haetaan harjoituksen seura.
201      * @return seura
202      */
203     public String getSeura() {
204         return seura;
205     }
206     /**
207      * Asetetaan harjoituksen seura.
208      * @param seura
209      */
210     public void setSeura(String seura) {
211         this.seura = seura;
212     }
213     /**
214      * @return opettaja
215      */
216     public String getOpettaja() {
217         return opettaja;
218     }
219     /**
220      * @param ope
221      */
222     public void setOpettaja(String ope) {
223         this.opettaja = ope;
224     }
225     /**
226      * Haetaan lisätiedot.
227      * @return lisätieto
228      */
229     public String getLisatieto() {
230         return lisatieto;
231     }
232     /**
233      * Asetetaan lisätiedot.
234      * @param lisatieto
235      */
236     public void setLisatieto(String lisatieto) {
237         this.lisatieto = lisatieto;
238     }
239     /**
240      * Haetaan onkoRoda:n arvo
241      * @return onkoRoda
242      */
243     public boolean getRoda() {
244         return onkoRoda;
245     }
246     /**
247      * Asetetaan arvo onkoRoda.
248      * @param roda
249      */
250     public void setRoda(boolean roda) {
251         this.onkoRoda = roda;
252     }
253     
254     /* TULOSTA-METODIT JA TOSTRING */
255     /**
256      * Tulostus-metodi johon parametrina PrintStream.
257      * @version ht5, otetaan myös returnina sama merkkijono.
258      * @param out
259      * @return temp, @version ht5
260      */
261     public String tulosta(PrintStream out) {
262         String temp = ((String.format("%03d", id, 3))+" "+pv+"."+kk+"."+vv+"\n"+
263                 alkuaika+" "+loppuaika+" "+paikka+"\n"+seura+"\n"+"==="+"\n");
264         out.println((String.format("%03d", id, 3))+" "+pv+"."+kk+"."+vv);
265         out.println(alkuaika+" "+loppuaika+" "+paikka);
266         out.println(seura);
267         out.println("===");
268         return temp;
269     }
270     /**
271      * Tulosta-metodi, johon parametrina OutputStream.
272      * Metodi-kutsuu toista tulosta-metodia PrintStream-parametrilla. 
273      * @param os
274      */
275     public void tulosta(OutputStream os) {
276         tulosta(new PrintStream(os));
277     }
278     /**
279      * toString-metodi, joka on käytännössä kopio tulosta()-metodista.
280      * Poislukien parametri.
281      * toString tulostaa System.outtiin.
282      */
283     @Override
284     public String toString() {
285         String temp = (pv+"."+kk+"."+vv+"\n"+alkuaika+" "+loppuaika+" "
286                 +paikka+"\n"+seura+"\n"+"==="+"\n");
287         /*
288         String temp = ((String.format("%03d", id, 3))+" "+pv+"."+kk+"."+vv+"\n"+
289                 alkuaika+" "+loppuaika+" "+paikka+"\n"+seura+"\n"+"==="+"\n");
290          */
291         /*
292         System.out.println((String.format("%03d", id, 3))+" "+pv+"."+kk+"."+vv);
293         System.out.println(alkuaika+" "+loppuaika+" "+paikka);
294         System.out.println(seura);
295         System.out.println("===");
296          */
297         return temp;
298     }
299     
300     /* PÄÄOHJELMA */
301     /**
302      * Pääohjelma luokan testaamista varten
303      * @param args ei käytössä
304      * @example
305      * <pre name="test">
306      * Harjoitus s = new Harjoitus();
307      * s.uusiHarj();
308      * String tulos =   "000 "+s.getHarjPv()+"."+s.getHarjKk()+"."+s.getHarjVv()+"\n"+
309      *                  "20:00 22:00 \n"+
310      *                  "Boa Vontade\n"+
311      *                  "===\n";
312      * s.setSeura("Boa Vontade");
313      * s.tulosta(System.out) === tulos;
314      * </pre>
315      */
316     public static void main(String[] args) {
317         Harjoitus a = new Harjoitus();
318         Harjoitus b = new Harjoitus();
319         Harjoitus c = new Harjoitus();
320         c.tulosta(System.out);
321         c.setPaikka("Helsinki");
322         c.setSeura("Capoeira Capital");
323         c.tulosta(System.out);
324         a.tulosta(System.out);
325         b.tulosta(System.out);
326     }
327 }
328