/** * */ package context.ui.control.csvparser; import au.com.bytecode.opencsv.CSVReader; import context.core.entity.CorpusData; import context.core.entity.FileData; import context.ui.control.configuration.ConfigurationController; import context.ui.misc.FileHandler; import context.ui.misc.PropertiesUtil; import java.io.File; import java.io.FileReader; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.ResourceBundle; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.TextField; /** * @author julianchin * */ public class CsvParserConfigurationController extends ConfigurationController implements Initializable { /** * */ public static String path=PropertiesUtil.getFXMLPath(CsvParserConfigurationController.class); private char csvSeparatorChar; private List<String> csvColumnList=new ArrayList<String>(); private char csvQuoteChar; private int groupThreshold; @FXML private Label titleLabel; @FXML private ComboBox<String> csvSeparatorComboBox; @FXML private ComboBox<String> groupByColumnComboBox; @FXML private ComboBox<String> textColumnComboBox; @FXML private TextField csvSeparatorCustomTextField; @FXML private ComboBox<String> csvQuoteCharComboBox; @FXML private TextField groupThresholdTextField; @FXML private Button LoadColumnButton; private String inputPathString=""; /** * * @param title */ public void setTitle(String title){ titleLabel.setText(title); } /** * * @param path */ public void setInputPath(String path) { this.inputPathString=path; } /** * * @param url * @param rb */ public void initialize(URL url,ResourceBundle rb){ ObservableList<String> csvSeparatorOptions =FXCollections.observableArrayList( ",", //0 ";", //1 "tab", //2 "space",//3 "Custom Separator" //4 ); csvSeparatorComboBox.getItems().addAll(csvSeparatorOptions); csvSeparatorComboBox.getSelectionModel().select(0); csvSeparatorCustomTextField.setVisible(false); groupThresholdTextField.setVisible(true); groupThresholdTextField.setText("0"); ObservableList<String> csvQuoteCharOptions =FXCollections.observableArrayList( "\"", "'", "none" ); csvQuoteCharComboBox.getItems().addAll(csvQuoteCharOptions); csvQuoteCharComboBox.getSelectionModel().select(2); } /** * * @param event */ public void handleCsvSeparatorComboBox(ActionEvent event){ if(csvSeparatorComboBox.getSelectionModel().getSelectedIndex()==4){ csvSeparatorCustomTextField.setVisible(true); csvSeparatorCustomTextField.requestFocus(); }else{ csvSeparatorCustomTextField.setVisible(false); } } /** * * @param event */ public void handleLoadColumnButton(ActionEvent event){ setCsvSeparatorChar( csvSeparatorComboBox.getSelectionModel().getSelectedIndex(), csvSeparatorCustomTextField.getText() ); setCsvQuoteChar(csvQuoteCharComboBox.getSelectionModel().getSelectedIndex()); setColumnComboBox(); } /** * */ public void setColumnComboBox(){ String filename = FileHandler.getFileName(inputPathString); if(filename!=null &&!filename.isEmpty()){ CorpusData inputCorpus = new CorpusData(new SimpleStringProperty(filename),new SimpleStringProperty(inputPathString)); inputCorpus.addAllFiles(new File(inputCorpus.getPath().get())); setCsvColumnList(inputCorpus,csvSeparatorChar); } textColumnComboBox.getItems().clear(); groupByColumnComboBox.getItems().clear(); ObservableList<String> textColumnOptions = FXCollections.observableArrayList(); textColumnOptions.addAll(csvColumnList); textColumnComboBox.getItems().addAll(textColumnOptions); //textColumnComboBox.getSelectionModel().select(0); ObservableList<String> groupByColumnOptions = FXCollections.observableArrayList("Each Row"); groupByColumnOptions.addAll(csvColumnList); groupByColumnComboBox.getItems().addAll(groupByColumnOptions); groupByColumnComboBox.getSelectionModel().select(0); } /** * * @param csvSeparatorIndex * @param csvSeparator */ public void setCsvSeparatorChar(int csvSeparatorIndex,String csvSeparator){ char csvSeparatorCharSelected=','; if(csvSeparatorIndex==1){ csvSeparatorCharSelected=';'; }else if(csvSeparatorIndex==2){ csvSeparatorCharSelected='\t'; }else if(csvSeparatorIndex==3){ csvSeparatorCharSelected=' '; }else if(csvSeparatorIndex==4){ if(csvSeparator != null && !csvSeparator.trim().isEmpty()){ csvSeparatorCharSelected=csvSeparator.charAt(0); } }else{ csvSeparatorCharSelected=','; } this.csvSeparatorChar=csvSeparatorCharSelected; } /** * * @param csvQuoteCharIndex */ public void setCsvQuoteChar(int csvQuoteCharIndex){ char csvQuoteCharSelected='"'; if(csvQuoteCharIndex==0){ csvQuoteCharSelected='"'; }else if(csvQuoteCharIndex==1){ csvQuoteCharSelected='\''; }else{ csvQuoteCharSelected='\0'; } this.csvQuoteChar=csvQuoteCharSelected; } /** * * @param input * @param csvSeparatorChar */ public void setCsvColumnList(CorpusData input, char csvSeparatorChar){ List<FileData> files=input.getFiles(); List<String> csvColumnListData=new ArrayList<String>(); try{ FileData firstFileData=files.get(0); String firstFileName=firstFileData.getFile().getPath(); CSVReader reader=new CSVReader(new FileReader(firstFileName),csvSeparatorChar); String[] nextLine= reader.readNext(); if(nextLine!=null){ csvColumnListData=Arrays.asList(nextLine); } this.csvColumnList=csvColumnListData; reader.close(); }catch(Exception e){ e.printStackTrace(); } } /** * * @return */ public int getCsvSeparatorIndex(){ return csvSeparatorComboBox.getSelectionModel().getSelectedIndex(); } /** * * @return */ public char getCsvSeparatorChar(){ return this.csvSeparatorChar; } /** * * @return */ public char getCsvQuoteChar(){ return this.csvQuoteChar; } /** * * @return */ public int getGroupByColumnIndex(){ return groupByColumnComboBox.getSelectionModel().getSelectedIndex(); } /** * * @return */ public int getTextColumnIndex(){ return textColumnComboBox.getSelectionModel().getSelectedIndex(); } /** * * @return */ public String getCsvSeparatorCustomText(){ return csvSeparatorCustomTextField.getText(); } /** * * @return */ public List<String> getCsvColumnList(){ return this.csvColumnList; } /** * * @return */ public int getGroupThreshold(){ groupThreshold=Integer.parseInt(groupThresholdTextField.getText()); return groupThreshold; } }