RmiClient  1.0
 Alle Klassen Namensbereiche Dateien Funktionen Variablen
MainFrame.java
gehe zur Dokumentation dieser Datei
1 package view;
2 
3 import viewTables.AbstractTable;
4 import viewTables.AnsprechpartnerTable;
5 import viewTables.ProjektTable;
6 import viewTables.StudentTable;
7 import viewTables.UnternehmenTable;
8 import java.awt.BorderLayout;
9 import java.awt.Color;
10 import java.awt.Container;
11 import java.awt.GridLayout;
12 import java.awt.Dialog.ModalityType;
13 import java.awt.event.ActionEvent;
14 import java.awt.event.ActionListener;
15 import java.awt.event.KeyEvent;
16 import java.awt.event.WindowAdapter;
17 import java.awt.event.WindowEvent;
18 import java.lang.reflect.Constructor;
19 import java.lang.reflect.InvocationTargetException;
20 import java.rmi.RemoteException;
21 import java.util.List;
22 import java.util.Observable;
23 import java.util.Observer;
24 
25 import javax.swing.JButton;
26 import javax.swing.JFrame;
27 import javax.swing.JLabel;
28 import javax.swing.JOptionPane;
29 import javax.swing.JPanel;
30 import javax.swing.JScrollPane;
31 import javax.swing.JTable;
32 import javax.swing.SwingUtilities;
33 import javax.swing.WindowConstants;
34 
35 import main.ResultContent;
36 import main.UserRole;
37 
38 import controller.Controller;
39 
40 import databaseModel.Ansprechpartner;
41 import databaseModel.Projekt;
42 import databaseModel.Student;
43 import databaseModel.Unternehmen;
44 
52 @SuppressWarnings("serial")
53 public class MainFrame extends AbstractFrame implements Observer {
54  /* untere Buttons */
55  public JButton projekteButton = null;
56  public JButton ansprechpartnerButton = null;
57  public JButton unternehmenButton = null;
58  public JButton studentenButton = null;
59 
60  /* obere Buttons */
61  private JButton newButton = null;
62  private JButton changeButton = null;
63  private JButton deleteButton = null;
64 
65  private JScrollPane viewScrollPane = null;
66  private Container contentPane = null;
67  private JLabel typeViewLabel = null;
68 
72  private List<Object> projekteData = null;
73  private List<Object> ansprechpartnerData = null;
74  private List<Object> unternehmenData = null;
75  private List<Object> studentenData = null;
76  private List<Object> activeData = projekteData;
77 
81  private ProjektTable projektTable = new ProjektTable();
82  private AnsprechpartnerTable ansprechpartnerTable = new AnsprechpartnerTable();
83  private UnternehmenTable unternehmenTable = new UnternehmenTable();
84  private StudentTable studentTable = new StudentTable();
85  private AbstractTable activeTable = projektTable;
86 
87  private final String viewDescriptionProjekte = "Projekte";
88  private final String viewDescriptionAnsprechpartner = "Ansprechpartner";
89  private final String viewDescriptionUnternehmen = "Unternehmen";
90  private final String viewDescriptionStudenten = "Studenten";
91 
92  private final int defaultInputFieldLength = 30;
93 
94  private UserRole roleType = null;
95  private MainFrame mainFrame = null;
96 
100  public MainFrame(final Controller controller, final UserRole roleType) {
101  super(controller, roleType.toString()
102  + " - Projektverwaltung 1.0 von (C) Thomas Kramer");
103  this.roleType = roleType;
104  mainFrame = this;
105 
106  // Make sure we have nice windows decorations.
107  // JFrame.setDefaultLookAndFeelDecorated(true);
108  addWindowListener(new securityClosing());
109 
113  final JPanel topButtonPanel = new JPanel();
114  topButtonPanel.setLayout(new GridLayout(0, 4));
115  typeViewLabel = new JLabel();
116  typeViewLabel.setHorizontalAlignment(JLabel.CENTER);
117  typeViewLabel.setForeground(Color.RED);
118  newButton = new JButton("Neu");
119  newButton.setMnemonic(KeyEvent.VK_N);
120  changeButton = new JButton("Ändern");
121  changeButton.setMnemonic(KeyEvent.VK_E);
122  deleteButton = new JButton("Löschen");
123  deleteButton.setMnemonic(KeyEvent.VK_L);
124  topButtonPanel.add(typeViewLabel, BorderLayout.WEST);
125  topButtonPanel.add(newButton, BorderLayout.WEST);
126  topButtonPanel.add(changeButton, BorderLayout.WEST);
127  topButtonPanel.add(deleteButton, BorderLayout.WEST);
128 
132  newButton.addActionListener(new ActionListener() {
133  @Override
134  public void actionPerformed(ActionEvent arg0) {
135  if (activeTable == projektTable) {
136  openDialog(ProjektDialog.class, "Neues Projekt anlegen",
137  true, null, null, roleType);
138  } else if (activeTable == ansprechpartnerTable) {
139  openDialog(AnsprechpartnerDialog.class,
140  "Neuen Ansprechpartner anlegen", true, null, null,
141  roleType);
142  } else if (activeTable == unternehmenTable) {
143  openDialog(UnternehmenDialog.class,
144  "Neues Unternehmen anlegen", true, null, null,
145  roleType);
146  } else if (activeTable == studentTable) {
147  openDialog(StudentDialog.class, "Neuen Studenten anlegen",
148  true, null, null, roleType);
149  }
150  }
151  });
152 
156  changeButton.addActionListener(new ActionListener() {
157  @Override
158  public void actionPerformed(ActionEvent arg0) {
159  if (activeTable == projektTable) {
160  openDialog(ProjektDialog.class, "Ändern eines Projektes",
161  false, activeTable, activeData, roleType);
162  } else if (activeTable == ansprechpartnerTable) {
163  openDialog(AnsprechpartnerDialog.class,
164  "Ändern eines Ansprechpartners", false,
165  activeTable, activeData, roleType);
166  } else if (activeTable == unternehmenTable) {
167  openDialog(UnternehmenDialog.class,
168  "Ändern eines Unternehmens", false, activeTable,
169  activeData, roleType);
170  } else if (activeTable == studentTable) {
171  openDialog(StudentDialog.class, "Ändern eines Studenten",
172  false, activeTable, activeData, roleType);
173  }
174  }
175  });
176 
180  deleteButton.addActionListener(new ActionListener() {
181  @Override
182  public void actionPerformed(ActionEvent arg0) {
183  if (activeTable.getSelectedRowCount() == 0) {
184  JOptionPane
185  .showMessageDialog(
186  null,
187  "Bitte wählen Sie einen Datensatz in der Tabelle aus.",
188  "Fehler", JOptionPane.ERROR_MESSAGE);
189  } else {
190  int option = JOptionPane
191  .showOptionDialog(
192  MainFrame.this,
193  "Sind Sie sicher dass Sie diesen Datensatz löschen wollen?",
194  "Sicherheitsabfrage",
195  JOptionPane.YES_NO_OPTION,
196  JOptionPane.WARNING_MESSAGE, null, null,
197  null);
198 
199  if (option == JOptionPane.YES_OPTION) {
200  try {
201  Controller.rmiServer.deleteData(activeData
202  .get(activeTable.getSelectedRow()));
203  } catch (RemoteException e) {
204  // TODO Auto-generated catch block
205  e.printStackTrace();
206  }
207  }
208  }
209  }
210  });
211 
215  final JPanel bottomButtonPanel = new JPanel();
216  bottomButtonPanel.setLayout(new GridLayout(0, 4));
217 
221  projekteButton = new JButton("Projekte");
222  projekteButton.setMnemonic(KeyEvent.VK_P);
223  ansprechpartnerButton = new JButton("Ansprechpartner");
224  ansprechpartnerButton.setMnemonic(KeyEvent.VK_A);
225  unternehmenButton = new JButton("Unternehmen");
226  unternehmenButton.setMnemonic(KeyEvent.VK_U);
227  studentenButton = new JButton("Studenten");
228  studentenButton.setMnemonic(KeyEvent.VK_S);
229 
233  projekteButton.addActionListener(new ActionListener() {
234  @Override
235  public void actionPerformed(ActionEvent arg0) {
236  SwingUtilities.invokeLater(new Runnable() {
237  public void run() {
238  setActiveScrollPane(projektTable);
239 
240  try {
242  } catch (RemoteException e) {
243  // TODO Auto-generated catch block
244  e.printStackTrace();
245  }
246  }
247  });
248  }
249  });
250 
254  ansprechpartnerButton.addActionListener(new ActionListener() {
255  @Override
256  public void actionPerformed(ActionEvent arg0) {
257  SwingUtilities.invokeLater(new Runnable() {
258  public void run() {
259  setActiveScrollPane(ansprechpartnerTable);
260 
261  try {
263  .selectData(Ansprechpartner.class);
264  } catch (RemoteException e) {
265  // TODO Auto-generated catch block
266  e.printStackTrace();
267  }
268  }
269  });
270  }
271  });
272 
276  unternehmenButton.addActionListener(new ActionListener() {
277  @Override
278  public void actionPerformed(ActionEvent arg0) {
279  SwingUtilities.invokeLater(new Runnable() {
280  public void run() {
281  setActiveScrollPane(unternehmenTable);
282 
283  try {
285  } catch (RemoteException e) {
286  // TODO Auto-generated catch block
287  e.printStackTrace();
288  }
289  }
290  });
291  }
292  });
293 
297  studentenButton.addActionListener(new ActionListener() {
298  @Override
299  public void actionPerformed(ActionEvent arg0) {
300  SwingUtilities.invokeLater(new Runnable() {
301  public void run() {
302  setActiveScrollPane(studentTable);
303 
304  try {
306  } catch (RemoteException e) {
307  // TODO Auto-generated catch block
308  e.printStackTrace();
309  }
310  }
311  });
312  }
313  });
314 
318  bottomButtonPanel.add(projekteButton, BorderLayout.WEST);
319  bottomButtonPanel.add(ansprechpartnerButton, BorderLayout.WEST);
320  bottomButtonPanel.add(unternehmenButton, BorderLayout.WEST);
321  bottomButtonPanel.add(studentenButton, BorderLayout.WEST);
322 
326  setLayout(new BorderLayout());
327  contentPane = getContentPane();
328 
332  contentPane.add(topButtonPanel, BorderLayout.NORTH);
333  contentPane.add(bottomButtonPanel, BorderLayout.SOUTH);
334 
338  try {
339  setActiveScrollPane(projektTable);
340 
345  projekteData = Controller.rmiServer.getData(Projekt.class);
346  this.update(null, new ResultContent(Projekt.class, projekteData));
347  } catch (RemoteException e) {
348  // TODO Auto-generated catch block
349  e.printStackTrace();
350  }
351  }
352 
370  private void openDialog(final Class viewClass, final String caption,
371  final boolean newMode, final JTable activeTable,
372  final List<Object> activeData, final UserRole roleType) {
373 
374  SwingUtilities.invokeLater(new Runnable() {
375  public void run() {
376  boolean OK = true;
377  Object changeObject = null;
378 
379  if (!newMode) {
380  if (activeTable.getSelectedRow() < 0) {
381  OK = false;
382  } else {
383  changeObject = activeData.get(activeTable
384  .getSelectedRow());
385  }
386  }
387 
388  if (!OK) {
389  JOptionPane
390  .showMessageDialog(
391  null,
392  "Bitte wählen Sie einen Datensatz in der Tabelle aus.",
393  "Fehler", JOptionPane.ERROR_MESSAGE);
394  } else {
399  AbstractDialog view = controller.getDialog(viewClass);
400 
405  if (view == null) {
416  try {
417  Constructor<?> cons = (Constructor<?>) viewClass
418  .getConstructor(new Class<?>[] {
419  JFrame.class, Controller.class,
420  String.class, UserRole.class });
421  try {
422  view = (AbstractDialog) cons
423  .newInstance(new Object[] { mainFrame,
424  controller, caption, roleType });
425  } catch (InstantiationException e) {
426  // TODO Auto-generated catch block
427  e.printStackTrace();
428  } catch (IllegalAccessException e) {
429  // TODO Auto-generated catch block
430  e.printStackTrace();
431  } catch (IllegalArgumentException e) {
432  // TODO Auto-generated catch block
433  e.printStackTrace();
434  } catch (InvocationTargetException e) {
435  // TODO Auto-generated catch block
436  e.printStackTrace();
437  }
438  } catch (NoSuchMethodException e) {
439  // TODO Auto-generated catch block
440  e.printStackTrace();
441  } catch (SecurityException e) {
442  // TODO Auto-generated catch block
443  e.printStackTrace();
444  }
445 
449  controller.addObserver(view);
450 
454  controller.addDialog(view);
455  }
456 
457  view.pack();
458  // positionieren des Fensters: mittig
459  view.setLocationRelativeTo(null);
460  view.setModalityType(ModalityType.DOCUMENT_MODAL);
461 
465  view.initialize(caption, changeObject);
466  view.setVisible(true);
467  }
468  }
469  });
470  }
471 
479  private void setActiveScrollPane(AbstractTable jTable) {
483  if (viewScrollPane != null) {
484  contentPane.remove(viewScrollPane);
485  }
486  viewScrollPane = new JScrollPane(jTable);
487  contentPane.add(viewScrollPane, BorderLayout.CENTER);
488 
492  activeTable = jTable;
493  if (activeTable != null) {
494  activeTable.clearTable();
495  }
496 
500  newButton.setEnabled(true);
501  changeButton.setEnabled(true);
502  deleteButton.setEnabled(true);
503 
504  if (jTable == projektTable) {
505  typeViewLabel.setText(viewDescriptionProjekte);
506 
507  if (roleType.equals(UserRole.Student)) {
508  deleteButton.setEnabled(false);
509  } else {
510  newButton.setEnabled(false);
511  }
512  } else if (jTable == ansprechpartnerTable) {
513  typeViewLabel.setText(viewDescriptionAnsprechpartner);
514 
515  if (roleType.equals(UserRole.Student)) {
516  deleteButton.setEnabled(false);
517  } else {
518  newButton.setEnabled(false);
519  changeButton.setEnabled(false);
520  }
521  } else if (jTable == unternehmenTable) {
522  typeViewLabel.setText(viewDescriptionUnternehmen);
523 
524  if (roleType.equals(UserRole.Student)) {
525  deleteButton.setEnabled(false);
526  } else {
527  newButton.setEnabled(false);
528  changeButton.setEnabled(false);
529  }
530  } else if (jTable == studentTable) {
531  typeViewLabel.setText(viewDescriptionStudenten);
532 
533  if (roleType.equals(UserRole.Student)) {
534  newButton.setEnabled(false);
535  changeButton.setEnabled(false);
536  deleteButton.setEnabled(false);
537  }
538  }
539  }
540 
544  @Override
545  public void update(Observable arg0, final Object arg1) {
546  SwingUtilities.invokeLater(new Runnable() {
547  public void run() {
551  if (arg1 != null) {
556  if (((ResultContent) arg1).getListType() == Projekt.class) {
557  projekteData = ((ResultContent) arg1).getListContent();
558  projektTable.clearTable();
559  for (Object f : projekteData) {
569  Student studentB = ((Projekt) f).getStudent2Bean();
570  String studentBName = "";
571  if (studentB != null) {
572  studentBName = studentB.getName();
573  }
574 
575  Student studentC = ((Projekt) f).getStudent3Bean();
576  String studentCName = "";
577  if (studentC != null) {
578  studentCName = studentC.getName();
579  }
580 
581  projektTable.dtm.addRow(new Object[] {
582  ((Projekt) f).getTitel(),
583  ((Projekt) f).getBeschreibung(),
584  ((Projekt) f).getAnsprechpartnerBean()
585  .getName(),
586  ((Projekt) f).getStudent1Bean().getName(),
587  studentBName, studentCName,
588  ((Projekt) f).getStatus() });
589  }
590  }
591 
596  if (((ResultContent) arg1).getListType() == Ansprechpartner.class) {
597  ansprechpartnerData = ((ResultContent) arg1)
598  .getListContent();
599  ansprechpartnerTable.clearTable();
600  for (Object f : ansprechpartnerData) {
601  ansprechpartnerTable.dtm.addRow(new Object[] {
602  ((Ansprechpartner) f).getName(),
603  ((Ansprechpartner) f).getEmail(),
604  ((Ansprechpartner) f).getUnternehmenBean()
605  .getName() });
606  }
607  }
608 
613  if (((ResultContent) arg1).getListType() == Unternehmen.class) {
614  unternehmenData = ((ResultContent) arg1)
615  .getListContent();
616  unternehmenTable.clearTable();
617  for (Object f : unternehmenData) {
618  unternehmenTable.dtm
619  .addRow(new Object[] { ((Unternehmen) f)
620  .getName() });
621  }
622  }
623 
628  if (((ResultContent) arg1).getListType() == Student.class) {
629  studentenData = ((ResultContent) arg1).getListContent();
630  studentTable.clearTable();
631  for (Object f : studentenData) {
632  studentTable.dtm.addRow(new Object[] {
633  ((Student) f).getName(),
634  ((Student) f).getMat(),
635  ((Student) f).getEmail() });
636  }
637  }
638 
642  if (activeTable == projektTable) {
643  activeData = projekteData;
644  } else if (activeTable == ansprechpartnerTable) {
645  activeData = ansprechpartnerData;
646  } else if (activeTable == unternehmenTable) {
647  activeData = unternehmenData;
648  } else if (activeTable == studentTable) {
649  activeData = studentenData;
650  }
651  }
652 
653  // Aufruf der validate-Methode für Neuzeichnen notwendig!
654  validate();
655  repaint();
656  }
657  });
658  }
659 
673  private class securityClosing extends WindowAdapter {
674  public void windowClosing(WindowEvent e) {
675  int option = JOptionPane.showOptionDialog(MainFrame.this,
676  "Wollen Sie das Programm wirklich verlassen?",
677  "Sicherheitsabfrage", JOptionPane.YES_NO_OPTION,
678  JOptionPane.WARNING_MESSAGE, null, null, null);
679 
680  if (option == JOptionPane.YES_OPTION) {
681  try {
683  } catch (RemoteException e1) {
684  // TODO Auto-generated catch block
685  e1.printStackTrace();
686  }
687  System.exit(0);
688  } else {
689  // Abbruch
690  setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
691  }
692  }
693  }
694 }