001 import java.io.*;
002 import fi.jyu.mit.ohj2.*;
003 import java.util.*;
004 /**
005 * Kerhon jäsenistö joka osaa mm. lisätä uuden jäsenen
006 *
007 * @author Vesa Lappalainen
008 * @version 1.0, 20.03.2003
009 */
010 public class Harrastukset {
011 private boolean muutettu = false;
012 private String tiedoston_nimi = "";
013 private String bak_nimi = "";
014 private String koko_nimi = "";
015 private Collection alkiot = new ArrayList();
016
017 public Harrastukset() { }
018
019 /**
020 * Poikkeusluokka tietorakenteesta aiheutuville poikkeuksille.
021 * @author Vesa Lappalainen
022 * @version 1.0, 22.02.2003
023 */
024 public class SailoException extends Exception {
025 public SailoException(String viesti) { super(viesti); }
026 }
027
028 /**
029 * Lisää uuden harrastuksen tietorakenteeseen. Ottaa harastuksen omistukseensa.
030 * @param har lisätäävän jäsnen viite. Huom tietorakenne muuttuu omistajaksi
031 */
032 public void lisaa(Harrastus har) {
033 alkiot.add(har);
034 }
035
036
037 /**
038 * Lukee jäsenistön tiedostosta. Kesken.
039 * @param tied tiedoston nimen alkuosa
040 * @throws SailoException jos lukeminen epäonnistuu
041 */
042 public void lue_tiedostosta(String tied) throws SailoException {
043 tiedoston_nimi = tied + ".dat";
044 koko_nimi = "Kelmien kerho";
045 }
046
047 /**
048 * Tallentaa jäsenistön tiedostoon. Kesken.
049 * @throws SailoException jos talletus epäonnistuu
050 */
051 public void talleta() { }
052
053 /**
054 * Palauttaa Kerhon koko nimen
055 * @return Kerhon koko nimi merkkijononna
056 */
057 public String getKoko_nimi() { return koko_nimi; }
058
059 /**
060 * Palauttaa kerhon harrastusten lukumäärän
061 * @return harrastusten lukumäärä
062 */
063 public int getLkm() { return alkiot.size(); }
064
065 /**
066 * Palauttaa tiedoston nimen, jota käytetään tallennukseen
067 * @return tallennustiedoston nimi
068 */
069 public String getTiedoston_nimi() { return tiedoston_nimi; }
070
071 /**
072 * Palauttaa varakopiotiedoston nimen
073 * @return varakopiotiedoston nimi
074 */
075 public String getBak_nimi() { return bak_nimi; }
076
077 /**
078 * Tekee nykyisestä tiedostosta varakopiotiedoston. Kesken.
079 * @param bak_tark tarkennin varakopioiedostoille
080 * @return onnistuiko (true) vai ei (false)
081 */
082 public boolean TeeBak(String bak_tark) { bak_nimi = bak_tark; return true; }
083
084 /**
085 * Palauttaa iteraattorin jolla kaikki harrastukset voidaan käydä lävitse
086 * @return iteraattori kaikkien läpikäymiseen
087 */
088 public Iterator iterator() {
089 return alkiot.iterator();
090 }
091
092 /**
093 * Iteraattori, jolla käydään lävitse tietyn henkilön harrastukset.
094 * @author Vesa Lappalainen
095 * @version 1.0, 20.03.2003
096 */
097 public class HarrastuksetIterator implements Iterator {
098 private int jasenid;
099 private Iterator iter = alkiot.iterator();
100 private Harrastus seuraava = null;
101
102 public HarrastuksetIterator(int jid) {
103 jasenid = jid;
104 }
105
106 public boolean hasNext() {
107 if ( seuraava != null ) return true;
108 while ( true ) {
109 if ( !iter.hasNext() ) return false;
110 seuraava = (Harrastus)iter.next();
111 if ( seuraava.getJasen_id()== jasenid ) return true;
112 }
113 }
114
115 public Object next() throws NoSuchElementException {
116 if ( seuraava != null ) {
117 Harrastus pal = seuraava;
118 seuraava = null;
119 return pal;
120 }
121 while ( true ) {
122 Harrastus har = (Harrastus)iter.next();
123 if ( har.getJasen_id()== jasenid ) return har;
124 }
125 }
126
127 public void remove() throws UnsupportedOperationException {
128 throw new UnsupportedOperationException("Me ei poisteta");
129 }
130
131 }
132
133 /**
134 * Palauttaa iteraattorin jolla tietyn jäsenen harrastukset voidaan
135 * käydä lävitse
136 * @param jasen_id minkä jäsenen harrastukset iteroidaan
137 * @return iteraattori valitun jäsenen harrastusten läpikäymiseen
138 */
139 public Iterator iterator(int jasen_id) {
140 return new HarrastuksetIterator(jasen_id);
141 }
142
143 private static void testi(Object o) {
144 Harrastus har = (Harrastus)o;
145 System.out.print(har.getJasen_id() + " ");
146 har.tulosta(System.out);
147 }
148
149 /**
150 * Testiohjelma harrastuksille
151 * @param args ei käytössä
152 */
153 public static void main(String args[]) {
154 Harrastukset harrasteet = new Harrastukset();
155 Harrastus pitsi1 = new Harrastus();
156 pitsi1.vastaa_pitsin_nyplays(2);
157 Harrastus pitsi2 = new Harrastus();
158 pitsi2.vastaa_pitsin_nyplays(1);
159 Harrastus pitsi3 = new Harrastus();
160 pitsi3.vastaa_pitsin_nyplays(2);
161 Harrastus pitsi4 = new Harrastus();
162 pitsi4.vastaa_pitsin_nyplays(2);
163
164 harrasteet.lisaa(pitsi1);
165 harrasteet.lisaa(pitsi2);
166 harrasteet.lisaa(pitsi3);
167 harrasteet.lisaa(pitsi2);
168 harrasteet.lisaa(pitsi4);
169
170 System.out.println("============= Harrastukset testi =================");
171
172
173 for (Iterator i=harrasteet.iterator(2); i.hasNext(); ) {
174 testi(i.next());
175 }
176 { // Testataan toimiiko iteraattori ilman hasNextiä
177 System.out.println("============= Iteraattori testi =================");
178 Iterator i=harrasteet.iterator(2);
179 System.out.println(i.hasNext() + " " + i.hasNext());
180 testi(i.next());
181 System.out.println(i.hasNext() + " " + i.hasNext());
182 testi(i.next());
183 System.out.println(i.hasNext() + " " + i.hasNext());
184 testi(i.next());
185 System.out.println(i.hasNext() + " " + i.hasNext());
186 }
187
188 }
189
190 }
191
192