diff --git a/DzieCoin.iml b/DzieCoin.iml
index dbc5699..23fef75 100644
--- a/DzieCoin.iml
+++ b/DzieCoin.iml
@@ -13,5 +13,6 @@
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 89b4625..190571a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,5 +20,10 @@
mysql-connector-java
8.0.30
+
+ com.github.davidmoten
+ commons-csv
+ 1.6.002
+
\ No newline at end of file
diff --git a/src/main/java/pl/mikorosa/dziecoin/Blockchain.java b/src/main/java/pl/mikorosa/dziecoin/Blockchain.java
index c33520e..e42a8d8 100644
--- a/src/main/java/pl/mikorosa/dziecoin/Blockchain.java
+++ b/src/main/java/pl/mikorosa/dziecoin/Blockchain.java
@@ -1,13 +1,35 @@
package pl.mikorosa.dziecoin;
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVPrinter;
+import org.apache.commons.csv.CSVRecord;
+
+import javax.swing.*;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class Blockchain {
private List blocks;
private int length;
+ private boolean importToDatabase;
- public Blockchain(String genesisBlockRecipient) {
+ public static void clearAllTablesInDatabase() {
+ Main.db.getTransactionsTable().cleanTable();
+ Main.db.getNFTsTable().cleanTable();
+ Main.db.getBlocksTable().cleanTable();
+ }
+
+ public Blockchain(String genesisBlockRecipient, boolean importToDatabase) {
+ System.out.println("Automatic import to database " + (importToDatabase ? "enabled" : "disabled"));
+ if(importToDatabase) clearAllTablesInDatabase();
+
+ this.importToDatabase = importToDatabase;
blocks = new ArrayList<>();
length = blocks.size();
@@ -27,6 +49,205 @@ public class Blockchain {
}
}
+ public Blockchain(String blocksCSVPath, String transactionCSVPath, String NFTsCSVPath, boolean importToDatabase) {
+ System.out.println("Automatic import to database " + (importToDatabase ? "enabled" : "disabled"));
+ if(importToDatabase) clearAllTablesInDatabase();
+ this.importToDatabase = importToDatabase;
+ this.blocks = new ArrayList<>();
+ this.length = this.blocks.size();
+
+ try {
+ List toMine = importData(blocksCSVPath, transactionCSVPath, NFTsCSVPath, importToDatabase);
+ for (Block block : toMine) {
+ this.addBlock(block);
+ }
+ System.out.println("Import complete");
+ } catch (IOException e) {
+ System.out.println("Error while importing data: ");
+ e.printStackTrace();
+ JOptionPane.showMessageDialog(null, "Unable to import: " + e.getMessage(), "Fatal error", JOptionPane.ERROR_MESSAGE);
+ System.exit(1);
+ } catch (BlockchainIntegrityException e) {
+ JOptionPane.showMessageDialog(null, "Unable to add a block: " + e.getMessage(), "Fatal error", JOptionPane.ERROR_MESSAGE);
+ System.exit(1);
+ }
+ }
+
+ public Blockchain(boolean importToDatabase) {
+ this.blocks = new ArrayList<>();
+ this.length = this.blocks.size();
+ this.importToDatabase = importToDatabase;
+
+ this.importFromDatabase();
+ System.out.println("Import complete");
+ }
+
+ public void importFromDatabase() {
+ System.out.println("Importing from database...");
+ List blocksToImport = new ArrayList<>();
+
+ System.out.println("Importing block data...");
+ List