/*
* 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 org.pieShare.pieShareAppFx.controller;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.control.Label;
import org.pieShare.pieShareApp.model.PieShareAppBeanNames;
import org.pieShare.pieShareApp.model.PieUser;
import org.pieShare.pieShareApp.model.command.LogoutCommand;
import org.pieShare.pieShareApp.task.commandTasks.logoutTask.api.ILogoutFinished;
import org.pieShare.pieShareApp.task.commandTasks.logoutTask.api.ILogoutTask;
import org.pieShare.pieShareAppFx.controller.api.IController;
import org.pieShare.pieShareAppFx.events.LoginStateChangedEvent;
import org.pieShare.pieShareAppFx.events.api.ILoginStateChangedListener;
import org.pieShare.pieTools.pieUtilities.service.beanService.IBeanService;
import org.pieShare.pieTools.pieUtilities.service.eventBase.IEventBase;
import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.PieExecutorService;
import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.exception.PieExecutorTaskFactoryException;
import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger;
/**
*
* @author Richard
*/
public class ClusterSettingsController implements IController {
private IBeanService beanService;
private PieExecutorService executorService;
private ILogoutTask logoutTask;
private IEventBase<ILoginStateChangedListener, LoginStateChangedEvent> loginStateChanged;
public IEventBase<ILoginStateChangedListener, LoginStateChangedEvent> getLoginStateChangedEvent() {
return loginStateChanged;
}
public void setLoginStateChangedEvent(IEventBase<ILoginStateChangedListener, LoginStateChangedEvent> loginStateChanged) {
this.loginStateChanged = loginStateChanged;
}
public void setLogoutTask(ILogoutTask logoutTask) {
this.logoutTask = logoutTask;
}
public void setExecuterService(PieExecutorService pieExecutorService) {
this.executorService = pieExecutorService;
}
public void setBeanService(IBeanService beanService) {
this.beanService = beanService;
}
@FXML
private Label labelCloudName;
@FXML
private void handleLogoutAction(ActionEvent event) {
PieUser user = beanService.getBean(PieShareAppBeanNames.getPieUser());
LogoutCommand commnd = new LogoutCommand();
commnd.setUserName(user.getCloudName());
commnd.setCallback(new ILogoutFinished() {
@Override
public void finished() {
Platform.runLater(new Runnable() {
@Override
public void run() {
loginStateChanged.fireEvent(new LoginStateChangedEvent(this, false));
}
});
}
});
logoutTask.setEvent(commnd);
try {
executorService.handlePieEvent(commnd);
}
catch (PieExecutorTaskFactoryException ex) {
PieLogger.error(this.getClass(), "Error executing logout event", ex);
}
}
@Override
public void initialize(URL location, ResourceBundle resources) {
PieUser user = beanService.getBean(PieShareAppBeanNames.getPieUser());
labelCloudName.setText(user.getCloudName());
}
@Override
public Node getControl() throws IOException {
FXMLLoader loader = beanService.getBean(PieShareAppBeanNames.getGUILoader());
InputStream st = getClass().getResourceAsStream("/fxml/settingsPanels/CloudsSettingsPanel.fxml");
return loader.load(st);
}
}