4 import java.awt.FlowLayout;
5 import java.awt.HeadlessException;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.awt.event.ItemEvent;
9 import java.awt.event.KeyEvent;
10 import java.lang.reflect.Constructor;
11 import java.lang.reflect.InvocationTargetException;
12 import java.lang.reflect.Method;
13 import java.rmi.RemoteException;
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.Observable;
17 import java.util.Observer;
18 import java.util.regex.Matcher;
19 import java.util.regex.Pattern;
21 import javax.persistence.Column;
22 import javax.persistence.Entity;
23 import javax.persistence.metamodel.Attribute;
24 import javax.persistence.metamodel.ManagedType;
25 import javax.swing.JButton;
26 import javax.swing.JComboBox;
27 import javax.swing.JComponent;
28 import javax.swing.JDialog;
29 import javax.swing.JFrame;
30 import javax.swing.JOptionPane;
31 import javax.swing.JPanel;
32 import javax.swing.JTextField;
33 import javax.swing.KeyStroke;
34 import javax.swing.SwingUtilities;
36 import main.CustomItemListener;
37 import main.ProjektStatus;
38 import main.ResultContent;
41 import controller.Controller;
42 import databaseModel.Ansprechpartner;
43 import databaseModel.Projekt;
44 import databaseModel.Student;
45 import databaseModel.Unternehmen;
54 private static final long serialVersionUID = 1L;
69 private JButton okButton = null;
70 private JButton closeButton = null;
145 protected ArrayList<String>
errorList =
new ArrayList<String>();
167 okButton =
new JButton(
"Übernehmen");
169 okButton.addActionListener(
new ActionListener() {
171 public void actionPerformed(ActionEvent arg0) {
172 SwingUtilities.invokeLater(
new Runnable() {
185 closeButton =
new JButton(
"Abbrechen");
187 closeButton.addActionListener(
new ActionListener() {
189 public void actionPerformed(ActionEvent arg0) {
190 SwingUtilities.invokeLater(
new Runnable() {
204 getRootPane().registerKeyboardAction(
new ActionListener() {
205 public void actionPerformed(ActionEvent e) {
208 }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
209 JComponent.WHEN_IN_FOCUSED_WINDOW);
243 Column column = classType.getDeclaredField(columnName)
244 .getAnnotation(Column.class);
245 if (column != null) {
246 columnLength = column.length();
248 }
catch (NoSuchFieldException e) {
251 }
catch (SecurityException e) {
272 }
catch (RemoteException e2) {
274 e2.printStackTrace();
283 public void initialize(
final String label,
final Object projekt) {
294 public void update(Observable arg0,
final Object arg1) {
297 List<Object> listContent = ((
ResultContent) arg1).getListContent();
315 if (!emailField.getText().trim().equals(
"")) {
320 Pattern p = Pattern.compile(
".+@.+\\.[a-z]+");
321 Matcher m = p.matcher(emailField.getText().trim());
325 .add(
"Es wurde keine gültige E-Mail-Adresse eingegeben!");
338 if (!matField.getText().trim().equals(
"")) {
344 Pattern p = Pattern.compile(
"\\p{Digit}+");
345 Matcher m = p.matcher(matField.getText().trim());
349 .add(
"Das Matrikelnummernfeld darf nur Ziffern enthalten!");
375 boolean newMode, JComboBox comboBox, Object oldSelectedData,
376 boolean specialCase) {
390 Integer comboboxIndex = 0;
391 boolean found =
false;
392 comboBox.setSelectedIndex(-1);
393 comboBox.removeAllItems();
399 comboBox.addItem(
"");
402 Integer foundIndex = comboboxIndex;
407 for (Object a : listContent) {
413 Class classA = a.getClass();
414 Method methodClassAGetName = classA.getMethod(
"getName");
416 String resultClassAGetName = (String) methodClassAGetName
418 comboBox.addItem(resultClassAGetName);
425 if (oldSelectedData != null) {
426 Method methodClassAGetId = classA
429 Class classB = oldSelectedData.getClass();
430 Method methodClassBGetId = classB
433 int resultClassAGetId = (Integer) methodClassAGetId
435 int resultClassBGetId = (Integer) methodClassBGetId
436 .invoke(oldSelectedData);
438 if (resultClassAGetId == resultClassBGetId) {
439 foundIndex = comboboxIndex;
444 }
catch (IllegalAccessException e) {
447 }
catch (IllegalArgumentException e) {
450 }
catch (InvocationTargetException e) {
455 }
catch (NoSuchMethodException e) {
458 }
catch (SecurityException e) {
469 if (listContent.size() > 0) {
470 comboBox.setSelectedIndex(0);
477 comboBox.setSelectedIndex(foundIndex);
506 }
else if (listType ==
Projekt.class) {
510 }
else if (listType ==
Student.class) {
526 Object checkingClauseComponent) {
528 String checkingClause =
"";
530 if (checkingClauseComponent.getClass() == JTextField.class) {
531 checkingClause = ((JTextField) checkingClauseComponent).getText()
535 if (!checkingClause.equals(
"")) {
542 OK = !(existingRecords.size() > 0);
548 for (Object a : existingRecords) {
549 Class classA = a.getClass();
552 Method methodClassA = classA.getMethod(
"getId");
553 Method methodClassB = classB.getMethod(
"getId");
556 int resultClassA = (Integer) methodClassA
558 int resultClassB = (Integer) methodClassB
561 if (resultClassA != resultClassB) {
565 }
catch (IllegalAccessException e) {
568 }
catch (IllegalArgumentException e) {
571 }
catch (InvocationTargetException e) {
576 }
catch (NoSuchMethodException e) {
579 }
catch (SecurityException e) {
585 }
catch (RemoteException e) {
591 errorList.add(
"Dieser Datensatz ist bereits vorhanden!");
596 if (checkingClauseComponent.getClass() == JTextField.class) {
597 ((JTextField) checkingClauseComponent)
622 List<Object> listContent) {
624 boolean existingFurthermore =
false;
626 for (Object a : listContent) {
627 Class classA = a.getClass();
630 Method methodClassA = classA.getMethod(
"getId");
631 Method methodClassB = classB.getMethod(
"getId");
634 int resultClassA = (Integer) methodClassA.invoke(a);
635 int resultClassB = (Integer) methodClassB
638 if (resultClassA == resultClassB) {
639 existingFurthermore =
true;
642 }
catch (IllegalAccessException e) {
645 }
catch (IllegalArgumentException e) {
648 }
catch (InvocationTargetException e) {
653 }
catch (NoSuchMethodException e) {
656 }
catch (SecurityException e) {
662 if (!existingFurthermore) {
664 .add(
"Der aktuell bearbeitete Datensatz wurde direkt oder einer seiner referenzierten Datensätze gelöscht, wodurch er automatisch mitgelöscht wurde!");
666 .add(
"Stichwort \"kaskadierendes Löschen von Detaildatensätzen!\"!");
668 .add(
"Das aktive Fenster wird automatisch geschlossen!");
684 private String getErrorString() {
688 result += System.getProperty(
"line.separator");
697 if (errorList.size() > 0) {
698 JOptionPane.showMessageDialog(null, getErrorString(),
"Fehler",
699 JOptionPane.ERROR_MESSAGE);