package pt.keep.dbptk.gui; import java.io.FileNotFoundException; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.layout.Pane; import javafx.stage.Stage; import org.apache.hadoop.hdfs.server.namenode.FSImageFormat.Loader; import pt.gov.dgarq.roda.common.convert.db.modules.DatabaseHandler; import pt.gov.dgarq.roda.common.convert.db.modules.DatabaseImportModule; public class DBMSChooser implements Initializable, Panes{ @FXML public ComboBox<String> comboChooser; @FXML private Pane paneFields; @FXML private Button btnCancel, btnNext ; public Map<String,DBMSPane> dbmspanes = new HashMap<String,DBMSPane>(); public Map<String,String> dbmsfxml = new HashMap<String,String>(); public String selectedDBMS; public void setVista(Node node) { paneFields.getChildren().setAll(node); } @FXML public void comboChangeAction(ActionEvent event) throws Exception { selectedDBMS = (String) comboChooser.getSelectionModel().getSelectedItem(); ClassLoader classLoader = Loader.class.getClassLoader(); URL fxmlURL = classLoader.getResource(dbmsfxml.get(selectedDBMS)); FXMLLoader loader = new FXMLLoader(fxmlURL); loader.setResources(ResourceBundle.getBundle(App.bundle)); Parent root = loader.load(); dbmspanes.put(selectedDBMS, loader.getController()); setVista(root); } @FXML public void btnCancelAction(ActionEvent event) throws Exception { if(App.importpage){ Navigator.loadVista("import",App.SIARDPAGE); } else { Node node = (Node) event.getSource(); Stage stage = (Stage) node.getScene().getWindow(); FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setResources(ResourceBundle.getBundle(App.bundle)); Parent root = (Parent) fxmlLoader.load(getClass().getResource("Main.fxml").openStream()); Scene scene = new Scene(root); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); stage.setScene(scene); stage.show(); } } @FXML public void btnNextAction(ActionEvent event) throws Exception { boolean sucess = false; DBMSPane dbmsPane = dbmspanes.get(selectedDBMS); if(App.importpage){ DatabaseHandler module = null; if(dbmsPane.isInputValid()){ module = dbmsPane.getExportModule(); sucess =true; } if(sucess){ FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setResources(ResourceBundle.getBundle(App.bundle)); Node root = (Node) fxmlLoader.load(getClass().getResource(App.IMPORTDATA).openStream()); ImportData impD = fxmlLoader.getController(); DatabaseHandlerGUI expD = new DatabaseHandlerGUI(module); expD.registerObserver(impD); Navigator.setExportModule(expD); Navigator.loadAfter(root,"import",App.IMPORTDATA); fxmlLoader.setController(impD); } } else{ DatabaseImportModule module = null; if(dbmsPane.isInputValid()){ module = dbmsPane.getImportModule(); sucess = true; } if(sucess){ Navigator.setImportModule(module); Navigator.setCurrentNode(App.SIARDPAGE); Navigator.addNodes(App.SIARDPAGE); Navigator.loadVista("export",App.SIARDPAGE); } } } public static Map<String, String> loadMaps() throws FileNotFoundException{ Map<String, String> map = new HashMap<String, String>(); String mods; if(App.importpage){ mods = (String) App.props.get("exportModules"); } else{ mods = (String) App.props.get("importModules"); } String[] modules = mods.split(", "); for (int i = 0; i < modules.length; i++) { map.put(App.props.getProperty(modules[i]+".label"),App.props.getProperty(modules[i]+".fxml")); } return map; } @Override public void initialize(URL location, ResourceBundle resources) { try { dbmsfxml.putAll(loadMaps()); } catch (FileNotFoundException e) { e.printStackTrace(); } comboChooser.getItems().clear(); for (String key : dbmsfxml.keySet()) { comboChooser.getItems().add(key); } } }