package gui.image;
import gui.intro.MainMenue_GUI;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import models.Image;
import models.person;
import util.GuiManager;
@SuppressWarnings("serial")
public class CreateImageAllgemein_GUI extends JInternalFrame {
private final JPanel contentPanel = new JPanel();
private JTextField Vorname;
private JTextField Nachname;
private JTextField Hochschule;
private JTextField EMail;
private JTextField imagename;
private JTextArea textAreadesc;
private final int MAX_DESCRIPTION_LENGTH = 254;
private JTextArea txtrGebenSieBitte_1;
public static final String HELP_MESSAGE = "
"
+ "Hier legen Sie zunächst ein Image an.
"
+ "Dieses stellt die Grundlage Ihres Labors dar. Das Image ist der \"PC\", mit dem die Studenten arbeiten.
"
+ "Installieren Sie alle benötigte Software und laden Sie am Ende dieses Prozesses die .vmdk-Datei hoch, um sie zu verwenden.
"
+ "Um das Image richtig zuordnen zu können, werden hier einige grundlegende Informationen benötigt.
"
+ "Geben Sie daher bitte einen allgemeinen Namen, sowie eine genauere Beschreibung ihres Images (Labors) an.
"
+ "
";
/**
* Create the dialog.
*/
public CreateImageAllgemein_GUI() {
addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameActivated(InternalFrameEvent arg0) {
imagename.requestFocusInWindow();
}
});
// Verhindert das Vergroessern des Fensters
setResizable(false);
// Setzt den Titel
setTitle("bwLehrpool Suite - Image erzeugen - " + person.verantwortlicher.getUserID());
// Zentriert das Fenster
setBounds(0, 0, 603, 722);
getContentPane().setLayout(null);
{
JPanel panel = new JPanel();
panel.setBackground(SystemColor.menu);
panel.setBounds(10, 11, 577, 57);
getContentPane().add(panel);
panel.setLayout(null);
{
JLabel lblNewLabel = new JLabel("Eingabe Ihrer Daten");
lblNewLabel.setBounds(10, 11, 509, 22);
panel.add(lblNewLabel);
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 18));
}
JTextPane txtpnBitteWhlenSie = new JTextPane();
txtpnBitteWhlenSie.setEditable(false);
txtpnBitteWhlenSie.setBackground(SystemColor.menu);
txtpnBitteWhlenSie
.setText("Geben Sie hier bitte einen sprechenden Imagenamen sowie Ihre Kontaktdaten an");
txtpnBitteWhlenSie.setBounds(10, 36, 509, 32);
panel.add(txtpnBitteWhlenSie);
}
contentPanel.setBounds(10, 85, 577, 493);
contentPanel.setBackground(SystemColor.menu);
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel);
contentPanel.setLayout(null);
JPanel panel_1 = new JPanel();
panel_1.setBackground(SystemColor.menu);
panel_1.setBorder(new TitledBorder(null, "Informationen zum Image", TitledBorder.LEADING,
TitledBorder.TOP, null, null));
panel_1.setBounds(10, 66, 557, 369);
contentPanel.add(panel_1);
panel_1.setLayout(null);
JLabel label = new JLabel("Vorname: *");
label.setBackground(SystemColor.menu);
label.setBounds(10, 245, 125, 20);
panel_1.add(label);
Vorname = new JTextField();
Vorname.setEnabled(false);
Vorname.setEditable(false);
Vorname.setBackground(Color.WHITE);
Vorname.setText(person.verantwortlicher.getVorname());
Vorname.setColumns(10);
Vorname.setBounds(145, 245, 350, 20);
panel_1.add(Vorname);
JLabel label_7 = new JLabel("Nachname: *");
label_7.setBackground(SystemColor.menu);
label_7.setBounds(10, 276, 125, 20);
panel_1.add(label_7);
Nachname = new JTextField();
Nachname.setEnabled(false);
Nachname.setEditable(false);
Nachname.setBackground(Color.WHITE);
Nachname.setText(person.verantwortlicher.getName());
Nachname.setColumns(10);
Nachname.setBounds(145, 276, 350, 20);
panel_1.add(Nachname);
JLabel label_8 = new JLabel("Hochschule: *");
label_8.setBackground(SystemColor.menu);
label_8.setBounds(10, 307, 125, 20);
panel_1.add(label_8);
Hochschule = new JTextField();
Hochschule.setEnabled(false);
Hochschule.setEditable(false);
Hochschule.setBackground(Color.WHITE);
Hochschule.setText(person.verantwortlicher.getHochschule());
Hochschule.setColumns(10);
Hochschule.setBounds(145, 307, 350, 20);
panel_1.add(Hochschule);
JLabel label_9 = new JLabel("E-Mail: *");
label_9.setBackground(SystemColor.menu);
label_9.setBounds(10, 338, 125, 20);
panel_1.add(label_9);
EMail = new JTextField();
EMail.setEnabled(false);
EMail.setEditable(false);
EMail.setBackground(Color.WHITE);
EMail.setText(person.verantwortlicher.getEMail());
EMail.setColumns(10);
EMail.setBounds(145, 338, 350, 20);
panel_1.add(EMail);
JLabel lblImagename = new JLabel("Imagename: *");
lblImagename.setBackground(SystemColor.menu);
lblImagename.setBounds(10, 23, 125, 20);
panel_1.add(lblImagename);
imagename = new JTextField();
imagename.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
textAreadesc.requestFocusInWindow();
}
});
imagename.setBackground(Color.WHITE);
imagename.setText((String) null);
imagename.setColumns(10);
imagename.setBounds(145, 23, 350, 20);
// null am Anfang, aber speichert die Eingabe, wenn man zurueck kommt zur Seite
imagename.setText(Image.Imagename);
panel_1.add(imagename);
JTextArea txtrGebenSieBitte = new JTextArea();
txtrGebenSieBitte.setEditable(false);
txtrGebenSieBitte.setFocusable(false);
txtrGebenSieBitte.setBackground(SystemColor.menu);
txtrGebenSieBitte.setLineWrap(true);
txtrGebenSieBitte.setFont(new Font("Tahoma", Font.PLAIN, 12));
txtrGebenSieBitte
.setText("Geben Sie bitte einen sprechenden Namen für das Image an.\r\nDieser soll jedoch recht allgemein gehalten werden.\r\nBeispiel: \"Programmieren\", nicht \"Java Wintersemester bei...\"");
txtrGebenSieBitte.setBounds(145, 48, 350, 49);
panel_1.add(txtrGebenSieBitte);
JLabel lblBeschreibung = new JLabel("Beschreibung: *");
lblBeschreibung.setBackground(SystemColor.menu);
lblBeschreibung.setBounds(10, 110, 125, 20);
panel_1.add(lblBeschreibung);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(145, 110, 350, 60);
panel_1.add(scrollPane);
textAreadesc = new JTextArea();
textAreadesc.setFont(new Font("Tahoma", Font.PLAIN, 11));
textAreadesc.setLineWrap(true);
textAreadesc.setText((String) null);
// null am Anfang, aber speichert die Eingabe, wenn man zurueck kommt zur Seite
textAreadesc.setText(Image.Desc);
scrollPane.setViewportView(textAreadesc);
txtrGebenSieBitte_1 = new JTextArea();
txtrGebenSieBitte_1
.setText("Geben Sie bitte eine Beschreibung für das Image an.\r\nDiese soll jedoch recht spezifisch gehalten werden.\r\nBeispiel: \"Java-Entwicklung mit Eclipse und MySQL\"");
txtrGebenSieBitte_1.setLineWrap(true);
txtrGebenSieBitte_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
txtrGebenSieBitte_1.setEditable(false);
txtrGebenSieBitte_1.setBackground(SystemColor.menu);
txtrGebenSieBitte_1.setBounds(145, 177, 350, 49);
panel_1.add(txtrGebenSieBitte_1);
JPanel panel = new JPanel();
panel.setBounds(10, 402, 577, 33);
contentPanel.add(panel);
panel.setLayout(null);
panel.setBorder(new EmptyBorder(5, 5, 5, 5));
panel.setBackground(SystemColor.menu);
JLabel lblPflichtfelder = new JLabel("* Pflichtfelder");
lblPflichtfelder.setBounds(10, 442, 136, 14);
contentPanel.add(lblPflichtfelder);
JLabel lblHauptmen = new JLabel("Hauptmenü");
lblHauptmen.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
// oeffnet das Hauptmenue
GuiManager.show(new MainMenue_GUI());
}
});
lblHauptmen.setForeground(Color.BLUE);
lblHauptmen.setBounds(10, 11, 61, 14);
contentPanel.add(lblHauptmen);
JLabel label_1 = new JLabel(">");
label_1.setBounds(69, 11, 13, 14);
contentPanel.add(label_1);
JLabel lblVlimage = new JLabel("Image");
lblVlimage.setForeground(Color.BLUE);
lblVlimage.setBounds(81, 11, 45, 14);
contentPanel.add(lblVlimage);
JLabel label_2 = new JLabel(">");
label_2.setBounds(133, 11, 13, 14);
contentPanel.add(label_2);
JLabel lblNewLabel_1 = new JLabel("Neu");
lblNewLabel_1.setBounds(146, 11, 155, 14);
contentPanel.add(lblNewLabel_1);
{
JPanel buttonPane = new JPanel();
buttonPane.setBounds(0, 640, 597, 33);
buttonPane.setBackground(SystemColor.menu);
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane);
{
JButton backButton = new JButton("Zurück");
backButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Image.Imagename = imagename.getText().trim();
Image.Desc = textAreadesc.getText().trim();
GuiManager.show(new MainMenue_GUI());
}
});
backButton.setActionCommand("Cancel");
buttonPane.add(backButton);
}
{
JButton continueButton = new JButton("Weiter");
continueButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Prüfe Eingabe
if (validateContent()) {
// Schreibt die Daten in das Model
Image.Imagename = imagename.getText().trim();
Image.Desc = textAreadesc.getText().trim();
// Zeige nächsten Schritt an
GuiManager.show(new CreateImageTechnisch_GUI());
}
}
});
continueButton.setActionCommand("OK");
buttonPane.add(continueButton);
getRootPane().setDefaultButton(continueButton);
}
}
JSeparator separator = new JSeparator();
separator.setBounds(0, 78, 597, 2);
getContentPane().add(separator);
JSeparator separator_1 = new JSeparator();
separator_1.setBounds(0, 627, 597, 2);
getContentPane().add(separator_1);
}// end main
/**
* Checks if the fields of the form have content,
* if the image name has only alpha-numerical characters and
* if the image description has less than 254 characters.
*
* @return true if all fields are set, false otherwise.
*/
private boolean validateContent() {
// check if any text field is empty
if (imagename.getText().trim().isEmpty() || textAreadesc.getText().trim().isEmpty()
|| Vorname.getText().trim().isEmpty() || Nachname.getText().trim().isEmpty()
|| Hochschule.getText().trim().isEmpty() || EMail.getText().trim().isEmpty()) {
// missing some fields
//LOGGER.info("Form has missing fields, warning user.");
JOptionPane.showMessageDialog(null, "Bitte geben Sie alle notwendigen Daten an!",
"Daten unvollständig", JOptionPane.ERROR_MESSAGE);
return false;
}
// only allow letter from alphabet and numbers for the image name and certain special chars
// x2B= "+" x2C="-" x3A=":" x5F="_"
//
if (!imagename.getText().trim().trim().matches("[a-zA-Z0-9\\x2B\\x2D\\x3A\\x5F]+")) {
//LOGGER.info("Image name not alpha-numerical, warn user.");
JOptionPane.showMessageDialog(null,
"Der Imagename darf nur aus Buchstaben, Zahlen und den Zeichen + - _ : bestehen.",
"Unerlaubte Zeichen", JOptionPane.ERROR_MESSAGE);
return false;
}
// max length for image description is 254 chars
if (textAreadesc.getText().trim().length() >= MAX_DESCRIPTION_LENGTH) {
JOptionPane.showMessageDialog(null,
"Die Beschreibung darf max 254 Zeichen enthalten. Aktuell enthält sie "
+ textAreadesc.getText().trim().length() + ".", "Beschreibung zu umfangreich",
JOptionPane.ERROR_MESSAGE);
return false;
}
// we passed all tests, return true!
return true;
}
}// end Class