]> git.mxchange.org Git - addressbook-swing.git/blobdiff - Addressbook/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactDatabaseFrontend.java
Cleaned up logger XML + renamed interface fixed
[addressbook-swing.git] / Addressbook / src / org / mxchange / addressbook / database / frontend / contact / AddressbookContactDatabaseFrontend.java
index 6fb08169feae3b14a3a8743e16f62b1d5f176acf..89802a8b5198ea3bc1f789da99e5dd1a21cc8856 100644 (file)
 package org.mxchange.addressbook.database.frontend.contact;
 
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.SQLException;
 import java.text.MessageFormat;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.StringTokenizer;
 import org.mxchange.addressbook.contact.book.BookContact;
 import org.mxchange.addressbook.contact.user.UserContact;
@@ -28,9 +30,13 @@ import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException;
 import org.mxchange.addressbook.manager.contact.AddressbookContactManager;
 import org.mxchange.jcore.contact.Contact;
 import org.mxchange.jcore.contact.Gender;
+import org.mxchange.jcore.criteria.searchable.SearchCriteria;
+import org.mxchange.jcore.criteria.searchable.SearchableCriteria;
 import org.mxchange.jcore.database.frontend.BaseDatabaseFrontend;
+import org.mxchange.jcore.database.result.Result;
 import org.mxchange.jcore.database.storage.Storeable;
 import org.mxchange.jcore.exceptions.BadTokenException;
+import org.mxchange.jcore.exceptions.CorruptedDatabaseFileException;
 import org.mxchange.jcore.exceptions.UnsupportedDatabaseBackendException;
 
 /**
@@ -44,8 +50,10 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
         * Constructor which accepts a contact manager
         *
         * @param manager Manager instance
+        * @throws org.mxchange.jcore.exceptions.UnsupportedDatabaseBackendException If the database backend is not supported
+        * @throws java.sql.SQLException If an SQL error occurs
         */
-       public AddressbookContactDatabaseFrontend (final AddressbookContactManager manager) {
+       public AddressbookContactDatabaseFrontend (final AddressbookContactManager manager) throws UnsupportedDatabaseBackendException, SQLException {
                // Call own constructor
                this();
 
@@ -63,22 +71,19 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
        }
 
        /**
-        * Basic constrcutor
+        * Default but protected constructor
+        * @throws org.mxchange.jcore.exceptions.UnsupportedDatabaseBackendException If the database backend is not supported
+        * @throws java.sql.SQLException Any SQL exception from e.g. MySQL connector
         */
-       protected AddressbookContactDatabaseFrontend () {
+       protected AddressbookContactDatabaseFrontend () throws UnsupportedDatabaseBackendException, SQLException {
                // Trace message
                this.getLogger().trace("CALLED!"); //NOI18N
 
                // Set "table" name
                this.setTableName("contacts"); //NOI18N
 
-               try {
-                       // Initalize backend
-                       this.initBackend();
-               } catch (final UnsupportedDatabaseBackendException | SQLException ex) {
-                       // Abort program
-                       this.abortProgramWithException(ex);
-               }
+               // Initalize backend
+               this.initBackend();
        }
 
        /**
@@ -120,7 +125,7 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
         * Shuts down the database layer
         */
        @Override
-       public void doShutdown () {
+       public void doShutdown () throws SQLException, IOException {
                // Trace message
                this.getLogger().trace("CALLED!"); //NOI18N
 
@@ -131,6 +136,11 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
                this.getLogger().trace("EXIT!"); //NOI18N
        }
 
+       @Override
+       public Object emptyStringToNull (final String key, final Object value) {
+               throw new UnsupportedOperationException(MessageFormat.format("Not supported yet: key={0},value={1}", key, value));
+       }
+
        /**
         * Some "getter" for total contact count
         *
@@ -153,7 +163,7 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
                this.getLogger().trace("CALLED!"); //NOI18N
 
                // Get row index back from backend
-               int rowIndex = this.getBackend().getRowIndexFromColumn(AddressbookContactDatabaseConstants.COLUMN_NAME_OWN_CONTACT, true);
+               int rowIndex = this.getBackend().getRowIndexFromColumn(AddressbookContactDatabaseConstants.COLUMN_OWN_CONTACT, true);
 
                // Debug message
                this.getLogger().debug(MessageFormat.format("rowIndex={0}", rowIndex));
@@ -226,33 +236,25 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
         * Checks whether own contact is found in database
         *
         * @return Whether own contact is found
+        * @throws org.mxchange.jcore.exceptions.BadTokenException Continued throw
+        * @throws org.mxchange.jcore.exceptions.CorruptedDatabaseFileException If the database file is damaged
+        * @throws java.lang.NoSuchMethodException If a method cannot be found
+        * @throws java.lang.IllegalAccessException If a method is not accessible
+        * @throws java.lang.reflect.InvocationTargetException Any other problems?
         */
        @Override
-       public boolean isOwnContactFound () throws SQLException {
-               // Deligate this call to backend
-               return this.getBackend().isRowFound(AddressbookContactDatabaseConstants.COLUMN_NAME_OWN_CONTACT, true);
-       }
-
-       /**
-        * Parses given line from database backend into a Storeable instance. Please
-        * note that not all backends need this.
-        *
-        * @param line Line from database backend
-        * @return A Storeable instance
-        */
-       @Override
-       public Storeable parseLineToStoreable (final String line) throws BadTokenException {
-               // Trace message
-               this.getLogger().trace(MessageFormat.format("line={0} - CALLED!", line)); //NOI18N
+       public boolean isOwnContactFound () throws SQLException, IOException, BadTokenException, CorruptedDatabaseFileException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+               // Get search criteria instance
+               SearchableCriteria critera = new SearchCriteria();
 
-               // Call inner method
-               Contact contact = this.parseLineToContact(line);
+               // Add condition
+               critera.addCriteria(AddressbookContactDatabaseConstants.COLUMN_OWN_CONTACT, true);
 
-               // Debug message
-               this.getLogger().debug(MessageFormat.format("contact={0}", contact));
+               // Get result
+               Result<? extends Storeable> result = this.getBackend().doSelectByCriteria(critera);
 
-               // Return it
-               return (Storeable) contact;
+               // Deligate this call to backend
+               return result.hasNext();
        }
 
        /**
@@ -275,250 +277,14 @@ public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend imp
                throw new IllegalStateException("This should not be reached");
        }
 
-       /**
-        * Parses given line and creates a Contact instance
-        * 
-        * @param line Raw line to parse
-        *
-        * @return Contact instance
-        */
-       private Contact parseLineToContact (final String line) throws BadTokenException {
-               // Trace message
-               this.getLogger().trace(MessageFormat.format("line={0} - CALLED!", line)); //NOI18N
-
-               // Init A lot variables
-               Long num = null;
-               Boolean bool = null;
-               Gender gender = null;
-               int count = 0;
-               Contact contact = null;
-
-               // Debug message
-               this.getLogger().debug(MessageFormat.format("line={0}", line)); //NOI18N
-
-               // Then tokenize it
-               // @TODO Move this into separate method
-               StringTokenizer tokenizer = new StringTokenizer(line, ";"); //NOI18N
-
-               // Reset variables
-               count = 0;
-               contact = null;
-
-               // The tokens are now available, so get all
-               while (tokenizer.hasMoreElements()) {
-                       // Reset variables
-                       num = null;
-                       bool = null;
-
-                       // Get next token
-                       String token = tokenizer.nextToken();
-
-                       // If char " is at pos 2 (0,1,2), then cut it of there
-                       if ((token.charAt(0) != '"') && (token.charAt(2) == '"')) {
-                               // UTF-8 writer characters found
-                               token = token.substring(2);
-                       }
-
-                       // Debug message
-                       this.getLogger().debug(MessageFormat.format("token={0}", token)); //NOI18N
-
-                       // Verify token, it must have double-quotes on each side
-                       if ((!token.startsWith("\"")) || (!token.endsWith("\""))) { //NOI18N
-                               // Something bad was read
-                               throw new BadTokenException(token, count); //NOI18N
-                       }
-
-                       // All fine, so remove it
-                       String strippedToken = token.substring(1, token.length() - 1);
-
-                       // Is the string's content "null"?
-                       if (strippedToken.equals("null")) { //NOI18N
-                               // Debug message
-                               this.getLogger().debug(MessageFormat.format("strippedToken={0} - NULL!", strippedToken)); //NOI18N
-
-                               // This needs to be set to null
-                               strippedToken = null;
-                       }
-
-                       // Debug message
-                       this.getLogger().debug(MessageFormat.format("strippedToken={0}", strippedToken)); //NOI18N
-
-                       // Now, let's try a number check, if no null
-                       if (strippedToken != null) {
-                               // Okay, no null, maybe the string bears a decimal number?
-                               try {
-                                       num = Long.valueOf(strippedToken);
-
-                                       // Debug message
-                                       this.getLogger().debug(MessageFormat.format("strippedToken={0} - NUMBER!", strippedToken)); //NOI18N
-                               } catch (final NumberFormatException ex) {
-                                       // No number, then set default
-                                       num = null;
-                               }
-                       }
-
-                       // Now, let's try a boolean check, if no null
-                       if ((strippedToken != null) && (num == null) && ((strippedToken.equals("true")) || (strippedToken.equals("false")))) { //NOI18N
-                               // Debug message
-                               this.getLogger().debug(MessageFormat.format("strippedToken={0} - BOOLEAN!", strippedToken)); //NOI18N
-
-                               // parseBoolean() is relaxed, so no exceptions
-                               bool = Boolean.valueOf(strippedToken);
-                       }
-
-                       // Debug message
-                       this.getLogger().debug(MessageFormat.format("strippedToken={0},num={1},bool={2}", strippedToken, num, bool)); //NOI18N
-
-                       // Now, let's try a gender check, if no null
-                       if ((strippedToken != null) && (num == null) && (bool == null) && (Gender.valueOf(strippedToken) instanceof Gender)) { //NOI18N
-                               // Get first character
-                               gender = Gender.valueOf(strippedToken);
-
-                               // Debug message
-                               this.getLogger().debug(MessageFormat.format("strippedToken={0},gender={1}", strippedToken, gender)); //NOI18N
-
-                               // This instance must be there
-                               assert (gender instanceof Gender) : MessageFormat.format("gender is not set by Gender.fromChar({0})", strippedToken); //NOI18N
-                       }
-
-                       // Now it depends on the counter which position we need to check
-                       switch (count) {
-                               case 0: // isOwnContact
-                                       assert ((bool instanceof Boolean));
-
-                                       // Debug message
-                                       this.getLogger().debug(MessageFormat.format("bool={0}", bool)); //NOI18N
-
-                                       // Is it own contact?
-                                       if (true == bool) {
-                                               // Debug message
-                                               this.getLogger().debug("Creating UserContact object ..."); //NOI18N
-
-                                               // Own entry
-                                               contact = new UserContact();
-                                       } else {
-                                               // Debug message
-                                               this.getLogger().debug("Creating BookContact object ..."); //NOI18N
-
-                                               // Other contact
-                                               contact = new BookContact();
-                                       }
-                                       break;
-
-                               case 1: // Gender
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setGender(gender);
-                                       break;
-
-                               case 2: // Surname
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-                                       assert (gender instanceof Gender) : "gender instance is not set"; //NOI18N
-
-                                       // Update data
-                                       contact.setSurname(strippedToken);
-                                       break;
-
-                               case 3: // Family name
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-                                       assert (gender instanceof Gender) : "gender instance is not set"; //NOI18N
-
-                                       // Update data
-                                       contact.setFamilyName(strippedToken);
-                                       break;
-
-                               case 4: // Company name
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-                                       assert (gender instanceof Gender) : "gender instance is not set"; //NOI18N
-
-                                       // Update data
-                                       contact.setCompanyName(strippedToken);
-                                       break;
-
-                               case 5: // Street number
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setHouseNumber(num);
-                                       break;
-
-                               case 6: // ZIP code
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setZipCode(num);
-                                       break;
-
-                               case 7: // City name
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setCity(strippedToken);
-                                       break;
-
-                               case 8: // Country code
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setCountryCode(strippedToken);
-                                       break;
-
-                               case 9: // Phone number
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setPhoneNumber(strippedToken);
-                                       break;
-
-                               case 10: // Fax number
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setFaxNumber(strippedToken);
-                                       break;
-
-                               case 11: // Cellphone number
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setCellphoneNumber(strippedToken);
-                                       break;
-
-                               case 12: // Email address
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setEmailAddress(strippedToken);
-                                       break;
-
-                               case 13: // Birthday
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setBirthday(strippedToken);
-                                       break;
-
-                               case 14: // Comment
-                                       assert (contact instanceof Contact) : "First token was not boolean"; //NOI18N
-
-                                       // Update data
-                                       contact.setComment(strippedToken);
-                                       break;
-
-                               default: // New data entry
-                                       this.getLogger().warn(MessageFormat.format("Will not handle unknown data {0} at index {1}", strippedToken, count)); //NOI18N
-                                       break;
-                       }
-
-                       // Increment counter for next round
-                       count++;
-               }
-
-               // Trace message
-               this.getLogger().trace(MessageFormat.format("contact={0} - EXIT!", contact)); //NOI18N
+       @Override
+       public Storeable toStoreable (final Map<String, String> map) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+               throw new UnsupportedOperationException("Not supported yet: map=" + map);
+       }
 
-               // Return finished instance
-               return contact;
+       @Override
+       public String getIdName () {
+               // Return id column
+               return AddressbookContactDatabaseConstants.COLUMN_ID;
        }
 }