/*
* 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 mytime.gui.controller;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXTextArea;
import com.jfoenix.controls.JFXTextField;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.beans.property.BooleanProperty;
import static javafx.beans.property.BooleanProperty.booleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import mytime.be.Group;
import mytime.be.Person;
import mytime.gui.model.ManagerModel;
import mytime.gui.model.Model;
/**
* FXML Controller class
*
* @author Bruger
*/
public class ManagerOneVolunteerInformationController implements Initializable
{
@FXML
private ImageView imageView;
@FXML
private JFXButton editButton;
@FXML
private JFXButton saveButton;
@FXML
private JFXTextField txtFieldName;
@FXML
private JFXTextField txtFieldEmail;
@FXML
private JFXTextField txtFieldPhone;
@FXML
private JFXTextArea txtFAreaield;
private ManagerModel mgrModel;
private Person currentPerson;
private boolean bound;
@FXML
private GridPane gridpane;
@FXML
private GridPane gridPaneInfo;
@FXML
private Pane panePicture;
@FXML
private Pane paneBg;
private BooleanProperty editMode;
@FXML
private JFXButton btnGoBack;
@FXML
private FlowPane flowPaneGuilds;
//private JFXTextField txtFieldLastName;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb)
{
//editMode = false;
gridpane.setStyle("-fx-background-color: rgb(234, 234, 234);");
gridPaneInfo.setStyle("-fx-background-color: rgb(234, 234, 234);");
panePicture.setStyle("-fx-background-color: rgb(102, 102, 255);");
//paneBg.setStyle("-fx-background-color: rgb(102, 102, 255);");
paneBg.setStyle("-fx-background-color: rgb(250, 250, 250);");
// txtFAreaield.setStyle("-text-area-background: rgb(255, 255, 255);");
//txtFAreaield.setDisable(false);
// TODO
mgrModel = ManagerModel.getInstance();
// Person person = (Person)mgrModel.getClickedVolunteer().get();
mgrModel.getClickedVolunteer().addListener(new ChangeListener()
{
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue)
{
currentPerson = (Person) newValue;
if (newValue != null)
{
updateLabels();
}
}
});
editMode = new SimpleBooleanProperty();
txtFieldName.editableProperty().bind(editMode);
txtFieldEmail.editableProperty().bind(editMode);
txtFieldPhone.editableProperty().bind(editMode);
txtFAreaield.editableProperty().bind(editMode);
editButton.setStyle("-fx-background-color: rgb(197, 197, 197);");
saveButton.setStyle("-fx-background-color: rgb(197, 197, 197);");
btnGoBack.setStyle("-fx-background-color: rgb(197, 197, 197);");
}
/**
* Update the labels to the information of the newly clicked volunteer
*/
private void updateLabels()
{
imageView.setImage(new Image(currentPerson.getProfilePicture().get()));
txtFieldName.setText(currentPerson.getFullName());
txtFieldEmail.setText(currentPerson.getEmail().get());
txtFieldPhone.setText(currentPerson.getPhonenumber().get());
txtFAreaield.setText(currentPerson.getDescription().get());
try
{
List<Group> groupList = Model.getInstance().getAllGroupsForPerson(currentPerson.getId().get());
for (Group group : groupList)
{
flowPaneGuilds.getChildren().add(loadGroupNode(group));
}
} catch (SQLException ex)
{
Logger.getLogger(ManagerOneVolunteerInformationController.class.getName()).log(Level.SEVERE, null, ex);
}
// txtFieldName.textProperty().bind(currentPerson.getFullName());
// txtFieldEmail.textProperty().bind(currentPerson.getEmail());
// txtFieldPhone.textProperty().bind(currentPerson.getPhonenumber());
}
private Node loadGroupNode(Group group)
{
try
{
FXMLLoader loader = new FXMLLoader(getClass().getResource("/mytime/gui/view/OneGuildBar.fxml"));
Node node = loader.load();
OneGuildBarController controller = loader.getController();
controller.setGroup(group);
return node;
} catch (IOException ex)
{
Logger.getLogger(ManagerOneVolunteerInformationController.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
/**
* Return to the masonrypane
*
* @param event
*/
@FXML
private void handleGoBack(ActionEvent event)
{
flowPaneGuilds.getChildren().clear();
editMode.set(false);
editButton.setStyle("-fx-background-color: rgb(197, 197, 197);");
ManagerModel.getInstance().getClickedVolunteer().set(null);
}
/**
* Toggle between being able to edit the information of the current
* volunteer
*
* @param event
*/
@FXML
private void handleEditInfo(ActionEvent event)
{
if (editMode.get())
{
editMode.set(false);
editButton.setStyle("-fx-background-color: rgb(197, 197, 197);");
} else
{
editMode.set(true);
editButton.setStyle("-fx-background-color: rgb(150, 150, 150);");
}
}
/**
* Saves the info of the textfields to database
*
* @param event
*/
@FXML
private void handleSaveInfo(ActionEvent event)
{
currentPerson.setEmail(txtFieldEmail.getText());
currentPerson.setPhonenumber(txtFieldPhone.getText());
currentPerson.setDescription(txtFAreaield.getText());
String fullName = txtFieldName.getText();
String firstName = "";
String lastName = "";
if (fullName.contains(" "))
{
firstName = fullName.substring(0, fullName.indexOf(" "));
lastName = fullName.substring(fullName.indexOf(" ") + 1);
} else
{
firstName = fullName;
}
currentPerson.setFirstName(firstName);
currentPerson.setLastName(lastName);
List<Node> personNodes = mgrModel.getAllPersonNodes();
for (Node personNode : personNodes)
{
Person person = (Person) personNode.getUserData();
if (person.getId().get() == currentPerson.getId().get())
{
personNode.setUserData(currentPerson);
Button button = (Button) personNode;
StackPane stackPane = (StackPane) button.getGraphic();
List<Node> stackChilren = stackPane.getChildren();
for (Node node : stackChilren)
{
if (node.getClass().getName().equals(HBox.class.getName()))
{
HBox hbox = (HBox) node;
List<Node> childredn = hbox.getChildren();
for (Node node1 : childredn)
{
if (node1.getClass().getName().equals(Label.class.getName()))
{
Label label = (Label) node1;
label.setText(firstName + "\n" + lastName);
}
}
}
}
}
}
try
{
Model.getInstance().updatePerson(currentPerson);
} catch (SQLException ex)
{
Logger.getLogger(ManagerOneVolunteerInformationController.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Sets the current person
*
* @param currentPerson
*/
public void setCurrentPerson(Person currentPerson)
{
this.currentPerson = currentPerson;
}
}