From 1702a5356aeeb74e7654b96fa253fb3b2050f0a9 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Fri, 4 Sep 2015 15:28:43 +0200 Subject: [PATCH] =?utf8?q?Removed=20all=20TDGP-related=20classes=20as=20Pe?= =?utf8?q?rsistence=20is=20coming=20+=20updated=20jcore=20Signed-off-by:Ro?= =?utf8?q?land=20H=C3=A4der=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- lib/jcore.jar | Bin 115002 -> 35968 bytes .../AddressbookContactDatabaseConstants.java | 40 --- .../AddressbookContactDatabaseFrontend.java | 286 ------------------ .../contact/AddressbookContactFrontend.java | 94 ------ .../contact/AddressbookContactManager.java | 2 - 5 files changed, 422 deletions(-) delete mode 100644 src/org/mxchange/addressbook/database/contact/AddressbookContactDatabaseConstants.java delete mode 100644 src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactDatabaseFrontend.java delete mode 100644 src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactFrontend.java diff --git a/lib/jcore.jar b/lib/jcore.jar index a12ac5b19d5bcc7db279d9eb1a63371754fe22ac..61bf6e66ad6bd0bf8dd1426ca007c203375c1a60 100644 GIT binary patch delta 10954 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 literal 115002 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 diff --git a/src/org/mxchange/addressbook/database/contact/AddressbookContactDatabaseConstants.java b/src/org/mxchange/addressbook/database/contact/AddressbookContactDatabaseConstants.java deleted file mode 100644 index 4596c579..00000000 --- a/src/org/mxchange/addressbook/database/contact/AddressbookContactDatabaseConstants.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2015 Roland Haeder - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.mxchange.addressbook.database.contact; - -/** - * A class holding constants for contact table - * - * @author Roland Haeder - */ -public final class AddressbookContactDatabaseConstants { - /** - * Column own_contact - */ - public static final String COLUMN_OWN_CONTACT = "own_contact"; //NOI18N - - /** - * Column id - */ - public static final String COLUMN_ID = "id"; - - /** - * No instances are allowed as this class only holds static attributes - */ - private AddressbookContactDatabaseConstants () { - } -} diff --git a/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactDatabaseFrontend.java b/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactDatabaseFrontend.java deleted file mode 100644 index 7a5d205a..00000000 --- a/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactDatabaseFrontend.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (C) 2015 Roland Haeder - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.mxchange.addressbook.database.frontend.contact; - -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.sql.SQLException; -import java.text.MessageFormat; -import java.util.Iterator; -import java.util.Map; -import org.mxchange.addressbook.database.contact.AddressbookContactDatabaseConstants; -import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.addressbook.manager.contact.AddressbookContactManager; -import org.mxchange.jcore.contact.Contact; -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.Storable; -import org.mxchange.jcore.exceptions.BadTokenException; -import org.mxchange.jcore.exceptions.CorruptedDatabaseFileException; -import org.mxchange.jcore.exceptions.UnsupportedDatabaseBackendException; - -/** - * Stores and retrieves Contact instances - * - * @author Roland Haeder - */ -public class AddressbookContactDatabaseFrontend extends BaseDatabaseFrontend implements AddressbookContactFrontend { - - /** - * 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) throws UnsupportedDatabaseBackendException, SQLException { - // Call own constructor - this(); - - // Trace message - this.getLogger().trace(MessageFormat.format("manager={0} - CALLED!", manager)); //NOI18N - - // Manager instance must not be null - if (null == manager) { - // Abort here - throw new NullPointerException("manager is null"); //NOI18N - } - - // Set contact manager - this.setContactManager(manager); - } - - /** - * 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 () throws UnsupportedDatabaseBackendException, SQLException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Set "table" name - this.setTableName("contacts"); //NOI18N - - // Initalize backend - this.initBackend(); - } - - @Override - public void addContact (final Contact contact) throws ContactAlreadyAddedException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Make sure the contact is set - if (null == contact) { - // Abort here - throw new NullPointerException("contact is null"); //NOI18N - } - - try { - // First check if the contact is there - if (this.isContactFound(contact)) { - // Already there - throw new ContactAlreadyAddedException(contact); - } - - // Clear dataset from previous usage - this.clearDataSet(); - - // Get field iterator - Iterator> iterator = contact.iterator(); - - // Iterate over all - while (iterator.hasNext()) { - // Get next field - Map.Entry field = iterator.next(); - - // Add it to data set - this.addToDataSet(field.getKey().getName(), field.getValue()); - } - - // Then add it - // TODO Nothing is done yet! - Result result = this.doInsertDataSet(); - - // Debug message - this.getLogger().debug(MessageFormat.format("result={0}", result)); //NOI18N - } catch (final IOException | BadTokenException | SQLException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | CorruptedDatabaseFileException ex) { - // Abort here - this.abortProgramWithException(ex); - } - - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - } - - @Override - public void doShutdown () throws SQLException, IOException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Shutdown backend - this.getBackend().doShutdown(); - - // Trace message - 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 - * - * @return Total contact count - */ - @Override - public int getContactsCount () throws SQLException, IOException { - // And deligate to backend - return this.getBackend().getTotalRows(); //NOI18N - } - - @Override - public String getIdName () { - // Return id column - return AddressbookContactDatabaseConstants.COLUMN_ID; - } - - @Override - public Contact getOwnContact () throws IOException, BadTokenException, CorruptedDatabaseFileException, SQLException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Prepare search instance - SearchableCriteria criteria = new SearchCriteria(); - - // Add criteria and limit - criteria.addCriteria(AddressbookContactDatabaseConstants.COLUMN_OWN_CONTACT, true); - criteria.setLimit(1); - - // Then search for it - Result result = this.getBackend().doSelectByCriteria(criteria); - - // Debug message - this.getLogger().debug(MessageFormat.format("result={0}", result)); - - // Init instance - Contact contact = null; - - // Is there one row at least? - if (result.hasNext()) { - // Then get it - Storable storable = result.next(); - - // Debug message - this.getLogger().debug(MessageFormat.format("storable={0}", storable)); - - // Is it same instance? - if (!(storable instanceof Contact)) { - // Not same instance - throw new IllegalArgumentException(MessageFormat.format("storable={0} is not implementing Contact", storable)); - } - - // Cast it securely - contact = (Contact) storable; - } - - // Trace message - this.getLogger().trace(MessageFormat.format("contact={0} - EXIT!", contact)); - - // Return it - return contact; - } - - @Override - public Storable getStorableAtRow (final int rowIndex) { - throw new UnsupportedOperationException("Not supported yet: rowIndex=" + rowIndex); - } - - @Override - public boolean isContactFound (final Contact contact) throws BadTokenException, IOException, CorruptedDatabaseFileException, SQLException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { - // Trace message - this.getLogger().trace(MessageFormat.format("contact={0} - CALLED!", contact)); //NOI18N - - // contact should not be null - if (null == contact) { - // Abort here - throw new NullPointerException("contact is null"); //NOI18N - } - - // Default is not found - boolean isFound = false; - - // Init search instance (but empty) - SearchableCriteria criteria = new SearchCriteria(); - - // Look for all entries and compare here. Else all entries needs to be compared with many AND statements - Result result = this.getBackend().doSelectByCriteria(criteria); - - // Debug message - this.getLogger().debug(MessageFormat.format("result({0})={1}", result.size(), result)); - // Start iteration - Iterator iterator = result.iterator(); - - // Check all entries - while (iterator.hasNext()) { - // Get next element - Contact c = (Contact) iterator.next(); - - // Debug message - this.getLogger().debug(MessageFormat.format("c={0},contact={1}", c, contact)); //NOI18N - - // Is it added? - if (c.equals(contact)) { - // Is found - isFound = true; - break; - } - } - - // Trace message - this.getLogger().trace(MessageFormat.format("isFound={0} - EXIT!", isFound)); //NOI18N - - // Return it - return isFound; - } - - @Override - public boolean isOwnContactFound () throws SQLException, IOException, BadTokenException, CorruptedDatabaseFileException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { - // Get search criteria instance - SearchableCriteria criteria = new SearchCriteria(); - - // Add condition - criteria.addCriteria(AddressbookContactDatabaseConstants.COLUMN_OWN_CONTACT, true); - - // Get result - Result result = this.getBackend().doSelectByCriteria(criteria); - - // Deligate this call to backend - return result.hasNext(); - } - - @Override - public Storable toStorable (final Map map) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { - throw new UnsupportedOperationException("Not supported yet: map=" + map); - } -} diff --git a/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactFrontend.java b/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactFrontend.java deleted file mode 100644 index b06940a2..00000000 --- a/src/org/mxchange/addressbook/database/frontend/contact/AddressbookContactFrontend.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2015 Roland Häder - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.mxchange.addressbook.database.frontend.contact; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.sql.SQLException; -import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.jcore.contact.Contact; -import org.mxchange.jcore.database.frontend.DatabaseFrontend; -import org.mxchange.jcore.exceptions.BadTokenException; -import org.mxchange.jcore.exceptions.CorruptedDatabaseFileException; - -/** - * An interface for addressbook contact database frontends - * - * @author Roland Häder - */ -public interface AddressbookContactFrontend extends DatabaseFrontend { - - /** - * Adds given contact instance to database - * - * @param contact Contact instance to add - * @throws org.mxchange.addressbook.exceptions.ContactAlreadyAddedException If the contact is already added - */ - public void addContact (final Contact contact) throws ContactAlreadyAddedException; - - /** - * Some "getter" for total contacts count - * - * @return Total contacts count - * @throws java.sql.SQLException If an SQL error occurs - * @throws java.io.IOException If an IO error occurs - */ - public int getContactsCount () throws SQLException, IOException; - - /** - * Checks if given Contact is found - * - * @param contact Contact instance to check - * @return Whether the given Contact instance is found - * @throws java.sql.SQLException If an SQL error occurs - * @throws java.io.IOException If an IO error occurs - * @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? - */ - public boolean isContactFound (final Contact contact) throws SQLException, IOException, BadTokenException, CorruptedDatabaseFileException, NoSuchMethodException, IllegalAccessException, InvocationTargetException; - - /** - * Some "getter" for own contact instance - * - * @return Own contact instance - * @throws java.sql.SQLException If an SQL error occurs - * @throws java.io.IOException If an IO error occurs - * @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? - */ - public Contact getOwnContact () throws IOException, BadTokenException, CorruptedDatabaseFileException, SQLException, NoSuchMethodException, IllegalAccessException, InvocationTargetException; - - /** - * Checks whether own contact is found - * - * @return Whether own contact is found - * @throws java.sql.SQLException If any SQL error occurs - * @throws java.io.IOException If an IO error occurs - * @throws org.mxchange.jcore.exceptions.BadTokenException If a bad token was found - * @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? - */ - public boolean isOwnContactFound () throws SQLException, IOException, BadTokenException, CorruptedDatabaseFileException, NoSuchMethodException, IllegalAccessException, InvocationTargetException; -} diff --git a/src/org/mxchange/addressbook/manager/contact/AddressbookContactManager.java b/src/org/mxchange/addressbook/manager/contact/AddressbookContactManager.java index 554a42db..23ca2f22 100644 --- a/src/org/mxchange/addressbook/manager/contact/AddressbookContactManager.java +++ b/src/org/mxchange/addressbook/manager/contact/AddressbookContactManager.java @@ -25,8 +25,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.mxchange.addressbook.client.AddressbookClient; -import org.mxchange.addressbook.database.frontend.contact.AddressbookContactDatabaseFrontend; -import org.mxchange.addressbook.database.frontend.contact.AddressbookContactFrontend; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; import org.mxchange.jcore.client.Client; import org.mxchange.jcore.contact.Contact; -- 2.39.2