package com.digiarea.closure.preferences.model.controller; import java.io.IOException; import java.util.ResourceBundle; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.VBox; import javafx.stage.Modality; import javafx.stage.Stage; import com.digiarea.closure.preferences.model.Preferences; import com.digiarea.closure.preferences.model.bind.Binder; import com.digiarea.closure.preferences.model.bind.ControllerFactory; import com.digiarea.closure.preferences.model.bind.ModelFacade; import com.digiarea.closure.preferences.model.bind.PreferencesSerializer; import com.digiarea.closure.preferences.model.controller.dialogs.AddClosureLibraryDialogController; import com.digiarea.closure.preferences.model.controller.dialogs.AddVariableDialogController; import com.digiarea.closurefx.IConstants; import com.digiarea.closurefx.ResourceUtils; public class PreferencesFactory { public static PreferencesController getPreferenceDialog( ResourceBundle bundle) { PreferencesSerializer serializer = new PreferencesSerializer(); Preferences prefs = serializer.read(); ModelFacade modelFacade = new ModelFacade(); ControllerFactory factory = new ControllerFactory(modelFacade, bundle); modelFacade.setFactory(factory); modelFacade.setPrefs(prefs); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.getIcons().add(ResourceUtils.CLOSURE_ICON); stage.setTitle("Closure FX Preferences"); stage.centerOnScreen(); try { FXMLLoader loader = new FXMLLoader( PreferencesFactory.class.getResource("Preferences.fxml")); loader.setResources(bundle); loader.setControllerFactory(factory); VBox editor = (VBox) loader.load(); PreferencesController controller = (PreferencesController) loader .getController(); Binder binder = new Binder(factory); prefs.accept(binder, null); Scene dialogScene = new Scene(editor); dialogScene.getStylesheets().add( ResourceUtils.getStylesheets().toExternalForm()); stage.setScene(dialogScene); stage.showAndWait(); return controller; } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } public static AddVariableDialogController getAddVariableDialog( ResourceBundle bundle, Preferences prefs) { Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.getIcons().add(ResourceUtils.CLOSURE_ICON); stage.setTitle(bundle.getString(IConstants.PreferencesVariables_Add)); stage.centerOnScreen(); try { FXMLLoader loader = new FXMLLoader( PreferencesFactory.class .getResource(IConstants.PACKAGE_CLOSURE + "/preferences/model/controller/dialogs/AddVariableDialog.fxml")); loader.setResources(bundle); VBox editor = (VBox) loader.load(); AddVariableDialogController controller = (AddVariableDialogController) loader .getController(); controller.setStage(stage); controller.setVariables(prefs.getVariables()); Scene dialogScene = new Scene(editor); dialogScene.getStylesheets().add( ResourceUtils.getStylesheets().toExternalForm()); stage.setScene(dialogScene); stage.showAndWait(); return controller; } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } public static AddClosureLibraryDialogController getAddClosureLibraryDialog( ResourceBundle bundle, Preferences prefs) { Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.getIcons().add(ResourceUtils.CLOSURE_ICON); stage.setTitle(bundle.getString(IConstants.PreferencesClosure_Add)); stage.centerOnScreen(); try { FXMLLoader loader = new FXMLLoader( PreferencesFactory.class .getResource(IConstants.PACKAGE_CLOSURE + "/preferences/model/controller/dialogs/AddClosureLibraryDialog.fxml")); loader.setResources(bundle); VBox editor = (VBox) loader.load(); AddClosureLibraryDialogController controller = (AddClosureLibraryDialogController) loader .getController(); controller.setStage(stage); controller.setLibraries(prefs.getClosureLibraries()); Scene dialogScene = new Scene(editor); dialogScene.getStylesheets().add( ResourceUtils.getStylesheets().toExternalForm()); stage.setScene(dialogScene); stage.showAndWait(); return controller; } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } }