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