]> git.mxchange.org Git - jfinancials-lib.git/blobdiff - Addressbook/src/org/mxchange/addressbook/database/backend/csv/CsvDatabaseBackend.java
Added a lot stuff:
[jfinancials-lib.git] / Addressbook / src / org / mxchange / addressbook / database / backend / csv / CsvDatabaseBackend.java
index b898e9be168303638282f077f8376c12c4d34c4f..0bc97f3a78b9d12436195296e223d2ce7c44639e 100644 (file)
@@ -93,6 +93,20 @@ public class CsvDatabaseBackend extends BaseDatabaseBackend implements CsvBacken
        return list.iterator();\r
     }\r
 \r
+    /**\r
+     * Shuts down this backend\r
+     */\r
+    @Override\r
+    public void doShutdown () {\r
+       try {\r
+           // Close file\r
+           this.storageFile.close();\r
+       } catch (final IOException ex) {\r
+           this.getLogger().catching(ex);\r
+           System.exit(1);\r
+       }\r
+    }\r
+\r
     /**\r
      * Get length of underlaying file\r
      *\r
@@ -155,7 +169,33 @@ public class CsvDatabaseBackend extends BaseDatabaseBackend implements CsvBacken
        this.getLogger().debug(MessageFormat.format("str({0})={1}", str.length(), str));\r
 \r
        // The string is now a valid CSV string\r
-       this.storageFile.writeChars(str);\r
+       this.storageFile.writeBytes(str);\r
+    }\r
+\r
+    /**\r
+     * Adds given contact to list\r
+     * \r
+     * @param contact Contact instance to add\r
+     * @param list List instance\r
+     */\r
+    private void addContactToList (final Contact contact, final List<Contact> list) {\r
+       // Debug message\r
+       this.getLogger().debug(MessageFormat.format("contact={0}", contact));\r
+\r
+       // Is the contact read?\r
+       if (contact instanceof Contact) {\r
+           // Then add it\r
+           boolean added = list.add(contact);\r
+\r
+           // Debug message\r
+           this.getLogger().debug(MessageFormat.format("contact={0} added={1}", contact, added));\r
+\r
+           // Has it been added?\r
+           if (!added) {\r
+               // Not added\r
+               this.getLogger().warn("Contact object has not been added.");\r
+           }\r
+       }\r
     }\r
 \r
     /**\r
@@ -191,9 +231,15 @@ public class CsvDatabaseBackend extends BaseDatabaseBackend implements CsvBacken
        // First rewind\r
        this.rewind();\r
 \r
+       // Get file size and divide it by 140 (possible average length of one line)\r
+       int lines = Math.round(this.length() / 140 + 0.5f);\r
+\r
+       // Debug message\r
+       this.getLogger().debug(MessageFormat.format("lines={0}", lines));\r
+\r
        // Instance list\r
        // @TODO The maximum length could be guessed from file size?\r
-       List<Contact> list = new ArrayList<>();\r
+       List<Contact> list = new ArrayList<>(lines);\r
 \r
        // Init variables\r
        StringTokenizer tokenizer;\r
@@ -416,11 +462,8 @@ public class CsvDatabaseBackend extends BaseDatabaseBackend implements CsvBacken
                count++;\r
            }\r
 \r
-           // Is the contact read?\r
-           if (contact instanceof Contact) {\r
-               // Then add it\r
-               assert(list.add(contact));\r
-           }\r
+           // Add contact\r
+           this.addContactToList(contact, list);\r
        }\r
 \r
        // Return finished list\r