From 16289838616dbf25d96a20f82164415d40181e46 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Thu, 6 Aug 2015 08:32:20 +0200 Subject: [PATCH] =?utf8?q?Moved=20a=20lot=20classes=20and=20interfaces=20(?= =?utf8?q?generalized)=20to=20new=20jcore=20project=20+=20added=20a=20few?= =?utf8?q?=20specializations=20Signed-off-by:Roland=20H=C3=A4der=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- ...anager.java => BaseAddressbookSystem.java} | 12 +- .../addressbook/BaseFrameworkSystem.java | 684 ------------------ .../addressbook/FrameworkInterface.java | 87 --- .../application/AddressbookApplication.java | 21 +- .../addressbook/application/Application.java | 41 -- .../{Client.java => AddressbookClient.java} | 44 +- ...Client.java => BaseAddressbookClient.java} | 66 +- .../client/console/ConsoleClient.java | 107 ++- .../client/gui/AddressbookFrame.java | 27 +- .../addressbook/client/gui/ClientFrame.java | 6 +- .../addressbook/client/gui/SwingClient.java | 12 +- .../addressbook/contact/BaseContact.java | 100 +-- .../mxchange/addressbook/contact/Contact.java | 4 +- .../addressbook/contact/book/BookContact.java | 2 +- .../addressbook/contact/user/UserContact.java | 2 +- .../database/backend/BaseDatabaseBackend.java | 86 --- .../database/backend/DatabaseBackend.java | 108 --- .../backend/csv/Base64CsvDatabaseBackend.java | 562 -------------- .../backend/mysql/MySqlDatabaseBackend.java | 212 ------ .../frontend/BaseDatabaseFrontend.java | 103 --- .../database/frontend/DatabaseFrontend.java | 38 - .../contact/ContactDatabaseFrontend.java | 8 +- .../frontend/contact/ContactFrontend.java | 6 +- .../database/storage/Storeable.java | 27 - .../database/storage/csv/StoreableCsv.java | 40 - .../exceptions/BadTokenException.java | 38 - .../FrameAlreadyInitializedException.java | 32 - .../UnhandledUserChoiceException.java | 34 - .../UnsupportedDatabaseBackendException.java | 48 -- .../addressbook/manager/Manageable.java | 26 - .../application/ApplicationManager.java | 81 --- .../application/ManageableApplication.java | 31 - .../manager/contact/ContactManager.java | 105 ++- .../manager/contact/ManageableContact.java | 8 +- .../addressbook/menu/AddressbookMenu.java | 29 +- .../mxchange/addressbook/menu/BaseMenu.java | 9 +- .../org/mxchange/addressbook/menu/Menu.java | 2 +- .../mxchange/addressbook/menu/MenuTools.java | 4 +- .../addressbook/menu/console/ConsoleMenu.java | 5 +- .../addressbook/menu/item/BaseMenuItem.java | 54 +- .../menu/item/SelectableMenuItem.java | 2 +- .../menu/item/console/ConsoleMenuItem.java | 47 +- .../mxchange/addressbook/model/BaseModel.java | 146 ---- .../model/contact/ContactTableModel.java | 27 +- .../localization/bundle_de_DE.properties | 0 .../localization/bundle_en_US.properties | 0 46 files changed, 375 insertions(+), 2758 deletions(-) rename Addressbook/src/org/mxchange/addressbook/{manager/BaseManager.java => BaseAddressbookSystem.java} (76%) delete mode 100644 Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/application/Application.java rename Addressbook/src/org/mxchange/addressbook/client/{Client.java => AddressbookClient.java} (83%) rename Addressbook/src/org/mxchange/addressbook/client/{BaseClient.java => BaseAddressbookClient.java} (76%) delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/backend/BaseDatabaseBackend.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/backend/DatabaseBackend.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/backend/csv/Base64CsvDatabaseBackend.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/backend/mysql/MySqlDatabaseBackend.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/frontend/DatabaseFrontend.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/storage/Storeable.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/database/storage/csv/StoreableCsv.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/exceptions/BadTokenException.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/exceptions/FrameAlreadyInitializedException.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/exceptions/UnhandledUserChoiceException.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/exceptions/UnsupportedDatabaseBackendException.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/manager/Manageable.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/manager/application/ApplicationManager.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/manager/application/ManageableApplication.java delete mode 100644 Addressbook/src/org/mxchange/addressbook/model/BaseModel.java rename Addressbook/src/org/mxchange/{addressbook => }/localization/bundle_de_DE.properties (100%) rename Addressbook/src/org/mxchange/{addressbook => }/localization/bundle_en_US.properties (100%) diff --git a/Addressbook/src/org/mxchange/addressbook/manager/BaseManager.java b/Addressbook/src/org/mxchange/addressbook/BaseAddressbookSystem.java similarity index 76% rename from Addressbook/src/org/mxchange/addressbook/manager/BaseManager.java rename to Addressbook/src/org/mxchange/addressbook/BaseAddressbookSystem.java index 4dae2b1..16c49c3 100644 --- a/Addressbook/src/org/mxchange/addressbook/manager/BaseManager.java +++ b/Addressbook/src/org/mxchange/addressbook/BaseAddressbookSystem.java @@ -14,21 +14,19 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.mxchange.addressbook.manager; +package org.mxchange.addressbook; -import org.mxchange.addressbook.BaseFrameworkSystem; +import org.mxchange.jcore.BaseFrameworkSystem; /** - * A general manager + * General class * * @author Roland Haeder - * @version 0.0 */ -public class BaseManager extends BaseFrameworkSystem implements Manageable { - +public class BaseAddressbookSystem extends BaseFrameworkSystem { /** * No instances can be created of this class */ - protected BaseManager () { + protected BaseAddressbookSystem () { } } diff --git a/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java b/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java deleted file mode 100644 index b7a6711..0000000 --- a/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java +++ /dev/null @@ -1,684 +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; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.text.MessageFormat; -import java.util.Arrays; -import java.util.Properties; -import java.util.ResourceBundle; -import java.util.StringTokenizer; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.mxchange.addressbook.application.Application; -import org.mxchange.addressbook.client.Client; -import org.mxchange.addressbook.database.frontend.DatabaseFrontend; -import org.mxchange.addressbook.manager.contact.ManageableContact; - -/** - * General class - * - * @author Roland Haeder - */ -public class BaseFrameworkSystem implements FrameworkInterface { - - /** - * Instance for own properties - */ - private static final Properties properties = new Properties(System.getProperties()); - - /** - * Class' logger - */ - private final Logger LOG; - - /** - * Application instance - */ - private Application application; - - /** - * Bundle instance - */ - private final ResourceBundle bundle; - - /** - * Client instance - */ - private Client client; - - /** - * Contact manager instance - */ - private ManageableContact contactManager; - - /** - * Name of used database table, handled over to backend - */ - private String tableName; - - /** - * DatabaseFrontend instance - */ - private DatabaseFrontend wrapper; - - /** - * Initialize object - */ - { - LOG = LogManager.getLogger(this); - bundle = ResourceBundle.getBundle("org/mxchange/addressbook/localization/bundle"); // NOI18N - } - - /** - * No instances can be created of this class - */ - protected BaseFrameworkSystem () { - // Init properties file - this.initProperties(); - } - - /** - * Application instance - * - * @return the application - */ - @Override - public final Application getApplication () { - return this.application; - } - - /** - * Getter for human-readable string from given key - * - * @param key Key to return - * @return Human-readable message - */ - @Override - public final String getMessageStringFromKey (final String key) { - // Return message - return this.getBundle().getString(key); - } - - /** - * Some "getter for a value from given column name. This name will be - * translated into a method name and then this method is called. - * - * @param columnName Column name - * @return Value from field - */ - @Override - public Object getValueFromColumn (final String columnName) { - throw new UnsupportedOperationException(MessageFormat.format("Not implemented. columnName={0}", columnName)); //NOI18N - } - - /** - * Some "getter" for target class instance from given name. - * - * @param instance Instance to iterate on - * @param targetClass Class name to look for - * @return Class instance - */ - @SuppressWarnings ("unchecked") - private Class getClassFromTarget (final FrameworkInterface instance, final String targetClass) { - // Trace message - this.getLogger().debug(MessageFormat.format("instance={0},targetClass={1}", instance, targetClass)); //NOI18N - - // Instance reflaction of this class - Class c = instance.getClass(); - - // Analyze class - while (!targetClass.equals(c.getSimpleName())) { - // Debug message - this.getLogger().debug(MessageFormat.format("c={0}", c.getSimpleName())); //NOI18N - - // Get super class (causes unchecked warning) - c = (Class) c.getSuperclass(); - } - - // Trace message - this.getLogger().trace(MessageFormat.format("c={0} - EXIT!", c)); //NOI18N - - // Return it - return c; - } - - /** - * Some "getter" for a Method instance from given method name - * - * @param instance Actual instance to call - * @param targetClass Target class name - * @param methodName Method name - * @return A Method instance - */ - private Method getMethodFromName (final FrameworkInterface instance, final String targetClass, final String methodName) { - // Trace messahe - this.getLogger().trace(MessageFormat.format("targetClass={0},methodName={1}", targetClass, methodName)); //NOI18N - - // Get target class instance - Class c = this.getClassFromTarget(instance, targetClass); - - // Init field instance - Method method = null; - - // Use reflection to get all attributes - try { - method = c.getDeclaredMethod(methodName, new Class[0]); - } catch (final SecurityException ex) { - // Security problem - this.abortProgramWithException(ex); - } catch (final NoSuchMethodException ex) { - // Method not found - this.abortProgramWithException(ex); - } - - // Assert on field - assert (method instanceof Method) : "method is not a Method instance"; //NOI18N - - // Trace message - this.getLogger().trace(MessageFormat.format("method={0} - EXIT!", method)); //NOI18N - - // Return it - return method; - } - - /** - * Aborts program with given exception - * - * @param throwable Any type of Throwable - */ - protected final void abortProgramWithException (final Throwable throwable) { - // Log exception ... - this.getLogger().catching(throwable); - - // .. and exit - System.exit(1); - - } - - /** - * Application instance - * - * @param application the application to set - */ - protected final void setApplication (final Application application) { - this.application = application; - } - - /** - * Client instance - * - * @return the client - */ - @Override - public final Client getClient () { - return this.client; - } - - /** - * Getter for bundle instance - * - * @return Resource bundle - */ - protected final ResourceBundle getBundle () { - return this.bundle; - } - - /** - * Client instance - * - * @param client the client to set - */ - protected final void setClient (final Client client) { - this.client = client; - } - - /** - * Contact manager instance - * - * @return the contactManager - */ - @Override - public final ManageableContact getContactManager () { - return this.contactManager; - } - - /** - * Contact manager instance - * - * @param contactManager the contactManager to set - */ - protected final void setContactManager (final ManageableContact contactManager) { - this.contactManager = contactManager; - } - - /** - * Checks if given boolean field is available and set to same value - * - * @param columnName Column name to check - * @param bool Boolean value - * @return Whether all conditions are met - */ - @Override - public boolean isValueEqual (final String columnName, final boolean bool) { - // Not implemented - throw new UnsupportedOperationException(MessageFormat.format("Not implemented. columnName={0},bool={1}", columnName, bool)); //NOI18N - } - - /** - * Log exception - * - * @param exception Exception to log - */ - @Override - public final void logException (final Throwable exception) { - // Log this exception - this.getLogger().catching(exception); - } - - /** - * Prepares all properties, the file is written if it is not found - */ - private void initProperties () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Debug message - this.getLogger().debug(MessageFormat.format("{0} properties are loaded already.", BaseFrameworkSystem.properties.size())); //NOI18N - - // Are some properties loaded? - if (!BaseFrameworkSystem.properties.isEmpty()) { - // Some are already loaded, abort here - return; - } - - try { - // Try to read it - BaseFrameworkSystem.properties.load(new BufferedReader(new InputStreamReader(new FileInputStream(FrameworkInterface.PROPERTIES_CONFIG_FILE)))); - - // Debug message - this.getLogger().debug(MessageFormat.format("{0} properties has been loaded.", BaseFrameworkSystem.properties.size())); //NOI18N - } catch (final FileNotFoundException ex) { - // Debug message - this.getLogger().debug(MessageFormat.format("Properties file {0} not found: {1}", FrameworkInterface.PROPERTIES_CONFIG_FILE, ex)); //NOI18N - - /* - * The file is not found which is normal for first run, so - * initialize default values. - */ - this.initPropertiesWithDefault(); - - // Write file - this.writePropertiesFile(); - } catch (final IOException ex) { - // Something else didn't work - this.abortProgramWithException(ex); - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Initializes properties with default values - */ - private void initPropertiesWithDefault () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Init default values: - // Default database backend - BaseFrameworkSystem.properties.put("org.mxchange.addressbook.database.backendType", "base64csv"); //NOI18N - - // For MySQL backend - BaseFrameworkSystem.properties.put("org.mxchange.addressbook.database.mysql.host", "localhost"); //NOI18N - BaseFrameworkSystem.properties.put("org.mxchange.addressbook.database.mysql.dbname", "test"); //NOI18N - BaseFrameworkSystem.properties.put("org.mxchange.addressbook.database.mysql.login", ""); //NOI18N - BaseFrameworkSystem.properties.put("org.mxchange.addressbook.database.mysql.password", ""); //NOI18N - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Writes the properties file to disk - */ - private void writePropertiesFile () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - try { - // Write it - BaseFrameworkSystem.properties.store(new PrintWriter(FrameworkInterface.PROPERTIES_CONFIG_FILE), "This file is automatically generated. You may wish to alter it."); //NOI18N - } catch (final IOException ex) { - this.abortProgramWithException(ex); - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Converts a column name like "foo_bar" to an attribute name like "fooBar" - * - * @param columnName Column name to convert - * @return Attribute name - */ - protected String convertColumnNameToAttribute (final String columnName) { - // Trace message - this.getLogger().trace(MessageFormat.format("columnName={0} - CALLED!", columnName)); //NOI18N - - // First all lower case - String lower = columnName.toLowerCase(); - - // Then split on "_" - StringTokenizer tokenizer = new StringTokenizer(lower, "_"); //NOI18N - - // Resulting string - StringBuilder builder = new StringBuilder(tokenizer.countTokens()); - - // Init counter - int count = 0; - - // Walk through all - while (tokenizer.hasMoreTokens()) { - // Get token - String token = tokenizer.nextToken(); - - // Is later than first element? - if (count > 0) { - // Make first character upper-case - char c = token.charAt(0); - token = String.valueOf(c).toUpperCase() + token.substring(1); - } - - // Add token - builder.append(token); - - // Increment counter - count++; - } - - // Trace message - this.getLogger().trace(MessageFormat.format("builder={0} - EXIT!", builder)); //NOI18N - - // Return result - return builder.toString(); - } - - /** - * Converts a column name like "foo_bar" to a method name like "getFooBar" - * for non-booleans and to "isFooBar" for boolean fields. - * - * @param columnName Column name to convert - * @param isBool Whether the parameter is boolean - * @return Attribute name - */ - protected String convertColumnNameToGetterMethod (final String columnName, boolean isBool) { - // Trace message - this.getLogger().trace(MessageFormat.format("columnName={0} - CALLED!", columnName)); //NOI18N - - // Then split on "_" - StringTokenizer tokenizer = new StringTokenizer(columnName, "_"); //NOI18N - - // Resulting string - StringBuilder builder = new StringBuilder(tokenizer.countTokens()); - - // Is it boolean? - if (isBool) { - // Append "is" - builder.append("is"); //NOI18N - } else { - // Append "get" - builder.append("get"); //NOI18N - } - - // Walk through all - while (tokenizer.hasMoreTokens()) { - // Get token - String token = tokenizer.nextToken(); - - // Debug message - this.getLogger().debug(MessageFormat.format("token={0}", token)); //NOI18N - - // Make it upper-case - char c = token.charAt(0); - token = String.valueOf(c).toUpperCase() + token.substring(1); - - // Add token - builder.append(token); - } - - // Trace message - this.getLogger().trace(MessageFormat.format("builder={0} - EXIT!", builder)); //NOI18N - - // Return result - return builder.toString(); - } - - /** - * Returns boolean field value from given method call - * - * @param instance The instance to call - * @param targetClass Target class to look in - * @param methodName Method name to look for - * @return Boolean value from field - */ - protected boolean getBooleanField (final FrameworkInterface instance, final String targetClass, final String methodName) { - // Trace messahe - this.getLogger().trace(MessageFormat.format("targetClass={0},methodName={1}", targetClass, methodName)); //NOI18N - - // Get method instance - Method method = this.getMethodFromName(instance, targetClass, methodName); - - // Get value from field - Boolean value = false; - - try { - value = (Boolean) method.invoke(instance); - } catch (final IllegalArgumentException ex) { - // Other problem - this.abortProgramWithException(ex); - } catch (final IllegalAccessException ex) { - // Other problem - this.abortProgramWithException(ex); - } catch (final InvocationTargetException ex) { - // Other problem - this.abortProgramWithException(ex); - } - - // Return value - return value; - } - - /** - * Returns any field value from given method call - * - * @param instance The instance to call - * @param targetClass Target class to look in - * @param methodName Method name to look for - * @return Any value from field - */ - protected Object getField (final FrameworkInterface instance, final String targetClass, final String methodName) { - // Trace messahe - this.getLogger().trace(MessageFormat.format("targetClass={0},methodName={1}", targetClass, methodName)); //NOI18N - - // Get method to call - Method method = this.getMethodFromName(instance, targetClass, methodName); - - // Get value from field - Object object = null; - - try { - object = method.invoke(instance); - } catch (final IllegalArgumentException ex) { - // Other problem - this.abortProgramWithException(ex); - } catch (final IllegalAccessException ex) { - // Other problem - this.abortProgramWithException(ex); - } catch (final InvocationTargetException ex) { - // Other problem - this.abortProgramWithException(ex); - } - - // Return value - return object; - } - - /** - * Getter for logger - * - * @return Logger - */ - protected final Logger getLogger () { - return this.LOG; - } - - /** - * Getter for property which must exist - * - * @param key Key to get - * @return Propety value - */ - protected final String getProperty (final String key) { - return BaseFrameworkSystem.properties.getProperty(String.format("org.mxchange.addressbook.%s", key)); //NOI18N - } - - /** - * Name of used database table, handled over to backend - * - * @return the tableName - */ - protected final String getTableName () { - return this.tableName; - } - - /** - * Name of used database table, handled over to backend - * - * @param tableName the tableName to set - */ - protected final void setTableName (final String tableName) { - this.tableName = tableName; - } - - /** - * Getter for DatabaseFrontend instance - * - * @return DatabaseFrontend instance - */ - protected DatabaseFrontend getWrapper () { - return this.wrapper; - } - - /** - * Setter for wrapper instance - * - * @param wrapper A DatabaseFrontend instance - */ - protected void setWrapper (final DatabaseFrontend wrapper) { - this.wrapper = wrapper; - } - - /** - * Some "getter" for an array from given string and tokenizer - * - * @param str String to tokenize and get array from - * @param delimiter Delimiter - * @param size Size of array - * @return Array from tokenized string - */ - protected String[] getArrayFromString (final String str, final String delimiter, final int size) { - // Trace message - this.getLogger().trace(MessageFormat.format("str={0},delimiter={1},size={2} - CALLED!", str, delimiter, size)); //NOI18N - - // Get tokenizer - StringTokenizer tokenizer = new StringTokenizer(str, delimiter); - - // Init array and index - String[] tokens = new String[size]; - int index = 0; - - // Run through all tokens - while (tokenizer.hasMoreTokens()) { - // Get current token and add it - tokens[index] = tokenizer.nextToken(); - - // Debug message - this.getLogger().debug(MessageFormat.format("Token at index{0}: {1}", index, tokens[1])); //NOI18N - - // Increment index - index++; - } - - // Trace message - this.getLogger().trace(MessageFormat.format("tokens({0})={1} - EXIT!", tokens.length, Arrays.toString(tokens))); //NOI18N - - // Return it - return tokens; - } - - /** - * Checks whether the given field is a boolean field by probing it. - * - * @param instance Instance to call - * @param targetClass Target class - * @param columnName Column name to check - * @return Whether the given column name represents a boolean field - */ - protected boolean isBooleanField (final FrameworkInterface instance, final String targetClass, final String columnName) { - // Trace message - this.getLogger().trace(MessageFormat.format("instance={0},targetCLass={1},columnName={2} - CALLED!", instance, targetClass, columnName)); //NOI18N - - // Convert column name to getter name (boolean) - String methodName = this.convertColumnNameToGetterMethod(columnName, true); - - // Get class instance - Class c = this.getClassFromTarget(instance, targetClass); - - // Defauzlt is boolean - boolean isBool = true; - - try { - // Now try to instance the method - Method method = c.getDeclaredMethod(methodName, new Class[0]); - } catch (final NoSuchMethodException ex) { - // Debug message - this.getLogger().debug(MessageFormat.format("Method {0} does not exist, field {1} cannot be boolean: {2}", methodName, columnName, ex)); //NOI18N - - // Not found - isBool = false; - } catch (final SecurityException ex) { - // Really bad? - this.abortProgramWithException(ex); - } - - // Trace message - this.getLogger().trace(MessageFormat.format("isBool={0} - EXIT!", isBool)); //NOI18N - - // Return result - return isBool; - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java b/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java deleted file mode 100644 index 8253f6d..0000000 --- a/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java +++ /dev/null @@ -1,87 +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; - -import org.mxchange.addressbook.application.Application; -import org.mxchange.addressbook.client.Client; -import org.mxchange.addressbook.manager.contact.ManageableContact; - -/** - * A general interface which should be always expanded - * - * @author Roland Haeder - */ -public interface FrameworkInterface { - /* - * Properties file name - */ - public static final String PROPERTIES_CONFIG_FILE = "config.properties"; - - /** - * Getter for contact manager - * - * @return Contact manager instance - */ - public ManageableContact getContactManager (); - - /** - * Client instance - * - * @return the client - */ - public Client getClient (); - - /** - * Application instance - * - * @return the application - */ - public Application getApplication (); - - /** - * Getter for human-readable string from given key - * - * @param key Key to return - * @return Human-readable message - */ - public String getMessageStringFromKey (final String key); - - /** - * Logs given exception - * - * @param exception Exception to log - */ - public void logException (final Throwable exception); - - /** - * Checks if given boolean field is available and set to same value - * - * @param columnName Column name to check - * @param bool Boolean value - * @return Whether all conditions are met - */ - public boolean isValueEqual (final String columnName, final boolean bool); - - /** - * Some "getter for a value from given column name. This name will be - * translated into a method name and then this method is called. - * - * @param columnName Column name - * @return Value from field - */ - public Object getValueFromColumn (final String columnName); -} diff --git a/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java b/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java index 5704a14..99be0be 100644 --- a/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java +++ b/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java @@ -17,12 +17,14 @@ package org.mxchange.addressbook.application; import java.text.MessageFormat; -import org.mxchange.addressbook.BaseFrameworkSystem; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.BaseAddressbookSystem; +import org.mxchange.addressbook.client.AddressbookClient; import org.mxchange.addressbook.client.console.ConsoleClient; import org.mxchange.addressbook.client.gui.SwingClient; -import org.mxchange.addressbook.exceptions.UnhandledUserChoiceException; -import org.mxchange.addressbook.manager.application.ApplicationManager; +import org.mxchange.jcore.application.Application; +import org.mxchange.jcore.client.Client; +import org.mxchange.jcore.exceptions.UnhandledUserChoiceException; +import org.mxchange.jcore.manager.application.ApplicationManager; /** * ============================================ @@ -114,7 +116,7 @@ import org.mxchange.addressbook.manager.application.ApplicationManager; * @author Roland Haeder * @version 0.0 */ -public class AddressbookApplication extends BaseFrameworkSystem implements Application { +public class AddressbookApplication extends BaseAddressbookSystem implements Application { /** * Application title @@ -205,6 +207,9 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli */ @Override public void doMainLoop () { + // Get client and cast it + AddressbookClient client = (AddressbookClient) this.getClient(); + // Debug message this.getLogger().trace("CALLED!"); //NOI18N @@ -213,16 +218,16 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli this.showIntro(); // Set current menu to main - this.getClient().setCurrentMenu("main"); //NOI18N + client.setCurrentMenu("main"); //NOI18N // --- Main loop starts here --- while (this.getClient().isRunning()) { // The application is still active, show menu selection - this.getClient().showCurrentMenu(); + client.showCurrentMenu(); try { // Ask for user input and run proper method - this.getClient().doUserMenuChoice(); + client.doUserMenuChoice(); } catch (final UnhandledUserChoiceException ex) { this.getLogger().catching(ex); } diff --git a/Addressbook/src/org/mxchange/addressbook/application/Application.java b/Addressbook/src/org/mxchange/addressbook/application/Application.java deleted file mode 100644 index 5aa4a23..0000000 --- a/Addressbook/src/org/mxchange/addressbook/application/Application.java +++ /dev/null @@ -1,41 +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.application; - -import org.mxchange.addressbook.FrameworkInterface; - -/** - * - * @author Roland Haeder - */ -public interface Application extends FrameworkInterface { - - /** - * Bootstraps the application - */ - public void doBootstrap (); - - /** - * Run the main loop - */ - public void doMainLoop (); - - /** - * Shutdown the application - */ - public void doShutdown (); -} diff --git a/Addressbook/src/org/mxchange/addressbook/client/Client.java b/Addressbook/src/org/mxchange/addressbook/client/AddressbookClient.java similarity index 83% rename from Addressbook/src/org/mxchange/addressbook/client/Client.java rename to Addressbook/src/org/mxchange/addressbook/client/AddressbookClient.java index aba84ef..15732f2 100644 --- a/Addressbook/src/org/mxchange/addressbook/client/Client.java +++ b/Addressbook/src/org/mxchange/addressbook/client/AddressbookClient.java @@ -16,18 +16,18 @@ */ package org.mxchange.addressbook.client; -import org.mxchange.addressbook.FrameworkInterface; -import org.mxchange.addressbook.exceptions.UnhandledUserChoiceException; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.menu.item.SelectableMenuItem; +import org.mxchange.jcore.client.Client; +import org.mxchange.jcore.exceptions.UnhandledUserChoiceException; /** - * An interface for application clients - * + * A special client interface for addressbook applications. + * * @author Roland Haeder */ -public interface Client extends FrameworkInterface { +public interface AddressbookClient extends Client { /** * Displays a "box" for the address @@ -64,11 +64,6 @@ public interface Client extends FrameworkInterface { */ public Contact doEnterOwnData (); - /** - * Shuts down the client and therefore whole application - */ - public void doShutdown (); - /** * Asks the user to enter his/her gender (M=Male, F=Female, C=Company) * @@ -77,13 +72,6 @@ public interface Client extends FrameworkInterface { */ public Gender enterGender (final String message); - /** - * Displays a message to the user - * - * @param message Message to show to the user - */ - public void outputMessage (final String message); - /** * Displays a "box" for the name * @@ -114,11 +102,6 @@ public interface Client extends FrameworkInterface { */ public void doUserMenuChoice () throws UnhandledUserChoiceException; - /** - * Enables isRunning attribute which singals that the client is running - */ - public void enableIsRunning (); - /** * Asks the the user to enter a single character which must match validChars * @@ -167,13 +150,6 @@ public interface Client extends FrameworkInterface { */ public SelectableMenuItem getMenuItem (final char accessKey, final String text); - /** - * Determines whether the client is still active by checking some conditions - * - * @return Whether the client is still active - */ - public boolean isRunning (); - /** * Shows given menu entry in client * @@ -181,18 +157,8 @@ public interface Client extends FrameworkInterface { */ public void showEntry (final SelectableMenuItem item); - /** - * Shows introduction to user - */ - public void showWelcome (); - /** * Shows current menu selection to the user */ public void showCurrentMenu (); - - /** - * Inizializes this client - */ - public void init (); } diff --git a/Addressbook/src/org/mxchange/addressbook/client/BaseClient.java b/Addressbook/src/org/mxchange/addressbook/client/BaseAddressbookClient.java similarity index 76% rename from Addressbook/src/org/mxchange/addressbook/client/BaseClient.java rename to Addressbook/src/org/mxchange/addressbook/client/BaseAddressbookClient.java index df1573e..ff977bb 100644 --- a/Addressbook/src/org/mxchange/addressbook/client/BaseClient.java +++ b/Addressbook/src/org/mxchange/addressbook/client/BaseAddressbookClient.java @@ -19,28 +19,24 @@ package org.mxchange.addressbook.client; import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; -import org.mxchange.addressbook.BaseFrameworkSystem; import org.mxchange.addressbook.manager.contact.ContactManager; import org.mxchange.addressbook.manager.contact.ManageableContact; import org.mxchange.addressbook.menu.Menu; +import org.mxchange.jcore.client.BaseClient; +import org.mxchange.jcore.client.Client; /** - * A general client + * A general addressbook client * * @author Roland Haeder */ -public abstract class BaseClient extends BaseFrameworkSystem { +public abstract class BaseAddressbookClient extends BaseClient { /** * Current menu choice */ private String currentMenu; - /** - * Application is not running by default - */ - private boolean isRunning; - /** * Menu system */ @@ -49,35 +45,11 @@ public abstract class BaseClient extends BaseFrameworkSystem { /** * No instances can be created of this class */ - protected BaseClient () { + protected BaseAddressbookClient () { // Init menu map this.menus = new HashMap<>(10); } - /** - * Shutdown method for all clients - */ - public void doShutdown () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Disable client - this.disableIsRunning(); - - // Shuts down contact manager - this.getContactManager().doShutdown(); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Enables the client - */ - public final void enableIsRunning () { - this.isRunning = true; - } - /** * Current menu choice * @@ -116,24 +88,6 @@ public abstract class BaseClient extends BaseFrameworkSystem { return menu; } - /** - * Determines whether the application is still active by checking some - * conditions - * - * @return Whether the application is still active - */ - public final boolean isRunning () { - // In console client, 0 may have been used - return this.isRunning; - } - - /** - * Disables the client - */ - protected final void disableIsRunning () { - this.isRunning = false; - } - /** * Fills menu map with swing menus */ @@ -154,20 +108,20 @@ public abstract class BaseClient extends BaseFrameworkSystem { protected void initContactManager () { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - + // Debug message this.getLogger().debug("Initializing contact manager ..."); //NOI18N - + // Init contact manager with console client // @TODO Static initial amount of contacts ManageableContact manager = new ContactManager((Client) this); - + // Set it here this.setContactManager(manager); - + // Debug message this.getLogger().debug("Contact manager has been initialized."); //NOI18N - + // Trace message this.getLogger().trace("EXIT!"); //NOI18N } diff --git a/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java b/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java index b523a13..f376ece 100644 --- a/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java +++ b/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java @@ -20,26 +20,27 @@ import java.text.MessageFormat; import java.util.Arrays; import java.util.Scanner; import org.mxchange.addressbook.application.AddressbookApplication; -import org.mxchange.addressbook.application.Application; -import org.mxchange.addressbook.client.BaseClient; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.client.AddressbookClient; +import org.mxchange.addressbook.client.BaseAddressbookClient; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.contact.user.UserContact; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.addressbook.exceptions.UnhandledUserChoiceException; +import org.mxchange.addressbook.manager.contact.ManageableContact; import org.mxchange.addressbook.menu.Menu; import org.mxchange.addressbook.menu.MenuTools; import org.mxchange.addressbook.menu.console.ConsoleMenu; import org.mxchange.addressbook.menu.item.SelectableMenuItem; import org.mxchange.addressbook.menu.item.console.ConsoleMenuItem; +import org.mxchange.jcore.application.Application; +import org.mxchange.jcore.exceptions.UnhandledUserChoiceException; /** * A client for the console * * @author Roland Haeder */ -public class ConsoleClient extends BaseClient implements Client { +public class ConsoleClient extends BaseAddressbookClient implements AddressbookClient { /** * Scanner instance for reading data from console input @@ -59,7 +60,7 @@ public class ConsoleClient extends BaseClient implements Client { this.setApplication(application); // Init scanner instance - this.scanner = new Scanner(System.in); + this.scanner = new Scanner(System.in, "UTF-8"); //NOI18N // Trace message this.getLogger().trace("EXIT!"); //NOI18N @@ -164,17 +165,20 @@ public class ConsoleClient extends BaseClient implements Client { throw new IllegalArgumentException("Contact is not own data."); //NOI18N } + // Get manager and cast it + ManageableContact manager = (ManageableContact) this.getManager(); + // Own address data - String street = this.getContactManager().enterOwnStreet(); + String street = manager.enterOwnStreet(); // Get zip code - int zipCode = this.getContactManager().enterOwnZipCode(); + int zipCode = manager.enterOwnZipCode(); // Get city name - String city = this.getContactManager().enterOwnCity(); + String city = manager.enterOwnCity(); // Get country code - String countryCode = this.getContactManager().enterOwnCountryCode(); + String countryCode = manager.enterOwnCountryCode(); // Update address data contact.updateAddressData(street, zipCode, city, countryCode); @@ -200,17 +204,20 @@ public class ConsoleClient extends BaseClient implements Client { throw new IllegalArgumentException("Contact is not own data."); //NOI18N } + // Get manager and cast it + ManageableContact manager = (ManageableContact) this.getManager(); + // Gender: - Gender gender = this.getContactManager().enterOwnGender(); + Gender gender = manager.enterOwnGender(); // Surname - String surname = this.getContactManager().enterOwnSurname(); + String surname = manager.enterOwnSurname(); // Family name - String familyName = this.getContactManager().enterOwnFamilyName(); + String familyName = manager.enterOwnFamilyName(); // And company - String companyName = this.getContactManager().enterOwnCompanyName(); + String companyName = manager.enterOwnCompanyName(); // Update contact instance contact.updateNameData(gender, surname, familyName, companyName); @@ -236,20 +243,23 @@ public class ConsoleClient extends BaseClient implements Client { throw new IllegalArgumentException("Contact is not own data."); //NOI18N } + // Get manager and cast it + ManageableContact manager = (ManageableContact) this.getManager(); + // Phone number - String phoneNumber = this.getContactManager().enterOwnPhoneNumber(); + String phoneNumber = manager.enterOwnPhoneNumber(); // Phone number - String cellNumber = this.getContactManager().enterOwnCellNumber(); + String cellNumber = manager.enterOwnCellNumber(); // Fax number - String faxNumber = this.getContactManager().enterOwnFaxNumber(); + String faxNumber = manager.enterOwnFaxNumber(); // Email address - String email = this.getContactManager().enterOwnEmailAddress(); + String email = manager.enterOwnEmailAddress(); // Comment - String comment = this.getContactManager().enterOwnComment(); + String comment = manager.enterOwnComment(); // Update contact instance contact.updateOtherData(phoneNumber, cellNumber, faxNumber, email, null, comment); @@ -263,17 +273,20 @@ public class ConsoleClient extends BaseClient implements Client { // Trace message this.getLogger().trace("CALLED!"); //NOI18N + // Get manager and cast it + ManageableContact manager = (ManageableContact) this.getManager(); + // First ask for gender - Gender gender = this.getContactManager().enterOwnGender(); + Gender gender = manager.enterOwnGender(); // 2nd for surname - String surname = this.getContactManager().enterOwnSurname(); + String surname = manager.enterOwnSurname(); // And 3rd for family name - String familyName = this.getContactManager().enterOwnFamilyName(); + String familyName = manager.enterOwnFamilyName(); // Company name ... - String companyName = this.getContactManager().enterOwnCompanyName(); + String companyName = manager.enterOwnCompanyName(); // Construct UserContact instance Contact contact = new UserContact(gender, surname, familyName, companyName); @@ -313,12 +326,15 @@ public class ConsoleClient extends BaseClient implements Client { // Output textural message and ask for a char as input char choice = this.enterChar(accessKeys, "Bitte Auswahl eingeben (0=Programm beenden): "); + // Get manager and cast it + ManageableContact manager = (ManageableContact) this.getManager(); + // @TODO Rewrite this ugly switch() block switch (choice) { case '1': try { // Enter/add own data - this.getContactManager().doEnterOwnData(); + manager.doEnterOwnData(); } catch (final ContactAlreadyAddedException ex) { // Already added this.outputMessage("Sie haben bereits Ihre eigenen Daten eingegeben."); @@ -326,27 +342,27 @@ public class ConsoleClient extends BaseClient implements Client { break; case '2': // Change own data - this.getContactManager().doChangeOwnData(); + manager.doChangeOwnData(); break; case '3': // Add new addess - this.getContactManager().doAddOtherAddress(); + manager.doAddOtherAddress(); break; case '4': // List contacts - this.getContactManager().doListContacts(); + manager.doListContacts(); break; case '5': // Search addresses - this.getContactManager().doSearchContacts(); + manager.doSearchContacts(); break; case '6': // Change other addess - this.getContactManager().doChangeOtherAddress(); + manager.doChangeOtherAddress(); break; case '7': // Delete other address - this.getContactManager().doDeleteOtherAddress(); + manager.doDeleteOtherAddress(); break; case '0': // Program exit @@ -578,7 +594,7 @@ public class ConsoleClient extends BaseClient implements Client { this.outputMessage("Copyright(c) 2015 by Roland Haeder, this is free software"); // Debug message - this.getLogger().debug("Intro shown to user"); + this.getLogger().debug("Intro shown to user"); //NOI18N } @Override @@ -589,24 +605,27 @@ public class ConsoleClient extends BaseClient implements Client { // Contact must not be null if (contact == null) { // Abort here - throw new NullPointerException("contact is null"); + throw new NullPointerException("contact is null"); //NOI18N } // Ask the user for editing [name], [a]ddress or [other] data char choice = this.enterChar(new char[] {'n', 'a', 'o', 'x'}, "Welchen Daten möchten Sie ändern? (n=Namensdaten, a=Anschriftsdaten, o=Andere, x=Zurück zur Hauptauswahl) "); + // Get manager and cast it + ManageableContact manager = (ManageableContact) this.getManager(); + // @TODO Get rid of this ugly switch block, too switch (choice) { case 'n': // Name data - this.getContactManager().doChangeNameData(contact); + manager.doChangeNameData(contact); break; case 'a': // Address data - this.getContactManager().doChangeAddressData(contact); + manager.doChangeAddressData(contact); break; case 'o': // Other data - this.getContactManager().doChangeOtherData(contact); + manager.doChangeOtherData(contact); break; case 'x': // Exit this menu @@ -615,7 +634,7 @@ public class ConsoleClient extends BaseClient implements Client { default: // @TODO throw own exception - throw new UnhandledUserChoiceException(MessageFormat.format("Choice '{0}' not handled yet.", choice)); + throw new UnhandledUserChoiceException(MessageFormat.format("Choice '{0}' not handled yet.", choice)); //NOI18N } // Trace message @@ -631,6 +650,9 @@ public class ConsoleClient extends BaseClient implements Client { // Read line String input = this.readString(); + // Debug message + this.getLogger().debug(MessageFormat.format("input={0}", input)); //NOI18N + // This must be only one character if (input.length() != 1) { // Return zero @@ -650,6 +672,9 @@ public class ConsoleClient extends BaseClient implements Client { // First read a string String input = this.readString(); + // Debug message + this.getLogger().debug(MessageFormat.format("input={0}", input)); //NOI18N + // Init number with invalid value int num = -1; @@ -658,9 +683,12 @@ public class ConsoleClient extends BaseClient implements Client { num = Integer.parseInt(input); } catch (final NumberFormatException e) { this.outputMessage("Bitte geben Sie nur Zahlen ein!"); - this.getLogger().warn(MessageFormat.format("No numbers-only entered. input={0},message={1}", input, e.getMessage())); + this.getLogger().warn(MessageFormat.format("No numbers-only entered. input={0},message={1}", input, e.getMessage())); //NOI18N } + // Trace message + this.getLogger().trace(MessageFormat.format("num={0} - EXIT!", num)); //NOI18N + // Return read number return num; } @@ -677,16 +705,15 @@ public class ConsoleClient extends BaseClient implements Client { /** * Fills menu map with menu entries */ - @Override protected final void fillMenuMap () { // Trace message this.getLogger().trace("CALLED!"); //NOI18N // Initialize first (main) menu - Menu menu = new ConsoleMenu("main", this); + Menu menu = new ConsoleMenu("main", this); //NOI18N // Add it - this.getMenus().put("main", menu); + this.getMenus().put("main", menu); //NOI18N // Trace message this.getLogger().trace("EXIT!"); //NOI18N diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java b/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java index c5d05e3..8dcddcb 100644 --- a/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java +++ b/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java @@ -44,20 +44,21 @@ import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.TitledBorder; import javax.swing.table.TableModel; -import org.mxchange.addressbook.BaseFrameworkSystem; +import org.mxchange.addressbook.BaseAddressbookSystem; import org.mxchange.addressbook.application.AddressbookApplication; -import org.mxchange.addressbook.client.Client; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException; +import org.mxchange.addressbook.manager.contact.ManageableContact; import org.mxchange.addressbook.model.contact.ContactTableModel; +import org.mxchange.jcore.client.Client; +import org.mxchange.jcore.exceptions.FrameAlreadyInitializedException; /** * * @author Roland Haeder */ -public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame { +public class AddressbookFrame extends BaseAddressbookSystem implements ClientFrame { /** * Own instance @@ -209,8 +210,11 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame // Debug line this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client)); //NOI18N + // Get and cast manager instance + ManageableContact manager = (ManageableContact) this.getClient().getManager(); + // Has the user entered own data? - if (this.getClient().getContactManager().isOwnContactAdded()) { + if (manager.isOwnContactAdded()) { // Debug message this.getLogger().debug("Disabling menus: isOwnContactAdded()=false"); //NOI18N @@ -640,7 +644,8 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame @Override public void actionPerformed (final ActionEvent e) { try { - self.getClient().getContactManager().doEnterOwnData(); + ManageableContact manager = (ManageableContact) self.getClient().getManager(); + manager.doEnterOwnData(); } catch (final ContactAlreadyAddedException ex) { // Already added, log away // @TODO maybe output message here? @@ -664,7 +669,8 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame */ @Override public void actionPerformed (final ActionEvent e) { - self.getClient().getContactManager().doChangeOwnData(); + ManageableContact manager = (ManageableContact) self.getClient().getManager(); + manager.doChangeOwnData(); } }); @@ -681,7 +687,8 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame */ @Override public void actionPerformed (final ActionEvent e) { - self.getClient().getContactManager().doAddOtherAddress(); + ManageableContact manager = (ManageableContact) self.getClient().getManager(); + manager.doAddOtherAddress(); } }); @@ -906,7 +913,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame /** * Class for "add address" button */ - private static class AddActionListener extends BaseFrameworkSystem implements ActionListener { + private static class AddActionListener extends BaseAddressbookSystem implements ActionListener { /** * Dialog instance */ @@ -943,7 +950,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame /** * Class for "cancel address" button */ - private static class CancelActionListener extends BaseFrameworkSystem implements ActionListener { + private static class CancelActionListener extends BaseAddressbookSystem implements ActionListener { /** * Dialog instance */ diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java b/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java index b68a3b7..e7500e8 100644 --- a/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java +++ b/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java @@ -16,10 +16,10 @@ */ package org.mxchange.addressbook.client.gui; -import org.mxchange.addressbook.FrameworkInterface; -import org.mxchange.addressbook.client.Client; import org.mxchange.addressbook.contact.Contact; -import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException; +import org.mxchange.jcore.FrameworkInterface; +import org.mxchange.jcore.client.Client; +import org.mxchange.jcore.exceptions.FrameAlreadyInitializedException; /** * An interface for applications with a frame diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java b/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java index 2829d05..27b98de 100644 --- a/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java +++ b/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java @@ -16,21 +16,21 @@ */ package org.mxchange.addressbook.client.gui; -import org.mxchange.addressbook.application.Application; -import org.mxchange.addressbook.client.BaseClient; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.client.AddressbookClient; +import org.mxchange.addressbook.client.BaseAddressbookClient; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; -import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException; -import org.mxchange.addressbook.exceptions.UnhandledUserChoiceException; import org.mxchange.addressbook.menu.Menu; import org.mxchange.addressbook.menu.item.SelectableMenuItem; +import org.mxchange.jcore.application.Application; +import org.mxchange.jcore.exceptions.FrameAlreadyInitializedException; +import org.mxchange.jcore.exceptions.UnhandledUserChoiceException; /** * * @author Roland Haeder */ -public class SwingClient extends BaseClient implements Client { +public class SwingClient extends BaseAddressbookClient implements AddressbookClient { /** * Swing frame instance diff --git a/Addressbook/src/org/mxchange/addressbook/contact/BaseContact.java b/Addressbook/src/org/mxchange/addressbook/contact/BaseContact.java index 45d2e17..4e590c2 100644 --- a/Addressbook/src/org/mxchange/addressbook/contact/BaseContact.java +++ b/Addressbook/src/org/mxchange/addressbook/contact/BaseContact.java @@ -18,8 +18,9 @@ package org.mxchange.addressbook.contact; import java.text.MessageFormat; import java.util.Objects; -import org.mxchange.addressbook.BaseFrameworkSystem; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.BaseAddressbookSystem; +import org.mxchange.addressbook.client.AddressbookClient; +import org.mxchange.jcore.client.Client; /** * A general contact @@ -27,7 +28,7 @@ import org.mxchange.addressbook.client.Client; * @author Roland Haeder * @version 0.0 */ -public class BaseContact extends BaseFrameworkSystem { +public class BaseContact extends BaseAddressbookSystem { /** * Birth day @@ -236,7 +237,9 @@ public class BaseContact extends BaseFrameworkSystem { * "Serializes" this object into a CSV string (this time with semicolons) * * @return "CSV-serialized" version of the stored data + * @deprecated Don't use this anymore */ + @Deprecated public String getCsvStringFromStoreableObject () { // Trace message this.getLogger().trace("CALLED!"); //NOI18N @@ -412,7 +415,7 @@ public class BaseContact extends BaseFrameworkSystem { protected final void setZipCode (final long zipCode) { this.zipCode = zipCode; } - + @Override public int hashCode () { // Validate gender instance @@ -449,14 +452,17 @@ public class BaseContact extends BaseFrameworkSystem { throw new NullPointerException("client is null"); } + // Cast client + AddressbookClient c = (AddressbookClient) client; + // Display name "box" - client.displayNameBox((Contact) this); + c.displayNameBox((Contact) this); // Display address "box" - client.displayAddressBox((Contact) this); + c.displayAddressBox((Contact) this); // Display other data "box" - client.displayOtherDataBox((Contact) this); + c.displayOtherDataBox((Contact) this); } /** @@ -609,40 +615,6 @@ public class BaseContact extends BaseFrameworkSystem { this.birthday = birthday; } - /** - * Checks if given boolean field is available and set to same value - * - * @param columnName Column name to check - * @param bool Boolean value - * @return Whether all conditions are met - */ - @Override - public boolean isValueEqual (final String columnName, final boolean bool) { - // Trace message - this.getLogger().trace(MessageFormat.format("columnName={0},bool={1} - CALLED!", columnName, bool)); - - // Convert column name to field name - String methodName = this.convertColumnNameToGetterMethod(columnName, true); - - // Debug message - this.getLogger().debug(MessageFormat.format("field={0}", methodName)); - - // Init class instance - boolean value = this.getBooleanField(this, "BaseContact", methodName); - - // Debug message - this.getLogger().debug(MessageFormat.format("value={0}", value)); - - // Compare it - boolean isFound = (bool == value); - - // Trace message - this.getLogger().trace(MessageFormat.format("isFound={0} - EXIT!", isFound)); - - // Return result - return isFound; - } - /** * Some "getter for a value from given column name. This name will be * translated into a method name and then this method is called. @@ -654,26 +626,60 @@ public class BaseContact extends BaseFrameworkSystem { public Object getValueFromColumn (final String columnName) { // Trace message this.getLogger().trace(MessageFormat.format("columnName={0} - CALLED!", columnName)); - + // Determine if the given column is boolean if (this.isBooleanField(this, "BaseContact", columnName)) { // Yes, then call other method return this.getBooleanField(this, "BaseContact", columnName); } - + // Convert column name to field name String methodName = this.convertColumnNameToGetterMethod(columnName, false); - + // Debug message this.getLogger().debug(MessageFormat.format("field={0}", methodName)); - + // Get field Object value = this.getField(this, "BaseContact", methodName); - + // Trace message this.getLogger().trace("value=" + value + " - EXIT!"); - + // Return it return value; } + + /** + * Checks if given boolean field is available and set to same value + * + * @param columnName Column name to check + * @param bool Boolean value + * @return Whether all conditions are met + */ + @Override + public boolean isValueEqual (final String columnName, final boolean bool) { + // Trace message + this.getLogger().trace(MessageFormat.format("columnName={0},bool={1} - CALLED!", columnName, bool)); + + // Convert column name to field name + String methodName = this.convertColumnNameToGetterMethod(columnName, true); + + // Debug message + this.getLogger().debug(MessageFormat.format("field={0}", methodName)); + + // Init class instance + boolean value = this.getBooleanField(this, "BaseContact", methodName); + + // Debug message + this.getLogger().debug(MessageFormat.format("value={0}", value)); + + // Compare it + boolean isFound = (bool == value); + + // Trace message + this.getLogger().trace(MessageFormat.format("isFound={0} - EXIT!", isFound)); + + // Return result + return isFound; + } } diff --git a/Addressbook/src/org/mxchange/addressbook/contact/Contact.java b/Addressbook/src/org/mxchange/addressbook/contact/Contact.java index 829bb45..629e796 100644 --- a/Addressbook/src/org/mxchange/addressbook/contact/Contact.java +++ b/Addressbook/src/org/mxchange/addressbook/contact/Contact.java @@ -16,8 +16,8 @@ */ package org.mxchange.addressbook.contact; -import org.mxchange.addressbook.FrameworkInterface; -import org.mxchange.addressbook.client.Client; +import org.mxchange.jcore.FrameworkInterface; +import org.mxchange.jcore.client.Client; /** * diff --git a/Addressbook/src/org/mxchange/addressbook/contact/book/BookContact.java b/Addressbook/src/org/mxchange/addressbook/contact/book/BookContact.java index a9e8b8c..4ac6ccf 100644 --- a/Addressbook/src/org/mxchange/addressbook/contact/book/BookContact.java +++ b/Addressbook/src/org/mxchange/addressbook/contact/book/BookContact.java @@ -18,7 +18,7 @@ package org.mxchange.addressbook.contact.book; import org.mxchange.addressbook.contact.BaseContact; import org.mxchange.addressbook.contact.Contact; -import org.mxchange.addressbook.database.storage.csv.StoreableCsv; +import org.mxchange.jcore.database.storage.csv.StoreableCsv; /** * A contact that can be placed into "contact books" diff --git a/Addressbook/src/org/mxchange/addressbook/contact/user/UserContact.java b/Addressbook/src/org/mxchange/addressbook/contact/user/UserContact.java index 9208a06..be19701 100644 --- a/Addressbook/src/org/mxchange/addressbook/contact/user/UserContact.java +++ b/Addressbook/src/org/mxchange/addressbook/contact/user/UserContact.java @@ -20,7 +20,7 @@ import java.text.MessageFormat; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.contact.book.BookContact; -import org.mxchange.addressbook.database.storage.csv.StoreableCsv; +import org.mxchange.jcore.database.storage.csv.StoreableCsv; /** * diff --git a/Addressbook/src/org/mxchange/addressbook/database/backend/BaseDatabaseBackend.java b/Addressbook/src/org/mxchange/addressbook/database/backend/BaseDatabaseBackend.java deleted file mode 100644 index 5a66691..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/backend/BaseDatabaseBackend.java +++ /dev/null @@ -1,86 +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.backend; - -import java.sql.Driver; -import java.sql.DriverManager; -import java.text.MessageFormat; -import java.util.Enumeration; -import org.mxchange.addressbook.BaseFrameworkSystem; -import org.mxchange.addressbook.exceptions.UnsupportedDatabaseDriverException; - -/** - * Generall database backend - * - * @author Roland Haeder - */ -public class BaseDatabaseBackend extends BaseFrameworkSystem { - - /** - * No instances from this class - */ - protected BaseDatabaseBackend () { - } - - /** - * Validates driver name and throws an exception if the driver is not valid - * - * @param driverName Driver name (e.g. "mysql") - * @throws org.mxchange.addressbook.exceptions.UnsupportedDatabaseDriverException If the given driver name cannot be solved into a driver instance - */ - protected void validateDriver (final String driverName) throws UnsupportedDatabaseDriverException { - // Trace message - this.getLogger().trace(MessageFormat.format("driverName={0} - CALLED!", driverName)); //NOI18N - - // Try to find the driver in driver list - Enumeration drivers = DriverManager.getDrivers(); - - // Default is not found - boolean isFound = false; - - // Search for it - while (drivers.hasMoreElements()) { - // Get element - Driver driver = drivers.nextElement(); - - // Debug message - this.getLogger().debug(MessageFormat.format("Driver {0} is installed.", driver)); //NOI18N - - // Get class name - String className = driver.getClass().getName(); - - // Is this wanted? - if (className.contains(driverName)) { - // Debug message - this.getLogger().debug("Found driver!"); //NOI18N - - // Found it - isFound = true; - break; - } - } - - // Is it found? - if (!isFound) { - // Throw exception - throw new UnsupportedDatabaseDriverException(driverName); - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/backend/DatabaseBackend.java b/Addressbook/src/org/mxchange/addressbook/database/backend/DatabaseBackend.java deleted file mode 100644 index 8fc30e6..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/backend/DatabaseBackend.java +++ /dev/null @@ -1,108 +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.backend; - -import java.io.IOException; -import java.sql.SQLException; -import java.util.Iterator; -import org.mxchange.addressbook.FrameworkInterface; -import org.mxchange.addressbook.database.storage.Storeable; -import org.mxchange.addressbook.exceptions.BadTokenException; - -/** - * A generic interface for database frontends - * - * @author Roland Haeder - */ -public interface DatabaseBackend extends FrameworkInterface { - - /** - * Tries a connection to the database - * - * @throws java.sql.SQLException If the connection attempt fails - */ - public void connectToDatabase () throws SQLException; - - /** - * Shuts down this backend - */ - public void doShutdown (); - - /** - * Some "getter" for row index from given boolean row value - * - * @param columnName Name of column - * @param bool Boolean value to look for - * @return Row index - */ - public int getRowIndexFromColumn (final String columnName, final boolean bool); - - /** - * Some "getter" for total table row count - * - * @return Total row count - * @throws java.sql.SQLException If an SQL error occurs - */ - public int getTotalCount () throws SQLException; - - /** - * Checks whether at least one row is found with given boolean value. - * - * @param columnName Column to check for boolean value - * @param bool Boolean value to check - * @return Whether boolean value is found and returns at least one row - * @throws java.sql.SQLException If an SQL error occurs - */ - public boolean isRowFound (final String columnName, final boolean bool) throws SQLException; - - /** - * Rewinds backend - */ - public void rewind (); - - /** - * Get length of underlaying file - * - * @return Length of underlaying file - */ - public long length (); - - /** - * Stores an object in the database. - * - * @param object Object to store in database - * @throws java.io.IOException From inner class - */ - public void store (final Storeable object) throws IOException; - - /** - * Gets an iterator for contacts - * - * @return Iterator for contacts - * @throws org.mxchange.addressbook.exceptions.BadTokenException If the CSV token is badly formulated - */ - public Iterator iterator () throws BadTokenException; - - /** - * Reads a single row from database. - * - * @param rowIndex Row index (or how much to skip) - * @return A Storeable instance - * @throws org.mxchange.addressbook.exceptions.BadTokenException If a token was badly formatted - */ - public Storeable readRow (final int rowIndex) throws BadTokenException; -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/backend/csv/Base64CsvDatabaseBackend.java b/Addressbook/src/org/mxchange/addressbook/database/backend/csv/Base64CsvDatabaseBackend.java deleted file mode 100644 index 39eef66..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/backend/csv/Base64CsvDatabaseBackend.java +++ /dev/null @@ -1,562 +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.backend.csv; - -import java.io.DataOutput; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.sql.SQLException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Base64; -import java.util.Iterator; -import java.util.List; -import org.mxchange.addressbook.FrameworkInterface; -import org.mxchange.addressbook.contact.Contact; -import org.mxchange.addressbook.database.backend.BaseDatabaseBackend; -import org.mxchange.addressbook.database.backend.DatabaseBackend; -import org.mxchange.addressbook.database.frontend.DatabaseFrontend; -import org.mxchange.addressbook.database.storage.Storeable; -import org.mxchange.addressbook.database.storage.csv.StoreableCsv; -import org.mxchange.addressbook.exceptions.BadTokenException; - -/** - * A database backend with CSV file as storage implementation - * - * @author Roland Haeder - */ -public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements DatabaseBackend { - - /** - * Output stream for this storage engine - */ - private RandomAccessFile storageFile; - - /** - * Constructor with table name - * - * @param tableName Name of "table" - * @param wrapper Wrapper instance to call back - */ - public Base64CsvDatabaseBackend (final String tableName, final DatabaseFrontend wrapper) { - // Trace message - this.getLogger().trace(MessageFormat.format("tableName={0},wrapper={1}", tableName, wrapper)); //NOI18N - - // Debug message - this.getLogger().debug(MessageFormat.format("Trying to initialize table {0} ...", tableName)); //NOI18N - - // Set table name here, too - this.setTableName(tableName); - - // Set wrapper here - this.setWrapper(wrapper); - - // Construct file name - String fileName = String.format("data/table_%s.b64", tableName); //NOI18N - - // Debug message - this.getLogger().debug(MessageFormat.format("Trying to open file {0} ...", fileName)); //NOI18N - - try { - // Try to initialize the storage (file instance) - this.storageFile = new RandomAccessFile(fileName, "rw"); //NOI18N - } catch (final FileNotFoundException ex) { - // Did not work - this.getLogger().error(MessageFormat.format("File {0} cannot be opened: {1}", fileName, ex.toString())); //NOI18N - System.exit(1); - } - - // Output message - this.getLogger().debug(MessageFormat.format("Database for {0} has been initialized.", tableName)); //NOI18N - } - - /** - * This database backend does not need to connect - */ - @Override - public void connectToDatabase () throws SQLException { - // Empty body - } - - /** - * Shuts down this backend - */ - @Override - public void doShutdown () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - try { - // Close file - this.getStorageFile().close(); - } catch (final IOException ex) { - // Abort program - this.abortProgramWithException(ex); - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Some "getter" for row index from given boolean row value - * - * @param columnName Name of column - * @param bool Boolean value to look for - * @return Row index - */ - @Override - public int getRowIndexFromColumn (final String columnName, final boolean bool) { - // Trace message - this.getLogger().trace(MessageFormat.format("columnName={0},bool={1} - CALLED!", columnName, bool)); //NOI18N - - // Row indexes start with zero - int rowIndex = 0; - - // First rewind - this.rewind(); - - // Try to find the proper row - while (!this.isEndOfFile()) { - // Read line - String line = this.readLine(); - - // Debug message - this.getLogger().debug(MessageFormat.format("line={0}", line)); - - // Callback the wrapper to handle parsing - try { - Storeable storeable = this.getWrapper().parseLineToStoreable(line); - - // Debug message - this.getLogger().debug(MessageFormat.format("storeable={0}", storeable)); - - // Is the value qual - if (storeable.isValueEqual(columnName, bool)) { - // Debug message - this.getLogger().debug(MessageFormat.format("Found storeable={0} for columnName={1} and bool={2}", storeable, columnName, bool)); - - // Found it - break; - } - } catch (final BadTokenException ex) { - // Bad token found - this.abortProgramWithException(ex); - } - - // Count up - rowIndex++; - } - - // Return it - return rowIndex; - } - - /** - * Some "getter" for total row count - * - * @return Total row count - */ - @Override - public int getTotalCount () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - try { - // Do a deprecated call - // @todo this needs rewrite! - return this.readList().size(); - } catch (final BadTokenException ex) { - this.abortProgramWithException(ex); - } - - // Invalid return - this.getLogger().trace("Returning -1 ... : EXIT!"); //NOI18N - return -1; - } - - /** - * Checks whether at least one row is found with given boolean value. - * - * @param columnName Column to check for boolean value - * @param bool Boolean value to check - * @return Whether boolean value is found and returns at least one row - */ - @Override - public boolean isRowFound (final String columnName, final boolean bool) { - // Trace message - this.getLogger().trace(MessageFormat.format("columnName={0},bool={1} - CALLED!", columnName, bool)); //NOI18N - - // Is at least one entry found? - if (this.getTotalCount() == 0) { - // No entry found at all - return false; - } - - // Default is not found - boolean isFound = false; - - // Firsr rewind - this.rewind(); - - // Then loop through all lines - while (!this.isEndOfFile()) { - // Read line - String line = this.readLine(); - - // Debug message - this.getLogger().debug(MessageFormat.format("line={0}", line)); - - try { - // And parse it to a Contact instance - Contact contact = (Contact) this.getWrapper().parseLineToStoreable(line); - - // Debug message - this.getLogger().debug(MessageFormat.format("contact={0}", contact)); - - // This should not be null - if (contact == null) { - // Throw exception - throw new NullPointerException("contact is null"); - } - - // Now let the contact object check if it has such attribute - if (contact.isValueEqual(columnName, bool)) { - // Yes, it is set - isFound = true; - break; - } - } catch (final BadTokenException ex) { - // Don't continue with bad data - this.abortProgramWithException(ex); - } - } - - // Trace message - this.getLogger().trace(MessageFormat.format("isFound={0} - EXIT!", isFound)); - - // Return result - return isFound; - } - - /** - * Gets an iterator for contacts - * - * @return Iterator for contacts - * @throws org.mxchange.addressbook.exceptions.BadTokenException If the - * underlaying method has found an invalid token - */ - @Override - public Iterator iterator () throws BadTokenException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - /* - * Then read the file into RAM (yes, not perfect for >1000 entries ...) - * and get a List back. - */ - List list = this.readList(); - - // List must be set - assert (list instanceof List) : "list has not been set."; //NOI18N - - // Trace message - this.getLogger().trace(MessageFormat.format("list.iterator()={0} - EXIT!", list.iterator())); //NOI18N - - // Get iterator from list and return it - return list.iterator(); - } - - /** - * Get length of underlaying file - * - * @return Length of underlaying file - */ - @Override - public long length () { - long length = 0; - - try { - length = this.getStorageFile().length(); - this.getLogger().debug(MessageFormat.format("length={0}", length)); //NOI18N - } catch (final IOException ex) { - // Length cannot be determined - // Abort program - this.abortProgramWithException(ex); - } - - // Return result - this.getLogger().trace(MessageFormat.format("length={0} : EXIT!", length)); //NOI18N - return length; - } - - /** - * Reads a single row from database. - * - * @param rowIndex Row index (or how much to skip) - * @return A Storeable instance - * @throws org.mxchange.addressbook.exceptions.BadTokenException If a token - * was badly formatted - */ - @Override - public Storeable readRow (final int rowIndex) throws BadTokenException { - // First rewind - this.rewind(); - - // Intialize variables - int count = -1; - Storeable storeable = null; - - // Read all rows - while (!this.isEndOfFile() || (count < rowIndex)) { - // Read row - String line = this.readLine(); - - // Debug message - this.getLogger().debug(MessageFormat.format("line={0}", line)); - - // Callback the wrapper to handle parsing - storeable = this.getWrapper().parseLineToStoreable(line); - - // Debug message - this.getLogger().debug(MessageFormat.format("storeable={0}", storeable)); - - // Increment counter - count++; - } - - // Trace message - this.getLogger().trace(MessageFormat.format("storeable={0} - EXIT!", storeable)); - // Return found element - return storeable; - } - - /** - * Rewinds backend - */ - @Override - public void rewind () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - try { - // Rewind underlaying database file - this.getStorageFile().seek(0); - } catch (final IOException ex) { - // Abort program - this.abortProgramWithException(ex); - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Stores given object by "visiting" it - * - * @param object An object implementing Storeable - * @throws java.io.IOException From "inner" class - */ - @Override - public void store (final Storeable object) throws IOException { - // Trace message - this.getLogger().trace(MessageFormat.format("object={0} - CALLED!", object)); //NOI18N - - // Object must not be null - if (object == null) { - // Abort here - throw new NullPointerException("object is null"); //NOI18N - } - - // Make sure the instance is there (DataOutput flawor) - assert (this.storageFile instanceof DataOutput); - - // Try to cast it, this will fail if the interface is not implemented - StoreableCsv csv = (StoreableCsv) object; - - // Now get a string from the object that needs to be stored - String str = csv.getCsvStringFromStoreableObject(); - - // Debug message - this.getLogger().debug(MessageFormat.format("str({0})={1}", str.length(), str)); //NOI18N - - // Encode line in BASE-64 - byte[] encoded = Base64.getEncoder().encode(str.getBytes()); - - // The string is now a valid CSV string - this.getStorageFile().write(encoded); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Adds given contact to list - * - * @param instance An instance of FrameworkInterface to add - * @param list List instance - */ - private void addToList (final Storeable instance, final List list) { - // Trace message - this.getLogger().trace(MessageFormat.format("contact={0} - CALLED!", instance)); //NOI18N - - // No null here - if (instance == null) { - // Throw exception - throw new NullPointerException("contact is null"); //NOI18N - } else if (list == null) { - // Throw exception - throw new NullPointerException("list is null"); //NOI18N - } - - // Debug message - this.getLogger().debug(MessageFormat.format("contact={0}", instance)); //NOI18N - - // Is the contact read? - if (instance instanceof FrameworkInterface) { - // Then add it - boolean added = list.add(instance); - - // Debug message - this.getLogger().debug(MessageFormat.format("contact={0} added={1}", instance, added)); //NOI18N - - // Has it been added? - if (!added) { - // Not added - this.getLogger().warn("Contact object has not been added."); //NOI18N - } - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Returns storage file - * - * @return Storage file instance - */ - private RandomAccessFile getStorageFile () { - return this.storageFile; - } - - /** - * Checks whether end of file has been reached - * - * @return Whether lines are left to read - */ - private boolean isEndOfFile () { - // Default is EOF - boolean isEof = true; - - try { - isEof = (this.getStorageFile().getFilePointer() >= this.length()); - } catch (final IOException ex) { - // Length cannot be determined - this.getLogger().catching(ex); - } - - // Return status - this.getLogger().trace(MessageFormat.format("isEof={0} : EXIT!", isEof)); //NOI18N - return isEof; - } - - /** - * Reads a line from file base - * - * @return Read line from file - */ - private String readLine () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Init input - String input = null; - - try { - // Read single line - String base64 = this.getStorageFile().readLine(); - - // Is the line null? - if (base64 == null) { - // Then throw NPE here - throw new NullPointerException("base64 is null"); - } - - // Decode BASE-64 - byte[] decoded = Base64.getDecoder().decode(base64); - - // Convert to string - input = new String(decoded); - } catch (final IOException ex) { - this.getLogger().catching(ex); - } - - // Trace message - this.getLogger().trace(MessageFormat.format("input={0} - EXIT!", input)); //NOI18N - - // Return read string or null - return input; - } - - /** - * Reads the database file, if available, and adds all read lines into the - * list. - * - * @return A list with Contact instances - */ - private List readList () throws BadTokenException { - this.getLogger().trace("CALLED!"); //NOI18N - - // First rewind - this.rewind(); - - // Get file size and divide it by 140 (possible average length of one line) - int lines = Math.round(this.length() / 140 + 0.5f); - - // Debug message - this.getLogger().debug(MessageFormat.format("lines={0}", lines)); //NOI18N - - // Instance list - // @TODO The maximum length could be guessed from file size? - List list = new ArrayList<>(lines); - - // Init variables - String line; - Storeable instance = null; - - // Read all lines - while (!this.isEndOfFile()) { - // Then read a line - line = this.readLine(); - - // Parse line - instance = this.getWrapper().parseLineToStoreable(line); - - // The contact instance should be there now - assert (instance instanceof FrameworkInterface) : MessageFormat.format("instance is not set: {0}", instance); //NOI18N - - // Add contact - this.addToList(instance, list); - } - - // Return finished list - this.getLogger().trace(MessageFormat.format("list.size()={0} : EXIT!", list.size())); //NOI18N - return list; - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/backend/mysql/MySqlDatabaseBackend.java b/Addressbook/src/org/mxchange/addressbook/database/backend/mysql/MySqlDatabaseBackend.java deleted file mode 100644 index 5d8b6ed..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/backend/mysql/MySqlDatabaseBackend.java +++ /dev/null @@ -1,212 +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.backend.mysql; - -import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.text.MessageFormat; -import java.util.Iterator; -import org.mxchange.addressbook.database.backend.BaseDatabaseBackend; -import org.mxchange.addressbook.database.backend.DatabaseBackend; -import org.mxchange.addressbook.database.storage.Storeable; -import org.mxchange.addressbook.exceptions.BadTokenException; -import org.mxchange.addressbook.exceptions.UnsupportedDatabaseDriverException; - -/** - * A backend class for MySQL connections - * - * @author Roland Haeder - */ -public class MySqlDatabaseBackend extends BaseDatabaseBackend implements DatabaseBackend { - /** - * An instance of a datbase connection - */ - private static Connection connection; - - /** - * Prepared statement for full row count - */ - private PreparedStatement totalRowCount; - - /** - * Constructor with table name - * - * @param tableName Table to access - * @throws org.mxchange.addressbook.exceptions.UnsupportedDatabaseDriverException - */ - public MySqlDatabaseBackend (final String tableName) throws UnsupportedDatabaseDriverException { - // Validate driver - this.validateDriver("mysql"); //NOI18N - - // Now that the driver is there, set the table name - this.setTableName(tableName); - } - - @Override - public void connectToDatabase () throws SQLException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Is the connection already there? - if (MySqlDatabaseBackend.connection instanceof Connection) { - // Already connected - this.getLogger().debug("Connection is already established."); //NOI18N - - // No need to connect - return; - } - - // Generate connection string - String connect = String.format("jdbc:mysql://%s/%s", //NOI18N - this.getProperty("database.mysql.host"), //NOI18N - this.getProperty("database.mysql.dbname") //NOI18N - ); - - // Debug message - this.getLogger().debug(MessageFormat.format("Attempting to connect to {0} ...", connect)); //NOI18N - - // Now get a connection instance back - MySqlDatabaseBackend.connection = DriverManager.getConnection( - connect, - this.getProperty("database.mysql.login"), //NOI18N - this.getProperty("database.mysql.password") //NOI18N - ); - - // Is the connection really up? - if (MySqlDatabaseBackend.connection.isClosed()) { - // Connection is closed again - throw new SQLException("Connection is closed."); //NOI18N - } - - // Debug message - this.getLogger().debug("Connection is up, preparing some statements ..."); //NOI18N - - // Here, the connection is established, so prepare some statements - this.totalRowCount = MySqlDatabaseBackend.connection.prepareStatement(String.format("SELECT COUNT(`id`) AS `cnt` FROM `%s` LIMIT 1", this.getTableName())); //NOI18N - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - @Override - public void doShutdown () { - // This should not happen: - assert(MySqlDatabaseBackend.connection instanceof Connection) : MessageFormat.format("connection is not valid: {0}", MySqlDatabaseBackend.connection); //NOI18N - - try { - // Close down database connection - MySqlDatabaseBackend.connection.close(); - } catch (final SQLException ex) { - // Something happened during close() - this.abortProgramWithException(ex); - } - } - - /** - * Some "getter" for row index from given boolean row value - * - * @param columnName Name of column - * @param bool Boolean value to look for - * @return Row index - */ - @Override - public int getRowIndexFromColumn (final String columnName, final boolean bool) { - throw new UnsupportedOperationException(MessageFormat.format("columnName={0},bool={1}", columnName, bool)); - } - - @Override - public int getTotalCount () throws SQLException { - // Trace message - this.getLogger().trace(MessageFormat.format("tableName={0} - CALLED!", this.getTableName())); //NOI18N - - // Nothing counted by default - int count = 0; - - // Prepared statements are cool ... - if (this.totalRowCount.execute()) { - // Did fully work, so get result set - ResultSet set = this.totalRowCount.getResultSet(); - - // First rewind it - assert(set.last()) : ": last() failed"; //NOI18N - - // Get integer from 'cnt' alias (see statement) - count = set.getInt("cnt"); //NOI18N - - // Debug message - this.getLogger().debug(MessageFormat.format("count={0}", count)); //NOI18N - - // Go back to beginning - set.beforeFirst(); - } else { - // Empty result - this.getLogger().warn(MessageFormat.format("COUNT() query didn't return any result on table {0}.", this.getTableName())); //NOI18N - } - - // Trace message - this.getLogger().trace(MessageFormat.format("count={0} - EXIT!", count)); //NOI18N - - // Return result - return count; - } - - /** - * Checks whether at least one row is found with given boolean value. - * - * @param columnName Column to check for boolean value - * @param bool Boolean value to check - * @return Whether boolean value is found and returns at least one row - */ - @Override - public boolean isRowFound (final String columnName, final boolean bool) throws SQLException { - // Is at least one entry found? - if (this.getTotalCount() == 0) { - // No entry found at all - return false; - } - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Iterator iterator () throws BadTokenException { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public long length () { - throw new UnsupportedOperationException("Not implemented for this backend."); //NOI18N - } - - @Override - public Storeable readRow (final int rowIndex) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void rewind () { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void store (final Storeable object) throws IOException { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java b/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java deleted file mode 100644 index 462b096..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java +++ /dev/null @@ -1,103 +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; - -import java.sql.SQLException; -import org.mxchange.addressbook.BaseFrameworkSystem; -import org.mxchange.addressbook.database.backend.DatabaseBackend; -import org.mxchange.addressbook.database.backend.csv.Base64CsvDatabaseBackend; -import org.mxchange.addressbook.database.backend.mysql.MySqlDatabaseBackend; -import org.mxchange.addressbook.exceptions.UnsupportedDatabaseBackendException; -import org.mxchange.addressbook.exceptions.UnsupportedDatabaseDriverException; - -/** - * General database frontend class - * - * @author Roland Haeder - */ -public abstract class BaseDatabaseFrontend extends BaseFrameworkSystem implements DatabaseFrontend { - - /** - * Instance for database backend - */ - private DatabaseBackend backend; - - /** - * No instances from this class - */ - protected BaseDatabaseFrontend () { - } - - /** - * Instance for database backend - * - * @return the backend - */ - protected final DatabaseBackend getBackend () { - return this.backend; - } - - /** - * Instance for database backend - * - * @param backend the backend to set - */ - protected final void setBackend (final DatabaseBackend backend) { - this.backend = backend; - } - - /** - * Initialize backend - * - * @throws org.mxchange.addressbook.exceptions.UnsupportedDatabaseBackendException If the backend is not supported - * @throws java.sql.SQLException If a SQL database backend fails to connect - */ - protected void initBackend () throws UnsupportedDatabaseBackendException, SQLException { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Read property - // @TODO rewrite this to own properties file - String backendType = this.getProperty("database.backendType"); //NOI18N - - // Try it - try { - // Switch on backend type - switch (backendType) { - case "mysql": // MySQL backend, this requires more information //NOI18N - this.backend = new MySqlDatabaseBackend(this.getTableName()); - break; - - case "base64csv": // BASE64-encoded CSV rows //NOI18N - this.backend = new Base64CsvDatabaseBackend(this.getTableName(), this); - break; - - default: // Unsupported - throw new UnsupportedDatabaseBackendException(backendType); - } - - // Try to run a connect on it - this.backend.connectToDatabase(); - } catch (final UnsupportedDatabaseDriverException ex) { - // Continue to throw - throw new UnsupportedDatabaseBackendException(backendType, ex); - } - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/frontend/DatabaseFrontend.java b/Addressbook/src/org/mxchange/addressbook/database/frontend/DatabaseFrontend.java deleted file mode 100644 index 8df158d..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/frontend/DatabaseFrontend.java +++ /dev/null @@ -1,38 +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; - -import org.mxchange.addressbook.FrameworkInterface; -import org.mxchange.addressbook.database.storage.Storeable; -import org.mxchange.addressbook.exceptions.BadTokenException; - -/** - * A generic interface for database frontends - * - * @author Roland Haeder - */ -public interface DatabaseFrontend extends FrameworkInterface { - /** - * 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 - * @throws org.mxchange.addressbook.exceptions.BadTokenException If a token was badly formatted - */ - public Storeable parseLineToStoreable (final String line) throws BadTokenException; -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactDatabaseFrontend.java b/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactDatabaseFrontend.java index ecd30b4..3731a14 100644 --- a/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactDatabaseFrontend.java +++ b/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactDatabaseFrontend.java @@ -26,12 +26,12 @@ import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.contact.book.BookContact; import org.mxchange.addressbook.contact.user.UserContact; import org.mxchange.addressbook.database.contact.ContactDatabaseConstants; -import org.mxchange.addressbook.database.frontend.BaseDatabaseFrontend; -import org.mxchange.addressbook.database.storage.Storeable; -import org.mxchange.addressbook.exceptions.BadTokenException; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.addressbook.exceptions.UnsupportedDatabaseBackendException; import org.mxchange.addressbook.manager.contact.ContactManager; +import org.mxchange.jcore.database.frontend.BaseDatabaseFrontend; +import org.mxchange.jcore.database.storage.Storeable; +import org.mxchange.jcore.exceptions.BadTokenException; +import org.mxchange.jcore.exceptions.UnsupportedDatabaseBackendException; /** * Stores and retrieves Contact instances diff --git a/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactFrontend.java b/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactFrontend.java index 66c224a..90aff3b 100644 --- a/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactFrontend.java +++ b/Addressbook/src/org/mxchange/addressbook/database/frontend/contact/ContactFrontend.java @@ -18,9 +18,9 @@ package org.mxchange.addressbook.database.frontend.contact; import java.sql.SQLException; import org.mxchange.addressbook.contact.Contact; -import org.mxchange.addressbook.database.frontend.DatabaseFrontend; -import org.mxchange.addressbook.exceptions.BadTokenException; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; +import org.mxchange.jcore.database.frontend.DatabaseFrontend; +import org.mxchange.jcore.exceptions.BadTokenException; /** * @@ -54,7 +54,7 @@ public interface ContactFrontend extends DatabaseFrontend { * * @param contact Contact instance to check * @return Whether the given Contact instance is found - * @throws org.mxchange.addressbook.exceptions.BadTokenException Continued throw + * @throws org.mxchange.jcore.exceptions.BadTokenException Continued throw */ public boolean isContactFound (final Contact contact) throws BadTokenException; diff --git a/Addressbook/src/org/mxchange/addressbook/database/storage/Storeable.java b/Addressbook/src/org/mxchange/addressbook/database/storage/Storeable.java deleted file mode 100644 index ee97da3..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/storage/Storeable.java +++ /dev/null @@ -1,27 +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.storage; - -import org.mxchange.addressbook.FrameworkInterface; - -/** - * An interface for objects being stored in databases - * - * @author Roland Haeder - */ -public interface Storeable extends FrameworkInterface { -} diff --git a/Addressbook/src/org/mxchange/addressbook/database/storage/csv/StoreableCsv.java b/Addressbook/src/org/mxchange/addressbook/database/storage/csv/StoreableCsv.java deleted file mode 100644 index faf976b..0000000 --- a/Addressbook/src/org/mxchange/addressbook/database/storage/csv/StoreableCsv.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.storage.csv; - -import org.mxchange.addressbook.database.storage.Storeable; - -/** - * An interface for classes which should be storeable as a CSV string - * - * @author Roland Haeder - * @deprecated This method was for an old way of storing data into - * comma-separated value files. Now that there is BASE64-encoding, this formating - * is no longer needed. - */ -@Deprecated -public interface StoreableCsv extends Storeable { - - /** - * Getter for a CSV-formated string from object - * - * @return - * @deprecated See interface deprecation - */ - @Deprecated - public String getCsvStringFromStoreableObject (); -} diff --git a/Addressbook/src/org/mxchange/addressbook/exceptions/BadTokenException.java b/Addressbook/src/org/mxchange/addressbook/exceptions/BadTokenException.java deleted file mode 100644 index c875171..0000000 --- a/Addressbook/src/org/mxchange/addressbook/exceptions/BadTokenException.java +++ /dev/null @@ -1,38 +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.exceptions; - -import java.text.MessageFormat; - -/** - * This exception is thrown when a token has been badly formated. This may - * happen when a CSV file is broken. - * - * @author Roland Haeder - */ -public class BadTokenException extends Exception { - - /** - * Constructor with token and count - * @param token Token that is not valid - * @param count Count - */ - public BadTokenException (final String token, final int count) { - super(MessageFormat.format("Token {0} at position {1} has not double-quotes on both ends.", token, count)); - } - -} diff --git a/Addressbook/src/org/mxchange/addressbook/exceptions/FrameAlreadyInitializedException.java b/Addressbook/src/org/mxchange/addressbook/exceptions/FrameAlreadyInitializedException.java deleted file mode 100644 index db2c3e4..0000000 --- a/Addressbook/src/org/mxchange/addressbook/exceptions/FrameAlreadyInitializedException.java +++ /dev/null @@ -1,32 +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.exceptions; - -/** - * This exception is thrown when initFrame() is called twice. - * - * @author Roland Haeder - */ -public class FrameAlreadyInitializedException extends Exception { - - /** - * Default constructor - */ - public FrameAlreadyInitializedException () { - } - -} diff --git a/Addressbook/src/org/mxchange/addressbook/exceptions/UnhandledUserChoiceException.java b/Addressbook/src/org/mxchange/addressbook/exceptions/UnhandledUserChoiceException.java deleted file mode 100644 index 24af4b2..0000000 --- a/Addressbook/src/org/mxchange/addressbook/exceptions/UnhandledUserChoiceException.java +++ /dev/null @@ -1,34 +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.exceptions; - -/** - * This exception is thrown when the user made a valid choice but it was not - * handled by the program. - * - * @author Roland Haeder - */ -public class UnhandledUserChoiceException extends Exception { - - /** - * - * @param message - */ - public UnhandledUserChoiceException (final String message) { - super(message); - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/exceptions/UnsupportedDatabaseBackendException.java b/Addressbook/src/org/mxchange/addressbook/exceptions/UnsupportedDatabaseBackendException.java deleted file mode 100644 index c7ac7c4..0000000 --- a/Addressbook/src/org/mxchange/addressbook/exceptions/UnsupportedDatabaseBackendException.java +++ /dev/null @@ -1,48 +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.exceptions; - -import java.text.MessageFormat; - -/** - * An exception thrown when the given backend type is not valid - * - * @author Roland Haeder - */ -public class UnsupportedDatabaseBackendException extends Exception { - - /** - * - * @param backendType - */ - public UnsupportedDatabaseBackendException (final String backendType) { - // Call super constructor - super(MessageFormat.format("Backend {0} is not supported.", backendType)); //NOI18N - } - - /** - * Constructor with backend type and cause - * - * @param backendType Backend type - * @param cause - */ - public UnsupportedDatabaseBackendException (final String backendType, final Throwable cause) { - // Call super constructor - super(MessageFormat.format("Backend {0} is not supported.", backendType), cause); //NOI18N - } - -} diff --git a/Addressbook/src/org/mxchange/addressbook/manager/Manageable.java b/Addressbook/src/org/mxchange/addressbook/manager/Manageable.java deleted file mode 100644 index af3cc6c..0000000 --- a/Addressbook/src/org/mxchange/addressbook/manager/Manageable.java +++ /dev/null @@ -1,26 +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.manager; - -import org.mxchange.addressbook.FrameworkInterface; - -/** - * - * @author Roland Haeder - */ -public interface Manageable extends FrameworkInterface { -} diff --git a/Addressbook/src/org/mxchange/addressbook/manager/application/ApplicationManager.java b/Addressbook/src/org/mxchange/addressbook/manager/application/ApplicationManager.java deleted file mode 100644 index 9a74efb..0000000 --- a/Addressbook/src/org/mxchange/addressbook/manager/application/ApplicationManager.java +++ /dev/null @@ -1,81 +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.manager.application; - -import org.mxchange.addressbook.application.Application; -import org.mxchange.addressbook.manager.BaseManager; - -/** - * - * @author Roland Haeder - */ -public class ApplicationManager extends BaseManager implements ManageableApplication { - - /** - * Getter for application manager - * - * @param application An instance of a Application class - * @return - */ - public static final ManageableApplication getManager (final Application application) { - // Application instance must be set - if (application == null) { - // Abort here - throw new NullPointerException("application is null"); //NOI18N - } - - // Get manager - ManageableApplication manager = new ApplicationManager(application); - - // Return manager - return manager; - } - - /** - * Constructor for this manager - * - * @param application An instance of an Application class - */ - private ApplicationManager (final Application application) { - // Application instance must be set - if (application == null) { - // Abort here - throw new NullPointerException("application is null"); //NOI18N - } - - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Set application instance - this.setApplication(application); - } - - @Override - public void start () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Bootstrap application - this.getApplication().doBootstrap(); - - // Run the main loop - this.getApplication().doMainLoop(); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/manager/application/ManageableApplication.java b/Addressbook/src/org/mxchange/addressbook/manager/application/ManageableApplication.java deleted file mode 100644 index 8e732e7..0000000 --- a/Addressbook/src/org/mxchange/addressbook/manager/application/ManageableApplication.java +++ /dev/null @@ -1,31 +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.manager.application; - -import org.mxchange.addressbook.manager.Manageable; - -/** - * - * @author Roland Haeder - */ -public interface ManageableApplication extends Manageable { - - /** - * Launches application - */ - public void start (); -} diff --git a/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java b/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java index 4613e0d..4191f0c 100644 --- a/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java +++ b/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java @@ -22,15 +22,16 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.client.AddressbookClient; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.database.frontend.contact.ContactDatabaseFrontend; import org.mxchange.addressbook.database.frontend.contact.ContactFrontend; -import org.mxchange.addressbook.exceptions.BadTokenException; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.addressbook.exceptions.UnhandledUserChoiceException; -import org.mxchange.addressbook.manager.BaseManager; +import org.mxchange.jcore.client.Client; +import org.mxchange.jcore.exceptions.BadTokenException; +import org.mxchange.jcore.exceptions.UnhandledUserChoiceException; +import org.mxchange.jcore.manager.BaseManager; /** * A manager for contacts, please note that this implementation loads the whole @@ -136,13 +137,16 @@ public class ContactManager extends BaseManager implements ManageableContact { throw new NullPointerException("contact is null"); //NOI18N } + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + // First display it again - this.getClient().displayAddressBox(contact); + client.displayAddressBox(contact); // Is it own data? if (contact.isOwnContact()) { // Deligate to client - this.getClient().doChangeOwnAddressData(contact); + client.doChangeOwnAddressData(contact); } else { // Other contact's address data to change throw new UnsupportedOperationException("Changing contact entries not finished."); //NOI18N @@ -168,13 +172,16 @@ public class ContactManager extends BaseManager implements ManageableContact { throw new NullPointerException("contact is null"); //NOI18N } + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + // First display them again - this.getClient().displayNameBox(contact); + client.displayNameBox(contact); // Is this own data? if (contact.isOwnContact()) { // Re-ask own data - this.getClient().doChangeOwnNameData(contact); + client.doChangeOwnNameData(contact); } else { // Then re-ask them ... throw new UnsupportedOperationException("Changing contact entries not finished."); //NOI18N @@ -209,13 +216,16 @@ public class ContactManager extends BaseManager implements ManageableContact { throw new NullPointerException("contact is null"); //NOI18N } + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + // First display them again - this.getClient().displayOtherDataBox(contact); + client.displayOtherDataBox(contact); // Is this own data? if (contact.isOwnContact()) { // Re-ask own data - this.getClient().doChangeOwnOtherData(contact); + client.doChangeOwnOtherData(contact); } else { // Then re-ask them ... throw new UnsupportedOperationException("Changing contact entries not finished."); //NOI18N @@ -254,9 +264,12 @@ public class ContactManager extends BaseManager implements ManageableContact { // Display contact contact.show(this.getClient()); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + try { // Ask user what to change - this.getClient().userChooseChangeContactData(contact); + client.userChooseChangeContactData(contact); } catch (final UnhandledUserChoiceException ex) { this.getLogger().catching(ex); } @@ -287,8 +300,11 @@ public class ContactManager extends BaseManager implements ManageableContact { throw new ContactAlreadyAddedException(); } + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + // Deligate this call to the client - Contact contact = this.getClient().doEnterOwnData(); + Contact contact = client.doEnterOwnData(); // Is it set? if (contact instanceof Contact) { @@ -335,7 +351,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Handynummer an: ", true); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(5, 30, "Bitte geben Sie Ihre Handynummer an: ", true); } /** @@ -348,7 +367,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(3, 50, "Bitte geben Sie Ihre Wohnort ein: ", false); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(3, 50, "Bitte geben Sie Ihre Wohnort ein: ", false); } /** @@ -361,7 +383,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(0, 100, "Kommentar zu Ihrem Eintrag: ", true); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(0, 100, "Kommentar zu Ihrem Eintrag: ", true); } /** @@ -374,7 +399,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true); } /** @@ -387,7 +415,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(2, 2, "Bitte geben Sie den zweistelligen Ländercode von Ihrem Land ein: ", false).toUpperCase(); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(2, 2, "Bitte geben Sie den zweistelligen Ländercode von Ihrem Land ein: ", false).toUpperCase(); } /** @@ -400,7 +431,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(10, 50, "Bitte geben Sie Ihre Email-Adresse ein: ", true); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(10, 50, "Bitte geben Sie Ihre Email-Adresse ein: ", true); } /** @@ -413,7 +447,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false); } /** @@ -426,7 +463,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Faxnummer an: ", true); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(5, 30, "Bitte geben Sie Ihre Faxnummer an: ", true); } /** @@ -439,7 +479,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterGender("Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): "); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterGender("Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): "); } /** @@ -452,7 +495,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Telefonnummer an: ", true); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(5, 30, "Bitte geben Sie Ihre Telefonnummer an: ", true); } /** @@ -465,7 +511,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Strasse und Hausnummer ein: ", false); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(5, 50, "Bitte geben Sie Ihre Strasse und Hausnummer ein: ", false); } /** @@ -478,7 +527,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false); } /** @@ -491,7 +543,10 @@ public class ContactManager extends BaseManager implements ManageableContact { // Trace message this.getLogger().trace("CALLED!"); //NOI18N - return this.getClient().enterInt(0, 99_999, "Bitte geben Sie Ihre Postleitzahl ein: "); + // Get and cast client instance + AddressbookClient client = (AddressbookClient) this.getClient(); + + return client.enterInt(0, 99_999, "Bitte geben Sie Ihre Postleitzahl ein: "); } @Override diff --git a/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java b/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java index 1dd2fc9..cc22934 100644 --- a/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java +++ b/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java @@ -19,19 +19,13 @@ package org.mxchange.addressbook.manager.contact; import org.mxchange.addressbook.contact.Contact; import org.mxchange.addressbook.contact.Gender; import org.mxchange.addressbook.exceptions.ContactAlreadyAddedException; -import org.mxchange.addressbook.manager.Manageable; +import org.mxchange.jcore.manager.Manageable; /** * * @author Roland Haeder */ public interface ManageableContact extends Manageable { - - /** - * Shuts down this contact manager - */ - public void doShutdown (); - /** * Allows the user to enter own cellphone number. * diff --git a/Addressbook/src/org/mxchange/addressbook/menu/AddressbookMenu.java b/Addressbook/src/org/mxchange/addressbook/menu/AddressbookMenu.java index af29b11..12257eb 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/AddressbookMenu.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/AddressbookMenu.java @@ -19,16 +19,17 @@ package org.mxchange.addressbook.menu; import java.text.MessageFormat; import java.util.List; import org.apache.logging.log4j.Logger; -import org.mxchange.addressbook.BaseFrameworkSystem; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.BaseAddressbookSystem; +import org.mxchange.addressbook.client.AddressbookClient; import org.mxchange.addressbook.menu.item.SelectableMenuItem; +import org.mxchange.jcore.client.Client; /** * Utility class for menu structure * * @author Roland Haeder */ -public class AddressbookMenu extends BaseFrameworkSystem { +public class AddressbookMenu extends BaseAddressbookSystem { /** * Copies entries for given type into the menu list @@ -51,8 +52,14 @@ public class AddressbookMenu extends BaseFrameworkSystem { } else if (client == null) { // Abort here throw new NullPointerException("contact is null"); //NOI18N + } else if (!(client instanceof AddressbookClient)) { + // Not correct instance + throw new IllegalArgumentException(MessageFormat.format("client{0} must implement AddressbookClient", client)); } + // Cast client to proper interface + AddressbookClient c = (AddressbookClient) client; + // Get list size int size = menuList.size(); @@ -63,28 +70,28 @@ public class AddressbookMenu extends BaseFrameworkSystem { switch (menuType) { case "main": // Main menu //NOI18N // Enter own data - menuList.add(client.getMenuItem('1', "Eigene Adresse anlegen")); + menuList.add(c.getMenuItem('1', "Eigene Adresse anlegen")); // Change own data - menuList.add(client.getMenuItem('2', "Eigene Adresse ändern")); + menuList.add(c.getMenuItem('2', "Eigene Adresse ändern")); // Add new addess - menuList.add(client.getMenuItem('3', "Neue Adresse hinzufügen")); + menuList.add(c.getMenuItem('3', "Neue Adresse hinzufügen")); // List entries - menuList.add(client.getMenuItem('4', "Adressbuch anzeigen")); + menuList.add(c.getMenuItem('4', "Adressbuch anzeigen")); // Address search - menuList.add(client.getMenuItem('5', "Adresse suchen")); + menuList.add(c.getMenuItem('5', "Adresse suchen")); // Change other address - menuList.add(client.getMenuItem('6', "Adresse ändern")); + menuList.add(c.getMenuItem('6', "Adresse ändern")); // Delete other address - menuList.add(client.getMenuItem('7', "Adresse löschen")); + menuList.add(c.getMenuItem('7', "Adresse löschen")); // Always last line: Exit program - menuList.add(client.getMenuItem('0', "Programm verlassen")); + menuList.add(c.getMenuItem('0', "Programm verlassen")); break; default: // Not supported diff --git a/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java b/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java index 5d1785d..f554820 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java @@ -20,15 +20,16 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.mxchange.addressbook.BaseFrameworkSystem; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.BaseAddressbookSystem; +import org.mxchange.addressbook.client.AddressbookClient; import org.mxchange.addressbook.menu.item.SelectableMenuItem; +import org.mxchange.jcore.client.Client; /** * * @author Roland Haeder */ -public class BaseMenu extends BaseFrameworkSystem { +public class BaseMenu extends BaseAddressbookSystem { /** * Menu list @@ -86,7 +87,7 @@ public class BaseMenu extends BaseFrameworkSystem { SelectableMenuItem item = iterator.next(); // Show this item - item.show(client); + item.show((AddressbookClient) client); } // Trace message diff --git a/Addressbook/src/org/mxchange/addressbook/menu/Menu.java b/Addressbook/src/org/mxchange/addressbook/menu/Menu.java index 872719e..78a5fb1 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/Menu.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/Menu.java @@ -17,8 +17,8 @@ package org.mxchange.addressbook.menu; import java.util.Iterator; -import org.mxchange.addressbook.client.Client; import org.mxchange.addressbook.menu.item.SelectableMenuItem; +import org.mxchange.jcore.client.Client; /** * diff --git a/Addressbook/src/org/mxchange/addressbook/menu/MenuTools.java b/Addressbook/src/org/mxchange/addressbook/menu/MenuTools.java index f1c1f2c..30d8164 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/MenuTools.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/MenuTools.java @@ -19,14 +19,14 @@ package org.mxchange.addressbook.menu; import java.util.Iterator; import java.util.Map; import org.apache.logging.log4j.Logger; -import org.mxchange.addressbook.BaseFrameworkSystem; +import org.mxchange.addressbook.BaseAddressbookSystem; import org.mxchange.addressbook.menu.item.SelectableMenuItem; /** * * @author Roland Haeder */ -public class MenuTools extends BaseFrameworkSystem { +public class MenuTools extends BaseAddressbookSystem { /** * Gets an array with all available access keys back from given menu map. diff --git a/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java b/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java index 6eff64f..5139c00 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java @@ -17,10 +17,11 @@ package org.mxchange.addressbook.menu.console; import java.text.MessageFormat; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.client.AddressbookClient; import org.mxchange.addressbook.menu.AddressbookMenu; import org.mxchange.addressbook.menu.BaseMenu; import org.mxchange.addressbook.menu.Menu; +import org.mxchange.jcore.client.Client; /** * @@ -48,6 +49,6 @@ public class ConsoleMenu extends BaseMenu implements Menu { this.initMenu(menuType, client); // Add all items - AddressbookMenu.addItemsToList(this.getMenuList(), menuType, client); + AddressbookMenu.addItemsToList(this.getMenuList(), menuType, (AddressbookClient) client); } } diff --git a/Addressbook/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java b/Addressbook/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java index bc1bba7..4bb1cf9 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java @@ -1,27 +1,27 @@ -/* - * 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.menu.item; - -import org.mxchange.addressbook.BaseFrameworkSystem; - -/** - * - * @author Roland Haeder - */ -public class BaseMenuItem extends BaseFrameworkSystem { - -} +/* + * 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.menu.item; + +import org.mxchange.addressbook.BaseAddressbookSystem; + +/** + * + * @author Roland Haeder + */ +public class BaseMenuItem extends BaseAddressbookSystem { + +} diff --git a/Addressbook/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java b/Addressbook/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java index 22ed008..a6de00a 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java @@ -16,7 +16,7 @@ */ package org.mxchange.addressbook.menu.item; -import org.mxchange.addressbook.client.Client; +import org.mxchange.jcore.client.Client; /** * diff --git a/Addressbook/src/org/mxchange/addressbook/menu/item/console/ConsoleMenuItem.java b/Addressbook/src/org/mxchange/addressbook/menu/item/console/ConsoleMenuItem.java index 8b863cd..1090a63 100644 --- a/Addressbook/src/org/mxchange/addressbook/menu/item/console/ConsoleMenuItem.java +++ b/Addressbook/src/org/mxchange/addressbook/menu/item/console/ConsoleMenuItem.java @@ -17,9 +17,10 @@ package org.mxchange.addressbook.menu.item.console; import java.text.MessageFormat; -import org.mxchange.addressbook.client.Client; +import org.mxchange.addressbook.client.AddressbookClient; import org.mxchange.addressbook.menu.item.BaseMenuItem; import org.mxchange.addressbook.menu.item.SelectableMenuItem; +import org.mxchange.jcore.client.Client; /** * @@ -58,6 +59,15 @@ public class ConsoleMenuItem extends BaseMenuItem implements SelectableMenuItem return this.accessKey; } + /** + * Access key + * + * @param accessKey the accessKey to set + */ + private void setAccessKey (char accessKey) { + this.accessKey = accessKey; + } + /** * Text to user * @@ -68,6 +78,15 @@ public class ConsoleMenuItem extends BaseMenuItem implements SelectableMenuItem return this.text; } + /** + * Text to user + * + * @param text the text to set + */ + private void setText (String text) { + this.text = text; + } + @Override public void show (final Client client) { // Trace message @@ -77,31 +96,19 @@ public class ConsoleMenuItem extends BaseMenuItem implements SelectableMenuItem if (client == null) { // Abort here throw new NullPointerException("client is null"); + } else if (!(client instanceof AddressbookClient)) { + // Wrong interface + throw new IllegalArgumentException("client " + client + " must implement AddressbookClient"); } + // Cast it + AddressbookClient c = (AddressbookClient) client; + // Call-back client over menu - client.showEntry(this); + c.showEntry(this); // Trace message this.getLogger().trace("EXIT!"); //NOI18N } - /** - * Text to user - * - * @param text the text to set - */ - private void setText (String text) { - this.text = text; - } - - /** - * Access key - * - * @param accessKey the accessKey to set - */ - private void setAccessKey (char accessKey) { - this.accessKey = accessKey; - } - } diff --git a/Addressbook/src/org/mxchange/addressbook/model/BaseModel.java b/Addressbook/src/org/mxchange/addressbook/model/BaseModel.java deleted file mode 100644 index c55261c..0000000 --- a/Addressbook/src/org/mxchange/addressbook/model/BaseModel.java +++ /dev/null @@ -1,146 +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.model; - -import java.text.MessageFormat; -import javax.swing.event.EventListenerList; -import javax.swing.event.ListDataListener; -import javax.swing.event.TableModelListener; -import org.mxchange.addressbook.BaseFrameworkSystem; - -/** - * - * @author Roland Haeder - */ -public class BaseModel extends BaseFrameworkSystem { - - /** - * List of event listeners - */ - private final EventListenerList eventListenerList; - - /** - * Protected constructor - */ - protected BaseModel () { - // Trace message - this.getLogger().trace("CALLED!"); //NOI18N - - // Init listener list - this.eventListenerList = new EventListenerList(); - } - - /** - * Adds a lister of this type to the list - * - * @param listener Listener instance - */ - public void addListDataListener (final ListDataListener listener) { - // Trace message - this.getLogger().trace("listener=" + listener + " - CALLED!"); //NOI18N - - // Listener must not be null - if (listener == null) { - // Abort here - throw new NullPointerException("listener is null"); - } - - // Debug message - this.getLogger().debug(MessageFormat.format("Adding listener {0} ...", listener.getClass())); - - // Remove listener - this.eventListenerList.add(ListDataListener.class, listener); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Adds a TableModel listener instance to the event list. - * - * @param listener Lister instance - */ - public void addTableModelListener (final TableModelListener listener) { - // Trace message - this.getLogger().trace("listener=" + listener + " - CALLED!"); //NOI18N - - // Listener must not be null - if (listener == null) { - // Abort here - throw new NullPointerException("listener is null"); - } - - // Debug message - this.getLogger().debug(MessageFormat.format("Adding listener {0} ...", listener.getClass())); - - // Add listener - this.eventListenerList.add(TableModelListener.class, listener); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Removes given listener - * - * @param listener Listener instance - */ - public void removeListDataListener (final ListDataListener listener) { - // Trace message - this.getLogger().trace("listener=" + listener + " - CALLED!"); //NOI18N - - // Listener must not be null - if (listener == null) { - // Abort here - throw new NullPointerException("listener is null"); - } - - // Debug message - this.getLogger().debug(MessageFormat.format("Removing listener {0} ...", listener.getClass())); - - // Remove listener - this.eventListenerList.remove(ListDataListener.class, listener); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } - - /** - * Removes a TableModel listener instance from the event list. - * - * @param listener Listener instance - */ - public void removeTableModelListener (final TableModelListener listener) { - // Trace message - this.getLogger().trace("listener=" + listener + " - CALLED!"); //NOI18N - - // Listener must not be null - if (listener == null) { - // Abort here - throw new NullPointerException("listener is null"); - } - - // Debug message - this.getLogger().debug(MessageFormat.format("Removing listener {0} ...", listener.getClass())); - - // Remove listener - this.eventListenerList.remove(TableModelListener.class, listener); - - // Trace message - this.getLogger().trace("EXIT!"); //NOI18N - } -} diff --git a/Addressbook/src/org/mxchange/addressbook/model/contact/ContactTableModel.java b/Addressbook/src/org/mxchange/addressbook/model/contact/ContactTableModel.java index d0e2866..6c3b930 100644 --- a/Addressbook/src/org/mxchange/addressbook/model/contact/ContactTableModel.java +++ b/Addressbook/src/org/mxchange/addressbook/model/contact/ContactTableModel.java @@ -18,8 +18,9 @@ package org.mxchange.addressbook.model.contact; import java.text.MessageFormat; import javax.swing.table.TableModel; -import org.mxchange.addressbook.client.Client; -import org.mxchange.addressbook.model.BaseModel; +import org.mxchange.addressbook.manager.contact.ManageableContact; +import org.mxchange.jcore.client.Client; +import org.mxchange.jcore.model.BaseModel; /** * A table model for contacts @@ -55,26 +56,38 @@ public class ContactTableModel extends BaseModel implements TableModel { @Override public int getColumnCount () { + // Get manager + ManageableContact manager = (ManageableContact) this.getClient().getManager(); + // Deligate this call to contact manager - return this.getClient().getContactManager().getColumnCount(); + return manager.getColumnCount(); } @Override public String getColumnName (final int columnIndex) { + // Get manager + ManageableContact manager = (ManageableContact) this.getClient().getManager(); + // Deligate this call to contact manager - return this.getClient().getContactManager().getTranslatedColumnName(columnIndex); + return manager.getTranslatedColumnName(columnIndex); } @Override public int getRowCount () { + // Get manager + ManageableContact manager = (ManageableContact) this.getClient().getManager(); + // Deligate this call to contact manager - return this.getClient().getContactManager().size(); + return manager.size(); } @Override public Object getValueAt (final int rowIndex, final int columnIndex) { - // Let the manager do this job for us - return this.getClient().getContactManager().getValueFromRowColumn(rowIndex, columnIndex); + // Get manager + ManageableContact manager = (ManageableContact) this.getClient().getManager(); + + // Deligate this call to contact manager + return manager.getValueFromRowColumn(rowIndex, columnIndex); } @Override diff --git a/Addressbook/src/org/mxchange/addressbook/localization/bundle_de_DE.properties b/Addressbook/src/org/mxchange/localization/bundle_de_DE.properties similarity index 100% rename from Addressbook/src/org/mxchange/addressbook/localization/bundle_de_DE.properties rename to Addressbook/src/org/mxchange/localization/bundle_de_DE.properties diff --git a/Addressbook/src/org/mxchange/addressbook/localization/bundle_en_US.properties b/Addressbook/src/org/mxchange/localization/bundle_en_US.properties similarity index 100% rename from Addressbook/src/org/mxchange/addressbook/localization/bundle_en_US.properties rename to Addressbook/src/org/mxchange/localization/bundle_en_US.properties -- 2.39.5