Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Gruppe 4: Usmanov, Reschke, Vogel
- import java.io.*;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.util.ArrayList;
- import java.util.Optional;
- import javafx.application.Application;
- import javafx.event.ActionEvent;
- import javafx.geometry.Insets;
- import javafx.geometry.Pos;
- import javafx.scene.Scene;
- import javafx.scene.control.*;
- import javafx.scene.control.Alert.AlertType;
- import javafx.scene.layout.GridPane;
- import javafx.scene.layout.HBox;
- import javafx.scene.layout.VBox;
- import javafx.scene.text.Font;
- import javafx.scene.text.FontWeight;
- import javafx.scene.text.Text;
- import javafx.stage.Stage;
- /**
- * This class extends Application and has several functions that focus on the
- * Graphical User Interface. It displays a menu to the user in which he
- * can choose what action to take next. The class contains an OutputStream
- * {@link #outStrClient} and an InputStream {@link #inStrClient} to
- * create a connection to 'Server'.
- *
- * @see Server
- * @see ServerGUI
- * @see Controller
- * @see Person
- * @see Database
- * @see DatabaseSQL
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class Client extends Application {
- private static Socket cSocket;
- private static OutputStream outStrClient;
- private static InputStream inStrClient;
- private static int serverPort;
- private static String serverIP;
- private static int persNr = 0;
- private static String[] persDatenCheck = {
- "[A-ZÄÖÜ][a-zäöüß\\-\\s]+",
- "[A-ZÄÖÜ][a-zäöüß\\-\\s]+",
- "Herr|Frau|AttackHelicopter",
- "[A-ZÄÖÜ][a-zäöüß\\-\\s\\.]+[1-9][0-9]*[a-z]?",
- "[0-9]{5}",
- "[A-Za-zäöüÄÖÜß\\s\\-]{3,40}",
- "[0-9\\.\\-]*",
- "[0-9\\.\\-]*",
- "[^;]{0,300}" };
- /**
- * This is the Client's {@link #main(String[])}-function
- * which launches the {@link #start(Stage)}-function.
- *
- * @param args command line arguments.
- */
- public static void main(String[] args) {
- launch(args);
- }
- /**
- * This function displays most of the Client's GUI
- * and also calls other functions for alerts and the
- * login prompt.
- *
- * @param mainStage primary Stage of the function
- */
- public void start(Stage mainStage) {
- Alert alert = new Alert(AlertType.ERROR);
- alert.setTitle("Adreli-Adressverwaltung");
- alert.setHeaderText("Adreli-Benachrichtigung");
- login();
- try {
- cSocket = new Socket(serverIP, serverPort);
- outStrClient = cSocket.getOutputStream();
- inStrClient = cSocket.getInputStream();
- } catch (UnknownHostException uhe) {
- System.exit(1);
- } catch (IOException ioe) {
- System.exit(1);
- }
- mainStage.setTitle("Adreli-Adressverwaltung");
- VBox vbox = new VBox();
- vbox.setAlignment(Pos.TOP_LEFT);
- GridPane grid = new GridPane();
- grid.setAlignment(Pos.CENTER);
- grid.setHgap(10);
- grid.setVgap(10);
- grid.setPadding(new Insets(20, 20, 20, 20));
- MenuBar menuBar = new MenuBar();
- Menu menuApp = new Menu("Anwendung");
- MenuItem appPerson = new MenuItem("Person hinzufuegen");
- appPerson.setOnAction((ActionEvent ae0) -> {
- grid.getChildren().clear();
- Text sceneTitle = new Text("Geben Sie die Personendaten ein!");
- sceneTitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
- grid.add(sceneTitle, 0, 0, 2, 1);
- for (int i = 0; i < Person.persAttributes.length; i++) {
- grid.add(new Label(Person.persAttributes[i] + ":"), 0, (i+1));
- }
- TextField nName = new TextField();
- grid.add(nName, 1, 1);
- TextField vName = new TextField();
- grid.add(vName, 1, 2);
- TextField anrede = new TextField();
- grid.add(anrede, 1, 3);
- TextField strasse = new TextField();
- grid.add(strasse, 1, 4);
- TextField plz = new TextField();
- grid.add(plz, 1, 5);
- TextField ort = new TextField();
- grid.add(ort, 1, 6);
- TextField telefon = new TextField();
- grid.add(telefon, 1, 7);
- TextField fax = new TextField();
- grid.add(fax, 1, 8);
- TextField bemerkung = new TextField();
- grid.add(bemerkung, 1, 9);
- Button btn = new Button("Hinzufuegen");
- btn.setOnAction((ActionEvent ae1) -> {
- String[] attr = {nName.getText(), vName.getText(),
- anrede.getText(), strasse.getText(),
- plz.getText(), ort.getText(),
- telefon.getText(), fax.getText(),
- bemerkung.getText()};
- for (int i = 0; i < attr.length; i++) {
- if (attr[i].isEmpty()) {
- alert.setAlertType(AlertType.ERROR);
- alert.setContentText("Bitte alle Felder ausfüllen!");
- alert.showAndWait(); return;
- } else if (attr[i].matches(persDatenCheck[i]) == false) {
- alert.setAlertType(AlertType.ERROR);
- alert.setContentText(Person.persAttributes[i] +
- " bitte korrekt eingeben!");
- alert.showAndWait(); return;
- }
- }
- alert.setAlertType(AlertType.CONFIRMATION);
- alert.setContentText("Sind die Daten korrekt?");
- Optional<ButtonType> result = alert.showAndWait();
- if (result.get() == ButtonType.OK) {
- sendCommand(new SendCommand(1, attr));
- alert.setAlertType(AlertType.CONFIRMATION);
- alert.setContentText("Noch eine Person aufnehmen?");
- result = alert.showAndWait();
- if (result.get() == ButtonType.OK) {
- nName.clear(); vName.clear(); anrede.clear();
- strasse.clear(); plz.clear(); ort.clear();
- telefon.clear(); fax.clear(); bemerkung.clear();
- } else {
- grid.getChildren().clear();
- }
- }
- });
- HBox hbBtn = new HBox(10);
- hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
- hbBtn.getChildren().add(btn);
- grid.add(hbBtn, 1, 10);
- });
- MenuItem appStop = new MenuItem("Anwendung beenden");
- appStop.setOnAction((ActionEvent ae) -> {
- menuHandler(alert, 7, "Die Anwendung wird beendet!");
- try {
- cSocket.close();
- } catch (IOException ioe) {
- System.exit(1);
- }
- System.exit(0);
- });
- Menu menuCache = new Menu("Cache");
- MenuItem cList = new MenuItem("Cache auflisten");
- cList.setOnAction((ActionEvent ae0) -> {
- grid.getChildren().clear();
- sendCommand(new SendCommand(2));
- try {
- ObjectInputStream ois = new ObjectInputStream(inStrClient);
- @SuppressWarnings("unchecked")
- ArrayList<Person> persList = (ArrayList<Person>)
- ois.readObject();
- GridPane subGrid = new GridPane();
- subGrid.setAlignment(Pos.CENTER);
- subGrid.setHgap(10);
- subGrid.setVgap(10);
- subGrid.setPadding(new Insets(10, 10, 10, 10));
- Text sceneTitle = new Text();
- sceneTitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
- sceneTitle.setText("Benutzen Sie die Navigationsbuttons!");
- grid.add(sceneTitle, 0, 0, 2, 1);
- Button next = new Button("Weiter");
- next.setOnAction((ActionEvent ae1) -> {
- persNr++;
- if (persNr > persList.size()) {
- alert.setAlertType(AlertType.INFORMATION);
- alert.setContentText("Die Auflistung wird beendet.");
- alert.showAndWait();
- persNr = 0;
- grid.getChildren().clear();
- } else {
- navigation(subGrid, sceneTitle, persList);
- }
- });
- Button prev = new Button("Zurueck");
- prev.setOnAction((ActionEvent ae2) -> {
- persNr--;
- if (persNr < 1) {
- subGrid.getChildren().clear();
- sceneTitle.setText("Benutzen Sie die "
- + "Navigationsbuttons!");
- persNr = 0;
- } else {
- navigation(subGrid, sceneTitle, persList);
- }
- });
- HBox hbBtn = new HBox(10);
- hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
- hbBtn.getChildren().addAll(prev, next);
- grid.add(hbBtn, 1, 10);
- grid.add(subGrid, 0, 1);
- } catch (IOException ioe) {
- System.exit(1);
- } catch (ClassNotFoundException cnfe) {
- System.exit(1);
- }
- });
- MenuItem cSave = new MenuItem("Cache in Datenbank speichern");
- cSave.setOnAction((ActionEvent ae) -> {
- menuHandler(alert, 3, "Personendatensaetze werden gespeichert!");
- });
- MenuItem cLoad = new MenuItem("Aus Datenbank laden");
- cLoad.setOnAction((ActionEvent ae) -> {
- menuHandler(alert, 4, "Personendatensaetze werden geladen!");
- });
- MenuItem cSort = new MenuItem("Cache sortieren");
- cSort.setOnAction((ActionEvent ae) -> {
- menuHandler(alert, 5, "Personendatensaetze werden sortiert!");
- });
- Menu menuFile = new Menu("Datenbank");
- MenuItem fDelete = new MenuItem("Datei löschen");
- fDelete.setOnAction((ActionEvent ae) -> {
- menuHandler(alert, 6, "Die Datei wird geloescht!");
- });
- menuApp.getItems().addAll(appPerson, appStop);
- menuCache.getItems().addAll(cList, cSave, cLoad, cSort);
- menuFile.getItems().add(fDelete);
- menuBar.getMenus().addAll(menuApp, menuCache, menuFile);
- Scene scene = new Scene(vbox, 600, 550);
- ((VBox) scene.getRoot()).getChildren().add(menuBar);
- vbox.getChildren().add(grid);
- mainStage.setScene(scene);
- mainStage.show();
- }
- /**
- * This function creates 2 TextInputDialogs to receive
- * the server's port and IP from the user.
- */
- public static void login() {
- TextInputDialog dialog = new TextInputDialog();
- dialog.setTitle("Adreli-Adressverwaltung");
- dialog.setHeaderText("Geben Sie den Server-Port ein!");
- dialog.setContentText("Server-Port:");
- Optional<String> result = dialog.showAndWait();
- if (result.isPresent()) {
- serverPort = Integer.parseInt(result.get());
- dialog.setHeaderText("Geben Sie die Server-IP ein!");
- dialog.setContentText("Server-IP:");
- result = dialog.showAndWait();
- if (result.isPresent()) {
- serverIP = result.get(); return;
- } else {
- System.exit(0);
- }
- } else {
- System.exit(0);
- }
- }
- /**
- * This function supports the cache listing part of the
- * {@link #start(Stage)}-function, it helps navigate through
- * the person saved in the cache.
- *
- * @param grid simple layout.
- * @param text scene title for the window.
- * @param list ArrayList of type Person which is being navigated through.
- */
- public static void navigation(GridPane grid, Text text,
- ArrayList<Person> list) {
- grid.getChildren().clear();
- text.setText("Satzinhalt des " + persNr + ". Datensatzes "
- + "(Person " + persNr + "/" + list.size() + ")");
- String[] attr = {list.get(persNr-1).name, list.get(persNr-1).vorname,
- list.get(persNr-1).anrede, list.get(persNr-1).strasse,
- list.get(persNr-1).plz, list.get(persNr-1).ort,
- list.get(persNr-1).telefon, list.get(persNr-1).fax,
- list.get(persNr-1).bemerkung};
- for (int i = 0; i < Person.persAttributes.length; i++) {
- grid.add(new Text(Person.persAttributes[i] + ":"), 0, (i+1));
- grid.add(new Text(attr[i]), 1, (i+1));
- }
- }
- /**
- * This function is used in several EventHandlers from the
- * {@link #start(Stage)}-function.
- *
- * @param alert Alert object passed from {@link #start(Stage)}.
- * @param action gets sent via {@link #sendCommand(SendCommand)}.
- * @param text contentText of the alert object.
- */
- public static void menuHandler(Alert alert, int action, String text) {
- sendCommand(new SendCommand(action));
- alert.setAlertType(AlertType.INFORMATION);
- alert.setContentText(text);
- alert.showAndWait();
- }
- /**
- * This function receives an object of SendCommand. It then sends
- * that object over to 'Server' via an ObjectOutputStream.
- *
- * @param sC Object of SendCommand.
- */
- public static void sendCommand(SendCommand sC) {
- try {
- ObjectOutputStream oos = new ObjectOutputStream(outStrClient);
- oos.flush();
- oos.writeObject(sC);
- } catch (IOException ioe) {
- System.exit(1);
- }
- }
- }
- /**
- * This class is meant to be used as an object containing input
- * and attribute data of 'Client' in {@link #inputSend} and
- * {@link #attrSend}.It is sent from 'Client' to 'Server' via
- * ObjectOutputStreams in various functions in 'Client'.
- *
- * @see Client
- * @see Server
- * @see ServerGUI
- * @see Controller
- * @see Person
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- class SendCommand implements Serializable {
- int inputSend;
- String[] attrSend;
- public SendCommand(int input) {
- this.inputSend = input;
- }
- public SendCommand(int input, String[] attr) {
- this.inputSend = input;
- this.attrSend = attr;
- }
- }
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import javafx.beans.property.IntegerProperty;
- import javafx.beans.property.SimpleIntegerProperty;
- /**
- * This class extends Thread and
- * initializes a server instance of the class 'Server'. The
- * server socket gets initialized and waits for a client socket,
- * then starts the server once a client has logged in.
- *
- * @see Client
- * @see Server
- * @see ServerGUI
- * @see Person
- * @see Database
- * @see DatabaseSQL
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class Controller extends Thread {
- private int port;
- private ServerSocket sSocket;
- private Database database;
- public IntegerProperty numConnections;
- public Controller(int port, Database database) {
- this.port = port;
- this.database = database;
- this.numConnections = new SimpleIntegerProperty(0);
- }
- /**
- * This is the run()-function for classes that
- * implement Thread. It initializes the server socket
- * with the specified port and loops endlessly to initialize
- * client Sockets and document clients logging on and off.
- */
- public void run() {
- try {
- sSocket = new ServerSocket(port);
- System.out.println("Server is online.");
- while (true) {
- Socket cSocket = sSocket.accept();
- Server server = new Server(cSocket.getOutputStream(),
- cSocket.getInputStream(),
- cSocket.getInetAddress(), database);
- server.connected.addListener((observable,
- oldstatus, newstatus) -> {
- if (newstatus == true) {
- numConnections.set(numConnections.get() + 1);
- }
- if (newstatus == false) {
- numConnections.set(numConnections.get() - 1);
- }
- });
- server.start();
- }
- } catch (IOException ioe) {
- System.out.println(ioe.getMessage());
- }
- }
- /**
- * This function closes the server socket.
- */
- public void closeSocket() {
- try {
- numConnections.set(0);
- sSocket.close();
- } catch (IOException ioe) {
- System.out.println(ioe.getMessage());
- }
- }
- }
- import java.io.*;
- import java.net.InetAddress;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import javafx.beans.property.BooleanProperty;
- import javafx.beans.property.SimpleBooleanProperty;
- /**
- * This class extends Thread and uses an object of Database which has
- * several functions that focus on data storage (save, load and delete).
- * The cache is representend by {@link #persList}. It also contains the
- * Output/Inputstreams {@link #outStrServer} and {@link #inStrServer}
- * to create a connection with 'Client'.
- *
- * @see Client
- * @see ServerGUI
- * @see Controller
- * @see Person
- * @see Database
- * @see DatabaseSQL
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class Server extends Thread {
- private final String FILE_PROTOCOL = "adrelilog.txt";
- private Database database;
- private InetAddress clientIP;
- private OutputStream outStrServer;
- private InputStream inStrServer;
- private List<Person> persList = new ArrayList<Person>();
- public BooleanProperty connected;
- public Server(OutputStream outStr, InputStream inStr,
- InetAddress clientIP, Database database) {
- this.clientIP = clientIP;
- this.outStrServer = outStr;
- this.inStrServer = inStr;
- this.database = database;
- connected = new SimpleBooleanProperty();
- }
- /**
- * This is the run()-function for classes that
- * implement Thread. It loops through a switch-case and waits
- * for 'Client' to send it an object of 'SendCommand'.
- * This object contains an integer that tells the switch-case what
- * action to take aswell as a String array containing attributes
- * for {@link #persList}.
- */
- public void run() {
- try {
- connected.set(true);
- while (true) {
- ObjectInputStream ois = new ObjectInputStream(inStrServer);
- SendCommand sC = (SendCommand) ois.readObject();
- switch (sC.inputSend) {
- case 1:
- persList.add(new Person(sC.attrSend));
- String logAdd = new String("Person added to cache (");
- for (int i = 0; i < sC.attrSend.length; i++) {
- logAdd = logAdd + sC.attrSend[i] + ";";
- }
- log(logAdd + ")");
- break;
- case 2:
- sendPersList();
- log("Cache sent");
- break;
- case 3:
- database.saveToDB(persList);
- log("Cache saved to database");
- break;
- case 4:
- database.loadFromDB(persList);
- log("Loaded database to cache");
- break;
- case 5:
- Collections.sort(persList);
- log("Cache sorted");
- break;
- case 6:
- database.deleteDB();
- log("Database deleted");
- break;
- case 7:
- log("Connection closed");
- connected.set(false);
- return;
- default: break;
- }
- }
- } catch (IOException ioe) {
- System.exit(1);
- } catch (ClassNotFoundException cnfe) {
- System.exit(1);
- }
- }
- /**
- * Logs the Server's activity in CSV-format in a file called
- * "adrelilog.txt" and prints it out on the console aswell.
- * The log is formatted like this:
- * "yyyy-MM-dd HH:mm:ss;USER_IP;ACTION_TAKEN".
- *
- * @param action Contains the action taken that's printed in the log.
- */
- public void log(String action) {
- Date date = new Date();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- try {
- File log = new File(FILE_PROTOCOL);
- FileWriter fw = new FileWriter(log, true);
- PrintWriter pw = new PrintWriter(fw);
- pw.println(sdf.format(date) + ";" + clientIP + ";" + action + ";");
- pw.close();
- } catch (IOException ioe) {
- System.out.println(ioe.getMessage());
- }
- System.out.println(sdf.format(date) + "; " + clientIP + "; " + action);
- }
- /**
- * Sends {@link #persList} via a local ObjectOutputStream
- * to 'Client'.
- */
- public void sendPersList() {
- try {
- ObjectOutputStream oos = new ObjectOutputStream(outStrServer);
- oos.flush();
- oos.writeObject(persList);
- } catch (IOException ioe) {
- System.out.println(ioe.getMessage());
- }
- }
- }
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Optional;
- import javafx.application.Application;
- import javafx.event.ActionEvent;
- import javafx.geometry.Insets;
- import javafx.geometry.Pos;
- import javafx.scene.Scene;
- import javafx.scene.control.Alert;
- import javafx.scene.control.Alert.AlertType;
- import javafx.scene.control.Button;
- import javafx.scene.control.ButtonType;
- import javafx.scene.control.Label;
- import javafx.scene.control.Menu;
- import javafx.scene.control.MenuBar;
- import javafx.scene.control.MenuItem;
- import javafx.scene.control.TextField;
- import javafx.scene.layout.GridPane;
- import javafx.scene.layout.HBox;
- import javafx.scene.layout.VBox;
- import javafx.scene.text.Text;
- import javafx.stage.FileChooser;
- import javafx.stage.Stage;
- /**
- * This class extends Application and contains the server's
- * entire GUI.
- *
- * @see Client
- * @see Server
- * @see Controller
- * @see Person
- * @see Database
- * @see DatabaseSQL
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class ServerGUI extends Application {
- Controller server;
- final String CSVFILE = "adrelibase.txt";
- /**
- * This is the Client's {@link #main(String[])}-function
- * which launches the {@link #start(Stage)}-function.
- *
- * @param args command line arguments.
- */
- public static void main(String[] args) {
- launch(args);
- }
- /**
- * This function displays all of the Server's GUI.
- */
- public void start(Stage mainStage) {
- mainStage.setTitle("Adreli-Server");
- Alert error = new Alert(AlertType.ERROR);
- error.setTitle("Adreli-Server");
- error.setHeaderText("Adreli-Benachrichtigung");
- VBox vbox = new VBox();
- vbox.setAlignment(Pos.TOP_LEFT);
- GridPane grid = new GridPane();
- grid.setAlignment(Pos.CENTER);
- grid.setHgap(10);
- grid.setVgap(10);
- grid.setPadding(new Insets(20, 20, 20, 20));
- Text conText = new Text("Anzahl der aktiven Verbindungen:");
- Text connections = new Text();
- MenuBar menuBar = new MenuBar();
- Menu menuServer = new Menu("Server");
- MenuItem sStart = new MenuItem("Server starten");
- sStart.setOnAction((ActionEvent ae0) -> {
- Text sceneTitle = new Text("Stellen Sie den Serverport ein!");
- grid.add(sceneTitle, 0, 0, 2, 1);
- Label portName = new Label("Port:");
- grid.add(portName, 0, 1);
- TextField port = new TextField();
- grid.add(port, 1, 1);
- Button portBtn = new Button("Portwert setzen");
- portBtn.setOnAction((ActionEvent ae1) -> {
- if (!port.getText().isEmpty()) {
- Alert confirmation = new Alert(AlertType.CONFIRMATION);
- confirmation.setTitle("Adreli-Server");
- confirmation.setHeaderText("Adreli-Benachrichtigung");
- confirmation.setContentText(
- "Wählen Sie bitte die Speicherart aus.");
- ButtonType buttonSQL = new ButtonType("MySQL");
- ButtonType buttonCSV = new ButtonType("CSV-Datei");
- confirmation.getButtonTypes().setAll(buttonSQL, buttonCSV);
- Optional<ButtonType> result = confirmation.showAndWait();
- if (result.get() == buttonSQL) {
- server = new Controller(
- Integer.parseInt(port.getText()),
- new DatabaseSQL());
- } else if (result.get() == buttonCSV) {
- Alert information = new Alert(AlertType.INFORMATION);
- information.setAlertType(AlertType.INFORMATION);
- information.setContentText("Waehlen Sie bitte in "
- + "die zu speichernde Datei aus");
- information.showAndWait();
- FileChooser fC = new FileChooser();
- fC.setTitle("Wählen Sie in die "
- + "zu speichernde Datei aus");
- fC.getExtensionFilters().addAll(
- new FileChooser.ExtensionFilter(
- "Alle Dateien", "*.*"),
- new FileChooser.ExtensionFilter(
- "Textdateien", "*.txt", "*.csv"),
- new FileChooser.ExtensionFilter(
- "SQL-Dateien", "*.sql"));
- server = new Controller(
- Integer.parseInt(port.getText()),
- new DatabaseCSV(fC.showOpenDialog(mainStage)));
- }
- connections.textProperty().
- bind(server.numConnections.asString());
- server.start();
- sStart.setDisable(true);
- grid.getChildren().clear();
- grid.add(conText, 0, 1);
- grid.add(connections, 1, 1);
- } else {
- Alert noPort = new Alert(AlertType.ERROR);
- noPort.setContentText("Geben Sie bitte einen Port ein!");
- noPort.showAndWait();
- }
- });
- HBox hbBtn = new HBox(10);
- hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
- hbBtn.getChildren().add(portBtn);
- grid.add(hbBtn, 1, 2);
- });
- MenuItem sStop = new MenuItem("Server herunterfahren");
- sStop.setOnAction((ActionEvent ae) -> {
- Alert stop = new Alert(AlertType.INFORMATION);
- stop.setContentText("Der Server wird heruntergefahren!");
- stop.showAndWait();
- server.closeSocket();
- sStart.setDisable(false);
- grid.getChildren().clear();
- });
- menuServer.getItems().addAll(sStart, sStop);
- Menu copy = new Menu("Datenaustausch");
- MenuItem importieren = new MenuItem("Importieren");
- importieren.setOnAction((ActionEvent ae) -> {
- csvRead();
- Alert importerino = new Alert(AlertType.INFORMATION);
- importerino.setContentText(
- "Die Daten wurden erfolgreich importiert!");
- importerino.showAndWait();
- });
- MenuItem exportieren = new MenuItem("Exportieren");
- exportieren.setOnAction((ActionEvent ae) -> {
- csvWrite();
- Alert exporterino = new Alert(AlertType.INFORMATION);
- exporterino.setContentText(
- "Die Daten wurden erfolgreich exportiert!");
- exporterino.showAndWait();
- });
- copy.getItems().addAll(importieren, exportieren);
- menuBar.getMenus().addAll(menuServer, copy);
- Scene scene = new Scene(vbox, 400, 350);
- ((VBox) scene.getRoot()).getChildren().add(menuBar);
- vbox.getChildren().add(grid);
- mainStage.setScene(scene);
- mainStage.show();
- }
- /**
- * This function loads the source database's data into the bufferList,
- * then saves it into the destination database.
- *
- * @param src source Database
- * @param dest destination Database
- */
- public void copy(Database src, Database dest) {
- List<Person> bufferList = new ArrayList<Person>();
- src.loadFromDB(bufferList);
- dest.saveToDB(bufferList);
- }
- /**
- * Imports SQL data into a CSV file.
- */
- public void csvRead() {
- copy(new DatabaseSQL(), new DatabaseCSV(CSVFILE));
- }
- /**
- * Exports a CSV file's data into a SQL database.
- */
- public void csvWrite() {
- copy(new DatabaseCSV(CSVFILE), new DatabaseSQL());
- }
- }
- import java.io.Serializable;
- /**
- * This class carries all attributes a person has in 'Client' and
- * 'Server' aswell as the {@link #compareTo(Person)}-function
- * for the ArrayList used in 'Server'.
- *
- * @see Client
- * @see Server
- * @see ServerGUI
- * @see Controller
- * @see Database
- * @see DatabaseSQL
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class Person implements Serializable, Comparable<Person> {
- String name;
- String vorname;
- String anrede;
- String strasse;
- String plz;
- String ort;
- String telefon;
- String fax;
- String bemerkung;
- String[] attributes;
- static String[] persAttributes = {
- "Nachname", "Vorname", "Anrede", "Strasse",
- "PLZ", "Ort", "Telefon", "Fax", "Bemerkung" };
- public Person(String[] attr) {
- this.name = attr[0];
- this.vorname = attr[1];
- this.anrede = attr[2];
- this.strasse = attr[3];
- this.plz = attr[4];
- this.ort = attr[5];
- this.telefon = attr[6];
- this.fax = attr[7];
- this.bemerkung = attr[8];
- attributes = attr.clone();
- }
- public int compareTo(Person p1) {
- return this.name.compareToIgnoreCase(p1.name);
- }
- }
- import java.util.List;
- /**
- * Abstract class with 2 children that are needed for
- * server functionality.
- *
- * @see Client
- * @see Server
- * @see ServerGUI
- * @see Controller
- * @see Person
- * @see DatabaseSQL
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public abstract class Database {
- abstract void saveToDB(List<Person> persList);
- abstract void loadFromDB(List<Person> persList);
- abstract void deleteDB();
- }
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.List;
- /**
- * Inherits the class Database and its abstract functions
- * to save/load from a CSV file or delete it.
- *
- * @see Client
- * @see Server
- * @see ServerGUI
- * @see Controller
- * @see Person
- * @see Database
- * @see DatabaseSQL
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class DatabaseCSV extends Database {
- private File csvFile;
- public DatabaseCSV(File file) {
- csvFile = file;
- }
- public DatabaseCSV(String name) {
- csvFile = new File(name);
- }
- /**
- * Saves all Person-objects in persList to the
- * selected file, the saving format is CSV.
- *
- * @param persList Cache for Persons.
- */
- public void saveToDB(List<Person> persList) {
- try {
- FileWriter fw = new FileWriter(csvFile, true);
- PrintWriter pw = new PrintWriter(fw);
- for (int i = 0; i < persList.size(); i++) {
- pw.print(persList.get(i).name + ";");
- pw.print(persList.get(i).vorname + ";");
- pw.print(persList.get(i).anrede + ";");
- pw.print(persList.get(i).strasse + ";");
- pw.print(persList.get(i).plz + ";");
- pw.print(persList.get(i).ort + ";");
- pw.print(persList.get(i).telefon + ";");
- pw.print(persList.get(i).fax + ";");
- pw.print(persList.get(i).bemerkung + ";");
- pw.println();
- }
- pw.close();
- } catch (IOException ioe) {
- System.out.println(ioe.getMessage());
- }
- }
- /**
- * Loads all persons saved in the selected file
- * into the persList.
- *
- * @param persList Cache for Persons
- */
- public void loadFromDB(List<Person> persList) {
- try {
- FileReader fr = new FileReader(csvFile);
- BufferedReader br = new BufferedReader(fr);
- while (br.ready()) {
- String[] persDataLoad = br.readLine().split(";", -1);
- persList.add(new Person(persDataLoad));
- }
- br.close();
- } catch (IOException ioe) {
- System.out.println(ioe.getMessage());
- }
- }
- /**
- * Deletes the selected file.
- */
- public void deleteDB() {
- if (csvFile.exists()) {
- csvFile.delete();
- }
- }
- }
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.List;
- /**
- * Inherits the class Database and its abstract functions
- * to save/load from an SQL database or truncate the table.
- *
- * @see Client
- * @see Server
- * @see ServerGUI
- * @see Controller
- * @see Person
- * @see Database
- * @see DatabaseCSV
- *
- * @author Gruppe 4: Usmanov, Reschke, Vogel
- */
- public class DatabaseSQL extends Database {
- static String datenbankURL = "jdbc:mysql://127.0.0.1/adreli";
- static String datenbankUserName = "root";
- static String datenbankPW = "";
- /**
- * Saves all Person-objects in persList to the
- * SQL database.
- *
- * @param persList Cache for Persons.
- */
- public void saveToDB(List<Person> persList) {
- try {
- Connection con = DriverManager.getConnection(
- datenbankURL, datenbankUserName, datenbankPW);
- con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
- for (Person person : persList) {
- PreparedStatement pstmt = con.prepareStatement(
- "INSERT INTO adreli5_gr4 "
- + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
- for (int i = 0; i < Person.persAttributes.length; i++) {
- pstmt.setString((i + 1), person.attributes[i]);
- }
- pstmt.executeUpdate();
- }
- } catch (SQLException sqle) {
- System.out.println(sqle.getMessage());
- }
- }
- /**
- * Loads all SQL table rows into the persList
- *
- * @param persList Cache for Persons.
- */
- public void loadFromDB(List<Person> persList) {
- try {
- Connection con = DriverManager.getConnection(
- datenbankURL, datenbankUserName, datenbankPW);
- con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
- PreparedStatement pstmt = con.prepareStatement(
- "SELECT * FROM adreli5_gr4");
- ResultSet rs = pstmt.executeQuery();
- String[] persDataLoad = new String[Person.persAttributes.length];
- while (rs.next()) {
- for (int i = 0; i < Person.persAttributes.length; i++) {
- persDataLoad[i] = rs.getString(Person.persAttributes[i]);
- }
- persList.add(new Person(persDataLoad));
- }
- } catch (SQLException sqle) {
- System.out.println(sqle.getMessage());
- }
- }
- /**
- * Deletes all rows in the table "adreli5_gr4".
- */
- public void deleteDB() {
- try {
- Connection con = DriverManager.getConnection(datenbankURL);
- con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
- PreparedStatement pstmt = con.prepareStatement(
- "TRUNCATE adreli5_gr4");
- pstmt.executeQuery();
- } catch (SQLException sqle) {
- System.out.println(sqle.getMessage());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement