/* * 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.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.control.Accordion; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.SplitPane; import javafx.scene.control.TitledPane; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import org.pieShare.pieShareApp.model.PieShareAppBeanNames; import org.pieShare.pieShareApp.model.PieUser; import org.pieShare.pieShareAppFx.controller.api.IController; import org.pieShare.pieShareAppFx.controller.api.ITwoColumnListViewItem; import org.pieShare.pieShareAppFx.events.LoginStateChangedEvent; import org.pieShare.pieShareAppFx.events.api.ILoginStateChangedListener; import org.pieShare.pieTools.piePlate.service.cluster.api.IClusterManagementService; import org.pieShare.pieTools.piePlate.service.cluster.event.ClusterAddedEvent; import org.pieShare.pieTools.piePlate.service.cluster.event.ClusterRemovedEvent; import org.pieShare.pieTools.piePlate.service.cluster.event.IClusterAddedListener; import org.pieShare.pieTools.piePlate.service.cluster.event.IClusterRemovedListener; import org.pieShare.pieTools.pieUtilities.service.beanService.IBeanService; import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger; /** * FXML Controller class * * @author Svetoslav */ public class MainSceneController implements Initializable { private IClusterManagementService clusterManagementService; private IBeanService beanService; private TwoColumnListViewController preferencesListViewController; private TwoColumnListViewController cloudsListViewController; private LoginController loginController; private ClusterSettingsController clusterSettingsController; @FXML private GridPane mainGridPane; @FXML private BorderPane mainBorderPane; @FXML private BorderPane borderPaneClouds; @FXML private SplitPane mainSplitPane; @FXML private Accordion mainAccordion; @FXML private TitledPane titelPaneClouds; @FXML private Button addButton; @FXML private BorderPane preferencesBorderPane; public void setClusterSettingsController(ClusterSettingsController clusterSettingsController) { this.clusterSettingsController = clusterSettingsController; } public void setPreferencesListViewController(TwoColumnListViewController preferencesListViewController) { this.preferencesListViewController = preferencesListViewController; } public void setLoginController(LoginController loginController) { this.loginController = loginController; } public void setCloudsListViewController(TwoColumnListViewController cloudsListViewController) { this.cloudsListViewController = cloudsListViewController; } public void setBeanService(IBeanService beanService) { this.beanService = beanService; } public void setClusterManagementService(IClusterManagementService clusterManagementService) { this.clusterManagementService = clusterManagementService; } /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { mainGridPane.setGridLinesVisible(false); mainGridPane.getStyleClass().add("gridPane"); mainBorderPane.setCenter(mainGridPane); PieUser user = beanService.getBean(PieShareAppBeanNames.getPieUser()); try { preferencesBorderPane.setCenter(preferencesListViewController.getControl()); borderPaneClouds.setCenter(cloudsListViewController.getControl()); } catch (IOException ex) { PieLogger.error(this.getClass(), "Error setting PreferencesListView to Main Scene", ex); return; } if (user.getCloudName() != null) { addButton.setDisable(true); cloudsListViewController.addItem(new ITwoColumnListViewItem() { @Override public Node getSecondColumn() { return new Label(user.getCloudName()); } @Override public Node getFirstColumn() { return null; } @Override public IController getController() { return null; } }); } mainAccordion.setExpandedPane(titelPaneClouds); for (int i = 1; i < mainAccordion.getPanes().size(); i++) { mainAccordion.getPanes().get(i).setDisable(!user.isIsLoggedIn()); } mainSplitPane.widthProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) { mainSplitPane.setDividerPosition(0, 0.25f); } }); clusterManagementService.getClusterAddedEventBase().addEventListener(new IClusterAddedListener() { @Override public void handleObject(ClusterAddedEvent event) { Platform.runLater(new Runnable() { @Override public void run() { PieUser user = beanService.getBean(PieShareAppBeanNames.getPieUser()); if (user.getCloudName() == null) { return; } cloudsListViewController.clearAll(); cloudsListViewController.addItem(new ITwoColumnListViewItem() { @Override public Node getSecondColumn() { return new Label(user.getCloudName()); } @Override public Node getFirstColumn() { return null; } @Override public IController getController() { return null; } }); } }); } }); clusterManagementService.getClusterRemovedEventBase().addEventListener(new IClusterRemovedListener() { @Override public void handleObject(ClusterRemovedEvent ClusterRemovedEvent) { Platform.runLater(new Runnable() { @Override public void run() { //refreshCloudList(); } }); } }); preferencesListViewController.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent arg0) { if (preferencesListViewController.getSelectedItem() != null) { try { setPreferencesControl(preferencesListViewController.getSelectedItem()); } catch (IOException ex) { PieLogger.error(this.getClass(), "Error while setting controller", ex); } } } }); cloudsListViewController.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent arg0) { if (cloudsListViewController.getSelectedItem() != null) { try { setClusterSettingControl(); } catch (IOException ex) { PieLogger.error(this.getClass(), "Not able to set ClusterSettings Control", ex); } } } }); loginController.getLoginStateChangedEventBase().addEventListener(new ILoginStateChangedListener() { @Override public void handleObject(LoginStateChangedEvent event) { if (event.isIsLoggedIn()) { loginComplete(); } } }); clusterSettingsController.getLoginStateChangedEvent().addEventListener(new ILoginStateChangedListener() { @Override public void handleObject(LoginStateChangedEvent event) { if (!event.isIsLoggedIn()) { try { setLoginControl(); } catch (IOException ex) { PieLogger.error(this.getClass(), "Error setting login control", ex); } } } }); //Set entries for settings list view preferencesListViewController.addItem(beanService.getBean(FileFilterSettingsController.class)); preferencesListViewController.addItem(beanService.getBean(BasePreferencesController.class)); } @FXML private void handleAddCloudAction(ActionEvent event) { try { setLoginControl(); } catch (IOException ex) { PieLogger.error(this.getClass(), "Not able to set login control", ex); } } private void loginComplete() { try { setClusterSettingControl(); } catch (IOException ex) { PieLogger.error(this.getClass(), "Not able to set login cluster settings control", ex); } PieUser user = beanService.getBean(PieUser.class); for (int i = 1; i < mainAccordion.getPanes().size(); i++) { mainAccordion.getPanes().get(i).setDisable(!user.isIsLoggedIn()); } } public void setToMainCenter(Node node) { mainGridPane.getChildren().clear(); mainGridPane.add(node, 0, 1); } public void setLoginControl() throws IOException { setToMainCenter(loginController.getControl()); } public void setClusterSettingControl() throws IOException { FXMLLoader loader = beanService.getBean(PieShareAppBeanNames.getGUILoader()); PieUser user = beanService.getBean(PieShareAppBeanNames.getPieUser()); if (user.isIsLoggedIn()) { setToMainCenter(clusterSettingsController.getControl()); } else { setLoginControl(); } } public void setPreferencesControl(ITwoColumnListViewItem entry) throws IOException { setToMainCenter(entry.getController().getControl()); } }