1 package kerhoswing;
2
3 import java.awt.Color;
4 import java.awt.Desktop;
5 import java.awt.event.KeyAdapter;
6 import java.awt.event.KeyEvent;
7 import java.io.IOException;
8 import java.io.PrintStream;
9 import java.net.URI;
10 import java.net.URISyntaxException;
11
12 import javax.swing.JComponent;
13 import javax.swing.JLabel;
14 import javax.swing.JOptionPane;
15 import javax.swing.JTextArea;
16 import javax.swing.JTextField;
17
18 import kerho.Jasen;
19 import kerho.Kerho;
20 import kerho.SailoException;
21
22 import fi.jyu.mit.gui.AbstractChooser;
23 import fi.jyu.mit.gui.IStringListChooser;
24 import fi.jyu.mit.gui.SelectionChangeListener;
25 import fi.jyu.mit.gui.StringTable;
26 import fi.jyu.mit.gui.TextAreaOutputStream;
27
28
29
30
60 public class KerhoSwing {
61
62 private static Color virheVari = new Color(255, 0, 0);
63 private AbstractChooser<String> cbKentat;
65 private JTextField editHaku;
66 private AbstractChooser<Jasen> listJasenet;
67 private StringTable tableHarrastukset;
68 private JComponent panelJasen;
69 private JLabel labelVirhe;
70 private final Kerho kerho;
71
72 private Jasen jasenKohdalla;
73 private JTextArea areaJasen = new JTextArea();
75
78 public KerhoSwing() {
79 kerho = new Kerho();
80 }
81
82
83
86 public JLabel getLabelVirhe() {
87 return labelVirhe;
88 }
89
90
91
94 public void setLabelVirhe(JLabel labelVirhe) {
95 this.labelVirhe = labelVirhe;
96 }
97
98
99
102 public AbstractChooser<String> getCbKentat() {
103 return cbKentat;
104 }
105
106
107
110 public void setCbKentat(AbstractChooser<String> cbKentat) {
111 this.cbKentat = cbKentat;
112 }
113
114
115
118 public JTextField getEditHaku() {
119 return editHaku;
120 }
121
122
123
126 public void setEditHaku(JTextField editHaku) {
127 this.editHaku = editHaku;
128 }
129
130
131
134 public AbstractChooser<Jasen> getListJasenet() {
135 return listJasenet;
136 }
137
138
139
142 @SuppressWarnings({ "rawtypes", "unchecked" })
143 public void setListJasenet(AbstractChooser listJasenet) {
144 this.listJasenet = listJasenet;
145 }
146
147
148
151 public StringTable getTableHarrastukset() {
152 return tableHarrastukset;
153 }
154
155
156
159 public void setTableHarrastukset(StringTable tableHarrastukset) {
160 this.tableHarrastukset = tableHarrastukset;
161 }
162
163
164
167 public JComponent getPanelJasen() {
168 return panelJasen;
169 }
170
171
172
175 public void setPanelJasen(JComponent panelJasen) {
176 this.panelJasen = panelJasen;
177 }
178
179
180
183 public void alusta() {
184
186 editHaku.addKeyListener(new KeyAdapter() {
187 @Override public void keyReleased(KeyEvent e) { hae(0); }
188 });
189
190 cbKentat.addSelectionChangeListener(new SelectionChangeListener<String>() {
191 @Override
192 public void selectionChange(IStringListChooser<String> sender) { hae(0);}
193 });
194
195 listJasenet.addSelectionChangeListener(new SelectionChangeListener<Jasen>() {
196 @Override
197 public void selectionChange(IStringListChooser<Jasen> sender) { naytaJasen(); }
198 });
199 luoNaytto();
200 hae(0);
201 }
202
203
204
207 public void uusiJasen() {
208 jasenKohdalla = new Jasen();
209 jasenKohdalla.rekisteroi();
210 jasenKohdalla.vastaaAkuAnkka();
211 try {
212 kerho.lisaa(jasenKohdalla);
213 } catch (SailoException e) {
214 JOptionPane.showMessageDialog(null,
215 "Ongelmia lisäämisessä! " + e.getMessage());
216 }
217 hae(jasenKohdalla.getTunnusNro());
218 }
219
220
221
224 public void uusiHarrastus() {
225 JOptionPane.showMessageDialog(null, "Vielä ei osata lisätä harrastusta!" );
226 }
227
228
229
235 public String lueTiedosto(String s) {
236 try {
237 if ( cbKentat == null ) return "cbKentat on alustamatta";
238 if ( editHaku == null ) return "editHaku on alustamatta";
239 if ( listJasenet == null ) return "listJasenet on alustamatta";
240 if ( tableHarrastukset == null ) return "tableHarrastukset on alustamatta";
241 if ( panelJasen == null ) return "panelJasen on alsutamatta";
242 alusta();
243 kerho.lueTiedostosta(s);
244 hae(0);
245 return null;
246 } catch (SailoException e) {
247 hae(0);
248 return e.getMessage();
250 }
251 }
252
253
254
258 public String talleta() {
259 try {
260 kerho.talleta();
261 return null;
262 } catch (SailoException ex) {
263 JOptionPane.showMessageDialog(null, "Talletuksessa ongelmia! " + ex.getMessage());
264 return ex.getMessage();
265 }
266 }
267
268
269
273 protected void hae(int jnro) {
274 int k = cbKentat.getSelectedIndex();
275 String hakuehto = editHaku.getText();
276 if ( k > 0 || hakuehto.length() > 0 )
277 setVirhe(String.format("Ei osata hakea (kenttä: %d, ehto: %s)",k,hakuehto));
278 else
279 setVirhe(null);
280
281 listJasenet.clear();
282
283 int index = 0;
284 for (int i = 0; i < kerho.getJasenia(); i++) {
285 Jasen jasen = kerho.annaJasen(i);
286 if (jasen.getTunnusNro() == jnro) index = i;
287 listJasenet.add(jasen.getNimi(),jasen);
288 }
289
290 listJasenet.setSelectedIndex(index);
291 }
292
293
294
297 private void laitaJasen() {
298 if (jasenKohdalla == null) return;
299 areaJasen.setText("");
300 PrintStream os = TextAreaOutputStream.getTextPrintStream(areaJasen);
301 tulosta(os, jasenKohdalla);
302 }
303
304
305
308 protected void naytaJasen() {
309 int ind = listJasenet.getSelectedIndex();
310 if (ind < 0) return;
311 jasenKohdalla = listJasenet.getSelectedObject();
312 laitaJasen();
313 }
314
315
316
321 private void setVirhe(String virhe) {
322 if ( labelVirhe == null ) return;
323 if ( virhe == null ) {
324 labelVirhe.setVisible(false);
325 return;
326 }
327 labelVirhe.setVisible(true);
328 labelVirhe.setText(virhe);
329 labelVirhe.setBackground(virheVari);
330 }
331
332
333
337 private void luoNaytto() {
338 panelJasen.removeAll();
339 panelJasen.add(areaJasen);
340 }
341
342
343
346 public void poistaHarrastus() {
347 int ind = tableHarrastukset.getSelectedRow();
348 if (ind < 0 ) return;
349 String har = (String)(tableHarrastukset.getValueAt(ind, 0));
350 JOptionPane.showMessageDialog(null, "Vielä ei osata poistaa harrastusta " + har);
351 }
352
353
354
357 public void poistaJasen() {
358 int ind = listJasenet.getSelectedIndex();
359 if ( ind < 0 ) return;
360 String nimi = listJasenet.getSelectedText();
361 int vastaus = JOptionPane.showConfirmDialog(null, "Poistetaanko jäsen: " + nimi,"Poisto?",JOptionPane.YES_NO_OPTION);
362 if ( vastaus == JOptionPane.NO_OPTION ) return;
363 JOptionPane.showMessageDialog(null, "Vielä ei osata poistaa jäsentä " + nimi);
364 }
365
366
367
368
371 public void avustus() {
372 Desktop desktop = Desktop.getDesktop();
373 try {
374 URI uri = new URI("https://trac.cc.jyu.fi/projects/ohj2k12/wiki/vesal2");
376 desktop.browse(uri);
377 } catch (URISyntaxException e) {
378 return;
379 } catch (IOException e) {
380 return;
381 }
382 }
383
384
385
390 public void tulosta(PrintStream os, final Jasen jasen) {
391 os.println("----------------------------------------------");
392 jasen.tulosta(os);
393 os.println("----------------------------------------------");
394 }
395
396
397
401 public void tulostaValitut(JTextArea text) {
402 PrintStream os = TextAreaOutputStream.getTextPrintStream(text);
403 os.println("Tulostetaan kaikki jäsenet");
404 for (int i = 0; i < kerho.getJasenia(); i++) {
405 Jasen jasen = kerho.annaJasen(i);
406 tulosta(os, jasen);
407 os.println("\n\n");
408 }
409 }
410
411
412 }
413