12 Commits
1.0.1 ... 1.3.0

Author SHA1 Message Date
0db16c0328 Merge pull request #30 from frosch95/file_has_changed_dialog
When a new file is opened check first if there are unsafed changes and show a warning dialog.
2022-10-19 13:51:30 +02:00
bec55b6119 When a new file is opened check first if there are unsafed changes and show a warning dialog. 2022-10-19 13:48:09 +02:00
7dac3ce011 Merge pull request #29 from frosch95/dragndrop
Support for Drag'n'Drop
2022-10-19 12:49:36 +02:00
449f929f08 Support for drag'n'drop 2022-10-19 12:34:55 +02:00
9e3561fedb fix release link 2022-10-15 13:59:48 +02:00
9c1b110bfd Merge pull request #28 from frosch95/total_number_of_lines
total number of lines
2022-10-15 13:47:55 +02:00
398219a897 total number of lines 2022-10-15 13:41:31 +02:00
Andreas Billmann
a79dde5421 Merge pull request #24 from frosch95/switch_to_fastcsv
switch to fastcsv
2021-12-10 00:54:12 +01:00
fb234fa50e fix tests 2021-12-10 00:51:38 +01:00
43856dffab switch to fastcsv as supercsv is not maintaned anymore 2021-12-10 00:30:59 +01:00
8cecca2172 update the thanks section 2021-11-23 06:19:33 +01:00
Andreas Billmann
35f395d44a Update README.md 2021-11-22 22:22:55 +01:00
75 changed files with 259 additions and 232 deletions

View File

@@ -1,7 +1,7 @@
The MIT License (MIT) The MIT License (MIT)
------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------
Copyright (c) 2015-2019 Andreas Billmann <andreas.billmann@javafx.ninja> Copyright (c) 2015-2021 Andreas Billmann <andreas.billmann@javafx.ninja>

View File

@@ -15,7 +15,7 @@ even in a "normal" CSV editor. So I decided to write this simple JavaFX applicat
[Wiki & Documentation](https://github.com/frosch95/SmartCSV.fx/wiki) [Wiki & Documentation](https://github.com/frosch95/SmartCSV.fx/wiki)
binary distribution of the [latest release (1.0.0)](https://github.com/frosch95/SmartCSV.fx/releases/download/1.0.0/SmartCSV.fx-1.0.0.zip) binary distribution of the [latest release (1.3.0)](https://github.com/frosch95/SmartCSV.fx/releases/download/1.3.0/SmartCSV.fx-1.3.0.zip)
## Talks ## Talks
[Introduction](http://javafx.ninja/talks/introduction/) [Introduction](http://javafx.ninja/talks/introduction/)

View File

@@ -3,7 +3,7 @@ plugins {
id 'java' id 'java'
id 'groovy' id 'groovy'
id 'application' id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8' id 'org.openjfx.javafxplugin' version '0.0.10'
} }
repositories { repositories {
@@ -16,28 +16,31 @@ sourceCompatibility = 17
targetCompatibility = 17 targetCompatibility = 17
javafx { javafx {
version = "17"
modules = [ 'javafx.controls', 'javafx.fxml' ] modules = [ 'javafx.controls', 'javafx.fxml' ]
} }
dependencies { dependencies {
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.8.2'
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.5.2' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.8.2'
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.8.2'
testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: '2.2' testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: '2.2'
testImplementation group: 'org.mockito', name: 'mockito-core', version:'3.1.0' testImplementation group: 'org.mockito', name: 'mockito-core', version:'3.1.0'
implementation group: 'org.codehaus.groovy', name: 'groovy-all', version: '3.0.6' implementation group: 'org.apache.groovy', name: 'groovy', version: '4.0.0-rc-1'
implementation group: 'org.springframework', name:'spring-context', version: '5.3.10' implementation group: 'org.springframework', name:'spring-context', version: '5.3.13'
implementation group: 'net.sf.supercsv', name: 'super-csv', version: '2.4.0' implementation group: 'de.siegmar', name: 'fastcsv', version: '2.1.0'
implementation group: 'commons-validator', name: 'commons-validator', version: '1.7' implementation group: 'commons-validator', name: 'commons-validator', version: '1.7'
implementation group: 'de.jensd', name: 'fontawesomefx-commons', version: '11.0' implementation group: 'de.jensd', name: 'fontawesomefx-commons', version: '11.0'
implementation group: 'de.jensd', name: 'fontawesomefx-fontawesome', version: '4.7.0-11' implementation group: 'de.jensd', name: 'fontawesomefx-fontawesome', version: '4.7.0-11'
implementation group: 'de.jensd', name: 'fontawesomefx-materialdesignfont', version: '1.7.22-11' implementation group: 'de.jensd', name: 'fontawesomefx-materialdesignfont', version: '1.7.22-11'
implementation group: 'de.jensd', name: 'fontawesomefx-materialicons', version: '2.2.0-11' implementation group: 'de.jensd', name: 'fontawesomefx-materialicons', version: '2.2.0-11'
implementation group: 'org.controlsfx', name: 'controlsfx', version: '11.0.2' implementation group: 'org.controlsfx', name: 'controlsfx', version: '11.1.0'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.9'
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.0' implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.1'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.0' implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.14.1'
implementation group: 'org.fxmisc.richtext', name: 'richtextfx', version: '0.10.5' implementation group: 'org.fxmisc.richtext', name: 'richtextfx', version: '0.10.7'
} }
test { test {
@@ -45,5 +48,5 @@ test {
} }
group 'ninja.javafx' group 'ninja.javafx'
version '1.0.1' version '1.3.0'
mainClassName = 'ninja.javafx.smartcsv.Main' mainClassName = 'ninja.javafx.smartcsv.Main'

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -26,22 +26,24 @@
package ninja.javafx.smartcsv.csv; package ninja.javafx.smartcsv.csv;
import org.supercsv.prefs.CsvPreference; import ninja.javafx.smartcsv.preferences.Preferences;
import static ninja.javafx.smartcsv.preferences.Preferences.defaultPreferences;
/** /**
* *
*/ */
public class CSVConfigurable { public class CSVConfigurable {
protected CsvPreference csvPreference; protected Preferences csvPreference;
protected String fileEncoding; protected String fileEncoding;
public CSVConfigurable() { public CSVConfigurable() {
csvPreference = CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE; csvPreference = defaultPreferences();
} }
public void setCsvPreference(CsvPreference csvPreference) { public void setCsvPreference(Preferences csvPreference) {
this.csvPreference = csvPreference; this.csvPreference = csvPreference;
} }

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -26,17 +26,13 @@
package ninja.javafx.smartcsv.csv; package ninja.javafx.smartcsv.csv;
import de.siegmar.fastcsv.reader.NamedCsvReader;
import ninja.javafx.smartcsv.FileReader; import ninja.javafx.smartcsv.FileReader;
import ninja.javafx.smartcsv.fx.table.model.CSVModel; import ninja.javafx.smartcsv.fx.table.model.CSVModel;
import ninja.javafx.smartcsv.fx.table.model.CSVRow;
import org.supercsv.exception.SuperCsvException;
import org.supercsv.io.CsvMapReader;
import org.supercsv.io.ICsvMapReader;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Map;
/** /**
* reads the csv file and stores the values in csv model * reads the csv file and stores the values in csv model
@@ -48,28 +44,38 @@ public class CSVFileReader extends CSVConfigurable implements FileReader<CSVMode
@Override @Override
public void read(File file) throws IOException { public void read(File file) throws IOException {
try (ICsvMapReader mapReader = new CsvMapReader(new java.io.FileReader(file.getAbsoluteFile(), Charset.forName(fileEncoding)), System.out.println(csvPreference);
csvPreference)) { try (var csv = getNamedCsvReader(file)) {
model = new CSVModel(); model = new CSVModel();
// the header columns are used as the keys to the Map // the header columns are used as the keys to the Map
String[] header = mapReader.getHeader(true); var header = csv.getHeader().toArray(new String[csv.getHeader().size()]);
model.setHeader(header); model.setHeader(header);
Map<String, String> customerMap; csv.forEach(csvRow -> {
while ((customerMap = mapReader.read(header)) != null) { var row = model.addRow();
CSVRow row = model.addRow();
for (String column : header) { for (String column : header) {
model.addValue(row, column, customerMap.get(column)); model.addValue(row, column, csvRow.getField(column));
} }
} });
} catch (IOException | SuperCsvException ex) {
} catch (IOException ex) {
// TODO perhaps a custom NinjaException that can properly identify and localize the exception message // TODO perhaps a custom NinjaException that can properly identify and localize the exception message
// is this a file not found? is this a corrupt csv? etc // is this a file not found? is this a corrupt csv? etc
throw new IOException("Failed to read " + file + ": " + ex.getMessage(), ex); throw new IOException("Failed to read " + file + ": " + ex.getMessage(), ex);
} }
} }
private NamedCsvReader getNamedCsvReader(File file) throws IOException {
var builder = NamedCsvReader.builder()
.fieldSeparator(csvPreference.delimiterChar());
if (csvPreference.quoteChar() != null) {
builder.quoteCharacter(csvPreference.quoteChar());
}
return builder.build(file.toPath(), Charset.forName(fileEncoding));
}
public CSVModel getContent() { public CSVModel getContent() {
return model; return model;
} }

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -26,18 +26,17 @@
package ninja.javafx.smartcsv.csv; package ninja.javafx.smartcsv.csv;
import de.siegmar.fastcsv.writer.CsvWriter;
import de.siegmar.fastcsv.writer.QuoteStrategy;
import ninja.javafx.smartcsv.fx.table.model.CSVModel; import ninja.javafx.smartcsv.fx.table.model.CSVModel;
import ninja.javafx.smartcsv.fx.table.model.CSVRow; import ninja.javafx.smartcsv.fx.table.model.CSVRow;
import org.supercsv.io.CsvMapWriter;
import org.supercsv.io.ICsvMapWriter;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Map; import java.util.List;
import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.toList;
/** /**
* filewriter for the csv * filewriter for the csv
@@ -52,22 +51,22 @@ public class CSVFileWriter extends CSVConfigurable implements ninja.javafx.smart
@Override @Override
public void write(File filename) throws IOException { public void write(File filename) throws IOException {
ICsvMapWriter mapWriter = null; try (var writer = getCsvWriter(filename)){
try { writer.writeRow(model.getHeader());
mapWriter = new CsvMapWriter(new FileWriter(filename.getAbsolutePath(), Charset.forName(fileEncoding)),
csvPreference);
mapWriter.writeHeader(model.getHeader());
for(CSVRow row: model.getRows()) { for(CSVRow row: model.getRows()) {
Map<String, String> columns = convertMapFromModel(row); writer.writeRow(convertMapFromModel(row));
mapWriter.write(columns, model.getHeader());
} }
} }
finally {
if( mapWriter != null ) {
mapWriter.close();
} }
private CsvWriter getCsvWriter(File filename) throws IOException {
var writer = CsvWriter.builder().fieldSeparator(csvPreference.delimiterChar());
if (csvPreference.quoteChar() != null) {
writer.quoteCharacter(csvPreference.quoteChar());
writer.quoteStrategy(QuoteStrategy.ALWAYS);
} }
return writer.build(filename.toPath(), Charset.forName(fileEncoding));
} }
/** /**
@@ -75,13 +74,8 @@ public class CSVFileWriter extends CSVConfigurable implements ninja.javafx.smart
* @param row the row to convert * @param row the row to convert
* @return a simple map for the supercvs writer * @return a simple map for the supercvs writer
*/ */
private Map<String, String> convertMapFromModel(CSVRow row) { private List<String> convertMapFromModel(CSVRow row) {
return row.getColumns().entrySet().stream() return row.getColumns().values().stream().map(v -> v.get().getValue())
.collect( .collect(toList());
toMap(
Map.Entry::getKey,
e -> e.getValue().getValue().getValue() != null ? e.getValue().getValue().getValue() : ""
)
);
} }
} }

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -85,6 +85,8 @@ public class SmartCSV extends Application {
private void showUI(Stage primaryStage, String name, String version) { private void showUI(Stage primaryStage, String name, String version) {
SmartCSVController smartCVSController = appContext.getBean(SmartCSVController.class); SmartCSVController smartCVSController = appContext.getBean(SmartCSVController.class);
Scene scene = new Scene((Parent) smartCVSController.getView()); Scene scene = new Scene((Parent) smartCVSController.getView());
var defaultThemeCss = getClass().getResource("/ninja/javafx/smartcsv/fx/smartcsv.css").toExternalForm();
scene.getRoot().getStylesheets().add(defaultThemeCss);
primaryStage.setScene(scene); primaryStage.setScene(scene);
primaryStage.setTitle(String.format("%s %s", name, version)); primaryStage.setTitle(String.format("%s %s", name, version));

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -36,6 +36,8 @@ import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.AnchorPane; import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
@@ -64,7 +66,6 @@ import ninja.javafx.smartcsv.validation.configuration.ValidationConfiguration;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.supercsv.prefs.CsvPreference;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -79,6 +80,7 @@ import static javafx.application.Platform.exit;
import static javafx.application.Platform.runLater; import static javafx.application.Platform.runLater;
import static javafx.beans.binding.Bindings.*; import static javafx.beans.binding.Bindings.*;
import static javafx.scene.layout.AnchorPane.*; import static javafx.scene.layout.AnchorPane.*;
import static ninja.javafx.smartcsv.preferences.Preferences.defaultPreferences;
/** /**
* main controller of the application * main controller of the application
@@ -208,6 +210,9 @@ public class SmartCSVController extends FXMLController {
@FXML @FXML
private Label currentLineNumber; private Label currentLineNumber;
@FXML
private Label totalNumberOfLines;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// members // members
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -222,7 +227,7 @@ public class SmartCSVController extends FXMLController {
private FileStorage<CSVModel> currentCsvFile = new FileStorage<>(csvFileReader, csvFileWriter); private FileStorage<CSVModel> currentCsvFile = new FileStorage<>(csvFileReader, csvFileWriter);
private FileStorage<ValidationConfiguration> currentConfigFile = new FileStorage<>(new ValidationFileReader(), new ValidationFileWriter()); private FileStorage<ValidationConfiguration> currentConfigFile = new FileStorage<>(new ValidationFileReader(), new ValidationFileWriter());
private FileStorage<CsvPreference> csvPreferenceFile = new FileStorage<>(new PreferencesFileReader(), new PreferencesFileWriter()); private FileStorage<Preferences> csvPreferenceFile = new FileStorage<>(new PreferencesFileReader(), new PreferencesFileWriter());
private FileStorage<String> fileEncodingFile = new FileStorage<>(new EncodingFileReader(), new EncodingFileWriter()); private FileStorage<String> fileEncodingFile = new FileStorage<>(new EncodingFileReader(), new EncodingFileWriter());
private ListChangeListener<ValidationError> errorListListener = c -> tableView.refresh(); private ListChangeListener<ValidationError> errorListListener = c -> tableView.refresh();
@@ -252,6 +257,34 @@ public class SmartCSVController extends FXMLController {
fileEncodingFile.setFile(ENCODING_FILE); fileEncodingFile.setFile(ENCODING_FILE);
loadCsvPreferencesFromFile(); loadCsvPreferencesFromFile();
initDragAndDrop();
}
private void initDragAndDrop() {
tableWrapper.setOnDragOver(event -> {
Dragboard db = event.getDragboard();
if (event.getGestureSource() != tableWrapper
&& db.hasFiles()
&& db.getFiles().size() == 1
&& db.getFiles().get(0).getName().endsWith(".csv")) {
event.acceptTransferModes(TransferMode.COPY);
}
event.consume();
});
tableWrapper.setOnDragDropped(event -> {
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasFiles() && db.getFiles().size() == 1 && canOpen()) {
File file = db.getFiles().get(0);
openFile(currentCsvFile, file);
success = true;
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);
});
} }
private void loadEncodingFromFile() { private void loadEncodingFromFile() {
@@ -368,7 +401,7 @@ public class SmartCSVController extends FXMLController {
Optional<ButtonType> result = alert.showAndWait(); Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){ if (result.get() == ButtonType.OK){
CsvPreference csvPreference = preferencesController.getCsvPreference(); Preferences csvPreference = preferencesController.getCsvPreference();
setCsvPreference(csvPreference); setCsvPreference(csvPreference);
saveCsvPreferences(csvPreference); saveCsvPreferences(csvPreference);
String fileEncoding = CharsetHelper.getCharsetName(preferencesController.getFileEncoding()); String fileEncoding = CharsetHelper.getCharsetName(preferencesController.getFileEncoding());
@@ -470,6 +503,22 @@ public class SmartCSVController extends FXMLController {
return canExit; return canExit;
} }
private boolean canOpen() {
boolean canOpen = true;
if (currentCsvFile.getContent() != null && currentCsvFile.isFileChanged()) {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle(resourceBundle.getString("dialog.changes.title"));
alert.setHeaderText(resourceBundle.getString("dialog.changes.header.text"));
alert.setContentText(resourceBundle.getString("dialog.changes.text"));
Optional<ButtonType> result = alert.showAndWait();
if (result.get() != ButtonType.OK){
canOpen = false;
}
}
return canOpen;
}
public void showValidationEditor(String column) { public void showValidationEditor(String column) {
validationEditorController.setSelectedColumn(column); validationEditorController.setSelectedColumn(column);
validationEditorController.updateForm(); validationEditorController.updateForm();
@@ -544,12 +593,12 @@ public class SmartCSVController extends FXMLController {
loadEncodingFromFile(); loadEncodingFromFile();
}); });
} else { } else {
setCsvPreference(CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE); setCsvPreference(defaultPreferences());
loadEncodingFromFile(); loadEncodingFromFile();
} }
} }
private void saveCsvPreferences(CsvPreference csvPreference) { private void saveCsvPreferences(Preferences csvPreference) {
try { try {
createPreferenceFile(); createPreferenceFile();
csvPreferenceFile.setContent(csvPreference); csvPreferenceFile.setContent(csvPreference);
@@ -572,7 +621,7 @@ public class SmartCSVController extends FXMLController {
} }
} }
private void setCsvPreference(CsvPreference csvPreference) { private void setCsvPreference(Preferences csvPreference) {
preferencesController.setCsvPreference(csvPreference); preferencesController.setCsvPreference(csvPreference);
csvFileReader.setCsvPreference(csvPreference); csvFileReader.setCsvPreference(csvPreference);
csvFileWriter.setCsvPreference(csvPreference); csvFileWriter.setCsvPreference(csvPreference);
@@ -596,6 +645,10 @@ public class SmartCSVController extends FXMLController {
//Show open file dialog //Show open file dialog
File file = fileChooser.showOpenDialog(applicationPane.getScene().getWindow()); File file = fileChooser.showOpenDialog(applicationPane.getScene().getWindow());
openFile(storageFile, file);
}
private void openFile(FileStorage storageFile, File file) {
if (file != null) { if (file != null) {
File previousFile = storageFile.getFile(); File previousFile = storageFile.getFile();
storageFile.setFile(file); storageFile.setFile(file);
@@ -674,6 +727,8 @@ public class SmartCSVController extends FXMLController {
tableView.getItems().setAll(currentCsvFile.getContent().getRows()); tableView.getItems().setAll(currentCsvFile.getContent().getRows());
tableView.setEditable(true); tableView.setEditable(true);
totalNumberOfLines.textProperty().setValue("" + currentCsvFile.getContent().getRows().size());
setBottomAnchor(tableView, 0.0); setBottomAnchor(tableView, 0.0);
setTopAnchor(tableView, 0.0); setTopAnchor(tableView, 0.0);
setLeftAnchor(tableView, 0.0); setLeftAnchor(tableView, 0.0);

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -34,18 +34,15 @@ import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter; import javafx.scene.control.TextFormatter;
import ninja.javafx.smartcsv.fx.FXMLController; import ninja.javafx.smartcsv.fx.FXMLController;
import ninja.javafx.smartcsv.preferences.Preferences;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.supercsv.prefs.CsvPreference;
import java.net.URL; import java.net.URL;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
import static ninja.javafx.smartcsv.preferences.QuoteModeHelper.getQuoteMode;
import static ninja.javafx.smartcsv.preferences.QuoteModeHelper.getQuoteModeName;
/** /**
* controller for preferences * controller for preferences
*/ */
@@ -58,15 +55,9 @@ public class PreferencesController extends FXMLController {
@FXML @FXML
private TextField delimiterChar; private TextField delimiterChar;
@FXML
private CheckBox surroundingSpacesNeedQuotes;
@FXML @FXML
private CheckBox ignoreEmptyLines; private CheckBox ignoreEmptyLines;
@FXML
private ComboBox<String> quoteMode;
@FXML @FXML
private ComboBox<String> fileEncoding; private ComboBox<String> fileEncoding;
@@ -83,7 +74,6 @@ public class PreferencesController extends FXMLController {
@Override @Override
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
quoteMode.getItems().addAll("normal", "always", "column");
fileEncoding.getItems().addAll(Charset.availableCharsets().keySet()); fileEncoding.getItems().addAll(Charset.availableCharsets().keySet());
UnaryOperator<TextFormatter.Change> allowOnlyOneCharacter = change -> { UnaryOperator<TextFormatter.Change> allowOnlyOneCharacter = change -> {
@@ -102,24 +92,23 @@ public class PreferencesController extends FXMLController {
} }
private void revalidate() { private void revalidate() {
valid.setValue(quoteChar.getText().length() == 1 && delimiterChar.getText().length() == 1); valid.setValue(quoteChar.getText().length() <= 1 && delimiterChar.getText().length() == 1);
} }
public void setCsvPreference(CsvPreference csvPreference) { public void setCsvPreference(Preferences csvPreference) {
quoteChar.setText(Character.toString(csvPreference.getQuoteChar())); if (csvPreference.quoteChar() != null) {
delimiterChar.setText(Character.toString((char)csvPreference.getDelimiterChar())); quoteChar.setText(csvPreference.quoteChar().toString());
surroundingSpacesNeedQuotes.setSelected(csvPreference.isSurroundingSpacesNeedQuotes()); } else {
ignoreEmptyLines.setSelected(csvPreference.isIgnoreEmptyLines()); quoteChar.setText("");
quoteMode.getSelectionModel().select(getQuoteModeName(csvPreference.getQuoteMode())); }
endOfLineSymbols = csvPreference.getEndOfLineSymbols(); delimiterChar.setText(Character.toString(csvPreference.delimiterChar()));
ignoreEmptyLines.setSelected(csvPreference.ignoreEmptyLines());
endOfLineSymbols = csvPreference.endOfLineSymbols();
} }
public CsvPreference getCsvPreference() { public Preferences getCsvPreference() {
return new CsvPreference.Builder(quoteChar.getText().charAt(0), delimiterChar.getText().charAt(0), endOfLineSymbols) var quote = quoteChar.getText().length() == 0 ? null : quoteChar.getText().charAt(0);
.useQuoteMode(getQuoteMode(quoteMode.getSelectionModel().getSelectedItem())) return new Preferences(quote, delimiterChar.getText().charAt(0), endOfLineSymbols, ignoreEmptyLines.isSelected());
.surroundingSpacesNeedQuotes(surroundingSpacesNeedQuotes.isSelected())
.ignoreEmptyLines(ignoreEmptyLines.isSelected())
.build();
} }
public void setFileEncoding(String fileEncoding) { public void setFileEncoding(String fileEncoding) {

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -26,31 +26,13 @@
package ninja.javafx.smartcsv.preferences; package ninja.javafx.smartcsv.preferences;
import org.supercsv.quote.AlwaysQuoteMode; public record Preferences(
import org.supercsv.quote.ColumnQuoteMode; Character quoteChar,
import org.supercsv.quote.NormalQuoteMode; char delimiterChar,
import org.supercsv.quote.QuoteMode; String endOfLineSymbols,
boolean ignoreEmptyLines) {
/** public static Preferences defaultPreferences() {
* Helper class for mapping quote quoteModeName return new Preferences('\"',',', "\n", true);
*/
public class QuoteModeHelper {
public static QuoteMode getQuoteMode(String quoteModeName) {
switch (quoteModeName) {
case "always": return new AlwaysQuoteMode();
case "column": return new ColumnQuoteMode();
default: return new NormalQuoteMode();
}
}
public static String getQuoteModeName(QuoteMode quoteMode) {
if (quoteMode instanceof AlwaysQuoteMode) {
return "always";
} else if (quoteMode instanceof ColumnQuoteMode) {
return "column";
} else {
return "normal";
}
} }
} }

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -28,27 +28,23 @@ package ninja.javafx.smartcsv.preferences;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import ninja.javafx.smartcsv.FileReader; import ninja.javafx.smartcsv.FileReader;
import org.supercsv.prefs.CsvPreference;
import org.supercsv.quote.AlwaysQuoteMode;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static ninja.javafx.smartcsv.preferences.QuoteModeHelper.getQuoteMode; import static ninja.javafx.smartcsv.preferences.Preferences.defaultPreferences;
/** /**
* file reader for the preferences * file reader for the preferences
*/ */
public class PreferencesFileReader implements FileReader<CsvPreference> { public class PreferencesFileReader implements FileReader<Preferences> {
private CsvPreference csvPreference; private Preferences csvPreference;
public PreferencesFileReader() { public PreferencesFileReader() {
csvPreference = new CsvPreference. csvPreference = defaultPreferences();
Builder(CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE).
useQuoteMode(new AlwaysQuoteMode()).build();
} }
@Override @Override
@@ -56,22 +52,15 @@ public class PreferencesFileReader implements FileReader<CsvPreference> {
Map config = new GsonBuilder().create().fromJson(new java.io.FileReader(filename), HashMap.class); Map config = new GsonBuilder().create().fromJson(new java.io.FileReader(filename), HashMap.class);
if (config != null) { if (config != null) {
char quoteChar = config.get("quoteChar").toString().charAt(0); Character quoteChar = config.get("quoteChar") == null ? null : config.get("quoteChar").toString().charAt(0);
char delimiterChar = config.get("delimiterChar").toString().charAt(0); char delimiterChar = config.get("delimiterChar").toString().charAt(0);
String endOfLineSymbols = config.get("endOfLineSymbols").toString(); String endOfLineSymbols = config.get("endOfLineSymbols").toString();
boolean surroundingSpacesNeedQuotes = (Boolean) config.get("surroundingSpacesNeedQuotes");
boolean ignoreEmptyLines = (Boolean) config.get("ignoreEmptyLines"); boolean ignoreEmptyLines = (Boolean) config.get("ignoreEmptyLines");
String quoteMode = config.get("quoteMode").toString(); csvPreference = new Preferences(quoteChar, delimiterChar, endOfLineSymbols, ignoreEmptyLines);
csvPreference = new CsvPreference.Builder(quoteChar, delimiterChar, endOfLineSymbols)
.useQuoteMode(getQuoteMode(quoteMode))
.surroundingSpacesNeedQuotes(surroundingSpacesNeedQuotes)
.ignoreEmptyLines(ignoreEmptyLines)
.build();
} }
} }
public CsvPreference getContent() { public Preferences getContent() {
return csvPreference; return csvPreference;
} }

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +29,6 @@ package ninja.javafx.smartcsv.preferences;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import ninja.javafx.smartcsv.FileWriter; import ninja.javafx.smartcsv.FileWriter;
import org.supercsv.prefs.CsvPreference;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -40,22 +39,20 @@ import java.util.Map;
/** /**
* Save preferences to configuration file * Save preferences to configuration file
*/ */
public class PreferencesFileWriter implements FileWriter<CsvPreference> { public class PreferencesFileWriter implements FileWriter<Preferences> {
private CsvPreference csvPreference; private Preferences csvPreference;
public void setContent(CsvPreference csvPreference) { public void setContent(Preferences csvPreference) {
this.csvPreference = csvPreference; this.csvPreference = csvPreference;
} }
public void write(File file) throws IOException { public void write(File file) throws IOException {
Map<String, Object> preferences = new HashMap<>(); Map<String, Object> preferences = new HashMap<>();
preferences.put("quoteChar", Character.toString(csvPreference.getQuoteChar())); preferences.put("quoteChar", csvPreference.quoteChar() == null ? null: csvPreference.quoteChar().toString());
preferences.put("delimiterChar", Character.toString((char)csvPreference.getDelimiterChar())); preferences.put("delimiterChar", Character.toString((char)csvPreference.delimiterChar()));
preferences.put("endOfLineSymbols", csvPreference.getEndOfLineSymbols()); preferences.put("endOfLineSymbols", csvPreference.endOfLineSymbols());
preferences.put("surroundingSpacesNeedQuotes", csvPreference.isSurroundingSpacesNeedQuotes()); preferences.put("ignoreEmptyLines", csvPreference.ignoreEmptyLines());
preferences.put("ignoreEmptyLines", csvPreference.isIgnoreEmptyLines());
preferences.put("quoteMode", QuoteModeHelper.getQuoteModeName(csvPreference.getQuoteMode()));
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new GsonBuilder().setPrettyPrinting().create();
Files.write(file.toPath(), gson.toJson(preferences).getBytes()); Files.write(file.toPath(), gson.toJson(preferences).getBytes());

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -23,6 +23,7 @@
</Label> </Label>
<Label text="AOE Takashi (https://github.com/aoetk)" /> <Label text="AOE Takashi (https://github.com/aoetk)" />
<Label text="Hasan Kara (https://github.com/haisi)" /> <Label text="Hasan Kara (https://github.com/haisi)" />
<Label text="apixandru (https://github.com/apixandru)" />
<Label text="3rd party software"> <Label text="3rd party software">
<VBox.margin> <VBox.margin>
<Insets top="8.0" /> <Insets top="8.0" />
@@ -60,8 +61,8 @@
<Hyperlink onAction="#openLinkInBrowser" text="http://www.groovy-lang.org/" GridPane.columnIndex="1" GridPane.rowIndex="2" /> <Hyperlink onAction="#openLinkInBrowser" text="http://www.groovy-lang.org/" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Label text="spring framework" GridPane.rowIndex="3" /> <Label text="spring framework" GridPane.rowIndex="3" />
<Hyperlink onAction="#openLinkInBrowser" text="https://spring.io/" GridPane.columnIndex="1" GridPane.rowIndex="3" /> <Hyperlink onAction="#openLinkInBrowser" text="https://spring.io/" GridPane.columnIndex="1" GridPane.rowIndex="3" />
<Label text="supercsv" GridPane.rowIndex="4" /> <Label text="FastCSV" GridPane.rowIndex="4" />
<Hyperlink onAction="#openLinkInBrowser" text="http://super-csv.github.io/super-csv/" GridPane.columnIndex="1" GridPane.rowIndex="4" /> <Hyperlink onAction="#openLinkInBrowser" text="https://github.com/osiegmar/FastCSV" GridPane.columnIndex="1" GridPane.rowIndex="4" />
<Label text="Gson" GridPane.rowIndex="5" /> <Label text="Gson" GridPane.rowIndex="5" />
<Hyperlink onAction="#openLinkInBrowser" text="https://github.com/google/gson/" GridPane.columnIndex="1" GridPane.rowIndex="5" /> <Hyperlink onAction="#openLinkInBrowser" text="https://github.com/google/gson/" GridPane.columnIndex="1" GridPane.rowIndex="5" />
<Label text="commons-validator" GridPane.rowIndex="6" /> <Label text="commons-validator" GridPane.rowIndex="6" />
@@ -89,7 +90,7 @@
<Font size="18.0" /> <Font size="18.0" />
</font> </font>
</Label> </Label>
<TextArea editable="false" prefHeight="200.0" prefWidth="200.0" text="Copyright (c) 2015-2019 Andreas Billmann &lt;andreas.billmann@javafx.ninja&gt;&#10;&#10;Permission is hereby granted, free of charge, to any person obtaining a copy&#10;of this software and associated documentation files (the &quot;Software&quot;), to deal&#10;in the Software without restriction, including without limitation the rights&#10;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#10;copies of the Software, and to permit persons to whom the Software is&#10;furnished to do so, subject to the following conditions:&#10;&#10;The above copyright notice and this permission notice shall be included in&#10;all copies or substantial portions of the Software.&#10;&#10;&#10;&#10;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#10;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#10;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#10;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#10;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#10;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN&#10;THE SOFTWARE." wrapText="true" /> <TextArea editable="false" prefHeight="200.0" prefWidth="200.0" text="Copyright (c) 2015-2021 Andreas Billmann &lt;andreas.billmann@javafx.ninja&gt;&#10;&#10;Permission is hereby granted, free of charge, to any person obtaining a copy&#10;of this software and associated documentation files (the &quot;Software&quot;), to deal&#10;in the Software without restriction, including without limitation the rights&#10;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#10;copies of the Software, and to permit persons to whom the Software is&#10;furnished to do so, subject to the following conditions:&#10;&#10;The above copyright notice and this permission notice shall be included in&#10;all copies or substantial portions of the Software.&#10;&#10;&#10;&#10;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#10;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#10;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#10;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#10;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#10;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN&#10;THE SOFTWARE." wrapText="true" />
</children> </children>
<opaqueInsets> <opaqueInsets>
<Insets /> <Insets />

View File

@@ -1,5 +1,5 @@
application.name = SmartCSV.fx application.name = SmartCSV.fx
application.version = 1.0.0 application.version = 1.3.0
# fxml views # fxml views
fxml.smartcvs.view = /ninja/javafx/smartcsv/fx/smartcsv.fxml fxml.smartcvs.view = /ninja/javafx/smartcsv/fx/smartcsv.fxml

View File

@@ -13,22 +13,16 @@
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
</rowConstraints> </rowConstraints>
<children> <children>
<Label text="%preferences.quoteChar" /> <Label text="%preferences.quoteChar" />
<TextField fx:id="quoteChar" GridPane.columnIndex="1" /> <TextField fx:id="quoteChar" GridPane.columnIndex="1" />
<Label text="%preferences.delimiterChar" GridPane.rowIndex="1" /> <Label text="%preferences.delimiterChar" GridPane.rowIndex="1" />
<TextField fx:id="delimiterChar" GridPane.columnIndex="1" GridPane.rowIndex="1" /> <TextField fx:id="delimiterChar" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label text="%preferences.surroundingSpacesNeedQuotes" GridPane.rowIndex="2" /> <Label text="%preferences.ignoreEmptyLines" GridPane.rowIndex="2" />
<CheckBox fx:id="surroundingSpacesNeedQuotes" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="2" /> <CheckBox fx:id="ignoreEmptyLines" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Label text="%preferences.ignoreEmptyLines" GridPane.rowIndex="3" /> <Label text="%preferences.fileEncoding" GridPane.rowIndex="3" />
<CheckBox fx:id="ignoreEmptyLines" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="3" /> <ComboBox fx:id="fileEncoding" editable="true" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="3" />
<Label text="%preferences.quoteMode" GridPane.rowIndex="4" />
<ComboBox fx:id="quoteMode" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="4" />
<Label text="%preferences.fileEncoding" GridPane.rowIndex="5" />
<ComboBox fx:id="fileEncoding" editable="true" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="5" />
</children> </children>
<padding> <padding>
<Insets bottom="8.0" left="8.0" right="8.0" top="8.0" /> <Insets bottom="8.0" left="8.0" right="8.0" top="8.0" />

View File

@@ -5,7 +5,6 @@
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import java.net.URL?>
<BorderPane fx:id="applicationPane" maxHeight="-Infinity" maxWidth="1000.0" minHeight="700.0" minWidth="-Infinity" prefHeight="700.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8.0.101" xmlns:fx="http://javafx.com/fxml/1"> <BorderPane fx:id="applicationPane" maxHeight="-Infinity" maxWidth="1000.0" minHeight="700.0" minWidth="-Infinity" prefHeight="700.0" prefWidth="1000.0" xmlns="http://javafx.com/javafx/8.0.101" xmlns:fx="http://javafx.com/fxml/1">
<top> <top>
<VBox id="background" prefWidth="100.0" BorderPane.alignment="CENTER"> <VBox id="background" prefWidth="100.0" BorderPane.alignment="CENTER">
@@ -265,9 +264,6 @@
</center> </center>
<left> <left>
</left> </left>
<stylesheets>
<URL value="@/ninja/javafx/smartcsv/fx/smartcsv.css" />
</stylesheets>
<bottom> <bottom>
<GridPane hgap="8.0" BorderPane.alignment="CENTER"> <GridPane hgap="8.0" BorderPane.alignment="CENTER">
<columnConstraints> <columnConstraints>
@@ -280,6 +276,8 @@
<ColumnConstraints hgrow="NEVER" minWidth="10.0" /> <ColumnConstraints hgrow="NEVER" minWidth="10.0" />
<ColumnConstraints fillWidth="false" halignment="RIGHT" hgrow="NEVER" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints fillWidth="false" halignment="RIGHT" hgrow="NEVER" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints fillWidth="false" halignment="RIGHT" hgrow="NEVER" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
@@ -293,6 +291,8 @@
<Label fx:id="configurationName" GridPane.columnIndex="5" GridPane.hgrow="ALWAYS" /> <Label fx:id="configurationName" GridPane.columnIndex="5" GridPane.hgrow="ALWAYS" />
<Label text="%lineNumber" GridPane.columnIndex="7" /> <Label text="%lineNumber" GridPane.columnIndex="7" />
<Label fx:id="currentLineNumber" text="" GridPane.columnIndex="8" /> <Label fx:id="currentLineNumber" text="" GridPane.columnIndex="8" />
<Label text="%totalNumberOfLines" GridPane.columnIndex="9" />
<Label fx:id="totalNumberOfLines" text="0" GridPane.columnIndex="10" />
</children> </children>
<BorderPane.margin> <BorderPane.margin>
<Insets bottom="4.0" left="8.0" right="8.0" top="4.0" /> <Insets bottom="4.0" left="8.0" right="8.0" top="4.0" />

View File

@@ -29,6 +29,10 @@ dialog.exit.title = Close Application
dialog.exit.header.text = Do you want to close application? dialog.exit.header.text = Do you want to close application?
dialog.exit.text = There are changes made to the csv file. If you close now, the changes are lost! dialog.exit.text = There are changes made to the csv file. If you close now, the changes are lost!
dialog.changes.title = Discard changes
dialog.changes.header.text = Do you want to discard changes?
dialog.changes.text = There are changes made to the csv file. If you open a new file, the changes are lost!
dialog.preferences.title = Preferences dialog.preferences.title = Preferences
dialog.preferences.header.text = Preferences dialog.preferences.header.text = Preferences
@@ -87,6 +91,7 @@ dialog.validation.rules.header = Validation rules of column "{0}"
context.menu.edit.column.rules = Edit rules context.menu.edit.column.rules = Edit rules
lineNumber = Selected line: lineNumber = Selected line:
totalNumberOfLines = Lines:
log.header.message = {0} has {1} errors log.header.message = {0} has {1} errors
log.message = row {0} column {1} : {2} log.message = row {0} column {1} : {2}

View File

@@ -45,6 +45,10 @@ dialog.exit.title = Anwendung beenden
dialog.exit.header.text = M\u00f6chten Sie wirklich die Anwendung beenden? dialog.exit.header.text = M\u00f6chten Sie wirklich die Anwendung beenden?
dialog.exit.text = Es gibt noch ungespeicherte \u00c4nderungen, die verloren gehen, wenn Sie die Anwendung jetzt beenden. dialog.exit.text = Es gibt noch ungespeicherte \u00c4nderungen, die verloren gehen, wenn Sie die Anwendung jetzt beenden.
dialog.changes.title = Änderungen verwerfen
dialog.changes.header.text = Wollen Sie Ihre Änderungen verwerfen?
dialog.changes.text = Es gibt noch ungespeicherte \u00c4nderungen, die verloren gehen, wenn Sie die Datei laden.
preferences.quoteChar = Einfassungszeichen: preferences.quoteChar = Einfassungszeichen:
preferences.delimiterChar = Trennzeichen: preferences.delimiterChar = Trennzeichen:
preferences.ignoreEmptyLines = Leere Zeilen ignorieren: preferences.ignoreEmptyLines = Leere Zeilen ignorieren:
@@ -97,6 +101,7 @@ dialog.validation.rules.header = Pr\u00fcfregeln f\u00fcr die Spalte "{0}"
context.menu.edit.column.rules = Pr\u00fcfregeln bearbeiten context.menu.edit.column.rules = Pr\u00fcfregeln bearbeiten
lineNumber = Ausgew\u00e4hlte Zeile: lineNumber = Ausgew\u00e4hlte Zeile:
totalNumberOfLines = Zeilen:
log.header.message = {0} hat {1} Fehler log.header.message = {0} hat {1} Fehler
log.message = Zeile {0} Spalte {1} : {2} log.message = Zeile {0} Spalte {1} : {2}

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -28,8 +28,9 @@ package ninja.javafx.smartcsv.fx.table.model;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
/** /**
* unit test for the csv model * unit test for the csv model

View File

@@ -2,9 +2,10 @@ package ninja.javafx.smartcsv.fx.table.model;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.hasKey;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/** /**
* unit test for row class * unit test for row class

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,7 +2,7 @@
The MIT License (MIT) The MIT License (MIT)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Copyright (c) 2015-2019 javafx.ninja <info@javafx.ninja> Copyright (c) 2015-2021 javafx.ninja <info@javafx.ninja>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -38,9 +38,10 @@ import java.util.stream.Stream;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.Assert.assertTrue;
/** /**
* unit test for header validator * unit test for header validator

View File

@@ -12,9 +12,9 @@ import java.util.stream.Stream;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.joining;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/** /**
* unit test for validator * unit test for validator