/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package uk.ac.cam.echo.TouchClient;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
/**
* FXML Controller class
*
* @author Philip
*/
public class ConfrenceLoadScreenController implements Initializable {
@FXML
private Button Open_button;
@FXML
private Button Launch_button;
@FXML
private TextField Confrence_Name_textfield;
@FXML
private TextField IP_Adress_textfield1;
@FXML
private TextField IP_Adress_textfield2;
@FXML
private TextField IP_Adress_textfield3;
@FXML
private TextField IP_Adress_textfield4;
@FXML
private TextField Port_textfield;
@FXML
private TextField Confrence_ID_textfield;
@FXML
private TextField textfield_url;
@FXML
private RadioButton radio_button_url;
@FXML
private RadioButton radio_button_ip;
@FXML
private Label error_message;
private ECHOResource er;
/**
* Initializes the controller class.
* @param url currently unused
* @param rb MUST be of type ECHOResource to allow correct operation
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
ToggleGroup group = new ToggleGroup();
radio_button_url.setToggleGroup(group);
radio_button_ip.setToggleGroup(group);
EventHandler enter = new EventHandler<KeyEvent>(){
@Override
public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.ENTER){
Launch_button.fire();
}
}
};
Launch_button.setOnKeyPressed(enter);
Confrence_Name_textfield.setOnKeyPressed(enter);
IP_Adress_textfield1.setOnKeyPressed(enter);
IP_Adress_textfield2.setOnKeyPressed(enter);
IP_Adress_textfield3.setOnKeyPressed(enter);
IP_Adress_textfield4.setOnKeyPressed(enter);
Port_textfield.setOnKeyPressed(enter);
Confrence_ID_textfield.setOnKeyPressed(enter);
textfield_url.setOnKeyPressed(enter);
radio_button_url.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent t) {
textfield_url.setDisable(false);
IP_Adress_textfield1.setDisable(true);
IP_Adress_textfield2.setDisable(true);
IP_Adress_textfield3.setDisable(true);
IP_Adress_textfield4.setDisable(true);
Port_textfield.setDisable(true);
}
});
radio_button_ip.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent t) {
textfield_url.setDisable(true);
IP_Adress_textfield1.setDisable(false);
IP_Adress_textfield2.setDisable(false);
IP_Adress_textfield3.setDisable(false);
IP_Adress_textfield4.setDisable(false);
Port_textfield.setDisable(false);
}
});
if (rb instanceof ECHOResource){
er = (ECHOResource)rb;
}else {System.err.println("the wrong resource type has been provided to the confrenceloadscreencontroller class a resource of type ECHOResource must be provided");System.exit(1);}
final FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter ECHOFilter = new FileChooser.ExtensionFilter("ECHO file (*.echo)","*.echo");
fileChooser.getExtensionFilters().add(ECHOFilter);
fileChooser.setTitle("Load a confrence settings file (.echo)");
Open_button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent t) {
File file = fileChooser.showOpenDialog(Open_button.getScene().getWindow());
if (file != null) {
load(file);
}
}});
Launch_button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent t) {
Stage stage = (Stage) Launch_button.getScene().getWindow();
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("GUI.fxml"),er);
} catch (IOException ex) {
Logger.getGlobal().log(Level.SEVERE, null, ex);
}
Scene scene = new Scene(root);
try {
er.getTouchClient().setConfrenceName(Confrence_Name_textfield.getText());
if (!IP_Adress_textfield1.isDisabled()){
er.getTouchClient().setConfrenceIP(ip());
er.getTouchClient().setConfrencePort(port(Port_textfield.getText()));
} else {
er.getTouchClient().setConfrenceURL(textfield_url.getText());
}
er.getTouchClient().setConfrenceID(id(Confrence_ID_textfield.getText()));
} catch(InvalidServerCredentialsException ex){
error_message.setText("The inputted values are incorrect or incomplete"); return;
}
ServerConnection sc = new ServerConnection(er.getTouchClient());
(new Thread(sc)).start();
try {
stage.setTitle(er.getTouchClient().getConfrenceName());
} catch (NotInstantiatedYetException ex) {
stage.setTitle("ECHO");
}
stage.setFullScreen(true);
stage.setScene(scene);
stage.show();
}});
}
private void load(File f){
try {
BufferedReader in = new BufferedReader(new FileReader(f));
Confrence_Name_textfield.setText(in.readLine());
radio_button_url.fire();
textfield_url.setText(in.readLine());
Confrence_ID_textfield.setText(in.readLine());
Launch_button.fire();
} catch (FileNotFoundException ex) {
error_message.setText("The file could not be found");
} catch (IOException ex) {
error_message.setText("The file could not be Read from");
}
}
private String ip() throws InvalidServerCredentialsIPException{
String ip;
int ip1,ip2,ip3,ip4;
try{
ip1 = Integer.parseInt(IP_Adress_textfield1.getText());
ip2 = Integer.parseInt(IP_Adress_textfield2.getText());
ip3 = Integer.parseInt(IP_Adress_textfield3.getText());
ip4 = Integer.parseInt(IP_Adress_textfield4.getText());
}catch(NumberFormatException e){
throw new InvalidServerCredentialsIPException();
}
ip = ip1+"."+ip2+"."+ip3+"."+ip4+":";
return ip;
}
private int port(String val) throws InvalidServerCredentialsPortException{
try{
return Integer.parseInt(val);
}catch (NumberFormatException e){
throw new InvalidServerCredentialsPortException();
}
}
private int id(String val) throws InvalidServerCredentialsIDException{
try{
return Integer.parseInt(val);
}catch (NumberFormatException e){
throw new InvalidServerCredentialsIDException();
}
}
}