<?xml version="1.0" encoding="UTF-8"?>
<!--
-Copyright (C) 2015 Roland Häder
+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
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook;\r
-\r
-import java.util.ResourceBundle;\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-import org.mxchange.addressbook.application.Application;\r
-import org.mxchange.addressbook.client.Client;\r
-import org.mxchange.addressbook.manager.contact.ManageableContact;\r
-\r
-/**\r
- * General class\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class BaseFrameworkSystem implements FrameworkInterface {\r
- /**\r
- * Class' logger\r
- */\r
- private final Logger LOG;\r
-\r
- /**\r
- * Application instance\r
- */\r
- private Application application;\r
-\r
- /**\r
- * Bundle instance\r
- */\r
- private final ResourceBundle bundle;\r
-\r
- /**\r
- * Client instance\r
- */\r
- private Client client;\r
-\r
- /**\r
- * Contact manager instance\r
- */\r
- private ManageableContact contactManager;\r
-\r
- /**\r
- * Name of used database table, handled over to backend\r
- */\r
- private String tableName;\r
-\r
-\r
- /**\r
- * Initialize object\r
- */\r
- {\r
- LOG = LogManager.getLogger(this);\r
- bundle = ResourceBundle.getBundle("org/mxchange/addressbook/localization/bundle"); // NOI18N\r
- }\r
-\r
- /**\r
- * No instances can be created of this class\r
- */\r
- protected BaseFrameworkSystem () {\r
- }\r
-\r
- /**\r
- * Application instance\r
- * \r
- * @return the application\r
- */\r
- @Override\r
- public final Application getApplication () {\r
- return this.application;\r
- }\r
-\r
- /**\r
- * Client instance\r
- * \r
- * @return the client\r
- */\r
- @Override\r
- public final Client getClient () {\r
- return this.client;\r
- }\r
-\r
- /**\r
- * Contact manager instance\r
- * @return the contactManager\r
- */\r
- @Override\r
- public final ManageableContact getContactManager () {\r
- return this.contactManager;\r
- }\r
-\r
- /**\r
- * Contact manager instance\r
- * @param contactManager the contactManager to set\r
- */\r
- protected final void setContactManager (final ManageableContact contactManager) {\r
- this.contactManager = contactManager;\r
- }\r
-\r
- /**\r
- * Client instance\r
- * @param client the client to set\r
- */\r
- protected final void setClient (final Client client) {\r
- this.client = client;\r
- }\r
-\r
- /**\r
- * Application instance\r
- *\r
- * @param application the application to set\r
- */\r
- protected final void setApplication(final Application application) {\r
- this.application = application;\r
- }\r
-\r
- /**\r
- * Getter for logger\r
- *\r
- * @return Logger\r
- */\r
- protected final Logger getLogger () {\r
- return this.LOG;\r
- }\r
-\r
- /**\r
- * Name of used database table, handled over to backend\r
- * \r
- * @return the tableName\r
- */\r
- protected final String getTableName () {\r
- return this.tableName;\r
- }\r
-\r
- /**\r
- * Name of used database table, handled over to backend\r
- * \r
- * @param tableName the tableName to set\r
- */\r
- protected final void setTableName (final String tableName) {\r
- this.tableName = tableName;\r
- }\r
-\r
- /**\r
- * Getter for bundle instance\r
- * \r
- * @return Resource bundle\r
- */\r
- protected final ResourceBundle getBundle () {\r
- return this.bundle;\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook;
+
+import java.util.ResourceBundle;
+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.manager.contact.ManageableContact;
+
+/**
+ * General class
+ *
+ * @author Roland Haeder
+ */
+public class BaseFrameworkSystem implements FrameworkInterface {
+
+ /**
+ * 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;
+
+ /**
+ * 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 () {
+ }
+
+ /**
+ * Application instance
+ *
+ * @return the application
+ */
+ @Override
+ public final Application getApplication () {
+ return this.application;
+ }
+
+ /**
+ * Client instance
+ *
+ * @return the client
+ */
+ @Override
+ public final Client getClient () {
+ return this.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;
+ }
+
+ /**
+ * Client instance
+ *
+ * @param client the client to set
+ */
+ protected final void setClient (final Client client) {
+ this.client = client;
+ }
+
+ /**
+ * Application instance
+ *
+ * @param application the application to set
+ */
+ protected final void setApplication (final Application application) {
+ this.application = application;
+ }
+
+ /**
+ * Getter for logger
+ *
+ * @return Logger
+ */
+ protected final Logger getLogger () {
+ return this.LOG;
+ }
+
+ /**
+ * 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 bundle instance
+ *
+ * @return Resource bundle
+ */
+ protected final ResourceBundle getBundle () {
+ return this.bundle;
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook;\r
-\r
-import org.mxchange.addressbook.application.Application;\r
-import org.mxchange.addressbook.client.Client;\r
-import org.mxchange.addressbook.manager.contact.ManageableContact;\r
-\r
-/**\r
- * A general interface which should be always expanded\r
- *\r
- * @author Roland Haeder\r
- */\r
-public interface FrameworkInterface {\r
-\r
- /**\r
- * Getter for contact manager\r
- * @return Contact manager instance\r
- */\r
- public ManageableContact getContactManager();\r
-\r
- /**\r
- * Client instance\r
- * \r
- * @return the client\r
- */\r
- public Client getClient ();\r
-\r
- /**\r
- * Application instance\r
- * \r
- * @return the application\r
- */\r
- public Application getApplication ();\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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 {
+
+ /**
+ * 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 ();
+}
* @since 0.0
*/
public class AddressbookApplication extends BaseFrameworkSystem implements Application {
- /**
- * Application title
- */
- public static final String APP_TITLE = "Adressbuch";
-
- /**
- * Application version
- */
- public static final String APP_VERSION = "0.0";
-
- /**
- * Console client is enabled by default
- */
- private boolean consoleClient = true;
-
- /**
- * GUI client is disabled by default
- */
- private boolean guiClient = false;
-
- /**
- * Getter for printable application name
- *
- * @return A printable name
- */
- public static String printableTitle () {
- return MessageFormat.format("{0} v{1}", APP_TITLE, APP_VERSION);
- }
-
- /**
- * Bootstraps application
- */
- @Override
- public void doBootstrap () {
- this.getLogger().debug("Initializing application ...");
-
- // Init client variable
- Client client = null;
-
- // Is console or Swing choosen?
- if (this.isConsole()) {
- // Debug message
- this.getLogger().debug("Initializing console client ...");
-
- // Init console client instance
- client = new ConsoleClient(this);
- } else if (this.isGui()) {
- // Debug message
- this.getLogger().debug("Initializing GUI (Swing) client ...");
-
- // Init console instance
- client = new SwingClient(this);
- } else {
- // Not client choosen
- this.getLogger().error("No client choosen. Cannot launch.");
- System.exit(1);
- }
- // Init client
- client.init();
+ /**
+ * Application title
+ */
+ public static final String APP_TITLE = "Adressbuch";
+
+ /**
+ * Application version
+ */
+ public static final String APP_VERSION = "0.0";
+
+ /**
+ * Console client is enabled by default
+ */
+ private boolean consoleClient = true;
+
+ /**
+ * GUI client is disabled by default
+ */
+ private boolean guiClient = false;
+
+ /**
+ * Getter for printable application name
+ *
+ * @return A printable name
+ */
+ public static String printableTitle () {
+ return MessageFormat.format("{0} v{1}", APP_TITLE, APP_VERSION);
+ }
- // Set client instance
- this.setClient(client);
-
- // The application is running at this point
- this.getClient().enableIsRunning();
- }
+ /**
+ * Bootstraps application
+ */
+ @Override
+ public void doBootstrap () {
+ this.getLogger().debug("Initializing application ...");
+
+ // Init client variable
+ Client client = null;
+
+ // Is console or Swing choosen?
+ if (this.isConsole()) {
+ // Debug message
+ this.getLogger().debug("Initializing console client ...");
+
+ // Init console client instance
+ client = new ConsoleClient(this);
+ } else if (this.isGui()) {
+ // Debug message
+ this.getLogger().debug("Initializing GUI (Swing) client ...");
+
+ // Init console instance
+ client = new SwingClient(this);
+ } else {
+ // Not client choosen
+ this.getLogger().error("No client choosen. Cannot launch.");
+ System.exit(1);
+ }
+
+ // Init client
+ client.init();
+
+ // Set client instance
+ this.setClient(client);
+
+ // The application is running at this point
+ this.getClient().enableIsRunning();
+ }
- /**
- * Main loop of the application
- */
- @Override
- public void doMainLoop () {
- // Debug message
- this.getLogger().trace("CALLED!");
+ /**
+ * Main loop of the application
+ */
+ @Override
+ public void doMainLoop () {
+ // Debug message
+ this.getLogger().trace("CALLED!");
// @TODO The application should be running now
-
- // Output introduction
- this.showIntro();
-
- // Set current menu to main
- this.getClient().setCurrentMenu("main");
-
- // --- Main loop starts here ---
- while (this.getClient().isRunning()) {
- // The application is still active, show menu selection
- this.getClient().showCurrentMenu();
-
- try {
- // Ask for user input and run proper method
- this.getClient().doUserMenuChoice();
- } catch (final UnhandledUserChoiceException ex) {
- this.getLogger().catching(ex);
- }
-
- try {
- // Sleep a little to reduce system load
- Thread.sleep(100);
- } catch (final InterruptedException ex) {
- // Ignore it
- }
- }
+ // Output introduction
+ this.showIntro();
+
+ // Set current menu to main
+ this.getClient().setCurrentMenu("main");
+
+ // --- Main loop starts here ---
+ while (this.getClient().isRunning()) {
+ // The application is still active, show menu selection
+ this.getClient().showCurrentMenu();
+
+ try {
+ // Ask for user input and run proper method
+ this.getClient().doUserMenuChoice();
+ } catch (final UnhandledUserChoiceException ex) {
+ this.getLogger().catching(ex);
+ }
+
+ try {
+ // Sleep a little to reduce system load
+ Thread.sleep(100);
+ } catch (final InterruptedException ex) {
+ // Ignore it
+ }
+ }
// --- Main loop ends here ---
- // Debug message
- this.getLogger().debug("Main loop exit - shutting down ...");
- }
-
- /**
- * Enables console client by setting propper flag
- */
- private void enableConsoleClient () {
- this.getLogger().debug("Enabling console client (may become optional client) ...");
- this.consoleClient = true;
- this.guiClient = false;
- }
-
- /**
- * Enables GUI client by setting propper flag
- */
- private void enableGuiClient () {
- this.getLogger().debug("Enabling GUI client (may become new default client) ...");
- this.consoleClient = false;
- this.guiClient = true;
- }
-
- /**
- * Checks whether the client shoule be console client should be launched by
- * checking if -console is set.
- *
- * @return Whether console client should be taken
- */
- private boolean isConsole () {
- return this.consoleClient;
- }
-
- /**
- * Checks whether the client shoule be GUI client should be launched by
- * checking if -gui is set.
- *
- * @return Whether GUI client should be taken
- */
- private boolean isGui () {
- return this.guiClient;
- }
-
- /**
- * Parses all given arguments
- *
- * @param args Arguments from program launch
- */
- private void parseArguments (final String[] args) {
- // Debug message
- this.getLogger().debug(MessageFormat.format("Parsing {0} arguments ...", args.length));
-
- for (final String arg : args) {
- // Switch on it
- switch (arg) {
- case "-console":
- enableConsoleClient();
- break;
-
- case "-gui":
- enableGuiClient();
- break;
-}
+ // Debug message
+ this.getLogger().debug("Main loop exit - shutting down ...");
+ }
+
+ /**
+ * Enables console client by setting propper flag
+ */
+ private void enableConsoleClient () {
+ this.getLogger().debug("Enabling console client (may become optional client) ...");
+ this.consoleClient = true;
+ this.guiClient = false;
+ }
+
+ /**
+ * Enables GUI client by setting propper flag
+ */
+ private void enableGuiClient () {
+ this.getLogger().debug("Enabling GUI client (may become new default client) ...");
+ this.consoleClient = false;
+ this.guiClient = true;
+ }
+
+ /**
+ * Checks whether the client shoule be console client should be launched by
+ * checking if -console is set.
+ *
+ * @return Whether console client should be taken
+ */
+ private boolean isConsole () {
+ return this.consoleClient;
+ }
+
+ /**
+ * Checks whether the client shoule be GUI client should be launched by
+ * checking if -gui is set.
+ *
+ * @return Whether GUI client should be taken
+ */
+ private boolean isGui () {
+ return this.guiClient;
+ }
+
+ /**
+ * Parses all given arguments
+ *
+ * @param args Arguments from program launch
+ */
+ private void parseArguments (final String[] args) {
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("Parsing {0} arguments ...", args.length));
+
+ for (final String arg : args) {
+ // Switch on it
+ switch (arg) {
+ case "-console":
+ enableConsoleClient();
+ break;
+
+ case "-gui":
+ enableGuiClient();
+ break;
+ }
+ }
+ }
+
+ /**
+ * Show introduction which depends on client
+ */
+ private void showIntro () {
+ // Let the client show it
+ this.getClient().showWelcome();
+ }
+
+ /**
+ * Launches the application
+ *
+ * @param args Arguments handled to program
+ */
+ private void start (final String args[]) {
+ this.getLogger().info("Program is started.");
+
+ // Parse arguments
+ this.parseArguments(args);
+
+ // Launch application
+ ApplicationManager.getManager(this).start();
+
+ // Good bye, but this should not be reached ...
+ this.getLogger().warn("Unusual exit reached.");
+ this.doShutdown();
+ }
+
+ /**
+ * Main method (entry point)
+ *
+ * @param args the command line arguments
+ */
+ public static void main (String[] args) {
+ // Start application
+ new AddressbookApplication().start(args);
+ }
+
+ /**
+ * Shuts down the application.
+ */
+ @Override
+ public void doShutdown () {
+ // Shutdown client
+ this.getClient().doShutdown();
+
+ this.getLogger().info("End of program (last line)");
+ System.exit(0);
}
- }
-
- /**
- * Show introduction which depends on client
- */
- private void showIntro () {
- // Let the client show it
- this.getClient().showWelcome();
- }
-
- /**
- * Launches the application
- *
- * @param args Arguments handled to program
- */
- private void start (final String args[]) {
- this.getLogger().info("Program is started.");
-
- // Parse arguments
- this.parseArguments(args);
-
- // Launch application
- ApplicationManager.getManager(this).start();
-
- // Good bye, but this should not be reached ...
- this.getLogger().warn("Unusual exit reached.");
- this.doShutdown();
- }
-
- /**
- * Main method (entry point)
- *
- * @param args the command line arguments
- */
- public static void main (String[] args) {
- // Start application
- new AddressbookApplication().start(args);
- }
-
- /**
- * Shuts down the application.
- */
- @Override
- public void doShutdown () {
- // Shutdown client
- this.getClient().doShutdown();
-
- this.getLogger().info("End of program (last line)");
- System.exit(0);
- }
}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.application;\r
-\r
-import org.mxchange.addressbook.FrameworkInterface;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public interface Application extends FrameworkInterface {\r
- /**\r
- * Bootstraps the application\r
- */\r
- public void doBootstrap();\r
-\r
- /**\r
- * Run the main loop\r
- */\r
- public void doMainLoop();\r
-\r
- /**\r
- * Shutdown the application\r
- */\r
- public void doShutdown ();\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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 ();
+}
*/
public abstract class BaseClient extends BaseFrameworkSystem {
- /**
- * Current menu choice
- */
- private String currentMenu;
-
- /**
- * Application is not running by default
- */
- private boolean isRunning;
-
- /**
- * Menu system
- */
- private final Map<String, Menu> menus;
-
- /**
- * No instances can be created of this class
- */
- protected BaseClient () {
- super();
-
- // Init menu map
- this.menus = new HashMap<>(10);
- }
-
- /**
- * Shutdown method for all clients
- */
- public void doShutdown () {
- // Disable client
- this.disableIsRunning();
-
- // Shuts down contact manager
- this.getContactManager().doShutdown();
- }
-
- /**
- * Enables the client
- */
- public final void enableIsRunning () {
- this.isRunning = true;
- }
-
- /**
- * Current menu choice
- *
- * @return the currentMenu
- */
- public final String getCurrentMenu () {
- return this.currentMenu;
- }
-
- /**
- * Current menu choice
- * @param currentMenu the currentMenu to set
- */
- public final void setCurrentMenu (final String currentMenu) {
- this.currentMenu = currentMenu;
- }
-
- /**
- * "Getter" for given menu type
- *
- * @param menuType Menu type instance to return
- * @return Menu or null if not found
- */
- public Menu getMenu (final String menuType) {
- // Default is not found
- Menu menu = null;
-
- // Check array
- if (this.getMenus().containsKey(menuType)) {
- // Found!
- menu = this.getMenus().get(menuType);
+ /**
+ * Current menu choice
+ */
+ private String currentMenu;
+
+ /**
+ * Application is not running by default
+ */
+ private boolean isRunning;
+
+ /**
+ * Menu system
+ */
+ private final Map<String, Menu> menus;
+
+ /**
+ * No instances can be created of this class
+ */
+ protected BaseClient () {
+ super();
+
+ // Init menu map
+ this.menus = new HashMap<>(10);
}
-
- // Return it
- 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
- */
- protected abstract void fillMenuMap ();
-
- /**
- * Getter for menus map
- * @return Map of all menus
- */
- protected final Map<String, Menu> getMenus () {
- return this.menus;
- }
-
- /**
- * Initializes contact manager
- */
- protected void initContactManager () {
- // Debug message
- this.getLogger().debug("Initializing contact manager ...");
-
- // Init contact manager with console client
- // @TODO Static initial amount of contacts
- ManageableContact manager = new ContactManager (100, (Client) this);
-
- // Set it here
- this.setContactManager(manager);
-
- // Debug message
- this.getLogger().debug("Contact manager has been initialized.");
- }
-
- /**
- * Shows given menu
- *
- * @param menuType Given menu to show
- */
- protected void showMenu (final String menuType) {
- Menu menu = this.getMenu(menuType);
-
- // Is the menu set?
- if (!(menu instanceof Menu)) {
- // Not found
- // @todo Own exception?
- throw new NullPointerException("Menu '" + menuType + "' not found.");
+
+ /**
+ * Shutdown method for all clients
+ */
+ public void doShutdown () {
+ // Disable client
+ this.disableIsRunning();
+
+ // Shuts down contact manager
+ this.getContactManager().doShutdown();
+ }
+
+ /**
+ * Enables the client
+ */
+ public final void enableIsRunning () {
+ this.isRunning = true;
+ }
+
+ /**
+ * Current menu choice
+ *
+ * @return the currentMenu
+ */
+ public final String getCurrentMenu () {
+ return this.currentMenu;
+ }
+
+ /**
+ * Current menu choice
+ *
+ * @param currentMenu the currentMenu to set
+ */
+ public final void setCurrentMenu (final String currentMenu) {
+ this.currentMenu = currentMenu;
+ }
+
+ /**
+ * "Getter" for given menu type
+ *
+ * @param menuType Menu type instance to return
+ * @return Menu or null if not found
+ */
+ public Menu getMenu (final String menuType) {
+ // Default is not found
+ Menu menu = null;
+
+ // Check array
+ if (this.getMenus().containsKey(menuType)) {
+ // Found!
+ menu = this.getMenus().get(menuType);
+ }
+
+ // Return it
+ 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
+ */
+ protected abstract void fillMenuMap ();
+
+ /**
+ * Getter for menus map
+ *
+ * @return Map of all menus
+ */
+ protected final Map<String, Menu> getMenus () {
+ return this.menus;
+ }
+
+ /**
+ * Initializes contact manager
+ */
+ protected void initContactManager () {
+ // Debug message
+ this.getLogger().debug("Initializing contact manager ...");
+
+ // Init contact manager with console client
+ // @TODO Static initial amount of contacts
+ ManageableContact manager = new ContactManager(100, (Client) this);
+
+ // Set it here
+ this.setContactManager(manager);
+
+ // Debug message
+ this.getLogger().debug("Contact manager has been initialized.");
+ }
+
+ /**
+ * Shows given menu
+ *
+ * @param menuType Given menu to show
+ */
+ protected void showMenu (final String menuType) {
+ Menu menu = this.getMenu(menuType);
+
+ // Is the menu set?
+ if (!(menu instanceof Menu)) {
+ // Not found
+ // @todo Own exception?
+ throw new NullPointerException("Menu '" + menuType + "' not found.");
+ }
+
+ // Show menu
+ menu.show((Client) this);
}
-
- // Show menu
- menu.show((Client) this);
- }
}
/**
* An interface for application clients
- *
+ *
* @author Roland Haeder
*/
public interface Client extends FrameworkInterface {
- /**
- * Displays a "box" for the address
- *
- * @param contact Contact to show address from
- */
- public void displayAddressBox (final Contact contact);
-
- /**
- * The user changes own name data
- * @param contact
- */
- public void doChangeOwnNameData (final Contact contact);
-
- /**
- * The user changes own address data
- *
- * @param contact Contact instance to change
- */
- public void doChangeOwnAddressData (final Contact contact);
-
- /**
- * The user changes own other data
- *
- * @param contact Constact instance to change
- */
- public void doChangeOwnOtherData (final Contact contact);
-
- /**
- * Allows the user to enter own data
- *
- * @return Finished Contact instance
- */
- public Contact doEnterOwnData ();
-
- /**
- * Shuts down the client and therefore whole application
- */
- public void doShutdown ();
-
- /**
- * 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
- *
- * @param contact Contact to show name from
- */
- public void displayNameBox (final Contact contact);
-
- /**
- * Displays a "box" for other data
- *
- * @param contact Contact to show other data from
- */
- public void displayOtherDataBox (final Contact contact);
-
- /**
- * Let the user choose what to change on the address: [n]ame, [a]ddress,
- * [o]ther
- *
- * @param contact Contact instance to let the user change data
- * @throws UnhandledUserChoiceException If choice is not supported
- */
- public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException;
-
- /**
- * Asks the user for a choice and proceeds accordingly
- *
- * @throws UnhandledUserChoiceException If choice is not supported
- */
- 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
- *
- * @param validChars Valid chars that are accepted
- * @param message Message to user
- * @return Allowed character
- */
- public char enterChar (final char[] validChars, final String message);
-
- /**
- * Reads a string of minimum and maximum length from the user. An empty
- * string should be generally not allowed, but might be okay for e.g.
- * company name.
- *
- * @param minLength Minimum length of the string to read
- * @param maxLength Maximum length of the string to read
- * @param message Message to user
- * @param allowEmpty Whether empty strings are allowed
- * @return Entered string by user or null if empty string is allowed
- */
- public String enterString (final int minLength, final int maxLength, final String message, final boolean allowEmpty);
-
- /**
- * Reads an integer (int) from the user
- *
- * @param minimum Minimum allowed number
- * @param maximum Maximum allowed number
- * @param message Message to user
- * @return Entered string by user or null if empty string is allowed
- */
- public int enterInt (final int minimum, final int maximum, final String message);
-
- /**
- * Setter for current menu choice
- *
- * @param currentMenu Current menu choice
- */
- public void setCurrentMenu (final String currentMenu);
-
- /**
- * Some "Getter" for menu item
- *
- * @param accessKey Key to press to access this menu
- * @param text Text to show to user
- * @return
- */
- 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
- *
- * @param item Menu item to show
- */
- 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 ();
+ /**
+ * Displays a "box" for the address
+ *
+ * @param contact Contact to show address from
+ */
+ public void displayAddressBox (final Contact contact);
+
+ /**
+ * The user changes own name data
+ *
+ * @param contact
+ */
+ public void doChangeOwnNameData (final Contact contact);
+
+ /**
+ * The user changes own address data
+ *
+ * @param contact Contact instance to change
+ */
+ public void doChangeOwnAddressData (final Contact contact);
+
+ /**
+ * The user changes own other data
+ *
+ * @param contact Constact instance to change
+ */
+ public void doChangeOwnOtherData (final Contact contact);
+
+ /**
+ * Allows the user to enter own data
+ *
+ * @return Finished Contact instance
+ */
+ public Contact doEnterOwnData ();
+
+ /**
+ * Shuts down the client and therefore whole application
+ */
+ public void doShutdown ();
+
+ /**
+ * 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
+ *
+ * @param contact Contact to show name from
+ */
+ public void displayNameBox (final Contact contact);
+
+ /**
+ * Displays a "box" for other data
+ *
+ * @param contact Contact to show other data from
+ */
+ public void displayOtherDataBox (final Contact contact);
+
+ /**
+ * Let the user choose what to change on the address: [n]ame, [a]ddress,
+ * [o]ther
+ *
+ * @param contact Contact instance to let the user change data
+ * @throws UnhandledUserChoiceException If choice is not supported
+ */
+ public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException;
+
+ /**
+ * Asks the user for a choice and proceeds accordingly
+ *
+ * @throws UnhandledUserChoiceException If choice is not supported
+ */
+ 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
+ *
+ * @param validChars Valid chars that are accepted
+ * @param message Message to user
+ * @return Allowed character
+ */
+ public char enterChar (final char[] validChars, final String message);
+
+ /**
+ * Reads a string of minimum and maximum length from the user. An empty
+ * string should be generally not allowed, but might be okay for e.g.
+ * company name.
+ *
+ * @param minLength Minimum length of the string to read
+ * @param maxLength Maximum length of the string to read
+ * @param message Message to user
+ * @param allowEmpty Whether empty strings are allowed
+ * @return Entered string by user or null if empty string is allowed
+ */
+ public String enterString (final int minLength, final int maxLength, final String message, final boolean allowEmpty);
+
+ /**
+ * Reads an integer (int) from the user
+ *
+ * @param minimum Minimum allowed number
+ * @param maximum Maximum allowed number
+ * @param message Message to user
+ * @return Entered string by user or null if empty string is allowed
+ */
+ public int enterInt (final int minimum, final int maximum, final String message);
+
+ /**
+ * Setter for current menu choice
+ *
+ * @param currentMenu Current menu choice
+ */
+ public void setCurrentMenu (final String currentMenu);
+
+ /**
+ * Some "Getter" for menu item
+ *
+ * @param accessKey Key to press to access this menu
+ * @param text Text to show to user
+ * @return
+ */
+ 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
+ *
+ * @param item Menu item to show
+ */
+ 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 ();
}
* @author Roland Haeder
*/
public class ConsoleClient extends BaseClient implements Client {
- /**
- * Scanner instance for reading data from console input
- */
- private final Scanner scanner;
-
- /**
- * Parameterless constructor
- * @param application An instance of an Application class
- */
- public ConsoleClient (final Application application) {
- super();
-
- // Set application instance
- this.setApplication(application);
-
- // Init scanner instance
- this.scanner = new Scanner(System.in);
- }
-
- /**
- * Displays a textual address "box" of given contact
- *
- * @param contact Contact to show address for
- */
- @Override
- public void displayAddressBox (final Contact contact) {
- // Simple display ...
- this.outputMessage(MessageFormat.format("Strasse, PLZ Ort, Land: {0}\n{1} {2}\n{3}", contact.getStreet(), contact.getZipCode(), contact.getCity(), contact.getCountryCode()));
- }
-
- /**
- * Displays a textual name "box" of given contact
- *
- * @param contact Contact to show name for
- */
- @Override
- public void displayNameBox (final Contact contact) {
- // Get translated gender as the user may want to see "Mr.", "Mrs."
- String gender = contact.getTranslatedGender();
-
- // Get company name
- String companyName = contact.getCompanyName();
-
- // If it is empty/null, then assume private contact
- if ((companyName == null) || (companyName.isEmpty())) {
- // Now put all together: gender, surname, family name
- // @todo Use mask
- this.outputMessage(MessageFormat.format("Anrede, Vorname, Name: {0} {1} {2}", gender, contact.getSurname(), contact.getFamilyName()));
- } else {
- // Company contact
- this.outputMessage(MessageFormat.format("Firma: {0}\nAnsprechpartner: {1} {2} {3}", companyName, gender, contact.getSurname(), contact.getFamilyName()));
+
+ /**
+ * Scanner instance for reading data from console input
+ */
+ private final Scanner scanner;
+
+ /**
+ * Parameterless constructor
+ *
+ * @param application An instance of an Application class
+ */
+ public ConsoleClient (final Application application) {
+ super();
+
+ // Set application instance
+ this.setApplication(application);
+
+ // Init scanner instance
+ this.scanner = new Scanner(System.in);
+ }
+
+ /**
+ * Displays a textual address "box" of given contact
+ *
+ * @param contact Contact to show address for
+ */
+ @Override
+ public void displayAddressBox (final Contact contact) {
+ // Simple display ...
+ this.outputMessage(MessageFormat.format("Strasse, PLZ Ort, Land: {0}\n{1} {2}\n{3}", contact.getStreet(), contact.getZipCode(), contact.getCity(), contact.getCountryCode()));
+ }
+
+ /**
+ * Displays a textual name "box" of given contact
+ *
+ * @param contact Contact to show name for
+ */
+ @Override
+ public void displayNameBox (final Contact contact) {
+ // Get translated gender as the user may want to see "Mr.", "Mrs."
+ String gender = contact.getTranslatedGender();
+
+ // Get company name
+ String companyName = contact.getCompanyName();
+
+ // If it is empty/null, then assume private contact
+ if ((companyName == null) || (companyName.isEmpty())) {
+ // Now put all together: gender, surname, family name
+ // @todo Use mask
+ this.outputMessage(MessageFormat.format("Anrede, Vorname, Name: {0} {1} {2}", gender, contact.getSurname(), contact.getFamilyName()));
+ } else {
+ // Company contact
+ this.outputMessage(MessageFormat.format("Firma: {0}\nAnsprechpartner: {1} {2} {3}", companyName, gender, contact.getSurname(), contact.getFamilyName()));
+ }
+ }
+
+ /**
+ * Displays a textual other data "box" of given contact
+ *
+ * @param contact Contact to show other data for
+ */
+ @Override
+ public void displayOtherDataBox (final Contact contact) {
+ // Cellphone and such ...
+ this.outputMessage(MessageFormat.format("Telefonnumer: {0}\nFaxnummer: {1}\nHandy: {2}\nKommentar:\n{3}", contact.getPhoneNumber(), contact.getFaxNumber(), contact.getCellphoneNumber(), contact.getComment()));
+ }
+
+ @Override
+ public void doChangeOwnAddressData (final Contact contact) {
+ // Make sure it is own contact
+ if (!contact.isOwnContact()) {
+ // Not own contact
+ throw new IllegalArgumentException("Contact is not own data.");
+ }
+
+ // Own address data
+ String street = this.getContactManager().enterOwnStreet();
+
+ // Get zip code
+ int zipCode = this.getContactManager().enterOwnZipCode();
+
+ // Get city name
+ String city = this.getContactManager().enterOwnCity();
+
+ // Get country code
+ String countryCode = this.getContactManager().enterOwnCountryCode();
+
+ // Update address data
+ contact.updateAddressData(street, zipCode, city, countryCode);
+ }
+
+ @Override
+ public void doChangeOwnNameData (final Contact contact) {
+ // Make sure it is own contact
+ if (!contact.isOwnContact()) {
+ // Not own contact
+ throw new IllegalArgumentException("Contact is not own data.");
+ }
+
+ // Gender:
+ char gender = this.getContactManager().enterOwnGender();
+
+ // Surname
+ String surname = this.getContactManager().enterOwnSurname();
+
+ // Family name
+ String familyName = this.getContactManager().enterOwnFamilyName();
+
+ // And company
+ String companyName = this.getContactManager().enterOwnCompanyName();
+
+ // Update contact instance
+ contact.updateNameData(gender, surname, familyName, companyName);
+ }
+
+ @Override
+ public void doChangeOwnOtherData (final Contact contact) {
+ // Make sure it is own contact
+ if (!contact.isOwnContact()) {
+ // Not own contact
+ throw new IllegalArgumentException("Contact is not own data.");
+ }
+
+ // Phone number
+ String phoneNumber = this.getContactManager().enterOwnPhoneNumber();
+
+ // Phone number
+ String cellNumber = this.getContactManager().enterOwnCellNumber();
+
+ // Fax number
+ String faxNumber = this.getContactManager().enterOwnFaxNumber();
+
+ // Email address
+ String email = this.getContactManager().enterOwnEmailAddress();
+
+ // Comment
+ String comment = this.getContactManager().enterOwnComment();
+
+ // Update contact instance
+ contact.updateOtherData(phoneNumber, cellNumber, faxNumber, email, null, comment);
+ }
+
+ @Override
+ public Contact doEnterOwnData () {
+ // First ask for gender
+ char gender = this.getContactManager().enterOwnGender();
+
+ // 2nd for surname
+ String surname = this.getContactManager().enterOwnSurname();
+
+ // And 3rd for family name
+ String familyName = this.getContactManager().enterOwnFamilyName();
+
+ // Company name ...
+ String companyName = this.getContactManager().enterOwnCompanyName();
+
+ // Construct UserContact instance
+ Contact contact = new UserContact(gender, surname, familyName, companyName);
+
+ // And return object
+ return contact;
}
- }
-
- /**
- * Displays a textual other data "box" of given contact
- *
- * @param contact Contact to show other data for
- */
- @Override
- public void displayOtherDataBox (final Contact contact) {
- // Cellphone and such ...
- this.outputMessage(MessageFormat.format("Telefonnumer: {0}\nFaxnummer: {1}\nHandy: {2}\nKommentar:\n{3}", contact.getPhoneNumber(), contact.getFaxNumber(), contact.getCellphoneNumber(), contact.getComment()));
- }
-
- @Override
- public void doChangeOwnAddressData (final Contact contact) {
- // Make sure it is own contact
- if (!contact.isOwnContact()) {
- // Not own contact
- throw new IllegalArgumentException("Contact is not own data.");
+
+ /**
+ * Shutdown this client
+ */
+ @Override
+ public void doShutdown () {
+ // Parent call
+ super.doShutdown();
+
+ // @TODO Add other shutdown stuff
}
- // Own address data
- String street = this.getContactManager().enterOwnStreet();
+ @Override
+ public void doUserMenuChoice () throws UnhandledUserChoiceException {
+ // Get all access keys from menu
+ char[] accessKeys = MenuTools.getAccessKeysFromMenuMap(this.getMenus(), this.getCurrentMenu());
+
+ // Output textural message and ask for a char as input
+ char choice = this.enterChar(accessKeys, "Bitte Auswahl eingeben (0=Programm beenden): ");
- // Get zip code
- int zipCode = this.getContactManager().enterOwnZipCode();
+ // @TODO Rewrite this ugly switch() block
+ switch (choice) {
+ case '1': // Enter/add own data
+ this.getContactManager().doEnterOwnData();
+ break;
- // Get city name
- String city = this.getContactManager().enterOwnCity();
+ case '2': // Change own data
+ this.getContactManager().doChangeOwnData();
+ break;
- // Get country code
- String countryCode = this.getContactManager().enterOwnCountryCode();
+ case '3': // Add new addess
+ this.getContactManager().doAddOtherAddress();
+ break;
- // Update address data
- contact.updateAddressData(street, zipCode, city, countryCode);
- }
+ case '4': // List contacts
+ this.getContactManager().doListContacts();
+ break;
- @Override
- public void doChangeOwnNameData (final Contact contact) {
- // Make sure it is own contact
- if (!contact.isOwnContact()) {
- // Not own contact
- throw new IllegalArgumentException("Contact is not own data.");
+ case '5': // Search addresses
+ this.getContactManager().doSearchContacts();
+ break;
+
+ case '6': // Change other addess
+ this.getContactManager().doChangeOtherAddress();
+ break;
+
+ case '7': // Delete other address
+ this.getContactManager().doDeleteOtherAddress();
+ break;
+
+ case '0': // Program exit
+ this.getApplication().doShutdown();
+ break;
+
+ default:
+ // @TODO throw own exception
+ throw new UnhandledUserChoiceException(MessageFormat.format("Choice '{0}' not handled yet.", choice));
+ }
}
- // Gender:
- char gender = this.getContactManager().enterOwnGender();
+ /**
+ * Asks the the user to enter a single character which must match validChars
+ *
+ * @param validChars Valid chars that are accepted
+ * @param message Message to user
+ * @return Allowed character
+ */
+ @Override
+ public char enterChar (final char[] validChars, final String message) {
+ char input = 0;
+
+ // Sort array, else binarySearch() won't work
+ Arrays.sort(validChars);
+
+ // Keep asking until valid char has been entered
+ while (Arrays.binarySearch(validChars, input) < 0) {
+ // Output message
+ System.out.print(message);
+
+ // Read char
+ input = this.readChar();
+ }
+
+ // Return read char
+ return input;
+ }
+
+ /**
+ * Reads an integer (int) with a textural message from the user
+ *
+ * @param minimum Minimum allowed number
+ * @param maximum Maximum allowed number
+ * @param message Messager to display in console
+ * @return
+ */
+ @Override
+ public int enterInt (final int minimum, final int maximum, final String message) {
+ // Minimum should not be below zero
+ assert (minimum >= 0);
+ assert (maximum > minimum);
+
+ // Init input
+ int input = -1;
+
+ while ((input < minimum) || (input > maximum)) {
+ // Output message
+ System.out.print(message);
+
+ // Read integer from user
+ input = this.readInt();
+ }
+
+ // Return it
+ return input;
+ }
- // Surname
- String surname = this.getContactManager().enterOwnSurname();
+ /**
+ * Reads a string of minimum and maximum length from the user
+ *
+ * @param minLength Minimum length of the string to read
+ * @param maxLength Maximum length of the string to read
+ * @param message Message to user
+ * @param allowEmpty Whether to allow empty string
+ * @return Entered string by user or null for empty strings
+ */
+ @Override
+ public String enterString (final int minLength, final int maxLength, final String message, final boolean allowEmpty) {
+ // Check on length, e.g. country codes are excactly 2 chars long
+ assert (maxLength >= minLength);
+
+ // Init input
+ String input = null;
+
+ // Check if it is to short or to long
+ while (((input == null) || ((input.length() < minLength) && (!allowEmpty))) || ((input.length() > 0) && (input.length() < minLength) && (allowEmpty)) || ((input instanceof String) && (input.length() > maxLength))) {
+ // Output message
+ System.out.print(message);
+
+ // Read line
+ input = this.readString();
+ }
+
+ // Return it
+ return input;
+ }
- // Family name
- String familyName = this.getContactManager().enterOwnFamilyName();
+ /**
+ * Returns a console menu item
+ *
+ * @param accessKey Key to access the menu
+ * @param text Text to show to user
+ * @return A SelectableMenuItem
+ * @todo Make sure the access key is unique
+ */
+ @Override
+ public SelectableMenuItem getMenuItem (final char accessKey, final String text) {
+ // Return a new console menu item
+ return new ConsoleMenuItem(accessKey, text);
+ }
- // And company
- String companyName = this.getContactManager().enterOwnCompanyName();
+ /**
+ * Inizializes this client
+ */
+ @Override
+ public void init () {
+ // Init contact manager here
+ this.initContactManager();
- // Update contact instance
- contact.updateNameData(gender, surname, familyName, companyName);
- }
+ // Fill menu map
+ this.fillMenuMap();
+ }
- @Override
- public void doChangeOwnOtherData (final Contact contact) {
- // Make sure it is own contact
- if (!contact.isOwnContact()) {
- // Not own contact
- throw new IllegalArgumentException("Contact is not own data.");
+ /**
+ * Displays textural message to the user
+ *
+ * @param message
+ */
+ @Override
+ public void outputMessage (final String message) {
+ System.out.println(message);
}
- // Phone number
- String phoneNumber = this.getContactManager().enterOwnPhoneNumber();
-
- // Phone number
- String cellNumber = this.getContactManager().enterOwnCellNumber();
-
- // Fax number
- String faxNumber = this.getContactManager().enterOwnFaxNumber();
-
- // Email address
- String email = this.getContactManager().enterOwnEmailAddress();
-
- // Comment
- String comment = this.getContactManager().enterOwnComment();
-
- // Update contact instance
- contact.updateOtherData(phoneNumber, cellNumber, faxNumber, email, null, comment);
- }
-
- @Override
- public Contact doEnterOwnData () {
- // First ask for gender
- char gender = this.getContactManager().enterOwnGender();
-
- // 2nd for surname
- String surname = this.getContactManager().enterOwnSurname();
-
- // And 3rd for family name
- String familyName = this.getContactManager().enterOwnFamilyName();
-
- // Company name ...
- String companyName = this.getContactManager().enterOwnCompanyName();
-
- // Construct UserContact instance
- Contact contact = new UserContact(gender, surname, familyName, companyName);
-
- // And return object
- return contact;
- }
-
- /**
- * Shutdown this client
- */
- @Override
- public void doShutdown () {
- // Parent call
- super.doShutdown();
-
- // @TODO Add other shutdown stuff
- }
-
- @Override
- public void doUserMenuChoice () throws UnhandledUserChoiceException {
- // Get all access keys from menu
- char[] accessKeys = MenuTools.getAccessKeysFromMenuMap(this.getMenus(), this.getCurrentMenu());
-
- // Output textural message and ask for a char as input
- char choice = this.enterChar(accessKeys, "Bitte Auswahl eingeben (0=Programm beenden): ");
-
- // @TODO Rewrite this ugly switch() block
- switch (choice) {
- case '1': // Enter/add own data
- this.getContactManager().doEnterOwnData();
- break;
-
- case '2': // Change own data
- this.getContactManager().doChangeOwnData();
- break;
-
- case '3': // Add new addess
- this.getContactManager().doAddOtherAddress();
- break;
-
- case '4': // List contacts
- this.getContactManager().doListContacts();
- break;
-
- case '5': // Search addresses
- this.getContactManager().doSearchContacts();
- break;
-
- case '6': // Change other addess
- this.getContactManager().doChangeOtherAddress();
- break;
-
- case '7': // Delete other address
- this.getContactManager().doDeleteOtherAddress();
- break;
-
- case '0': // Program exit
- this.getApplication().doShutdown();
- break;
-
- default:
- // @TODO throw own exception
- throw new UnhandledUserChoiceException(MessageFormat.format("Choice '{0}' not handled yet.", choice));
+ /**
+ * Shows textural menu on console
+ */
+ @Override
+ public void showCurrentMenu () {
+ this.showMenu(this.getCurrentMenu());
}
- }
-
- /**
- * Asks the the user to enter a single character which must match validChars
- * @param validChars Valid chars that are accepted
- * @param message Message to user
- * @return Allowed character
- */
- @Override
- public char enterChar (final char[] validChars, final String message) {
- char input = 0;
-
- // Sort array, else binarySearch() won't work
- Arrays.sort(validChars);
-
- // Keep asking until valid char has been entered
- while (Arrays.binarySearch(validChars, input) < 0) {
- // Output message
- System.out.print(message);
-
- // Read char
- input = this.readChar();
+
+ /**
+ * Shows given menu entry to user
+ *
+ * @param item Menu entry
+ */
+ @Override
+ public void showEntry (final SelectableMenuItem item) {
+ // Access key then text
+ this.outputMessage("[" + item.getAccessKey() + "] " + item.getText());
}
- // Return read char
- return input;
- }
-
- /**
- * Reads an integer (int) with a textural message from the user
- *
- * @param minimum Minimum allowed number
- * @param maximum Maximum allowed number
- * @param message Messager to display in console
- * @return
- */
- @Override
- public int enterInt (final int minimum, final int maximum, final String message) {
- // Minimum should not be below zero
- assert(minimum >= 0);
- assert(maximum > minimum);
-
- // Init input
- int input = -1;
-
- while ((input < minimum) || (input > maximum)) {
- // Output message
- System.out.print(message);
-
- // Read integer from user
- input = this.readInt();
+ /**
+ * Shows a textural message to the user
+ */
+ @Override
+ public void showWelcome () {
+ this.outputMessage(MessageFormat.format("Welcome to {0}", AddressbookApplication.printableTitle()));
+ this.outputMessage("");
+ this.outputMessage("Copyright(c) 2015 by Roland Haeder, this is free software");
+
+ // Debug message
+ this.getLogger().debug("Intro shown to user");
}
- // Return it
- return input;
- }
-
- /**
- * Reads a string of minimum and maximum length from the user
- *
- * @param minLength Minimum length of the string to read
- * @param maxLength Maximum length of the string to read
- * @param message Message to user
- * @param allowEmpty Whether to allow empty string
- * @return Entered string by user or null for empty strings
- */
- @Override
- public String enterString (final int minLength, final int maxLength, final String message, final boolean allowEmpty) {
- // Check on length, e.g. country codes are excactly 2 chars long
- assert(maxLength >= minLength);
-
- // Init input
- String input = null;
-
- // Check if it is to short or to long
- while (((input == null) || ((input.length() < minLength) && (!allowEmpty))) || ((input.length() > 0) && (input.length() < minLength) && (allowEmpty)) || ((input instanceof String) && (input.length() > maxLength))) {
- // Output message
- System.out.print(message);
-
- // Read line
- input = this.readString();
+ @Override
+ public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException {
+ // 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) ");
+
+ // @TODO Get rid of this ugly switch block, too
+ switch (choice) {
+ case 'n': // Name data
+ this.getContactManager().doChangeNameData(contact, this);
+ break;
+
+ case 'a': // Address data
+ this.getContactManager().doChangeAddressData(contact, this);
+ break;
+
+ case 'o': // Other data
+ this.getContactManager().doChangeOtherData(contact, this);
+ break;
+
+ case 'x': // Exit this menu
+ // Ignored as it should go back
+ break;
+
+ default:
+ // @TODO throw own exception
+ throw new UnhandledUserChoiceException(MessageFormat.format("Choice '{0}' not handled yet.", choice));
+ }
}
- // Return it
- return input;
- }
-
- /**
- * Returns a console menu item
- *
- * @param accessKey Key to access the menu
- * @param text Text to show to user
- * @return A SelectableMenuItem
- * @todo Make sure the access key is unique
- */
- @Override
- public SelectableMenuItem getMenuItem (final char accessKey, final String text) {
- // Return a new console menu item
- return new ConsoleMenuItem(accessKey,text);
- }
-
- /**
- * Inizializes this client
- */
- @Override
- public void init () {
- // Init contact manager here
- this.initContactManager();
-
- // Fill menu map
- this.fillMenuMap();
- }
-
- /**
- * Displays textural message to the user
- * @param message
- */
- @Override
- public void outputMessage (final String message) {
- System.out.println(message);
- }
-
- /**
- * Shows textural menu on console
- */
- @Override
- public void showCurrentMenu () {
- this.showMenu(this.getCurrentMenu());
- }
-
- /**
- * Shows given menu entry to user
- *
- * @param item Menu entry
- */
- @Override
- public void showEntry (final SelectableMenuItem item) {
- // Access key then text
- this.outputMessage("[" + item.getAccessKey() + "] " + item.getText());
- }
-
- /**
- * Shows a textural message to the user
- */
- @Override
- public void showWelcome () {
- this.outputMessage(MessageFormat.format("Welcome to {0}", AddressbookApplication.printableTitle()));
- this.outputMessage("");
- this.outputMessage("Copyright(c) 2015 by Roland Haeder, this is free software");
-
- // Debug message
- this.getLogger().debug("Intro shown to user");
- }
-
- @Override
- public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException {
- // 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) ");
-
- // @TODO Get rid of this ugly switch block, too
- switch (choice) {
- case 'n': // Name data
- this.getContactManager().doChangeNameData(contact, this);
- break;
-
- case 'a': // Address data
- this.getContactManager().doChangeAddressData(contact, this);
- break;
-
- case 'o': // Other data
- this.getContactManager().doChangeOtherData(contact, this);
- break;
-
- case 'x': // Exit this menu
- // Ignored as it should go back
- break;
-
- default:
- // @TODO throw own exception
- throw new UnhandledUserChoiceException(MessageFormat.format("Choice '{0}' not handled yet.", choice));
+ /**
+ * Reads one character
+ *
+ * @return A single character
+ */
+ private char readChar () {
+ // Read line
+ String input = this.scanner.nextLine();
+
+ // This must be only one character
+ if (input.length() != 1) {
+ // Return zero
+ return 0;
+ }
+
+ // Get char from first (and only) position
+ return input.charAt(0);
}
- }
-
- /**
- * Reads one character
- *
- * @return A single character
- */
- private char readChar () {
- // Read line
- String input = this.scanner.nextLine();
-
- // This must be only one character
- if (input.length() != 1) {
- // Return zero
- return 0;
+
+ /**
+ * Reads an integer (int) from user
+ *
+ * @return An integer number
+ */
+ private int readInt () {
+ // First read a string
+ String input = this.readString();
+
+ // Init number with invalid value
+ int num = -1;
+
+ // Parse number, this can be risky
+ try {
+ 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()));
+ }
+
+ // Return read number
+ return num;
}
- // Get char from first (and only) position
- return input.charAt(0);
- }
-
- /**
- * Reads an integer (int) from user
- *
- * @return An integer number
- */
- private int readInt () {
- // First read a string
- String input = this.readString();
-
- // Init number with invalid value
- int num = -1;
-
- // Parse number, this can be risky
- try {
- 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()));
+ /**
+ * Reads a string from a scanner until RETURN is pressed
+ *
+ * @return Read string from scanner
+ */
+ private String readString () {
+ return this.scanner.nextLine();
}
- // Return read number
- return num;
- }
-
- /**
- * Reads a string from a scanner until RETURN is pressed
- *
- * @return Read string from scanner
- */
- private String readString () {
- return this.scanner.nextLine();
- }
-
- /**
- * Fills menu map with menu entries
- */
- @Override
- protected final void fillMenuMap () {
- // Initialize first (main) menu
- Menu menu = new ConsoleMenu("main", this);
-
- // Add it
- this.getMenus().put("main", menu);
- }
+ /**
+ * Fills menu map with menu entries
+ */
+ @Override
+ protected final void fillMenuMap () {
+ // Initialize first (main) menu
+ Menu menu = new ConsoleMenu("main", this);
+
+ // Add it
+ this.getMenus().put("main", menu);
+ }
}
import org.mxchange.addressbook.application.AddressbookApplication;
import org.mxchange.addressbook.client.Client;
import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException;
-import org.mxchange.addressbook.model.address.AddressTableModel;
+import org.mxchange.addressbook.model.contact.ContactTableModel;
/**
*
*/
public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame {
- /**
- * Own instance
- */
- private static ClientFrame self;
-
- /**
- * Singelton getter for this frame instance.
- *
- * @param client Client instance
- * @return Returns a singelton instance of this frame
- */
- public static final ClientFrame getSelfInstance (final Client client) {
- // Is it set?
- if (!(self instanceof ClientFrame)) {
- // Create new instance
- self = new AddressbookFrame(client);
+ /**
+ * Own instance
+ */
+ private static ClientFrame self;
+
+ /**
+ * Singelton getter for this frame instance.
+ *
+ * @param client Client instance
+ * @return Returns a singelton instance of this frame
+ */
+ public static final ClientFrame getSelfInstance (final Client client) {
+ // Is it set?
+ if (!(self instanceof ClientFrame)) {
+ // Create new instance
+ self = new AddressbookFrame(client);
+ }
+
+ // Return instance
+ return self;
}
-
- // Return instance
- return self;
- }
- /**
- * Frame instance for "add own data"
- */
- private JMenuItem addOwnItem;
-
- /**
- * Instance to table model
- */
- private TableModel dataModel;
-
- /**
- * Table instance
- */
- private JTable dataTable;
-
- /**
- * Frame instance for "edit own data"
- */
- private JMenuItem editOwnItem;
-
- /**
- * Frame instance
- */
- private final JFrame frame;
-
- /**
- * Whether this frame has been initialized
- */
- private boolean isInitialized;
-
- /**
- * Status label needs to be updated
- */
- private JLabel statusLabel;
-
- /**
- * Creates an instance of this frame with a client instance
- *
- * @param client
- */
- private AddressbookFrame (final Client client) {
- // Debug line
- this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
-
- // Set frame instance
- this.frame = new JFrame(AddressbookApplication.printableTitle());
-
- // Set client here
- this.setClient(client);
- }
-
- /**
- * Shutdown this frame
- */
- @Override
- public void doShutdown () {
- // First only show shutdown status
- this.updateStatus("shutdown");
- }
-
- /**
- * Setups the frame, do not set isInitialized here
- *
- * @param client Client instance
- */
- @Override
- public void setupFrame (final Client client) {
- // Debug line
- this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
-
- // Has the user entered own data?
- if (this.getClient().getContactManager().isOwnContactAdded()) {
- // Debug message
- this.getLogger().debug("Disabling menus: isOwnContactAdded()=false");
-
- // Not entered yet, so disable "add" menu
- this.addOwnItem.setEnabled(false);
- } else {
- // Disable "edit"
- this.editOwnItem.setEnabled(false);
+ /**
+ * Frame instance for "add own data"
+ */
+ private JMenuItem addOwnItem;
+
+ /**
+ * Instance to table model
+ */
+ private TableModel dataModel;
+
+ /**
+ * Table instance
+ */
+ private JTable dataTable;
+
+ /**
+ * Frame instance for "edit own data"
+ */
+ private JMenuItem editOwnItem;
+
+ /**
+ * Frame instance
+ */
+ private final JFrame frame;
+
+ /**
+ * Whether this frame has been initialized
+ */
+ private boolean isInitialized;
+
+ /**
+ * Status label needs to be updated
+ */
+ private JLabel statusLabel;
+
+ /**
+ * Creates an instance of this frame with a client instance
+ *
+ * @param client
+ */
+ private AddressbookFrame (final Client client) {
+ // Debug line
+ this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
+
+ // Set frame instance
+ this.frame = new JFrame(AddressbookApplication.printableTitle());
+
+ // Set client here
+ this.setClient(client);
}
- // Make the frame visible
- this.frame.setVisible(true);
-
- // All done here
- this.updateStatus("done");
- }
-
- /**
- * Initalizes this frame. Having initComponents() exposed (publicly
- * accessible) means that any other object can initialize components which
- * you may not want.
- *
- * @throws org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException If this method has been called twice
- */
- @Override
- public void init () throws FrameAlreadyInitializedException {
- // Debug line
- this.getLogger().trace("CALLED!");
-
- // Has this frame been initialized?
- if (this.isInitialized()) {
- // Throw exception
- throw new FrameAlreadyInitializedException();
+ /**
+ * Shutdown this frame
+ */
+ @Override
+ public void doShutdown () {
+ // First only show shutdown status
+ this.updateStatus("shutdown");
}
- // Init components
- this.initComponents();
-
- // Set flag
- this.isInitialized = true;
- }
-
- /**
- * Returns field isInitialized. This flag indicates whether this frame has been initialized or not.
- *
- * @return Field isInitialized
- */
- @Override
- public final boolean isInitialized () {
- return this.isInitialized;
- }
-
- /**
- * Shuts down the application.
- */
- @Override
- public void shutdownApplication () {
- // To do this, the frame must be initialized
- if (!this.isInitialized()) {
- // Not initalized, so bad call
- this.getLogger().fatal("Bad call of shutdownApplication(). Please report this.");
- return;
+ /**
+ * Setups the frame, do not set isInitialized here
+ *
+ * @param client Client instance
+ */
+ @Override
+ public void setupFrame (final Client client) {
+ // Debug line
+ this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
+
+ // Has the user entered own data?
+ if (this.getClient().getContactManager().isOwnContactAdded()) {
+ // Debug message
+ this.getLogger().debug("Disabling menus: isOwnContactAdded()=false");
+
+ // Not entered yet, so disable "add" menu
+ this.addOwnItem.setEnabled(false);
+ } else {
+ // Disable "edit"
+ this.editOwnItem.setEnabled(false);
+ }
+
+ // Make the frame visible
+ this.frame.setVisible(true);
+
+ // All done here
+ this.updateStatus("done");
}
- this.getClient().getApplication().doShutdown();
- }
-
- /**
- * Initialize components
- */
- private void initComponents () {
- // Debug line
- this.getLogger().trace("CALLED!");
-
- // Set default close operation
- this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- // Register shutdown listener
- this.frame.addWindowListener(new WindowAdapter() {
- /**
- * Invoked when a window has been closed.
- */
- @Override
- public void windowClosed(final WindowEvent e) {
- // Shutdown application cleanly
- self.shutdownApplication();
- }
-
- /**
- * Invoked when a window is in the process of being closed.
- * The close operation can be overridden at this point.
- */
- @Override
- public void windowClosing(final WindowEvent e) {
- // Also shutdown cleanly here
- self.shutdownApplication();
- }
- });
-
- // Setup layout manager
- this.frame.setLayout(new BorderLayout(2, 2));
-
- // Set window size
- this.frame.setSize(700, 400);
-
- // Center window in middle of screen, instead of top-left corner
- this.frame.setLocationRelativeTo(null);
-
- // Init menu system
- initMenuSystem();
-
- // Init table
- initTable();
-
- // Init status panel
- initStatusPanel();
- }
-
- /**
- * Initializes the menu system
- */
- private void initMenuSystem () {
- // Init menu bar, menu and item instances
- JMenuBar menuBar = new JMenuBar();
- JMenu menu;
- JMenuItem item;
+
+ /**
+ * Initalizes this frame. Having initComponents() exposed (publicly
+ * accessible) means that any other object can initialize components which
+ * you may not want.
+ *
+ * @throws
+ * org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException If
+ * this method has been called twice
+ */
+ @Override
+ public void init () throws FrameAlreadyInitializedException {
+ // Debug line
+ this.getLogger().trace("CALLED!");
+
+ // Has this frame been initialized?
+ if (this.isInitialized()) {
+ // Throw exception
+ throw new FrameAlreadyInitializedException();
+ }
+
+ // Init components
+ this.initComponents();
+
+ // Set flag
+ this.isInitialized = true;
+ }
+
+ /**
+ * Returns field isInitialized. This flag indicates whether this frame has
+ * been initialized or not.
+ *
+ * @return Field isInitialized
+ */
+ @Override
+ public final boolean isInitialized () {
+ return this.isInitialized;
+ }
+
+ /**
+ * Shuts down the application.
+ */
+ @Override
+ public void shutdownApplication () {
+ // To do this, the frame must be initialized
+ if (!this.isInitialized()) {
+ // Not initalized, so bad call
+ this.getLogger().fatal("Bad call of shutdownApplication(). Please report this.");
+ return;
+ }
+ this.getClient().getApplication().doShutdown();
+ }
+
+ /**
+ * Initialize components
+ */
+ private void initComponents () {
+ // Debug line
+ this.getLogger().trace("CALLED!");
+
+ // Set default close operation
+ this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ // Register shutdown listener
+ this.frame.addWindowListener(new WindowAdapter() {
+ /**
+ * Invoked when a window has been closed.
+ */
+ @Override
+ public void windowClosed (final WindowEvent e) {
+ // Shutdown application cleanly
+ self.shutdownApplication();
+ }
+
+ /**
+ * Invoked when a window is in the process of being closed. The
+ * close operation can be overridden at this point.
+ */
+ @Override
+ public void windowClosing (final WindowEvent e) {
+ // Also shutdown cleanly here
+ self.shutdownApplication();
+ }
+ });
+
+ // Setup layout manager
+ this.frame.setLayout(new BorderLayout(2, 2));
+
+ // Set window size
+ this.frame.setSize(700, 400);
+
+ // Center window in middle of screen, instead of top-left corner
+ this.frame.setLocationRelativeTo(null);
+
+ // Init menu system
+ initMenuSystem();
+
+ // Init table
+ initTable();
+
+ // Init status panel
+ initStatusPanel();
+ }
+
+ /**
+ * Initializes the menu system
+ */
+ private void initMenuSystem () {
+ // Init menu bar, menu and item instances
+ JMenuBar menuBar = new JMenuBar();
+ JMenu menu;
+ JMenuItem item;
// Init some menus:
- // 1) File menu
- menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.file.text"));
+ // 1) File menu
+ menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.file.text"));
// Add menu items:
- // 1.x) Exit program (should be last)
- item = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.text"));
- item.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.toolTipText"));
-
- // Add listener to exit menu
- item.addActionListener(new ActionListener() {
- /**
- * If the user has performed this action
- *
- * @param e An instance of an ActionEvent class
- */
- @Override
- public void actionPerformed (final ActionEvent e) {
- self.shutdownApplication();
- }
- });
-
- // Add item -> menu
- menu.add(item);
-
- // Add menu -> menu bar
- menuBar.add(menu);
+ // 1.x) Exit program (should be last)
+ item = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.text"));
+ item.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.toolTipText"));
+
+ // Add listener to exit menu
+ item.addActionListener(new ActionListener() {
+ /**
+ * If the user has performed this action
+ *
+ * @param e An instance of an ActionEvent class
+ */
+ @Override
+ public void actionPerformed (final ActionEvent e) {
+ self.shutdownApplication();
+ }
+ });
+
+ // Add item -> menu
+ menu.add(item);
+
+ // Add menu -> menu bar
+ menuBar.add(menu);
// Init some menus:
- // 2) Addressbook menu
- menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.addressbook.text"));
-
- // 2.1) Add own data
- this.addOwnItem = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.addOwnData.text"));
- this.addOwnItem.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.addOwnData.toolTipText"));
-
- // Add listener to exit menu
- this.addOwnItem.addActionListener(new ActionListener() {
- /**
- * If the user has performed this action
- *
- * @param e An instance of an ActionEvent class
- */
- @Override
- public void actionPerformed (final ActionEvent e) {
- self.getClient().getContactManager().doEnterOwnData();
- }
- });
-
- // Add item -> menu
- menu.add(this.addOwnItem);
-
- // 2.2) Edit own data
- this.editOwnItem = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.editOwnData.text"));
- this.editOwnItem.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.editOwnData.toolTipText"));
-
- // Add listener to exit menu
- this.editOwnItem.addActionListener(new ActionListener() {
- /**
- * If the user has performed this action
- *
- * @param e An instance of an ActionEvent class
- */
- @Override
- public void actionPerformed (final ActionEvent e) {
- self.getClient().getContactManager().doChangeOwnData();
- }
- });
-
- // Add item -> menu
- menu.add(this.editOwnItem);
-
- // Add menu -> menu bar
- menuBar.add(menu);
-
- // Add menu bar -> frame
- this.frame.add(menuBar, BorderLayout.NORTH);
- }
-
- /**
- * Initializes status panel
- */
- private void initStatusPanel () {
- // Init status label (which needs to be updated
- this.statusLabel = new JLabel();
- this.updateStatus("initializing");
-
- // Init status bar in south
- JPanel panel = new JPanel();
- panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
- panel.add(this.statusLabel);
- panel.setBorder(BorderFactory.createEtchedBorder());
-
- // Add panel to frame
- this.frame.add(panel, BorderLayout.SOUTH);
- }
-
- /**
- * Initializes the table which will show all contacts
- */
- private void initTable () {
- // Instance table model
- this.dataModel = new AddressTableModel(this.getClient());
-
- // Instance table
- this.dataTable = new JTable(this.dataModel);
-
- // Add mouse listener
- this.dataTable.addMouseListener(new MouseAdapter() {
- /**
- * If the user peformed a click on a cell
- *
- * @param e Mouse event instance
- */
- @Override
- public void mouseClicked(final MouseEvent e) {
- throw new UnsupportedOperationException("Unfinished.");
- }
- });
-
- // Add table to frame
- this.frame.add(this.dataTable, BorderLayout.CENTER);
- }
-
- /**
- * Updates status to given type
- *
- * @param type Status type
- */
- private void updateStatus (final String type) {
- // Set status message
- this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel." + type + ".text"));
- }
+ // 2) Addressbook menu
+ menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.addressbook.text"));
+
+ // 2.1) Add own data
+ this.addOwnItem = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.addOwnData.text"));
+ this.addOwnItem.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.addOwnData.toolTipText"));
+
+ // Add listener to exit menu
+ this.addOwnItem.addActionListener(new ActionListener() {
+ /**
+ * If the user has performed this action
+ *
+ * @param e An instance of an ActionEvent class
+ */
+ @Override
+ public void actionPerformed (final ActionEvent e) {
+ self.getClient().getContactManager().doEnterOwnData();
+ }
+ });
+
+ // Add item -> menu
+ menu.add(this.addOwnItem);
+
+ // 2.2) Edit own data
+ this.editOwnItem = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.editOwnData.text"));
+ this.editOwnItem.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.editOwnData.toolTipText"));
+
+ // Add listener to exit menu
+ this.editOwnItem.addActionListener(new ActionListener() {
+ /**
+ * If the user has performed this action
+ *
+ * @param e An instance of an ActionEvent class
+ */
+ @Override
+ public void actionPerformed (final ActionEvent e) {
+ self.getClient().getContactManager().doChangeOwnData();
+ }
+ });
+
+ // Add item -> menu
+ menu.add(this.editOwnItem);
+
+ // Add menu -> menu bar
+ menuBar.add(menu);
+
+ // Add menu bar -> frame
+ this.frame.add(menuBar, BorderLayout.NORTH);
+ }
+
+ /**
+ * Initializes status panel
+ */
+ private void initStatusPanel () {
+ // Init status label (which needs to be updated
+ this.statusLabel = new JLabel();
+ this.updateStatus("initializing");
+
+ // Init status bar in south
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
+ panel.add(this.statusLabel);
+ panel.setBorder(BorderFactory.createEtchedBorder());
+
+ // Add panel to frame
+ this.frame.add(panel, BorderLayout.SOUTH);
+ }
+
+ /**
+ * Initializes the table which will show all contacts
+ */
+ private void initTable () {
+ // Instance table model
+ this.dataModel = new ContactTableModel(this.getClient());
+
+ // Instance table
+ this.dataTable = new JTable(this.dataModel);
+
+ // Add mouse listener
+ this.dataTable.addMouseListener(new MouseAdapter() {
+ /**
+ * If the user peformed a click on a cell
+ *
+ * @param e Mouse event instance
+ */
+ @Override
+ public void mouseClicked (final MouseEvent e) {
+ throw new UnsupportedOperationException("Unfinished.");
+ }
+ });
+
+ // Add table to frame
+ this.frame.add(this.dataTable, BorderLayout.CENTER);
+ }
+
+ /**
+ * Updates status to given type
+ *
+ * @param type Status type
+ */
+ private void updateStatus (final String type) {
+ // Set status message
+ this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel." + type + ".text"));
+ }
}
*/
public interface ClientFrame extends FrameworkInterface {
- /**
- * Shutdown this frame
- */
- public void doShutdown ();
+ /**
+ * Shutdown this frame
+ */
+ public void doShutdown ();
- /**
- * Setups the frame (and starts it). You have to call init() before you
- can call this method.
- *
- * @param client Client instance
- */
- public void setupFrame (final Client client);
+ /**
+ * Setups the frame (and starts it). You have to call init() before you can
+ * call this method.
+ *
+ * @param client Client instance
+ */
+ public void setupFrame (final Client client);
- /**
- * Initializes frame
- *
- * @throws org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException If this method has been called twice
- */
- public void init () throws FrameAlreadyInitializedException;
+ /**
+ * Initializes frame
+ *
+ * @throws
+ * org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException If
+ * this method has been called twice
+ */
+ public void init () throws FrameAlreadyInitializedException;
- /**
- * Returns field isInitialized. This flag indicates whether this frame has been initialized or not.
- *
- * @return Field isInitialized
- */
- public boolean isInitialized ();
+ /**
+ * Returns field isInitialized. This flag indicates whether this frame has
+ * been initialized or not.
+ *
+ * @return Field isInitialized
+ */
+ public boolean isInitialized ();
- public void shutdownApplication ();
+ public void shutdownApplication ();
}
* @author Roland Haeder
*/
public class SwingClient extends BaseClient implements Client {
- /**
- * Swing frame instance
- */
- private final ClientFrame frame;
-
- /**
- * Constructor with an Application instance.
- *
- * @param application Application instance
- */
- public SwingClient (final Application application) {
- super();
- // Debug message
- this.getLogger().trace("CALLED!");
-
- // Set application instance
- this.setApplication(application);
-
- // Init frame instance
- this.frame = AddressbookFrame.getSelfInstance(this);
- }
-
- @Override
- public void displayAddressBox (final Contact contact) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void displayNameBox (final Contact contact) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void displayOtherDataBox (final Contact contact) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void doChangeOwnAddressData (Contact contact) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void doChangeOwnNameData (Contact contact) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void doChangeOwnOtherData (Contact contact) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public Contact doEnterOwnData () {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void doShutdown () {
- // Debug message
- this.getLogger().trace("CALLED!");
+ /**
+ * Swing frame instance
+ */
+ private final ClientFrame frame;
+
+ /**
+ * Constructor with an Application instance.
+ *
+ * @param application Application instance
+ */
+ public SwingClient (final Application application) {
+ super();
+
+ // Debug message
+ this.getLogger().trace("CALLED!");
+
+ // Set application instance
+ this.setApplication(application);
+
+ // Init frame instance
+ this.frame = AddressbookFrame.getSelfInstance(this);
+ }
+
+ @Override
+ public void displayAddressBox (final Contact contact) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void displayNameBox (final Contact contact) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void displayOtherDataBox (final Contact contact) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void doChangeOwnAddressData (Contact contact) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void doChangeOwnNameData (Contact contact) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void doChangeOwnOtherData (Contact contact) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public Contact doEnterOwnData () {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void doShutdown () {
+ // Debug message
+ this.getLogger().trace("CALLED!");
- // Parent call
- super.doShutdown();
+ // Parent call
+ super.doShutdown();
- // Shutdown frame
- this.frame.doShutdown();
+ // Shutdown frame
+ this.frame.doShutdown();
// @TODO Add other shutdown stuff
+ // Debug message
+ this.getLogger().trace("EXIT!");
+ }
+ @Override
+ public void doUserMenuChoice () throws UnhandledUserChoiceException {
// Debug message
- this.getLogger().trace("EXIT!");
- }
+ //* NOISY-DEBUG: */ this.getLogger().trace("CALLED!");
- @Override
- public void doUserMenuChoice () throws UnhandledUserChoiceException {
- // Debug message
- //* NOISY-DEBUG: */ this.getLogger().trace("CALLED!");
-
- // Not implemented here
- }
-
- @Override
- public char enterChar (final char[] validChars, String message) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public int enterInt (final int minimum, final int maximum, final String message) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public String enterString (final int minLength, final int maxLength, final String message, final boolean allowEmpty) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public Menu getMenu (final String menuType) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- /**
- * Returns a Swing menu item
- *
- * @param accessKey Key to access the menu
- * @param text Text to show to user
- * @return A SelectableMenuItem
- */
- @Override
- public SelectableMenuItem getMenuItem (final char accessKey, final String text) {
- // Debug message
- this.getLogger().trace("CALLED!");
+ // Not implemented here
+ }
- // Returns null as the menu is now no longer controlled here.
- return null;
- }
+ @Override
+ public char enterChar (final char[] validChars, String message) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
- /**
- * Inizializes this client
- */
- @Override
- public void init () {
- // Debug message
- this.getLogger().trace("CALLED!");
+ @Override
+ public int enterInt (final int minimum, final int maximum, final String message) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
- // Init contact manager here
- this.initContactManager();
+ @Override
+ public String enterString (final int minLength, final int maxLength, final String message, final boolean allowEmpty) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
- try {
- // Init frame
- this.frame.init();
- } catch (final FrameAlreadyInitializedException ex) {
- this.getLogger().catching(ex);
- System.exit(1);
+ @Override
+ public Menu getMenu (final String menuType) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
- // Now start the frame
- this.frame.setupFrame(this);
+ /**
+ * Returns a Swing menu item
+ *
+ * @param accessKey Key to access the menu
+ * @param text Text to show to user
+ * @return A SelectableMenuItem
+ */
+ @Override
+ public SelectableMenuItem getMenuItem (final char accessKey, final String text) {
+ // Debug message
+ this.getLogger().trace("CALLED!");
+
+ // Returns null as the menu is now no longer controlled here.
+ return null;
+ }
- // Debug message
- this.getLogger().trace("EXIT!");
- }
+ /**
+ * Inizializes this client
+ */
+ @Override
+ public void init () {
+ // Debug message
+ this.getLogger().trace("CALLED!");
+
+ // Init contact manager here
+ this.initContactManager();
+
+ try {
+ // Init frame
+ this.frame.init();
+ } catch (final FrameAlreadyInitializedException ex) {
+ this.getLogger().catching(ex);
+ System.exit(1);
+ }
+
+ // Now start the frame
+ this.frame.setupFrame(this);
+
+ // Debug message
+ this.getLogger().trace("EXIT!");
+ }
- @Override
- public void outputMessage (final String message) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
+ @Override
+ public void outputMessage (final String message) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
- @Override
- public void showCurrentMenu () {
+ @Override
+ public void showCurrentMenu () {
// Debug message
- //* NOISY-DEBUG: */ this.getLogger().trace("CALLED!");
+ //* NOISY-DEBUG: */ this.getLogger().trace("CALLED!");
- // Not implemented here
- }
+ // Not implemented here
+ }
- @Override
- public void showEntry (final SelectableMenuItem item) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
+ @Override
+ public void showEntry (final SelectableMenuItem item) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
- @Override
- public void showWelcome () {
- // Debug message
- this.getLogger().trace("CALLED!");
-
- // Not implemented here
- }
-
- @Override
- public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
-
- /**
- * Fills menu map with swing menus
- */
- @Override
- protected final void fillMenuMap () {
- // Nothing to fill here as the Swing frame is handling this all
- throw new UnsupportedOperationException("Not implemented.");
- }
+ @Override
+ public void showWelcome () {
+ // Debug message
+ this.getLogger().trace("CALLED!");
+
+ // Not implemented here
+ }
+
+ @Override
+ public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ /**
+ * Fills menu map with swing menus
+ */
+ @Override
+ protected final void fillMenuMap () {
+ // Nothing to fill here as the Swing frame is handling this all
+ throw new UnsupportedOperationException("Not implemented.");
+ }
}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.contact;\r
-\r
-import java.util.Objects;\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-import org.mxchange.addressbook.client.Client;\r
-\r
-/**\r
- * A general contact\r
- *\r
- * @author Roland Haeder\r
- * @version 0.0\r
- * @since 0.0\r
- */\r
-public class BaseContact extends BaseFrameworkSystem {\r
- /**\r
- * Birth day\r
- */\r
- private String birthday;\r
-\r
- /**\r
- * Cellphone number\r
- */\r
- private String cellphoneNumber;\r
-\r
- /**\r
- * City\r
- */\r
- private String city;\r
-\r
- /**\r
- * Optional comments\r
- */\r
- private String comment;\r
-\r
- /**\r
- * Companyname\r
- */\r
- private String companyName;\r
-\r
- /**\r
- * Country code\r
- */\r
- private String countryCode;\r
-\r
- /**\r
- * Email address\r
- */\r
- private String emailAddress;\r
-\r
- /**\r
- * Family name\r
- */\r
- private String familyName;\r
-\r
- /**\r
- * Fax number\r
- */\r
- private String faxNumber;\r
-\r
- /**\r
- * Gender code of the contact: - M = Mr. (male) - F = Mrs. (female) - C =\r
- * Company\r
- */\r
- private char gender;\r
-\r
- /**\r
- * House number\r
- */\r
- private int houseNumber;\r
-\r
- /**\r
- * Marker whether this contact is user's own data\r
- */\r
- private boolean ownContact;\r
-\r
- /**\r
- * Phone number\r
- */\r
- private String phoneNumber;\r
-\r
- /**\r
- * Street\r
- */\r
- private String street;\r
-\r
- /**\r
- * Surname\r
- */\r
- private String surname;\r
-\r
- /**\r
- * ZIP code\r
- */\r
- private long zipCode;\r
-\r
- /**\r
- * No instances can be created of this class\r
- */\r
- protected BaseContact () {\r
- super();\r
- }\r
-\r
- /**\r
- * Check if contacts are same or throw an exception\r
- *\r
- * @param object Other possible contact class\r
- * @return Whether both contacts are same\r
- * @todo Needs a lot improvements\r
- */\r
- @Override\r
- public boolean equals (Object object) {\r
- // Is it same type?\r
- if (!(object instanceof BaseContact)) {\r
- // Not equal types\r
- return false;\r
- } else if (!(object instanceof Contact)) {\r
- // Not correct interface\r
- return false;\r
- }\r
-\r
- // Try to cast\r
- Contact contact = (Contact) object;\r
- \r
- // Now test some data @todo Definedly needs improvement\r
- return ((this.getGender() == contact.getGender())\r
- && (this.getSurname().toLowerCase().equals(contact.getSurname().toLowerCase()))\r
- && (this.getFamilyName().toLowerCase().equals(contact.getFamilyName().toLowerCase())));\r
- }\r
-\r
- /**\r
- * Birth day\r
- *\r
- * @return the birthday\r
- */\r
- public String getBirthday () {\r
- return this.birthday;\r
- }\r
-\r
- /**\r
- * Cellphone number\r
- *\r
- * @return the cellphoneNumber\r
- */\r
- public String getCellphoneNumber () {\r
- return this.cellphoneNumber;\r
- }\r
-\r
- /**\r
- * City\r
- *\r
- * @return the city\r
- */\r
- public String getCity () {\r
- return this.city;\r
- }\r
-\r
- /**\r
- * City\r
- *\r
- * @param city the city to set\r
- */\r
- private void setCity (final String city) {\r
- this.city = city;\r
- }\r
-\r
- /**\r
- * Comments\r
- *\r
- * @return the comment\r
- */\r
- public String getComment () {\r
- return this.comment;\r
- }\r
-\r
- /**\r
- * Comments\r
- *\r
- * @param comment the comment to set\r
- */\r
- private void setComment (final String comment) {\r
- this.comment = comment;\r
- }\r
-\r
- /**\r
- * Companyname\r
- *\r
- * @return the companyName\r
- */\r
- public String getCompanyName () {\r
- return this.companyName;\r
- }\r
-\r
- /**\r
- * Companyname\r
- *\r
- * @param companyName the companyName to set\r
- */\r
- private void setCompanyName (final String companyName) {\r
- this.companyName = companyName;\r
- }\r
-\r
- /**\r
- * Country code\r
- *\r
- * @return the countryCode\r
- */\r
- public String getCountryCode () {\r
- return this.countryCode;\r
- }\r
-\r
- /**\r
- * Country code\r
- *\r
- * @param countryCode the countryCode to set\r
- */\r
- private void setCountryCode (final String countryCode) {\r
- this.countryCode = countryCode;\r
- }\r
-\r
- /**\r
- * "Serializes" this object into a CSV string (this time with semicolons)\r
- *\r
- * @return "CSV-serialized" version of the stored data\r
- */\r
- public String getCsvStringFromStoreableObject () {\r
- // Get all together\r
- String csvString = String.format(\r
- "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"\n",\r
- this.isOwnContact(),\r
- this.getGender(),\r
- this.getSurname(),\r
- this.getFamilyName(),\r
- this.getCompanyName(),\r
- this.getStreet(),\r
- this.getZipCode(),\r
- this.getCity(),\r
- this.getCountryCode(),\r
- this.getPhoneNumber(),\r
- this.getFaxNumber(),\r
- this.getCellphoneNumber(),\r
- this.getEmailAddress(),\r
- this.getBirthday(),\r
- this.getComment()\r
- );\r
- \r
- // Then return it\r
- return csvString;\r
- }\r
-\r
- /**\r
- * Email address\r
- *\r
- * @return the emailAddress\r
- */\r
- public String getEmailAddress () {\r
- return this.emailAddress;\r
- }\r
-\r
- /**\r
- * Email address\r
- *\r
- * @param emailAddress the emailAddress to set\r
- */\r
- private void setEmailAddress (final String emailAddress) {\r
- this.emailAddress = emailAddress;\r
- }\r
-\r
- /**\r
- * Family name\r
- *\r
- * @return the familyName\r
- */\r
- public String getFamilyName () {\r
- return this.familyName;\r
- }\r
-\r
- /**\r
- * Family name\r
- *\r
- * @param familyName the familyName to set\r
- */\r
- private void setFamilyName (final String familyName) {\r
- this.familyName = familyName;\r
- }\r
-\r
- /**\r
- * Fax number\r
- *\r
- * @return the faxNumber\r
- */\r
- public String getFaxNumber () {\r
- return this.faxNumber;\r
- }\r
-\r
- /**\r
- * Fax number\r
- *\r
- * @param faxNumber the faxNumber to set\r
- */\r
- private void setFaxNumber (final String faxNumber) {\r
- this.faxNumber = faxNumber;\r
- }\r
-\r
- /**\r
- * Gender of the contact\r
- *\r
- * @return the gender\r
- */\r
- public char getGender () {\r
- return this.gender;\r
- }\r
-\r
- /**\r
- * Gender of the contact\r
- *\r
- * @param gender the gender to set\r
- */\r
- private void setGender (final char gender) {\r
- this.gender = gender;\r
- }\r
-\r
- /**\r
- * House number\r
- *\r
- * @return the houseNumber\r
- */\r
- public int getHouseNumber () {\r
- return this.houseNumber;\r
- }\r
-\r
- /**\r
- * Phone number\r
- *\r
- * @return the phoneNumber\r
- */\r
- public String getPhoneNumber () {\r
- return this.phoneNumber;\r
- }\r
-\r
- /**\r
- * Street\r
- *\r
- * @return the street\r
- */\r
- public String getStreet () {\r
- return this.street;\r
- }\r
-\r
- /**\r
- * Street\r
- *\r
- * @param street the street to set\r
- */\r
- protected final void setStreet (final String street) {\r
- this.street = street;\r
- }\r
-\r
- /**\r
- * Surname\r
- *\r
- * @return the surname\r
- */\r
- public final String getSurname () {\r
- return this.surname;\r
- }\r
-\r
- /**\r
- * Some "getter" for a translated/human-readable gender\r
- * @return gender Human-readable gender\r
- */\r
- public String getTranslatedGender () {\r
- // Default init\r
- String translated = null;\r
-\r
- // "Translate" it\r
- switch (this.getGender()) {\r
- case 'M': // Mr.\r
- translated = "Herr";\r
- break;\r
-\r
- case 'F': // Mrs.\r
- translated = "Frau";\r
- break;\r
-\r
- case 'C': // "Company"\r
- translated = "Firma";\r
- break;\r
-\r
- default: // Unsupported\r
- this.getLogger().error("Gender " + this.getGender() + " not supported.");\r
- break;\r
- }\r
-\r
- // Return it\r
- return translated;\r
- }\r
-\r
- /**\r
- * ZIP code\r
- *\r
- * @return the zipCode\r
- */\r
- public final long getZipCode () {\r
- return this.zipCode;\r
- }\r
-\r
- /**\r
- * ZIP code\r
- *\r
- * @param zipCode the zipCode to set\r
- */\r
- protected final void setZipCode (final long zipCode) {\r
- this.zipCode = zipCode;\r
- }\r
- \r
- @Override\r
- public int hashCode () {\r
- int hash = 7;\r
- hash = 79 * hash + Objects.hashCode(this.getFamilyName());\r
- hash = 79 * hash + this.getGender();\r
- hash = 79 * hash + Objects.hashCode(this.getSurname());\r
- return hash;\r
- }\r
-\r
- /**\r
- * Checks whether the contact is user's own data\r
- *\r
- * @return Own data?\r
- */\r
- public final boolean isOwnContact () {\r
- return this.ownContact;\r
- }\r
-\r
- /**\r
- * Shows this contact to the user\r
- *\r
- * @param client Client instance to use\r
- */\r
- public void show (final Client client) {\r
- // Display name "box"\r
- client.displayNameBox((Contact) this);\r
- \r
- // Display address "box"\r
- client.displayAddressBox((Contact) this);\r
- \r
- // Display other data "box"\r
- client.displayOtherDataBox((Contact) this);\r
- }\r
-\r
- /**\r
- * Updates address data in this Contact instance\r
- *\r
- * @param street Street\r
- * @param zipCode ZIP code\r
- * @param city City\r
- * @param countryCode Country code\r
- */\r
- public void updateAddressData (final String street, final long zipCode, final String city, final String countryCode) {\r
- // Set all\r
- if (street != null) {\r
- this.setStreet(street);\r
- }\r
- if (zipCode > 0) {\r
- this.setZipCode(zipCode);\r
- }\r
- if (city != null) {\r
- this.setCity(city);\r
- }\r
- if (countryCode != null) {\r
- this.setCountryCode(countryCode);\r
- }\r
- }\r
-\r
- /**\r
- * Updates name data in this Contact instance\r
- * @param gender Gender (M, F, C)\r
- * @param surname Surname\r
- * @param familyName Family name\r
- * @param companyName Company name\r
- */\r
- public void updateNameData (final char gender, final String surname, final String familyName, final String companyName) {\r
- // Set all\r
- this.setGender(gender);\r
- if (surname != null) {\r
- this.setSurname(surname);\r
- }\r
- if (familyName != null) {\r
- this.setFamilyName(familyName);\r
- }\r
- if (companyName != null) {\r
- this.setCompanyName(companyName);\r
- }\r
- }\r
-\r
- /**\r
- * Updates other data in this Contact instance\r
- * \r
- * @param phoneNumber Phone number\r
- * @param cellphoneNumber Cellphone number\r
- * @param faxNumber Fax number\r
- * @param emailAddress Email address\r
- * @param birthday Birth day\r
- * @param comment Comments\r
- */\r
- public void updateOtherData (final String phoneNumber, final String cellphoneNumber, final String faxNumber, final String emailAddress, final String birthday, final String comment) {\r
- // Set all\r
- if (phoneNumber != null) {\r
- this.setPhoneNumber(phoneNumber);\r
- }\r
- if (cellphoneNumber != null) {\r
- this.setCellphoneNumber(cellphoneNumber);\r
- }\r
- if (faxNumber != null) {\r
- this.setFaxNumber(faxNumber);\r
- }\r
- if (emailAddress != null) {\r
- this.setEmailAddress(emailAddress);\r
- }\r
- if (birthday != null) {\r
- this.setBirthday(birthday);\r
- }\r
- if (comment != null) {\r
- this.setComment(comment);\r
- }\r
- }\r
-\r
- /**\r
- * Enables the flag "own data" which signals that this contact is the user's\r
- * own data.\r
- */\r
- protected final void enableFlagOwnContact () {\r
- this.ownContact = true;\r
- }\r
-\r
- /**\r
- * Surname\r
- *\r
- * @param surname the surname to set\r
- */\r
- protected final void setSurname (final String surname) {\r
- this.surname = surname;\r
- }\r
-\r
- /**\r
- * Phone number\r
- *\r
- * @param phoneNumber the phoneNumber to set\r
- */\r
- protected final void setPhoneNumber (final String phoneNumber) {\r
- this.phoneNumber = phoneNumber;\r
- }\r
-\r
- /**\r
- * House number\r
- *\r
- * @param houseNumber the houseNumber to set\r
- */\r
- protected final void setHouseNumber (final int houseNumber) {\r
- this.houseNumber = houseNumber;\r
- }\r
-\r
- /**\r
- * Cellphone number\r
- *\r
- * @param cellphoneNumber the cellphoneNumber to set\r
- */\r
- protected final void setCellphoneNumber (final String cellphoneNumber) {\r
- this.cellphoneNumber = cellphoneNumber;\r
- }\r
-\r
- /**\r
- * Birth day\r
- *\r
- * @param birthday the birthday to set\r
- */\r
- protected final void setBirthday (final String birthday) {\r
- this.birthday = birthday;\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.contact;
+
+import java.util.Objects;
+import org.mxchange.addressbook.BaseFrameworkSystem;
+import org.mxchange.addressbook.client.Client;
+
+/**
+ * A general contact
+ *
+ * @author Roland Haeder
+ * @version 0.0
+ * @since 0.0
+ */
+public class BaseContact extends BaseFrameworkSystem {
+
+ /**
+ * Birth day
+ */
+ private String birthday;
+
+ /**
+ * Cellphone number
+ */
+ private String cellphoneNumber;
+
+ /**
+ * City
+ */
+ private String city;
+
+ /**
+ * Optional comments
+ */
+ private String comment;
+
+ /**
+ * Companyname
+ */
+ private String companyName;
+
+ /**
+ * Country code
+ */
+ private String countryCode;
+
+ /**
+ * Email address
+ */
+ private String emailAddress;
+
+ /**
+ * Family name
+ */
+ private String familyName;
+
+ /**
+ * Fax number
+ */
+ private String faxNumber;
+
+ /**
+ * Gender code of the contact: - M = Mr. (male) - F = Mrs. (female) - C =
+ * Company
+ */
+ private char gender;
+
+ /**
+ * House number
+ */
+ private int houseNumber;
+
+ /**
+ * Marker whether this contact is user's own data
+ */
+ private boolean ownContact;
+
+ /**
+ * Phone number
+ */
+ private String phoneNumber;
+
+ /**
+ * Street
+ */
+ private String street;
+
+ /**
+ * Surname
+ */
+ private String surname;
+
+ /**
+ * ZIP code
+ */
+ private long zipCode;
+
+ /**
+ * No instances can be created of this class
+ */
+ protected BaseContact () {
+ super();
+ }
+
+ /**
+ * Check if contacts are same or throw an exception
+ *
+ * @param object Other possible contact class
+ * @return Whether both contacts are same
+ * @todo Needs a lot improvements
+ */
+ @Override
+ public boolean equals (Object object) {
+ // Is it same type?
+ if (!(object instanceof BaseContact)) {
+ // Not equal types
+ return false;
+ } else if (!(object instanceof Contact)) {
+ // Not correct interface
+ return false;
+ }
+
+ // Try to cast
+ Contact contact = (Contact) object;
+
+ // Now test some data @todo Definedly needs improvement
+ return ((this.getGender() == contact.getGender())
+ && (this.getSurname().toLowerCase().equals(contact.getSurname().toLowerCase()))
+ && (this.getFamilyName().toLowerCase().equals(contact.getFamilyName().toLowerCase())));
+ }
+
+ /**
+ * Birth day
+ *
+ * @return the birthday
+ */
+ public String getBirthday () {
+ return this.birthday;
+ }
+
+ /**
+ * Cellphone number
+ *
+ * @return the cellphoneNumber
+ */
+ public String getCellphoneNumber () {
+ return this.cellphoneNumber;
+ }
+
+ /**
+ * City
+ *
+ * @return the city
+ */
+ public String getCity () {
+ return this.city;
+ }
+
+ /**
+ * City
+ *
+ * @param city the city to set
+ */
+ private void setCity (final String city) {
+ this.city = city;
+ }
+
+ /**
+ * Comments
+ *
+ * @return the comment
+ */
+ public String getComment () {
+ return this.comment;
+ }
+
+ /**
+ * Comments
+ *
+ * @param comment the comment to set
+ */
+ private void setComment (final String comment) {
+ this.comment = comment;
+ }
+
+ /**
+ * Companyname
+ *
+ * @return the companyName
+ */
+ public String getCompanyName () {
+ return this.companyName;
+ }
+
+ /**
+ * Companyname
+ *
+ * @param companyName the companyName to set
+ */
+ private void setCompanyName (final String companyName) {
+ this.companyName = companyName;
+ }
+
+ /**
+ * Country code
+ *
+ * @return the countryCode
+ */
+ public String getCountryCode () {
+ return this.countryCode;
+ }
+
+ /**
+ * Country code
+ *
+ * @param countryCode the countryCode to set
+ */
+ private void setCountryCode (final String countryCode) {
+ this.countryCode = countryCode;
+ }
+
+ /**
+ * "Serializes" this object into a CSV string (this time with semicolons)
+ *
+ * @return "CSV-serialized" version of the stored data
+ */
+ public String getCsvStringFromStoreableObject () {
+ // Get all together
+ String csvString = String.format(
+ "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"\n",
+ this.isOwnContact(),
+ this.getGender(),
+ this.getSurname(),
+ this.getFamilyName(),
+ this.getCompanyName(),
+ this.getStreet(),
+ this.getZipCode(),
+ this.getCity(),
+ this.getCountryCode(),
+ this.getPhoneNumber(),
+ this.getFaxNumber(),
+ this.getCellphoneNumber(),
+ this.getEmailAddress(),
+ this.getBirthday(),
+ this.getComment()
+ );
+
+ // Then return it
+ return csvString;
+ }
+
+ /**
+ * Email address
+ *
+ * @return the emailAddress
+ */
+ public String getEmailAddress () {
+ return this.emailAddress;
+ }
+
+ /**
+ * Email address
+ *
+ * @param emailAddress the emailAddress to set
+ */
+ private void setEmailAddress (final String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+
+ /**
+ * Family name
+ *
+ * @return the familyName
+ */
+ public String getFamilyName () {
+ return this.familyName;
+ }
+
+ /**
+ * Family name
+ *
+ * @param familyName the familyName to set
+ */
+ private void setFamilyName (final String familyName) {
+ this.familyName = familyName;
+ }
+
+ /**
+ * Fax number
+ *
+ * @return the faxNumber
+ */
+ public String getFaxNumber () {
+ return this.faxNumber;
+ }
+
+ /**
+ * Fax number
+ *
+ * @param faxNumber the faxNumber to set
+ */
+ private void setFaxNumber (final String faxNumber) {
+ this.faxNumber = faxNumber;
+ }
+
+ /**
+ * Gender of the contact
+ *
+ * @return the gender
+ */
+ public char getGender () {
+ return this.gender;
+ }
+
+ /**
+ * Gender of the contact
+ *
+ * @param gender the gender to set
+ */
+ private void setGender (final char gender) {
+ this.gender = gender;
+ }
+
+ /**
+ * House number
+ *
+ * @return the houseNumber
+ */
+ public int getHouseNumber () {
+ return this.houseNumber;
+ }
+
+ /**
+ * Phone number
+ *
+ * @return the phoneNumber
+ */
+ public String getPhoneNumber () {
+ return this.phoneNumber;
+ }
+
+ /**
+ * Street
+ *
+ * @return the street
+ */
+ public String getStreet () {
+ return this.street;
+ }
+
+ /**
+ * Street
+ *
+ * @param street the street to set
+ */
+ protected final void setStreet (final String street) {
+ this.street = street;
+ }
+
+ /**
+ * Surname
+ *
+ * @return the surname
+ */
+ public final String getSurname () {
+ return this.surname;
+ }
+
+ /**
+ * Some "getter" for a translated/human-readable gender
+ *
+ * @return gender Human-readable gender
+ */
+ public String getTranslatedGender () {
+ // Default init
+ String translated = null;
+
+ // "Translate" it
+ switch (this.getGender()) {
+ case 'M': // Mr.
+ translated = "Herr";
+ break;
+
+ case 'F': // Mrs.
+ translated = "Frau";
+ break;
+
+ case 'C': // "Company"
+ translated = "Firma";
+ break;
+
+ default: // Unsupported
+ this.getLogger().error("Gender " + this.getGender() + " not supported.");
+ break;
+ }
+
+ // Return it
+ return translated;
+ }
+
+ /**
+ * ZIP code
+ *
+ * @return the zipCode
+ */
+ public final long getZipCode () {
+ return this.zipCode;
+ }
+
+ /**
+ * ZIP code
+ *
+ * @param zipCode the zipCode to set
+ */
+ protected final void setZipCode (final long zipCode) {
+ this.zipCode = zipCode;
+ }
+
+ @Override
+ public int hashCode () {
+ int hash = 7;
+ hash = 79 * hash + Objects.hashCode(this.getFamilyName());
+ hash = 79 * hash + this.getGender();
+ hash = 79 * hash + Objects.hashCode(this.getSurname());
+ return hash;
+ }
+
+ /**
+ * Checks whether the contact is user's own data
+ *
+ * @return Own data?
+ */
+ public final boolean isOwnContact () {
+ return this.ownContact;
+ }
+
+ /**
+ * Shows this contact to the user
+ *
+ * @param client Client instance to use
+ */
+ public void show (final Client client) {
+ // Display name "box"
+ client.displayNameBox((Contact) this);
+
+ // Display address "box"
+ client.displayAddressBox((Contact) this);
+
+ // Display other data "box"
+ client.displayOtherDataBox((Contact) this);
+ }
+
+ /**
+ * Updates address data in this Contact instance
+ *
+ * @param street Street
+ * @param zipCode ZIP code
+ * @param city City
+ * @param countryCode Country code
+ */
+ public void updateAddressData (final String street, final long zipCode, final String city, final String countryCode) {
+ // Set all
+ if (street != null) {
+ this.setStreet(street);
+ }
+ if (zipCode > 0) {
+ this.setZipCode(zipCode);
+ }
+ if (city != null) {
+ this.setCity(city);
+ }
+ if (countryCode != null) {
+ this.setCountryCode(countryCode);
+ }
+ }
+
+ /**
+ * Updates name data in this Contact instance
+ *
+ * @param gender Gender (M, F, C)
+ * @param surname Surname
+ * @param familyName Family name
+ * @param companyName Company name
+ */
+ public void updateNameData (final char gender, final String surname, final String familyName, final String companyName) {
+ // Set all
+ this.setGender(gender);
+ if (surname != null) {
+ this.setSurname(surname);
+ }
+ if (familyName != null) {
+ this.setFamilyName(familyName);
+ }
+ if (companyName != null) {
+ this.setCompanyName(companyName);
+ }
+ }
+
+ /**
+ * Updates other data in this Contact instance
+ *
+ * @param phoneNumber Phone number
+ * @param cellphoneNumber Cellphone number
+ * @param faxNumber Fax number
+ * @param emailAddress Email address
+ * @param birthday Birth day
+ * @param comment Comments
+ */
+ public void updateOtherData (final String phoneNumber, final String cellphoneNumber, final String faxNumber, final String emailAddress, final String birthday, final String comment) {
+ // Set all
+ if (phoneNumber != null) {
+ this.setPhoneNumber(phoneNumber);
+ }
+ if (cellphoneNumber != null) {
+ this.setCellphoneNumber(cellphoneNumber);
+ }
+ if (faxNumber != null) {
+ this.setFaxNumber(faxNumber);
+ }
+ if (emailAddress != null) {
+ this.setEmailAddress(emailAddress);
+ }
+ if (birthday != null) {
+ this.setBirthday(birthday);
+ }
+ if (comment != null) {
+ this.setComment(comment);
+ }
+ }
+
+ /**
+ * Enables the flag "own data" which signals that this contact is the user's
+ * own data.
+ */
+ protected final void enableFlagOwnContact () {
+ this.ownContact = true;
+ }
+
+ /**
+ * Surname
+ *
+ * @param surname the surname to set
+ */
+ protected final void setSurname (final String surname) {
+ this.surname = surname;
+ }
+
+ /**
+ * Phone number
+ *
+ * @param phoneNumber the phoneNumber to set
+ */
+ protected final void setPhoneNumber (final String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+
+ /**
+ * House number
+ *
+ * @param houseNumber the houseNumber to set
+ */
+ protected final void setHouseNumber (final int houseNumber) {
+ this.houseNumber = houseNumber;
+ }
+
+ /**
+ * Cellphone number
+ *
+ * @param cellphoneNumber the cellphoneNumber to set
+ */
+ protected final void setCellphoneNumber (final String cellphoneNumber) {
+ this.cellphoneNumber = cellphoneNumber;
+ }
+
+ /**
+ * Birth day
+ *
+ * @param birthday the birthday to set
+ */
+ protected final void setBirthday (final String birthday) {
+ this.birthday = birthday;
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.contact;\r
-\r
-import org.mxchange.addressbook.FrameworkInterface;\r
-import org.mxchange.addressbook.client.Client;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public interface Contact extends FrameworkInterface {\r
-\r
- /**\r
- * Some "getter" for translated gender of the contact\r
- * @return Translated / human-readable gender\r
- */\r
- public String getTranslatedGender();\r
-\r
- /**\r
- * Checks whether the contact is user's own data\r
- *\r
- * @return Own data?\r
- */\r
- public boolean isOwnContact();\r
-\r
- /**\r
- * Gender of the contact\r
- *\r
- * @return the gender\r
- */\r
- public char getGender();\r
-\r
- /**\r
- * Surname\r
- *\r
- * @return the surname\r
- */\r
- public String getSurname();\r
-\r
- /**\r
- * Family name\r
- *\r
- * @return the familyName\r
- */\r
- public String getFamilyName();\r
-\r
- /**\r
- * Companyname\r
- *\r
- * @return the companyName\r
- */\r
- public String getCompanyName();\r
-\r
- /**\r
- * Street\r
- *\r
- * @return the street\r
- */\r
- public String getStreet();\r
-\r
- /**\r
- * House number\r
- *\r
- * @return the houseNumber\r
- */\r
- public int getHouseNumber();\r
-\r
- /**\r
- * ZIP code\r
- *\r
- * @return the zipCode\r
- */\r
- public long getZipCode();\r
-\r
- /**\r
- * City\r
- *\r
- * @return the city\r
- */\r
- public String getCity();\r
-\r
- /**\r
- * Country code\r
- *\r
- * @return the countryCode\r
- */\r
- public String getCountryCode();\r
-\r
- /**\r
- * Email address\r
- *\r
- * @return the emailAddress\r
- */\r
- public String getEmailAddress();\r
-\r
- /**\r
- * Phone number\r
- *\r
- * @return the phoneNumber\r
- */\r
- public String getPhoneNumber();\r
-\r
- /**\r
- * Fax number\r
- *\r
- * @return the faxNumber\r
- */\r
- public String getFaxNumber();\r
-\r
- /**\r
- * Cellphone number\r
- *\r
- * @return the cellphoneNumber\r
- */\r
- public String getCellphoneNumber();\r
-\r
- /**\r
- * Birth day\r
- *\r
- * @return the birthday\r
- */\r
- public String getBirthday();\r
-\r
- /**\r
- * Comments\r
- *\r
- * @return the comment\r
- */\r
- public String getComment();\r
-\r
- /**\r
- * Shows the contact to the user\r
- *\r
- * @param client Client instance to call back\r
- */\r
- public void show (final Client client);\r
-\r
- /**\r
- * Updates address data in this Contact instance\r
- * \r
- * @param street Street\r
- * @param zipCode ZIP code\r
- * @param city City\r
- * @param countryCode Country code\r
- */\r
- public void updateAddressData (final String street, final long zipCode, final String city, final String countryCode);\r
-\r
- /**\r
- * Updates name data in this Contact instance\r
- * \r
- * @param gender Gender (M, F, C)\r
- * @param surname Surname\r
- * @param familyName Family name\r
- * @param companyName Company name\r
- */\r
- public void updateNameData (final char gender, final String surname, final String familyName, final String companyName);\r
-\r
- /**\r
- * Updates other data in this Contact instance\r
- * \r
- * @param phoneNumber Phone number\r
- * @param cellNumber Cellphone number\r
- * @param faxNumber Fax number\r
- * @param email Email address\r
- * @param birthday Birthday\r
- * @param comment Comments\r
- */\r
- public void updateOtherData (final String phoneNumber, final String cellNumber, final String faxNumber, final String email, final String birthday, final String comment);\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.contact;
+
+import org.mxchange.addressbook.FrameworkInterface;
+import org.mxchange.addressbook.client.Client;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public interface Contact extends FrameworkInterface {
+
+ /**
+ * Some "getter" for translated gender of the contact
+ *
+ * @return Translated / human-readable gender
+ */
+ public String getTranslatedGender ();
+
+ /**
+ * Checks whether the contact is user's own data
+ *
+ * @return Own data?
+ */
+ public boolean isOwnContact ();
+
+ /**
+ * Gender of the contact
+ *
+ * @return the gender
+ */
+ public char getGender ();
+
+ /**
+ * Surname
+ *
+ * @return the surname
+ */
+ public String getSurname ();
+
+ /**
+ * Family name
+ *
+ * @return the familyName
+ */
+ public String getFamilyName ();
+
+ /**
+ * Companyname
+ *
+ * @return the companyName
+ */
+ public String getCompanyName ();
+
+ /**
+ * Street
+ *
+ * @return the street
+ */
+ public String getStreet ();
+
+ /**
+ * House number
+ *
+ * @return the houseNumber
+ */
+ public int getHouseNumber ();
+
+ /**
+ * ZIP code
+ *
+ * @return the zipCode
+ */
+ public long getZipCode ();
+
+ /**
+ * City
+ *
+ * @return the city
+ */
+ public String getCity ();
+
+ /**
+ * Country code
+ *
+ * @return the countryCode
+ */
+ public String getCountryCode ();
+
+ /**
+ * Email address
+ *
+ * @return the emailAddress
+ */
+ public String getEmailAddress ();
+
+ /**
+ * Phone number
+ *
+ * @return the phoneNumber
+ */
+ public String getPhoneNumber ();
+
+ /**
+ * Fax number
+ *
+ * @return the faxNumber
+ */
+ public String getFaxNumber ();
+
+ /**
+ * Cellphone number
+ *
+ * @return the cellphoneNumber
+ */
+ public String getCellphoneNumber ();
+
+ /**
+ * Birth day
+ *
+ * @return the birthday
+ */
+ public String getBirthday ();
+
+ /**
+ * Comments
+ *
+ * @return the comment
+ */
+ public String getComment ();
+
+ /**
+ * Shows the contact to the user
+ *
+ * @param client Client instance to call back
+ */
+ public void show (final Client client);
+
+ /**
+ * Updates address data in this Contact instance
+ *
+ * @param street Street
+ * @param zipCode ZIP code
+ * @param city City
+ * @param countryCode Country code
+ */
+ public void updateAddressData (final String street, final long zipCode, final String city, final String countryCode);
+
+ /**
+ * Updates name data in this Contact instance
+ *
+ * @param gender Gender (M, F, C)
+ * @param surname Surname
+ * @param familyName Family name
+ * @param companyName Company name
+ */
+ public void updateNameData (final char gender, final String surname, final String familyName, final String companyName);
+
+ /**
+ * Updates other data in this Contact instance
+ *
+ * @param phoneNumber Phone number
+ * @param cellNumber Cellphone number
+ * @param faxNumber Fax number
+ * @param email Email address
+ * @param birthday Birthday
+ * @param comment Comments
+ */
+ public void updateOtherData (final String phoneNumber, final String cellNumber, final String faxNumber, final String email, final String birthday, final String comment);
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.contact.book;\r
-\r
-import org.mxchange.addressbook.contact.BaseContact;\r
-import org.mxchange.addressbook.contact.Contact;\r
-import org.mxchange.addressbook.database.storage.csv.StoreableCsv;\r
-\r
-/**\r
- * A contact that can be placed into "contact books"\r
- *\r
- * @author Roland Haeder\r
- * @version 0.0\r
- * @since 0.0\r
- */\r
-public class BookContact extends BaseContact implements Contact, StoreableCsv {\r
-\r
- /**\r
- * Default constructor, may only be used from database backend\r
- */\r
- public BookContact () {\r
- }\r
-\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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;
+
+/**
+ * A contact that can be placed into "contact books"
+ *
+ * @author Roland Haeder
+ * @version 0.0
+ * @since 0.0
+ */
+public class BookContact extends BaseContact implements Contact, StoreableCsv {
+
+ /**
+ * Default constructor, may only be used from database backend
+ */
+ public BookContact () {
+ }
+
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.contact.user;\r
-\r
-import org.mxchange.addressbook.contact.Contact;\r
-import org.mxchange.addressbook.contact.book.BookContact;\r
-import org.mxchange.addressbook.database.storage.csv.StoreableCsv;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- * @todo After a Collection has been used in ContactManager, change to BaseContact\r
- */\r
-public class UserContact extends BookContact implements Contact, StoreableCsv {\r
-\r
- /**\r
- * Creates own contact entry\r
- *\r
- * @param gender Gender to be set\r
- * @param surname Surname to be set\r
- * @param familyName Family name to be set\r
- * @param companyName Company name\r
- * @todo Add validation of data\r
- */\r
- public UserContact (final char gender, final String surname, final String familyName, final String companyName) {\r
- // Make sure all constructors are called\r
- this();\r
-\r
- // Update all data\r
- this.updateNameData(gender, surname, familyName, companyName);\r
- }\r
-\r
- /**\r
- * Default constructor, may only be used from database backend\r
- */\r
- public UserContact () {\r
- this.enableFlagOwnContact();\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.contact.user;
+
+import org.mxchange.addressbook.contact.Contact;
+import org.mxchange.addressbook.contact.book.BookContact;
+import org.mxchange.addressbook.database.storage.csv.StoreableCsv;
+
+/**
+ *
+ * @author Roland Haeder
+ * @todo After a Collection has been used in ContactManager, change to
+ * BaseContact
+ */
+public class UserContact extends BookContact implements Contact, StoreableCsv {
+
+ /**
+ * Creates own contact entry
+ *
+ * @param gender Gender to be set
+ * @param surname Surname to be set
+ * @param familyName Family name to be set
+ * @param companyName Company name
+ * @todo Add validation of data
+ */
+ public UserContact (final char gender, final String surname, final String familyName, final String companyName) {
+ // Make sure all constructors are called
+ this();
+
+ // Update all data
+ this.updateNameData(gender, surname, familyName, companyName);
+ }
+
+ /**
+ * Default constructor, may only be used from database backend
+ */
+ public UserContact () {
+ this.enableFlagOwnContact();
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.database.backend;\r
-\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-\r
-/**\r
- * Generall database backend\r
- * \r
- * @author Roland Haeder\r
- */\r
-public class BaseDatabaseBackend extends BaseFrameworkSystem {\r
- /**\r
- * No instances from this class\r
- */\r
- protected BaseDatabaseBackend () {\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.database.backend;
+
+import org.mxchange.addressbook.BaseFrameworkSystem;
+
+/**
+ * Generall database backend
+ *
+ * @author Roland Haeder
+ */
+public class BaseDatabaseBackend extends BaseFrameworkSystem {
+
+ /**
+ * No instances from this class
+ */
+ protected BaseDatabaseBackend () {
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.database.backend;\r
-\r
-import java.io.IOException;\r
-import org.mxchange.addressbook.FrameworkInterface;\r
-import org.mxchange.addressbook.database.storage.Storeable;\r
-\r
-/**\r
- * A generic interface for database frontends\r
- * \r
- * @author Roland Haeder\r
- */\r
-public interface DatabaseBackend extends FrameworkInterface {\r
-\r
- /**\r
- * Shuts down this backend\r
- */\r
- public void doShutdown ();\r
-\r
- /**\r
- * Rewinds backend\r
- */\r
- public void rewind ();\r
-\r
- /**\r
- * Get length of underlaying file\r
- *\r
- * @return Length of underlaying file\r
- */\r
- public long length ();\r
-\r
- /**\r
- * Stores an object in the database.\r
- * \r
- * @param object Object to store in database\r
- * @throws java.io.IOException From inner class\r
- */\r
- public void store (final Storeable object) throws IOException;\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.database.backend;
+
+import java.io.IOException;
+import org.mxchange.addressbook.FrameworkInterface;
+import org.mxchange.addressbook.database.storage.Storeable;
+
+/**
+ * A generic interface for database frontends
+ *
+ * @author Roland Haeder
+ */
+public interface DatabaseBackend extends FrameworkInterface {
+
+ /**
+ * Shuts down this backend
+ */
+ public void doShutdown ();
+
+ /**
+ * 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;
+}
*/
public interface CsvBackend extends DatabaseBackend {
- /**
- * Gets an iterator for contacts
- *
- * @return Iterator for contacts
- * @throws org.mxchange.addressbook.exceptions.BadTokenException If the CSV token is badly formulated
- */
- public Iterator<Contact> contactIterator () throws BadTokenException;
+ /**
+ * Gets an iterator for contacts
+ *
+ * @return Iterator for contacts
+ * @throws org.mxchange.addressbook.exceptions.BadTokenException If the CSV
+ * token is badly formulated
+ */
+ public Iterator<Contact> contactIterator () throws BadTokenException;
}
/**
* A database backend with CSV file as storage implementation
- *
+ *
* @author Roland Haeder
*/
public class CsvDatabaseBackend extends BaseDatabaseBackend implements CsvBackend {
- /**
- * Output stream for this storage engine
- */
- private RandomAccessFile storageFile;
-
- /**
- * Constructor with table name
- *
- * @param tableName Name of "table"
- */
- public CsvDatabaseBackend (final String tableName) {
- // Debug message
- this.getLogger().debug(MessageFormat.format("Trying to initialize table {0} ...", tableName));
-
- // Set table name here, too
- this.setTableName(tableName);
-
- // Construct file name
- String fileName = String.format("data/table_%s.csv", tableName);
-
- // Debug message
- this.getLogger().debug(MessageFormat.format("Trying to open file {0} ...", fileName));
-
- try {
- // Try to initialize the storage (file instance)
- this.storageFile = new RandomAccessFile(fileName, "rw");
- } catch (final FileNotFoundException ex) {
- // Did not work
- this.getLogger().error(MessageFormat.format("File {0} cannot be opened: {1}", fileName, ex.toString()));
- System.exit(1);
- }
- // Output message
- this.getLogger().debug(MessageFormat.format("Database for {0} has been initialized.", tableName));
- }
-
- /**
- * 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<Contact> contactIterator () throws BadTokenException {
- /*
- * Then read the file into RAM (yes, not perfect for >1000 entries ...)
- * and get a List back.
+ /**
+ * Output stream for this storage engine
*/
- List<Contact> list = this.readContactList();
-
- // Get iterator from list and return it
- return list.iterator();
- }
-
- /**
- * Shuts down this backend
- */
- @Override
- public void doShutdown () {
- try {
- // Close file
- this.getStorageFile().close();
- } catch (final IOException ex) {
- this.getLogger().catching(ex);
- System.exit(1);
- }
- }
-
- /**
- * 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));
- } catch (final IOException ex) {
- // Length cannot be determined
- this.getLogger().catching(ex);
- System.exit(1);
- }
-
- // Return result
- this.getLogger().trace(MessageFormat.format("length={0} : EXIT!", length));
- return length;
- }
-
- /**
- * Rewinds backend
- */
- @Override
- public void rewind (){
- this.getLogger().trace("CALLED!");
-
- try {
- // Rewind underlaying database file
- this.getStorageFile().seek(0);
- } catch (final IOException ex) {
- this.getLogger().catching(ex);
- System.exit(1);
- }
+ private RandomAccessFile storageFile;
- this.getLogger().trace("EXIT!");
- }
-
- /**
- * 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 {
- // 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));
-
- // The string is now a valid CSV string
- this.getStorageFile().writeBytes(str);
- }
-
- /**
- * Adds given contact to list
- *
- * @param contact Contact instance to add
- * @param list List instance
- */
- private void addContactToList (final Contact contact, final List<Contact> list) {
- // Debug message
- this.getLogger().debug(MessageFormat.format("contact={0}", contact));
-
- // Is the contact read?
- if (contact instanceof Contact) {
- // Then add it
- boolean added = list.add(contact);
-
- // Debug message
- this.getLogger().debug(MessageFormat.format("contact={0} added={1}", contact, added));
-
- // Has it been added?
- if (!added) {
- // Not added
- this.getLogger().warn("Contact object has not been added.");
- }
- }
- }
-
- /**
- * 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);
- }
+ /**
+ * Constructor with table name
+ *
+ * @param tableName Name of "table"
+ */
+ public CsvDatabaseBackend (final String tableName) {
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("Trying to initialize table {0} ...", tableName));
- // Return status
- this.getLogger().trace(MessageFormat.format("isEof={0} : EXIT!", isEof));
- return isEof;
- }
+ // Set table name here, too
+ this.setTableName(tableName);
- /**
- * Reads the database file, if available, and adds all read lines into
- * the list.
- *
- * @return A list with Contact instances
- */
- private List<Contact> readContactList () throws BadTokenException {
- this.getLogger().trace("CALLED!");
+ // Construct file name
+ String fileName = String.format("data/table_%s.csv", tableName);
- // First rewind
- this.rewind();
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("Trying to open file {0} ...", fileName));
+
+ try {
+ // Try to initialize the storage (file instance)
+ this.storageFile = new RandomAccessFile(fileName, "rw");
+ } catch (final FileNotFoundException ex) {
+ // Did not work
+ this.getLogger().error(MessageFormat.format("File {0} cannot be opened: {1}", fileName, ex.toString()));
+ System.exit(1);
+ }
- // Get file size and divide it by 140 (possible average length of one line)
- int lines = Math.round(this.length() / 140 + 0.5f);
+ // Output message
+ this.getLogger().debug(MessageFormat.format("Database for {0} has been initialized.", tableName));
+ }
- // Debug message
- this.getLogger().debug(MessageFormat.format("lines={0}", lines));
+ /**
+ * 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<Contact> contactIterator () throws BadTokenException {
+ /*
+ * Then read the file into RAM (yes, not perfect for >1000 entries ...)
+ * and get a List back.
+ */
+ List<Contact> list = this.readContactList();
+
+ // Get iterator from list and return it
+ return list.iterator();
+ }
- // Instance list
- // @TODO The maximum length could be guessed from file size?
- List<Contact> list = new ArrayList<>(lines);
+ /**
+ * Shuts down this backend
+ */
+ @Override
+ public void doShutdown () {
+ try {
+ // Close file
+ this.getStorageFile().close();
+ } catch (final IOException ex) {
+ this.getLogger().catching(ex);
+ System.exit(1);
+ }
+ }
- // Init variables
- StringTokenizer tokenizer;
- String line;
+ /**
+ * 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));
+ } catch (final IOException ex) {
+ // Length cannot be determined
+ this.getLogger().catching(ex);
+ System.exit(1);
+ }
- // Read all lines
- while (!this.isEndOfFile()) {
- // Then read a line
- line = this.readLine();
+ // Return result
+ this.getLogger().trace(MessageFormat.format("length={0} : EXIT!", length));
+ return length;
+ }
- // Debug message
- this.getLogger().debug(MessageFormat.format("line={0}", line));
+ /**
+ * Rewinds backend
+ */
+ @Override
+ public void rewind () {
+ this.getLogger().trace("CALLED!");
+
+ try {
+ // Rewind underlaying database file
+ this.getStorageFile().seek(0);
+ } catch (final IOException ex) {
+ this.getLogger().catching(ex);
+ System.exit(1);
+ }
- // Then tokenize it
- // @TODO Move this into separate method
- tokenizer = new StringTokenizer(line, ";");
+ this.getLogger().trace("EXIT!");
+ }
- // Count round
- int count = 0;
+ /**
+ * 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 {
+ // Make sure the instance is there (DataOutput flawor)
+ assert (this.storageFile instanceof DataOutput);
- // Init contact object
- Contact contact = null;
+ // Try to cast it, this will fail if the interface is not implemented
+ StoreableCsv csv = (StoreableCsv) object;
- // The tokens are now available, so get all
- while (tokenizer.hasMoreElements()) {
- // Get next token
- String token = tokenizer.nextToken();
+ // Now get a string from the object that needs to be stored
+ String str = csv.getCsvStringFromStoreableObject();
// Debug message
- this.getLogger().debug(MessageFormat.format("token={0}", token));
-
- // Verify token, it must have double-quotes on each side
- if ((!token.startsWith("\"")) || (!token.endsWith("\""))) {
- // Something bad was read
- throw new BadTokenException(MessageFormat.format("Token {0} has not double-quotes on both ends.", token));
- }
-
- // All fine, so remove it
- String strippedToken = token.substring(1, token.length() - 1);
+ this.getLogger().debug(MessageFormat.format("str({0})={1}", str.length(), str));
- // Is the string's content "null"?
- if (strippedToken.equals("null")) {
- // Debug message
- this.getLogger().debug(MessageFormat.format("strippedToken={0} - NULL!", strippedToken));
-
- // This needs to be set to null
- strippedToken = null;
- }
+ // The string is now a valid CSV string
+ this.getStorageFile().writeBytes(str);
+ }
+ /**
+ * Adds given contact to list
+ *
+ * @param contact Contact instance to add
+ * @param list List instance
+ */
+ private void addContactToList (final Contact contact, final List<Contact> list) {
// Debug message
- this.getLogger().debug(MessageFormat.format("strippedToken={0}", strippedToken));
-
- // Init number/string data values
- String strData = strippedToken;
- Long num = null;
- Boolean bool = null;
- char gender = '?';
-
- // Now, let's try a number check, if no null
- if (strippedToken != null) {
- // Okay, no null, maybe the string bears a decimal number?
- try {
- num = Long.valueOf(strippedToken);
+ this.getLogger().debug(MessageFormat.format("contact={0}", contact));
- // Debug message
- this.getLogger().debug(MessageFormat.format("strippedToken={0} - NUMBER!", strippedToken));
- } catch (final NumberFormatException ex) {
- // No number, then set default
- num = null;
- }
- }
-
- // Now, let's try a boolean check, if no null
- if ((strippedToken != null) && (num == null) && ((strippedToken.equals("true")) || (strippedToken.equals("false")))) {
- // Debug message
- this.getLogger().debug(MessageFormat.format("strippedToken={0} - BOOLEAN!", strippedToken));
-
- // parseBoolean() is relaxed, so no exceptions
- bool = Boolean.valueOf(strippedToken);
- }
-
- // Now, let's try a boolean check, if no null
- if ((strippedToken != null) && (num == null) && (bool == null) && ((strippedToken.equals("M")) || (strippedToken.equals("F")) || (strippedToken.equals("C")))) {
- // Get first character
- gender = strippedToken.charAt(0);
- }
-
- // Now it depends on the counter which position we need to check
- switch (count) {
- case 0: // isOwnContact
- assert((bool instanceof Boolean));
+ // Is the contact read?
+ if (contact instanceof Contact) {
+ // Then add it
+ boolean added = list.add(contact);
// Debug message
- this.getLogger().debug(MessageFormat.format("bool={0}", bool));
-
- // Is it own contact?
- if (true == bool) {
- // Debug message
- this.getLogger().debug("Creating UserContact object ...");
+ this.getLogger().debug(MessageFormat.format("contact={0} added={1}", contact, added));
- // Own entry
- contact = new UserContact();
- } else {
- // Debug message
- this.getLogger().debug("Creating BookContact object ...");
-
- // Other contact
- contact = new BookContact();
+ // Has it been added?
+ if (!added) {
+ // Not added
+ this.getLogger().warn("Contact object has not been added.");
}
- break;
+ }
+ }
- case 1: // Gender
- assert(contact instanceof Contact) : "First token was not boolean";
- assert(gender != '?') : "Gender is not detected.";
+ /**
+ * Returns storage file
+ *
+ * @return Storage file instance
+ */
+ private RandomAccessFile getStorageFile () {
+ return this.storageFile;
+ }
- // Update data
- contact.updateNameData(gender, null, null, null);
- break;
+ /**
+ * 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);
+ }
- case 2: // Surname
- assert(contact instanceof Contact) : "First token was not boolean";
- assert(gender != '?') : "Gender is not detected.";
+ // Return status
+ this.getLogger().trace(MessageFormat.format("isEof={0} : EXIT!", isEof));
+ return isEof;
+ }
- // Update data
- contact.updateNameData(gender, strippedToken, null, null);
- break;
+ /**
+ * Reads the database file, if available, and adds all read lines into the
+ * list.
+ *
+ * @return A list with Contact instances
+ */
+ private List<Contact> readContactList () throws BadTokenException {
+ this.getLogger().trace("CALLED!");
- case 3: // Family name
- assert(contact instanceof Contact) : "First token was not boolean";
- assert(gender != '?') : "Gender is not detected.";
+ // First rewind
+ this.rewind();
- // Update data
- contact.updateNameData(gender, null, strippedToken, null);
- break;
+ // Get file size and divide it by 140 (possible average length of one line)
+ int lines = Math.round(this.length() / 140 + 0.5f);
- case 4: // Company name
- assert(contact instanceof Contact) : "First token was not boolean";
- assert(gender != '?') : "Gender is not detected.";
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("lines={0}", lines));
- // Update data
- contact.updateNameData(gender, null, null, strippedToken);
- break;
+ // Instance list
+ // @TODO The maximum length could be guessed from file size?
+ List<Contact> list = new ArrayList<>(lines);
- case 5: // Street number
- assert(contact instanceof Contact) : "First token was not boolean";
+ // Init variables
+ StringTokenizer tokenizer;
+ String line;
- // Update data
- contact.updateAddressData(strippedToken, 0, null, null);
- break;
+ // Read all lines
+ while (!this.isEndOfFile()) {
+ // Then read a line
+ line = this.readLine();
- case 6: // ZIP code
- assert(contact instanceof Contact) : "First token was not boolean";
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("line={0}", line));
- // Update data
- contact.updateAddressData(null, num, null, null);
- break;
+ // Then tokenize it
+ // @TODO Move this into separate method
+ tokenizer = new StringTokenizer(line, ";");
+
+ // Count round
+ int count = 0;
+
+ // Init contact object
+ Contact contact = null;
+
+ // The tokens are now available, so get all
+ while (tokenizer.hasMoreElements()) {
+ // Get next token
+ String token = tokenizer.nextToken();
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("token={0}", token));
+
+ // Verify token, it must have double-quotes on each side
+ if ((!token.startsWith("\"")) || (!token.endsWith("\""))) {
+ // Something bad was read
+ throw new BadTokenException(MessageFormat.format("Token {0} has not double-quotes on both ends.", token));
+ }
+
+ // All fine, so remove it
+ String strippedToken = token.substring(1, token.length() - 1);
+
+ // Is the string's content "null"?
+ if (strippedToken.equals("null")) {
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("strippedToken={0} - NULL!", strippedToken));
+
+ // This needs to be set to null
+ strippedToken = null;
+ }
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("strippedToken={0}", strippedToken));
+
+ // Init number/string data values
+ String strData = strippedToken;
+ Long num = null;
+ Boolean bool = null;
+ char gender = '?';
+
+ // Now, let's try a number check, if no null
+ if (strippedToken != null) {
+ // Okay, no null, maybe the string bears a decimal number?
+ try {
+ num = Long.valueOf(strippedToken);
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("strippedToken={0} - NUMBER!", strippedToken));
+ } catch (final NumberFormatException ex) {
+ // No number, then set default
+ num = null;
+ }
+ }
+
+ // Now, let's try a boolean check, if no null
+ if ((strippedToken != null) && (num == null) && ((strippedToken.equals("true")) || (strippedToken.equals("false")))) {
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("strippedToken={0} - BOOLEAN!", strippedToken));
+
+ // parseBoolean() is relaxed, so no exceptions
+ bool = Boolean.valueOf(strippedToken);
+ }
+
+ // Now, let's try a boolean check, if no null
+ if ((strippedToken != null) && (num == null) && (bool == null) && ((strippedToken.equals("M")) || (strippedToken.equals("F")) || (strippedToken.equals("C")))) {
+ // Get first character
+ gender = strippedToken.charAt(0);
+ }
+
+ // Now it depends on the counter which position we need to check
+ switch (count) {
+ case 0: // isOwnContact
+ assert ((bool instanceof Boolean));
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("bool={0}", bool));
+
+ // Is it own contact?
+ if (true == bool) {
+ // Debug message
+ this.getLogger().debug("Creating UserContact object ...");
+
+ // Own entry
+ contact = new UserContact();
+ } else {
+ // Debug message
+ this.getLogger().debug("Creating BookContact object ...");
+
+ // Other contact
+ contact = new BookContact();
+ }
+ break;
+
+ case 1: // Gender
+ assert (contact instanceof Contact) : "First token was not boolean";
+ assert (gender != '?') : "Gender is not detected.";
+
+ // Update data
+ contact.updateNameData(gender, null, null, null);
+ break;
+
+ case 2: // Surname
+ assert (contact instanceof Contact) : "First token was not boolean";
+ assert (gender != '?') : "Gender is not detected.";
+
+ // Update data
+ contact.updateNameData(gender, strippedToken, null, null);
+ break;
+
+ case 3: // Family name
+ assert (contact instanceof Contact) : "First token was not boolean";
+ assert (gender != '?') : "Gender is not detected.";
+
+ // Update data
+ contact.updateNameData(gender, null, strippedToken, null);
+ break;
+
+ case 4: // Company name
+ assert (contact instanceof Contact) : "First token was not boolean";
+ assert (gender != '?') : "Gender is not detected.";
+
+ // Update data
+ contact.updateNameData(gender, null, null, strippedToken);
+ break;
+
+ case 5: // Street number
+ assert (contact instanceof Contact) : "First token was not boolean";
+
+ // Update data
+ contact.updateAddressData(strippedToken, 0, null, null);
+ break;
+
+ case 6: // ZIP code
+ assert (contact instanceof Contact) : "First token was not boolean";
+
+ // Update data
+ contact.updateAddressData(null, num, null, null);
+ break;
+
+ case 7: // City name
+ assert (contact instanceof Contact) : "First token was not boolean";
+
+ // Update data
+ contact.updateAddressData(null, 0, strippedToken, null);
+ break;
- case 7: // City name
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 8: // Country code
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateAddressData(null, 0, strippedToken, null);
- break;
+ // Update data
+ contact.updateAddressData(null, 0, null, strippedToken);
+ break;
- case 8: // Country code
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 9: // Phone number
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateAddressData(null, 0, null, strippedToken);
- break;
+ // Update data
+ contact.updateOtherData(strippedToken, null, null, null, null, null);
+ break;
- case 9: // Phone number
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 10: // Fax number
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateOtherData(strippedToken, null, null, null, null, null);
- break;
+ // Update data
+ contact.updateOtherData(null, strippedToken, null, null, null, null);
+ break;
- case 10: // Fax number
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 11: // Cellphone number
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateOtherData(null, strippedToken, null, null, null, null);
- break;
+ // Update data
+ contact.updateOtherData(null, null, strippedToken, null, null, null);
+ break;
- case 11: // Cellphone number
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 12: // Email address
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateOtherData(null, null, strippedToken, null, null, null);
- break;
+ // Update data
+ contact.updateOtherData(null, null, null, strippedToken, null, null);
+ break;
- case 12: // Email address
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 13: // Birthday
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateOtherData(null, null, null, strippedToken, null, null);
- break;
+ // Update data
+ contact.updateOtherData(null, null, null, null, strippedToken, null);
+ break;
- case 13: // Birthday
- assert(contact instanceof Contact) : "First token was not boolean";
+ case 14: // Birthday
+ assert (contact instanceof Contact) : "First token was not boolean";
- // Update data
- contact.updateOtherData(null, null, null, null, strippedToken, null);
- break;
+ // Update data
+ contact.updateOtherData(null, null, null, null, null, strippedToken);
+ break;
- case 14: // Birthday
- assert(contact instanceof Contact) : "First token was not boolean";
+ default: // New data entry
+ this.getLogger().warn(MessageFormat.format("Will not handle unknown data {0} at index {1}", strippedToken, count));
+ break;
+ }
- // Update data
- contact.updateOtherData(null, null, null, null, null, strippedToken);
- break;
+ // Increment counter for next round
+ count++;
+ }
- default: // New data entry
- this.getLogger().warn(MessageFormat.format("Will not handle unknown data {0} at index {1}", strippedToken, count));
- break;
+ // Add contact
+ this.addContactToList(contact, list);
}
- // Increment counter for next round
- count++;
- }
-
- // Add contact
- this.addContactToList(contact, list);
+ // Return finished list
+ this.getLogger().trace(MessageFormat.format("list.size()={0} : EXIT!", list.size()));
+ return list;
}
- // Return finished list
- this.getLogger().trace(MessageFormat.format("list.size()={0} : EXIT!", list.size()));
- return list;
- }
-
- /**
- * Reads a line from file base
- *
- * @return Read line from file
- */
- private String readLine () {
- // Init input
- String input = null;
-
- try {
- input = this.getStorageFile().readLine();
- } catch (final IOException ex) {
- this.getLogger().catching(ex);
- }
+ /**
+ * Reads a line from file base
+ *
+ * @return Read line from file
+ */
+ private String readLine () {
+ // Init input
+ String input = null;
+
+ try {
+ input = this.getStorageFile().readLine();
+ } catch (final IOException ex) {
+ this.getLogger().catching(ex);
+ }
- // Return read string or null
- return input;
- }
+ // Return read string or null
+ return input;
+ }
}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.database.frontend;\r
-\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-import org.mxchange.addressbook.database.backend.DatabaseBackend;\r
-import org.mxchange.addressbook.database.backend.csv.CsvDatabaseBackend;\r
-\r
-/**\r
- * General database frontend class\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class BaseDatabaseFrontend extends BaseFrameworkSystem {\r
-\r
- /**\r
- * Instance for database backend\r
- */\r
- private DatabaseBackend backend;\r
-\r
- /**\r
- * No instances from this class\r
- */\r
- protected BaseDatabaseFrontend () {\r
- }\r
-\r
- /**\r
- * Instance for database backend\r
- * \r
- * @return the backend\r
- */\r
- protected final DatabaseBackend getBackend () {\r
- return this.backend;\r
- }\r
-\r
- /**\r
- * Instance for database backend\r
- * \r
- * @param backend the backend to set\r
- */\r
- protected final void setBackend (final DatabaseBackend backend) {\r
- this.backend = backend;\r
- }\r
-\r
- /**\r
- * Initialize backend\r
- */\r
- protected void initBackend () {\r
- // Instance backend\r
- this.backend = new CsvDatabaseBackend(this.getTableName());\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.database.frontend;
+
+import org.mxchange.addressbook.BaseFrameworkSystem;
+import org.mxchange.addressbook.database.backend.DatabaseBackend;
+import org.mxchange.addressbook.database.backend.csv.CsvDatabaseBackend;
+
+/**
+ * General database frontend class
+ *
+ * @author Roland Haeder
+ */
+public class BaseDatabaseFrontend extends BaseFrameworkSystem {
+
+ /**
+ * 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
+ */
+ protected void initBackend () {
+ // Instance backend
+ this.backend = new CsvDatabaseBackend(this.getTableName());
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.database.frontend;\r
-\r
-import org.mxchange.addressbook.FrameworkInterface;\r
-\r
-/**\r
- * A generic interface for database frontends\r
- * \r
- * @author Roland Haeder\r
- */\r
-public interface DatabaseWrapper extends FrameworkInterface {\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.database.frontend;
+
+import org.mxchange.addressbook.FrameworkInterface;
+
+/**
+ * A generic interface for database frontends
+ *
+ * @author Roland Haeder
+ */
+public interface DatabaseWrapper extends FrameworkInterface {
+}
* @author Roland Haeder
*/
public class ContactDatabaseFrontend extends BaseDatabaseFrontend implements ContactWrapper {
- /**
- * Constructor which accepts a contact manager
- * @param manager
- */
- public ContactDatabaseFrontend (final ContactManager manager) {
- // Call own constructor
- this();
-
- // Set contact manager
- this.setContactManager(manager);
- }
-
- /**
- * Basic constrcutor
- */
- protected ContactDatabaseFrontend () {
- super();
-
- // Set "table" name
- this.setTableName("contacts");
-
- // Initalize backend
- this.initBackend();
- }
-
- /**
- * Shuts down the database layer
- */
- @Override
- public void doShutdown () {
- // Shutdown backend
- this.getBackend().doShutdown();
- }
-
- /**
- * Flushes all contact entries to database
- */
- @Override
- public void flushAllContacts () {
- // Get full list
- List<Contact> contacts = this.getContactManager().getList();
-
- // Get iterator
- Iterator<Contact> iterator = contacts.iterator();
-
- // Rewind backend
- this.getBackend().rewind();
-
- // Get all entries
- while (iterator.hasNext()) {
- // Get next entry
- Contact contact = iterator.next();
-
- try {
- // Store this entry
- this.getBackend().store((Storeable) contact);
- } catch (final IOException ex) {
- // Should not happen?
- this.getLogger().catching(ex);
- System.exit(1);
- }
+
+ /**
+ * Constructor which accepts a contact manager
+ *
+ * @param manager
+ */
+ public ContactDatabaseFrontend (final ContactManager manager) {
+ // Call own constructor
+ this();
+
+ // Set contact manager
+ this.setContactManager(manager);
+ }
+
+ /**
+ * Basic constrcutor
+ */
+ protected ContactDatabaseFrontend () {
+ super();
+
+ // Set "table" name
+ this.setTableName("contacts");
+
+ // Initalize backend
+ this.initBackend();
+ }
+
+ /**
+ * Shuts down the database layer
+ */
+ @Override
+ public void doShutdown () {
+ // Shutdown backend
+ this.getBackend().doShutdown();
}
- }
-
- /**
- * Reads all contacts from database backend and handles them over to the
- * contact manager
- */
- @Override
- public void readAllContacts () {
- // Get iterator and case it
- CsvBackend backend = (CsvBackend) this.getBackend();
-
- // First rewind to beginning
- this.getBackend().rewind();
-
- // Get backend iterator
- Iterator<Contact> iterator = null;
- try {
- iterator = backend.contactIterator();
- } catch (final BadTokenException ex) {
- this.getLogger().catching(ex);
- System.exit(1);
+
+ /**
+ * Flushes all contact entries to database
+ */
+ @Override
+ public void flushAllContacts () {
+ // Get full list
+ List<Contact> contacts = this.getContactManager().getList();
+
+ // Get iterator
+ Iterator<Contact> iterator = contacts.iterator();
+
+ // Rewind backend
+ this.getBackend().rewind();
+
+ // Get all entries
+ while (iterator.hasNext()) {
+ // Get next entry
+ Contact contact = iterator.next();
+
+ try {
+ // Store this entry
+ this.getBackend().store((Storeable) contact);
+ } catch (final IOException ex) {
+ // Should not happen?
+ this.getLogger().catching(ex);
+ System.exit(1);
+ }
+ }
}
- // Read all entries
- while (iterator.hasNext()) {
- // Get next entry
- Contact contact = iterator.next();
+ /**
+ * Reads all contacts from database backend and handles them over to the
+ * contact manager
+ */
+ @Override
+ public void readAllContacts () {
+ // Get iterator and case it
+ CsvBackend backend = (CsvBackend) this.getBackend();
+
+ // First rewind to beginning
+ this.getBackend().rewind();
+
+ // Get backend iterator
+ Iterator<Contact> iterator = null;
+ try {
+ iterator = backend.contactIterator();
+ } catch (final BadTokenException ex) {
+ this.getLogger().catching(ex);
+ System.exit(1);
+ }
+
+ // Read all entries
+ while (iterator.hasNext()) {
+ // Get next entry
+ Contact contact = iterator.next();
- // Add contact instance to manager
- this.getContactManager().addContact(contact);
+ // Add contact instance to manager
+ this.getContactManager().addContact(contact);
+ }
}
- }
}
-/*\r
- * Copyright (C) 2015 Roland Häder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.database.frontend.contact;\r
-\r
-import org.mxchange.addressbook.database.frontend.DatabaseWrapper;\r
-\r
-/**\r
- *\r
- * @author Roland Häder\r
- */\r
-public interface ContactWrapper extends DatabaseWrapper {\r
-\r
- /**\r
- * Shuts down the database layer\r
- */\r
- public void doShutdown ();\r
-\r
- /**\r
- * Flushes all contact entries to database\r
- */\r
- public void flushAllContacts ();\r
-\r
- /**\r
- * Reads all contacts from database backend and handles them over to the\r
- * contact manager\r
- */\r
- public void readAllContacts ();\r
-}\r
+/*
+ * Copyright (C) 2015 Roland Häder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.database.frontend.contact;
+
+import org.mxchange.addressbook.database.frontend.DatabaseWrapper;
+
+/**
+ *
+ * @author Roland Häder
+ */
+public interface ContactWrapper extends DatabaseWrapper {
+
+ /**
+ * Shuts down the database layer
+ */
+ public void doShutdown ();
+
+ /**
+ * Flushes all contact entries to database
+ */
+ public void flushAllContacts ();
+
+ /**
+ * Reads all contacts from database backend and handles them over to the
+ * contact manager
+ */
+ public void readAllContacts ();
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.database.storage;\r
-\r
-import org.mxchange.addressbook.FrameworkInterface;\r
-\r
-/**\r
- *An interface for objects being stored in databases\r
- * \r
- * @author Roland Haeder\r
- */\r
-public interface Storeable extends FrameworkInterface {\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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 {
+}
/**
* An interface for classes which should be storeable as a CSV string
- *
+ *
* @author Roland Haeder
*/
public interface StoreableCsv extends Storeable {
- /**
- * Getter for a CSV-formated string from object
- * @return
- */
- public String getCsvStringFromStoreableObject ();
+
+ /**
+ * Getter for a CSV-formated string from object
+ *
+ * @return
+ */
+ public String getCsvStringFromStoreableObject ();
}
*/
public class BadTokenException extends Exception {
- public BadTokenException (final String str) {
- super(str);
- }
-
+ public BadTokenException (final String str) {
+ super(str);
+ }
+
}
/**
* This exception is thrown when initFrame() is called twice.
- *
+ *
* @author Roland Haeder
*/
public class FrameAlreadyInitializedException extends Exception {
- /**
- * Default constructor
- */
- public FrameAlreadyInitializedException () {
- }
-
+ /**
+ * Default constructor
+ */
+ public FrameAlreadyInitializedException () {
+ }
+
}
/**
* 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 {
- public UnhandledUserChoiceException (final String message) {
- super(message);
- }
+ public UnhandledUserChoiceException (final String message) {
+ super(message);
+ }
}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.manager;\r
-\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-\r
-/**\r
- * A general manager\r
- *\r
- * @author Roland Haeder\r
- * @version 0.0\r
- * @since 0.0\r
- */\r
-public class BaseManager extends BaseFrameworkSystem implements Manageable {\r
- /**\r
- * No instances can be created of this class\r
- */\r
- protected BaseManager () {\r
- // Call any other super constructors\r
- super();\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.manager;
+
+import org.mxchange.addressbook.BaseFrameworkSystem;
+
+/**
+ * A general manager
+ *
+ * @author Roland Haeder
+ * @version 0.0
+ * @since 0.0
+ */
+public class BaseManager extends BaseFrameworkSystem implements Manageable {
+
+ /**
+ * No instances can be created of this class
+ */
+ protected BaseManager () {
+ // Call any other super constructors
+ super();
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.manager.application;\r
-\r
-import org.mxchange.addressbook.application.Application;\r
-import org.mxchange.addressbook.manager.BaseManager;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class ApplicationManager extends BaseManager implements ManageableApplication {\r
-\r
- /**\r
- * Getter for application manager\r
- * @param application An instance of a Application class\r
- * @return\r
- */\r
- public static final ManageableApplication getManager (final Application application) {\r
- // Get manager\r
- ManageableApplication manager = new ApplicationManager(application);\r
-\r
- // Return manager\r
- return manager;\r
- }\r
-\r
- /**\r
- * Constructor for this manager\r
- * @param application An instance of an Application class\r
- */\r
- private ApplicationManager (final Application application) {\r
- super();\r
- \r
- // Set application instance\r
- this.setApplication (application);\r
- }\r
-\r
- @Override\r
- public void start () {\r
- // Bootstrap application\r
- this.getApplication().doBootstrap();\r
-\r
- // Run the main loop\r
- this.getApplication().doMainLoop();\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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) {
+ // 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) {
+ super();
+
+ // Set application instance
+ this.setApplication(application);
+ }
+
+ @Override
+ public void start () {
+ // Bootstrap application
+ this.getApplication().doBootstrap();
+
+ // Run the main loop
+ this.getApplication().doMainLoop();
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.manager.application;\r
-\r
-import org.mxchange.addressbook.manager.Manageable;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public interface ManageableApplication extends Manageable {\r
- /**\r
- * Launches application\r
- */\r
- public void start();\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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 ();
+}
* @version 0.0
*/
public class ContactManager extends BaseManager implements ManageableContact {
- /**
- * Column name list
- */
- private final List<String> columnNames;
-
- /**
- * A ContactWrapper instance
- */
- private final ContactWrapper contactDatabase;
-
- /**
- * A list of all contacts
- */
- private final List<Contact> contacts;
-
- /**
- * Constructor which accepts maxContacts for maximum (initial) contacts and
- * a client instance.
- *
- * @param maxContacts Maximum allowed contacts
- * @param client Client instance to use
- */
- public ContactManager (final int maxContacts, final Client client) {
- // Always call super constructor first
- super();
-
- // Set client instance
- this.setClient(client);
-
- // Init contacts
- this.contacts = new ArrayList<>(maxContacts);
-
- // Init database connection
- this.contactDatabase = new ContactDatabaseFrontend(this);
-
- // Initialize list
- this.columnNames = new ArrayList<>(15);
-
- // And fill it
- this.fillColumnNamesFromBundle();
-
- // Read all entries
- this.contactDatabase.readAllContacts();
+
+ /**
+ * Column name list
+ */
+ private final List<String> columnNames;
+
+ /**
+ * A ContactWrapper instance
+ */
+ private final ContactWrapper contactDatabase;
+
+ /**
+ * A list of all contacts
+ */
+ private final List<Contact> contacts;
+
+ /**
+ * Constructor which accepts maxContacts for maximum (initial) contacts and
+ * a client instance.
+ *
+ * @param maxContacts Maximum allowed contacts
+ * @param client Client instance to use
+ */
+ public ContactManager (final int maxContacts, final Client client) {
+ // Always call super constructor first
+ super();
+
+ // Set client instance
+ this.setClient(client);
+
+ // Init contacts
+ this.contacts = new ArrayList<>(maxContacts);
+
+ // Init database connection
+ this.contactDatabase = new ContactDatabaseFrontend(this);
+
+ // Initialize list
+ this.columnNames = new ArrayList<>(15);
+
+ // And fill it
+ this.fillColumnNamesFromBundle();
+
+ // Read all entries
+ this.contactDatabase.readAllContacts();
// Debug message
- //* NOISY-DEBUG: */ this.getLogger().debug("client=" + client);
- }
-
- /**
- * Adds given Contact instance to list
- *
- * @param contact Contact instance to add
- */
- @Override
- public void addContact (final Contact contact) {
- assert(this.contacts instanceof List) : "this.contacts is not initialized";
-
- this.contacts.add(contact);
- }
-
- /**
- * Let the user add a new other address
- */
- @Override
- public void doAddOtherAddress () {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- /**
- * Let the user change address data
- *
- * @param contact Instance to change data
- * @param client Client instance to call back
- */
- @Override
- public void doChangeAddressData (final Contact contact, final Client client) {
- // First display it again
- client.displayAddressBox(contact);
-
- // Is it own data?
- if (contact.isOwnContact()) {
- // Deligate to client
- this.getClient().doChangeOwnAddressData(contact);
- } else {
- // Other contact's address data to change
- throw new UnsupportedOperationException("Changing contact entries not finished.");
- }
-
- // Flush whole list
- this.flush();
- }
-
- /**
- * Let the user change "name data"
- *
- * @param contact Instance to change data
- * @param client Client instance to call back
- */
- @Override
- public void doChangeNameData (final Contact contact, final Client client) {
- // First display them again
- client.displayNameBox(contact);
-
- // Is this own data?
- if (contact.isOwnContact()) {
- // Re-ask own data
- this.getClient().doChangeOwnNameData(contact);
- } else {
- // Then re-ask them ...
- throw new UnsupportedOperationException("Changing contact entries not finished.");
- }
-
- // Flush whole list
- this.flush();
- }
-
- /**
- * Let the user change other address
- */
- @Override
- public void doChangeOtherAddress () {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- /**
- * Let the user change other data
- *
- * @param contact Instance to change data
- * @param client Client instance to call back
- * @todo Didn't handle birthday
- */
- @Override
- public void doChangeOtherData (final Contact contact, final Client client) {
- // First display them again
- this.getClient().displayOtherDataBox(contact);
-
- // Is this own data?
- if (contact.isOwnContact()) {
- // Re-ask own data
- this.getClient().doChangeOwnOtherData(contact);
- } else {
- // Then re-ask them ...
- throw new UnsupportedOperationException("Changing contact entries not finished.");
- }
-
- // Flush whole list
- this.flush();
- }
-
- /**
- * Allows the user to change his/her own data
- */
- @Override
- public void doChangeOwnData () {
- /*
- * First check if the user has registered own contact, before that
- * nothing can be changed.
- */
- if (!this.isOwnContactAdded()) {
- // Not added
- this.getClient().outputMessage("Sie haben noch nicht Ihre Daten eingegeben.");
-
- // Skip any below code
- return;
- }
-
- // Instance
- Contact contact = this.getOwnContact();
-
- // It must be found
- assert(contact instanceof Contact);
-
- // Display contact
- contact.show(this.getClient());
-
- try {
- // Ask user what to change
- this.getClient().userChooseChangeContactData(contact);
- } catch (final UnhandledUserChoiceException ex) {
- this.getLogger().catching(ex);
- }
- }
-
- /**
- * Let the user delete other address
- */
- @Override
- public void doDeleteOtherAddress () {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- /**
- * Asks user for own data
- */
- @Override
- public void doEnterOwnData () {
- // Deligate this call to the client
- Contact contact = this.getClient().doEnterOwnData();
-
- // Add it to contact "book"
- this.registerContact(contact);
- }
-
- @Override
- public void doListContacts () {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void doSearchContacts () {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- /**
- * Shuts down this contact manager
- */
- @Override
- public void doShutdown () {
- // Shut down the database layer
- this.getContactDatabase().doShutdown();
- }
-
- /**
- * Asks the user for his/her cellphone number
- *
- * @return User's cellphone number
- */
- @Override
- public String enterOwnCellNumber () {
- return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Handynummer an: ", true);
- }
-
- /**
- * Asks the user for his/her city's name
- *
- * @return City's name of the user
- */
- @Override
- public String enterOwnCity () {
- return this.getClient().enterString(3, 50, "Bitte geben Sie Ihre Wohnort ein: ", false);
- }
-
- /**
- * Asks the user for his/her city's name
- *
- * @return City's name of the user
- */
- @Override
- public String enterOwnComment () {
- return this.getClient().enterString(0, 100, "Kommentar zu Ihrem Eintrag: ", true);
- }
-
- /**
- * Asks the user for his/her company name
- *
- * @return User's company name
- */
- @Override
- public String enterOwnCompanyName () {
- return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true);
- }
-
- /**
- * Asks user for his/her own country code
- *
- * @return User's own country code
- */
- @Override
- public String enterOwnCountryCode () {
- return this.getClient().enterString(2, 2, "Bitte geben Sie den zweistelligen Ländercode von Ihrem Land ein: ", false).toUpperCase();
- }
-
- /**
- * Asks user for his/her own country code
- *
- * @return User's own country code
- */
- @Override
- public String enterOwnEmailAddress () {
- return this.getClient().enterString(10, 50, "Bitte geben Sie Ihre Email-Adresse ein: ", true);
- }
-
- /**
- * Asks the user for family name
- *
- * @return Family name of the user
- */
- @Override
- public String enterOwnFamilyName () {
- return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false);
- }
-
- /**
- * Asks the user for family name
- *
- * @return Family name of the user
- */
- @Override
- public String enterOwnFaxNumber () {
- return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Faxnummer an: ", true);
- }
-
- /**
- * Asks the user for gender, until a valid has been entered
- *
- * @return Gender of the user
- */
- @Override
- public char enterOwnGender () {
- return this.getClient().enterChar(new char[] {'M', 'F', 'C'}, "Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): ");
- }
-
- /**
- * Asks the user for phone number
- *
- * @return Phone number of the user
- */
- @Override
- public String enterOwnPhoneNumber () {
- return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Telefonnummer an: ", true);
- }
-
- /**
- * Asks the user for own street (including number)
- * @return Own street an number
- */
- @Override
- public String enterOwnStreet () {
- return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Strasse und Hausnummer ein: ", false);
- }
-
- /**
- * Asks the user for surname
- * @return Surname of the user
- */
- @Override
- public String enterOwnSurname () {
- return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false);
- }
-
- /**
- * Asks the user for own ZIP code
- *
- * @return ZIP code
- */
- @Override
- public int enterOwnZipCode () {
- return this.getClient().enterInt(0, 99_999, "Bitte geben Sie Ihre Postleitzahl ein: ");
- }
-
- @Override
- public final int getColumnCount () {
- assert(this.columnNames instanceof List) : "this.columnNames is not initialized";
-
- return this.columnNames.size();
- }
-
- /**
- * Getter for column name at given index.
- *
- * @param columnIndex Column index
- * @return Human-readable column name
- */
- @Override
- public String getColumnName (final int columnIndex) {
- assert(this.columnNames instanceof List) : "this.columnNames is not initialized";
-
- // Get column name at index
- return this.columnNames.get(columnIndex);
- }
-
- /**
- * Getter for whole contact list
- *
- * @return List of all contacts
- */
- @Override
- public List<Contact> getList () {
- assert(this.contacts instanceof List) : "this.contacts is not initialized";
- return Collections.unmodifiableList(this.contacts);
- }
-
- /**
- * Checks whether own contact is already added by checking all entries for
- * isOwnContact flag
- *
- * @return Whether own contact is already added
- */
- @Override
- public boolean isOwnContactAdded () {
- // Trace message
- this.getLogger().trace("CALLED!");
-
- assert(this.contacts instanceof List) : "this.contacts is not initialized";
-
- // Default is not added
- boolean isAdded = false;
-
- // Now get it back from address book, first get an iterator
- Iterator<Contact> iterator = this.contacts.iterator();
-
- // Check entries
- while (iterator.hasNext()) {
- // Get next entry
- Contact contact = iterator.next();
-
- // Is it valid?
- if (contact instanceof Contact) {
- // Get flag
- isAdded = contact.isOwnContact();
-
- // Is this own contact?
- if (isAdded) {
- // Then abort loop
- break;
+ //* NOISY-DEBUG: */ this.getLogger().debug("client=" + client);
+ }
+
+ /**
+ * Adds given Contact instance to list
+ *
+ * @param contact Contact instance to add
+ */
+ @Override
+ public void addContact (final Contact contact) {
+ assert (this.contacts instanceof List) : "this.contacts is not initialized";
+
+ this.contacts.add(contact);
+ }
+
+ /**
+ * Let the user add a new other address
+ */
+ @Override
+ public void doAddOtherAddress () {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ /**
+ * Let the user change address data
+ *
+ * @param contact Instance to change data
+ * @param client Client instance to call back
+ */
+ @Override
+ public void doChangeAddressData (final Contact contact, final Client client) {
+ // First display it again
+ client.displayAddressBox(contact);
+
+ // Is it own data?
+ if (contact.isOwnContact()) {
+ // Deligate to client
+ this.getClient().doChangeOwnAddressData(contact);
+ } else {
+ // Other contact's address data to change
+ throw new UnsupportedOperationException("Changing contact entries not finished.");
+ }
+
+ // Flush whole list
+ this.flush();
+ }
+
+ /**
+ * Let the user change "name data"
+ *
+ * @param contact Instance to change data
+ * @param client Client instance to call back
+ */
+ @Override
+ public void doChangeNameData (final Contact contact, final Client client) {
+ // First display them again
+ client.displayNameBox(contact);
+
+ // Is this own data?
+ if (contact.isOwnContact()) {
+ // Re-ask own data
+ this.getClient().doChangeOwnNameData(contact);
+ } else {
+ // Then re-ask them ...
+ throw new UnsupportedOperationException("Changing contact entries not finished.");
+ }
+
+ // Flush whole list
+ this.flush();
+ }
+
+ /**
+ * Let the user change other address
+ */
+ @Override
+ public void doChangeOtherAddress () {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ /**
+ * Let the user change other data
+ *
+ * @param contact Instance to change data
+ * @param client Client instance to call back
+ * @todo Didn't handle birthday
+ */
+ @Override
+ public void doChangeOtherData (final Contact contact, final Client client) {
+ // First display them again
+ this.getClient().displayOtherDataBox(contact);
+
+ // Is this own data?
+ if (contact.isOwnContact()) {
+ // Re-ask own data
+ this.getClient().doChangeOwnOtherData(contact);
+ } else {
+ // Then re-ask them ...
+ throw new UnsupportedOperationException("Changing contact entries not finished.");
+ }
+
+ // Flush whole list
+ this.flush();
+ }
+
+ /**
+ * Allows the user to change his/her own data
+ */
+ @Override
+ public void doChangeOwnData () {
+ /*
+ * First check if the user has registered own contact, before that
+ * nothing can be changed.
+ */
+ if (!this.isOwnContactAdded()) {
+ // Not added
+ this.getClient().outputMessage("Sie haben noch nicht Ihre Daten eingegeben.");
+
+ // Skip any below code
+ return;
+ }
+
+ // Instance
+ Contact contact = this.getOwnContact();
+
+ // It must be found
+ assert (contact instanceof Contact);
+
+ // Display contact
+ contact.show(this.getClient());
+
+ try {
+ // Ask user what to change
+ this.getClient().userChooseChangeContactData(contact);
+ } catch (final UnhandledUserChoiceException ex) {
+ this.getLogger().catching(ex);
+ }
+ }
+
+ /**
+ * Let the user delete other address
+ */
+ @Override
+ public void doDeleteOtherAddress () {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ /**
+ * Asks user for own data
+ */
+ @Override
+ public void doEnterOwnData () {
+ // Deligate this call to the client
+ Contact contact = this.getClient().doEnterOwnData();
+
+ // Add it to contact "book"
+ this.registerContact(contact);
+ }
+
+ @Override
+ public void doListContacts () {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void doSearchContacts () {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ /**
+ * Shuts down this contact manager
+ */
+ @Override
+ public void doShutdown () {
+ // Shut down the database layer
+ this.getContactDatabase().doShutdown();
+ }
+
+ /**
+ * Asks the user for his/her cellphone number
+ *
+ * @return User's cellphone number
+ */
+ @Override
+ public String enterOwnCellNumber () {
+ return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Handynummer an: ", true);
+ }
+
+ /**
+ * Asks the user for his/her city's name
+ *
+ * @return City's name of the user
+ */
+ @Override
+ public String enterOwnCity () {
+ return this.getClient().enterString(3, 50, "Bitte geben Sie Ihre Wohnort ein: ", false);
+ }
+
+ /**
+ * Asks the user for his/her city's name
+ *
+ * @return City's name of the user
+ */
+ @Override
+ public String enterOwnComment () {
+ return this.getClient().enterString(0, 100, "Kommentar zu Ihrem Eintrag: ", true);
+ }
+
+ /**
+ * Asks the user for his/her company name
+ *
+ * @return User's company name
+ */
+ @Override
+ public String enterOwnCompanyName () {
+ return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true);
+ }
+
+ /**
+ * Asks user for his/her own country code
+ *
+ * @return User's own country code
+ */
+ @Override
+ public String enterOwnCountryCode () {
+ return this.getClient().enterString(2, 2, "Bitte geben Sie den zweistelligen Ländercode von Ihrem Land ein: ", false).toUpperCase();
+ }
+
+ /**
+ * Asks user for his/her own country code
+ *
+ * @return User's own country code
+ */
+ @Override
+ public String enterOwnEmailAddress () {
+ return this.getClient().enterString(10, 50, "Bitte geben Sie Ihre Email-Adresse ein: ", true);
+ }
+
+ /**
+ * Asks the user for family name
+ *
+ * @return Family name of the user
+ */
+ @Override
+ public String enterOwnFamilyName () {
+ return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false);
+ }
+
+ /**
+ * Asks the user for family name
+ *
+ * @return Family name of the user
+ */
+ @Override
+ public String enterOwnFaxNumber () {
+ return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Faxnummer an: ", true);
+ }
+
+ /**
+ * Asks the user for gender, until a valid has been entered
+ *
+ * @return Gender of the user
+ */
+ @Override
+ public char enterOwnGender () {
+ return this.getClient().enterChar(new char[] {'M', 'F', 'C'}, "Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): ");
+ }
+
+ /**
+ * Asks the user for phone number
+ *
+ * @return Phone number of the user
+ */
+ @Override
+ public String enterOwnPhoneNumber () {
+ return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Telefonnummer an: ", true);
+ }
+
+ /**
+ * Asks the user for own street (including number)
+ *
+ * @return Own street an number
+ */
+ @Override
+ public String enterOwnStreet () {
+ return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Strasse und Hausnummer ein: ", false);
+ }
+
+ /**
+ * Asks the user for surname
+ *
+ * @return Surname of the user
+ */
+ @Override
+ public String enterOwnSurname () {
+ return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false);
+ }
+
+ /**
+ * Asks the user for own ZIP code
+ *
+ * @return ZIP code
+ */
+ @Override
+ public int enterOwnZipCode () {
+ return this.getClient().enterInt(0, 99_999, "Bitte geben Sie Ihre Postleitzahl ein: ");
+ }
+
+ @Override
+ public final int getColumnCount () {
+ assert (this.columnNames instanceof List) : "this.columnNames is not initialized";
+
+ return this.columnNames.size();
+ }
+
+ /**
+ * Getter for column name at given index.
+ *
+ * @param columnIndex Column index
+ * @return Human-readable column name
+ */
+ @Override
+ public String getColumnName (final int columnIndex) {
+ assert (this.columnNames instanceof List) : "this.columnNames is not initialized";
+
+ // Get column name at index
+ return this.columnNames.get(columnIndex);
+ }
+
+ /**
+ * Getter for whole contact list
+ *
+ * @return List of all contacts
+ */
+ @Override
+ public List<Contact> getList () {
+ assert (this.contacts instanceof List) : "this.contacts is not initialized";
+ return Collections.unmodifiableList(this.contacts);
+ }
+
+ /**
+ * Checks whether own contact is already added by checking all entries for
+ * isOwnContact flag
+ *
+ * @return Whether own contact is already added
+ */
+ @Override
+ public boolean isOwnContactAdded () {
+ // Trace message
+ this.getLogger().trace("CALLED!");
+
+ assert (this.contacts instanceof List) : "this.contacts is not initialized";
+
+ // Default is not added
+ boolean isAdded = false;
+
+ // Now get it back from address book, first get an iterator
+ Iterator<Contact> iterator = this.contacts.iterator();
+
+ // Check entries
+ while (iterator.hasNext()) {
+ // Get next entry
+ Contact contact = iterator.next();
+
+ // Is it valid?
+ if (contact instanceof Contact) {
+ // Get flag
+ isAdded = contact.isOwnContact();
+
+ // Is this own contact?
+ if (isAdded) {
+ // Then abort loop
+ break;
+ }
+ }
}
- }
- }
-
- // Trace message
- this.getLogger().trace(MessageFormat.format("isAdded={0} : EXIT!", isAdded));
-
- // Return result
- return isAdded;
- }
-
- /**
- * Adds given contact to address book and flushes all entries to database
- *
- * @param contact Contact being added
- * @todo Add check for book size
- */
- @Override
- public void registerContact (final Contact contact) {
- // Check if contact is found
- if (this.isContactAlreadyAdded(contact)) {
+
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("isAdded={0} : EXIT!", isAdded));
+
+ // Return result
+ return isAdded;
+ }
+
+ /**
+ * Adds given contact to address book and flushes all entries to database
+ *
+ * @param contact Contact being added
+ * @todo Add check for book size
+ */
+ @Override
+ public void registerContact (final Contact contact) {
+ // Check if contact is found
+ if (this.isContactAlreadyAdded(contact)) {
// Contact already added
- // @todo Do something here
- } else if ((contact.isOwnContact()) && (this.isOwnContactAdded())) {
+ // @todo Do something here
+ } else if ((contact.isOwnContact()) && (this.isOwnContactAdded())) {
// Own contact already added
- // @todo Do something
- }
-
- // Debug message
- /* NOISY-DEBUG: */ this.getLogger().debug(MessageFormat.format("Adding '{0}' '{1}' at pos '{2}' ...", contact.getSurname(), contact.getFamilyName(), this.size()));
-
- // Add contact to internal list
- this.addContact(contact);
-
- // Flush whole list
- this.flush();
- }
-
- /**
- * Getter for size
- *
- * @return size of contact "book"
- */
- @Override
- public final int size () {
- assert(this.contacts instanceof List) : "this.contacts is not initialized";
- return this.contacts.size();
- }
-
- /**
- * Fills the column names array with strings from bundle
- */
- private void fillColumnNamesFromBundle () {
- assert(this.columnNames instanceof List) : "this.columnNames is not initialized";
+ // @todo Do something
+ }
// Debug message
- this.getLogger().trace("CALLED!");
+ /*
+ * NOISY-DEBUG:
+ */ this.getLogger().debug(MessageFormat.format("Adding '{0}' '{1}' at pos '{2}' ...", contact.getSurname(), contact.getFamilyName(), this.size()));
+
+ // Add contact to internal list
+ this.addContact(contact);
+
+ // Flush whole list
+ this.flush();
+ }
+
+ /**
+ * Getter for size
+ *
+ * @return size of contact "book"
+ */
+ @Override
+ public final int size () {
+ assert (this.contacts instanceof List) : "this.contacts is not initialized";
+ return this.contacts.size();
+ }
+
+ /**
+ * Fills the column names array with strings from bundle
+ */
+ private void fillColumnNamesFromBundle () {
+ assert (this.columnNames instanceof List) : "this.columnNames is not initialized";
+
+ // Debug message
+ this.getLogger().trace("CALLED!");
- // First get an iterator from key set to iterate over
- Iterator<String> iterator = this.getBundle().keySet().iterator();
+ // First get an iterator from key set to iterate over
+ Iterator<String> iterator = this.getBundle().keySet().iterator();
- // Then iterate over all
- while (iterator.hasNext()) {
- // Get next element
- String key = iterator.next();
+ // Then iterate over all
+ while (iterator.hasNext()) {
+ // Get next element
+ String key = iterator.next();
- // Does the key start with ContactManager.columnName ?
- if (key.startsWith("ContactManager.columnName")) {
- // This is the wanted entry.
- this.getLogger().debug(MessageFormat.format("key={0}", key));
+ // Does the key start with ContactManager.columnName ?
+ if (key.startsWith("ContactManager.columnName")) {
+ // This is the wanted entry.
+ this.getLogger().debug(MessageFormat.format("key={0}", key));
- // So add it
- this.columnNames.add(this.getBundle().getString(key));
- }
+ // So add it
+ this.columnNames.add(this.getBundle().getString(key));
+ }
+ }
+
+ // Debug message
+ this.getLogger().trace(MessageFormat.format("getColumnCount()={0}: EXIT!", this.getColumnCount()));
}
- // Debug message
- this.getLogger().trace(MessageFormat.format("getColumnCount()={0}: EXIT!", this.getColumnCount()));
- }
-
- /**
- * Flushes all entries by calling database backend
- */
- private void flush () {
- // Flusgh all
- this.getContactDatabase().flushAllContacts();
- }
-
- /**
- * A ContactWrapper instance
- *
- * @return the database
- */
- private ContactWrapper getContactDatabase () {
- return this.contactDatabase;
- }
-
- /**
- * "Getter" for own contact instance or null if not found
- *
- * @return Contact instance or null
- */
- private Contact getOwnContact () {
- assert(this.contacts instanceof List) : "this.contacts is not initialized";
-
- // Now get it back from address book, first get an iterator
- Iterator<Contact> iterator = this.contacts.iterator();
-
- // Init instance
- Contact contact = null;
-
- // Search all contact
- while (iterator.hasNext()) {
- // Get next instance
- Contact next = iterator.next();
-
- // Is this own contact?
- if (next.isOwnContact()) {
- // Found it
- contact = next;
- break;
-
- }
- }
-
- // Return instance or null
- return contact;
- }
-
- /**
- * Checks whether given contact was found in "address book"
- *
- * @param checkContact Contact to be checked
- * @return TRUE if found, FALSE if not found
- */
- private boolean isContactAlreadyAdded (final Contact checkContact) throws NullPointerException {
- assert(this.contacts instanceof List) : "this.contacts is not initialized";
-
- // Default is not found
- boolean isFound = false;
+ /**
+ * Flushes all entries by calling database backend
+ */
+ private void flush () {
+ // Flusgh all
+ this.getContactDatabase().flushAllContacts();
+ }
- // Debug message
- //* NOISY-DEBUG: */ this.getLogger().debug("Checking '" + this.contacts.length + "' entries...");
+ /**
+ * A ContactWrapper instance
+ *
+ * @return the database
+ */
+ private ContactWrapper getContactDatabase () {
+ return this.contactDatabase;
+ }
- // Now get it back from address book, first get an iterator
- Iterator<Contact> iterator = this.contacts.iterator();
+ /**
+ * "Getter" for own contact instance or null if not found
+ *
+ * @return Contact instance or null
+ */
+ private Contact getOwnContact () {
+ assert (this.contacts instanceof List) : "this.contacts is not initialized";
- // Check entries
- while (iterator.hasNext()) {
- // Get next entry
- Contact contact = iterator.next();
+ // Now get it back from address book, first get an iterator
+ Iterator<Contact> iterator = this.contacts.iterator();
- // Debug message
- //* NOISY-DEBUG: */ this.getLogger().debug("contact=" + contact + ",checkContent=" + checkContact);
+ // Init instance
+ Contact contact = null;
- // Is it valid?
- if ((contact instanceof Contact) && ((contact.equals(checkContact)))) {
- // Found matching entry
- isFound = true;
- break;
- }
+ // Search all contact
+ while (iterator.hasNext()) {
+ // Get next instance
+ Contact next = iterator.next();
+
+ // Is this own contact?
+ if (next.isOwnContact()) {
+ // Found it
+ contact = next;
+ break;
+
+ }
+ }
+
+ // Return instance or null
+ return contact;
}
- // Return result
- return isFound;
- }
+ /**
+ * Checks whether given contact was found in "address book"
+ *
+ * @param checkContact Contact to be checked
+ * @return TRUE if found, FALSE if not found
+ */
+ private boolean isContactAlreadyAdded (final Contact checkContact) throws NullPointerException {
+ assert (this.contacts instanceof List) : "this.contacts is not initialized";
+
+ // Default is not found
+ boolean isFound = false;
+
+ // Debug message
+ //* NOISY-DEBUG: */ this.getLogger().debug("Checking '" + this.contacts.length + "' entries...");
+ // Now get it back from address book, first get an iterator
+ Iterator<Contact> iterator = this.contacts.iterator();
+
+ // Check entries
+ while (iterator.hasNext()) {
+ // Get next entry
+ Contact contact = iterator.next();
+
+ // Debug message
+ //* NOISY-DEBUG: */ this.getLogger().debug("contact=" + contact + ",checkContent=" + checkContact);
+ // Is it valid?
+ if ((contact instanceof Contact) && ((contact.equals(checkContact)))) {
+ // Found matching entry
+ isFound = true;
+ break;
+ }
+ }
+
+ // Return result
+ return isFound;
+ }
}
*/
public interface ManageableContact extends Manageable {
- /**
- * Shuts down this contact manager
- */
- public void doShutdown ();
-
- /**
- * Allows the user to enter own cellphone number.
- *
- * @return Cellphone number
- */
- public String enterOwnCellNumber ();
-
- /**
- * Allows the user to enter own city name.
- *
- * @return City name
- */
- public String enterOwnCity ();
-
- /**
- * Allows the user to enter comment for own entry.
- *
- * @return Comment
- */
- public String enterOwnComment ();
-
- /**
- * Allows the user to enter own company name.
- *
- * @return Company name
- */
- public String enterOwnCompanyName ();
-
- /**
- * Allows the user to enter own country code.
- *
- * @return Country code
- */
- public String enterOwnCountryCode ();
-
- /**
- * Allows the user to enter own email address.
- *
- * @return Email address
- */
- public String enterOwnEmailAddress ();
-
- /**
- * Allows the user to enter own family name.
- *
- * @return Family name
- */
- public String enterOwnFamilyName ();
-
- /**
- * Allows the user to enter own fax number.
- *
- * @return Fax number
- */
- public String enterOwnFaxNumber ();
-
- /**
- * Allows the user to enter own gender.
- *
- * @return Gender
- */
- public char enterOwnGender ();
-
- /**
- * Allows the user to enter own phone number.
- *
- * @return Phone number
- */
- public String enterOwnPhoneNumber ();
-
- /**
- * Allows the user to enter own street and house number.
- *
- * @return Street and house number
- */
- public String enterOwnStreet ();
-
- /**
- * Allows the user to enter own surname.
- *
- * @return Surname
- */
- public String enterOwnSurname ();
-
- /**
- * Allows the user to enter own ZIP code.
- *
- * @return ZIP code
- */
- public int enterOwnZipCode ();
-
- /**
- * Getter for column count
- *
- * @return Column count
- */
- public int getColumnCount ();
-
- /**
- * List all contacts
- */
- public void doListContacts ();
-
- /**
- * Getter for column name at given index.
- *
- * @param columnIndex Column index
- * @return Human-readable column name
- */
- public String getColumnName (final int columnIndex);
-
- /**
- * Adds given contact to address book
- *
- * @param contact Contact being added
- * @todo Add check for book size
- */
- public void registerContact (final Contact contact);
-
- /**
- * Adds given Contact instance to list
- *
- * @param contact Contact instance to add
- */
- public void addContact (final Contact contact);
-
- /**
- * Let the user add a new other address
- */
- public void doAddOtherAddress();
-
- /**
- * The user can change address data, like street, ZIP code, city and country
- * of given Contact instance.
- *
- * @param contact Instance to change data
- * @param client Client instance to call back
- */
- public void doChangeAddressData (final Contact contact, final Client client);
-
- /**
- * The user can change name data, like gender, surname, family name and
- * company name (if business contact).
- *
- * @param contact Instance to change data
- * @param client Client instance to call back
- */
- public void doChangeNameData (final Contact contact, final Client client);
-
- /**
- * Let the user change other address
- */
- public void doChangeOtherAddress();
-
- /**
- * The user can change other data, like phone numbers or comments.
- *
- * @param contact Instance to change data
- * @param client Client instance to call back
- */
- public void doChangeOtherData (final Contact contact, final Client client);
-
- /**
- * Let the user change own data
- */
- public void doChangeOwnData();
-
- /**
- * Let the user delete other address
- */
- public void doDeleteOtherAddress();
-
- /**
- * Asks user for own data
- */
- public void doEnterOwnData();
-
- /**
- * Getter for whole list
- * @return List of all contacts
- */
- public List<Contact> getList ();
-
- /**
- * Searches address book for a contact
- */
- public void doSearchContacts ();
-
- /**
- * Checks whether own contact is already added by checking all entries for
- * isOwnContact flag
- *
- * @return Whether own contact is already added
- */
- public boolean isOwnContactAdded ();
-
- /**
- * Getter for size
- *
- * @return size of contact "book"
- */
- public int size();
+ /**
+ * Shuts down this contact manager
+ */
+ public void doShutdown ();
+
+ /**
+ * Allows the user to enter own cellphone number.
+ *
+ * @return Cellphone number
+ */
+ public String enterOwnCellNumber ();
+
+ /**
+ * Allows the user to enter own city name.
+ *
+ * @return City name
+ */
+ public String enterOwnCity ();
+
+ /**
+ * Allows the user to enter comment for own entry.
+ *
+ * @return Comment
+ */
+ public String enterOwnComment ();
+
+ /**
+ * Allows the user to enter own company name.
+ *
+ * @return Company name
+ */
+ public String enterOwnCompanyName ();
+
+ /**
+ * Allows the user to enter own country code.
+ *
+ * @return Country code
+ */
+ public String enterOwnCountryCode ();
+
+ /**
+ * Allows the user to enter own email address.
+ *
+ * @return Email address
+ */
+ public String enterOwnEmailAddress ();
+
+ /**
+ * Allows the user to enter own family name.
+ *
+ * @return Family name
+ */
+ public String enterOwnFamilyName ();
+
+ /**
+ * Allows the user to enter own fax number.
+ *
+ * @return Fax number
+ */
+ public String enterOwnFaxNumber ();
+
+ /**
+ * Allows the user to enter own gender.
+ *
+ * @return Gender
+ */
+ public char enterOwnGender ();
+
+ /**
+ * Allows the user to enter own phone number.
+ *
+ * @return Phone number
+ */
+ public String enterOwnPhoneNumber ();
+
+ /**
+ * Allows the user to enter own street and house number.
+ *
+ * @return Street and house number
+ */
+ public String enterOwnStreet ();
+
+ /**
+ * Allows the user to enter own surname.
+ *
+ * @return Surname
+ */
+ public String enterOwnSurname ();
+
+ /**
+ * Allows the user to enter own ZIP code.
+ *
+ * @return ZIP code
+ */
+ public int enterOwnZipCode ();
+
+ /**
+ * Getter for column count
+ *
+ * @return Column count
+ */
+ public int getColumnCount ();
+
+ /**
+ * List all contacts
+ */
+ public void doListContacts ();
+
+ /**
+ * Getter for column name at given index.
+ *
+ * @param columnIndex Column index
+ * @return Human-readable column name
+ */
+ public String getColumnName (final int columnIndex);
+
+ /**
+ * Adds given contact to address book
+ *
+ * @param contact Contact being added
+ * @todo Add check for book size
+ */
+ public void registerContact (final Contact contact);
+
+ /**
+ * Adds given Contact instance to list
+ *
+ * @param contact Contact instance to add
+ */
+ public void addContact (final Contact contact);
+
+ /**
+ * Let the user add a new other address
+ */
+ public void doAddOtherAddress ();
+
+ /**
+ * The user can change address data, like street, ZIP code, city and country
+ * of given Contact instance.
+ *
+ * @param contact Instance to change data
+ * @param client Client instance to call back
+ */
+ public void doChangeAddressData (final Contact contact, final Client client);
+
+ /**
+ * The user can change name data, like gender, surname, family name and
+ * company name (if business contact).
+ *
+ * @param contact Instance to change data
+ * @param client Client instance to call back
+ */
+ public void doChangeNameData (final Contact contact, final Client client);
+
+ /**
+ * Let the user change other address
+ */
+ public void doChangeOtherAddress ();
+
+ /**
+ * The user can change other data, like phone numbers or comments.
+ *
+ * @param contact Instance to change data
+ * @param client Client instance to call back
+ */
+ public void doChangeOtherData (final Contact contact, final Client client);
+
+ /**
+ * Let the user change own data
+ */
+ public void doChangeOwnData ();
+
+ /**
+ * Let the user delete other address
+ */
+ public void doDeleteOtherAddress ();
+
+ /**
+ * Asks user for own data
+ */
+ public void doEnterOwnData ();
+
+ /**
+ * Getter for whole list
+ *
+ * @return List of all contacts
+ */
+ public List<Contact> getList ();
+
+ /**
+ * Searches address book for a contact
+ */
+ public void doSearchContacts ();
+
+ /**
+ * Checks whether own contact is already added by checking all entries for
+ * isOwnContact flag
+ *
+ * @return Whether own contact is already added
+ */
+ public boolean isOwnContactAdded ();
+
+ /**
+ * Getter for size
+ *
+ * @return size of contact "book"
+ */
+ public int size ();
}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.menu;\r
-\r
-import java.util.List;\r
-import org.apache.logging.log4j.Logger;\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-import org.mxchange.addressbook.client.Client;\r
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;\r
-\r
-/**\r
- * Utility class for menu structure\r
- * \r
- * @author Roland Haeder\r
- */\r
-public class AddressbookMenu extends BaseFrameworkSystem {\r
- /**\r
- * Copies entries for given type into the menu list\r
- *\r
- * @param menuList Menu list for later showing\r
- * @param menuType Type of menu\r
- * @param client Client instance to call back\r
- */\r
- public static void addItemsToList (final List<SelectableMenuItem> menuList, final String menuType, final Client client) {\r
- // Get logger\r
- Logger log = new AddressbookMenu().getLogger();\r
-\r
- // Get list size\r
- int size = menuList.size();\r
-\r
- // Debug message\r
- log.debug("Adding menu for '" + menuType + "' (old size: '" + size + "') ...");\r
-\r
- // Depends on type\r
- switch (menuType) {\r
- case "main": // Main menu\r
- // Enter own data\r
- menuList.add(client.getMenuItem('1', "Eigene Adresse anlegen"));\r
-\r
- // Change own data\r
- menuList.add(client.getMenuItem('2', "Eigene Adresse ändern"));\r
-\r
- // Add new addess\r
- menuList.add(client.getMenuItem('3', "Neue Adresse hinzufügen"));\r
-\r
- // List entries\r
- menuList.add(client.getMenuItem('4', "Adressbuch anzeigen"));\r
-\r
- // Address search\r
- menuList.add(client.getMenuItem('5', "Adresse suchen"));\r
-\r
- // Change other address\r
- menuList.add(client.getMenuItem('6', "Adresse ändern"));\r
-\r
- // Delete other address\r
- menuList.add(client.getMenuItem('7', "Adresse löschen"));\r
-\r
- // Always last line: Exit program\r
- menuList.add(client.getMenuItem('0', "Programm verlassen"));\r
- break;\r
-\r
- default: // Not supported\r
- log.error("Menu type '" + menuType + "' ont supported");\r
- System.exit(1);\r
- }\r
-\r
- // Size must have changed to more entries than before\r
- assert(menuList.size() > size);\r
- }\r
-\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.menu;
+
+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.menu.item.SelectableMenuItem;
+
+/**
+ * Utility class for menu structure
+ *
+ * @author Roland Haeder
+ */
+public class AddressbookMenu extends BaseFrameworkSystem {
+
+ /**
+ * Copies entries for given type into the menu list
+ *
+ * @param menuList Menu list for later showing
+ * @param menuType Type of menu
+ * @param client Client instance to call back
+ */
+ public static void addItemsToList (final List<SelectableMenuItem> menuList, final String menuType, final Client client) {
+ // Get logger
+ Logger log = new AddressbookMenu().getLogger();
+
+ // Get list size
+ int size = menuList.size();
+
+ // Debug message
+ log.debug("Adding menu for '" + menuType + "' (old size: '" + size + "') ...");
+
+ // Depends on type
+ switch (menuType) {
+ case "main": // Main menu
+ // Enter own data
+ menuList.add(client.getMenuItem('1', "Eigene Adresse anlegen"));
+
+ // Change own data
+ menuList.add(client.getMenuItem('2', "Eigene Adresse ändern"));
+
+ // Add new addess
+ menuList.add(client.getMenuItem('3', "Neue Adresse hinzufügen"));
+
+ // List entries
+ menuList.add(client.getMenuItem('4', "Adressbuch anzeigen"));
+
+ // Address search
+ menuList.add(client.getMenuItem('5', "Adresse suchen"));
+
+ // Change other address
+ menuList.add(client.getMenuItem('6', "Adresse ändern"));
+
+ // Delete other address
+ menuList.add(client.getMenuItem('7', "Adresse löschen"));
+
+ // Always last line: Exit program
+ menuList.add(client.getMenuItem('0', "Programm verlassen"));
+ break;
+
+ default: // Not supported
+ log.error("Menu type '" + menuType + "' ont supported");
+ System.exit(1);
+ }
+
+ // Size must have changed to more entries than before
+ assert (menuList.size() > size);
+ }
+
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.menu;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-import org.mxchange.addressbook.client.Client;\r
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class BaseMenu extends BaseFrameworkSystem {\r
- /**\r
- * Menu list\r
- */\r
- private List<SelectableMenuItem> menuList;\r
-\r
- /**\r
- * No instance from this object\r
- */\r
- protected BaseMenu () {\r
- super();\r
- }\r
-\r
- /**\r
- * Size of menu items\r
- * @return Count of menu items\r
- */\r
- public int getMenuItemsCount () {\r
- return this.menuList.size();\r
- }\r
-\r
- /**\r
- * "Getter" for an iterator of this menu's items\r
- *\r
- * @return An iterator of all menu items\r
- */\r
- public Iterator<SelectableMenuItem> getMenuItemsIterator () {\r
- return this.menuList.iterator();\r
- }\r
-\r
- /**\r
- * Shows this menu\r
- * \r
- * @param client Client instance to call back\r
- */\r
- public void show (final Client client) {\r
- // Get values\r
- Iterator<SelectableMenuItem> iterator = this.menuList.iterator();\r
-\r
- // Debug message\r
- this.getLogger().debug("Showing menu with '" + this.menuList.size() + "' entries.");\r
-\r
- // Output all menus\r
- while (iterator.hasNext()) {\r
- // Get item\r
- SelectableMenuItem item = iterator.next();\r
-\r
- // Show this item\r
- item.show(client);\r
- }\r
- }\r
-\r
- /**\r
- * Getter for menu list\r
- *\r
- * @return menuList List of menu entries\r
- */\r
- protected final List<SelectableMenuItem> getMenuList () {\r
- return this.menuList;\r
- }\r
-\r
- /**\r
- * Initializes menu\r
- * @param menuType Menu type to initialize\r
- * @param client CLient to call back\r
- */\r
- protected void initMenu (final String menuType, final Client client) {\r
- // Init menu list\r
- this.menuList = new ArrayList<>(5);\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.menu;
+
+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.menu.item.SelectableMenuItem;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public class BaseMenu extends BaseFrameworkSystem {
+
+ /**
+ * Menu list
+ */
+ private List<SelectableMenuItem> menuList;
+
+ /**
+ * No instance from this object
+ */
+ protected BaseMenu () {
+ super();
+ }
+
+ /**
+ * Size of menu items
+ *
+ * @return Count of menu items
+ */
+ public int getMenuItemsCount () {
+ return this.menuList.size();
+ }
+
+ /**
+ * "Getter" for an iterator of this menu's items
+ *
+ * @return An iterator of all menu items
+ */
+ public Iterator<SelectableMenuItem> getMenuItemsIterator () {
+ return this.menuList.iterator();
+ }
+
+ /**
+ * Shows this menu
+ *
+ * @param client Client instance to call back
+ */
+ public void show (final Client client) {
+ // Get values
+ Iterator<SelectableMenuItem> iterator = this.menuList.iterator();
+
+ // Debug message
+ this.getLogger().debug("Showing menu with '" + this.menuList.size() + "' entries.");
+
+ // Output all menus
+ while (iterator.hasNext()) {
+ // Get item
+ SelectableMenuItem item = iterator.next();
+
+ // Show this item
+ item.show(client);
+ }
+ }
+
+ /**
+ * Getter for menu list
+ *
+ * @return menuList List of menu entries
+ */
+ protected final List<SelectableMenuItem> getMenuList () {
+ return this.menuList;
+ }
+
+ /**
+ * Initializes menu
+ *
+ * @param menuType Menu type to initialize
+ * @param client CLient to call back
+ */
+ protected void initMenu (final String menuType, final Client client) {
+ // Init menu list
+ this.menuList = new ArrayList<>(5);
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.menu;\r
-\r
-import java.util.Iterator;\r
-import org.mxchange.addressbook.client.Client;\r
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- * @todo find better name\r
- */\r
-public interface Menu {\r
-\r
- /**\r
- * "Getter" for an iterator on all menu items of the current menu\r
- * @return Iterator on all menu items\r
- */\r
- public Iterator<SelectableMenuItem> getMenuItemsIterator();\r
-\r
- /**\r
- * Shows this menu\r
- * @param client Client instance\r
- */\r
- public void show (final Client client);\r
-\r
- /**\r
- * Size of all menu items\r
- * @return \r
- */\r
- public int getMenuItemsCount();\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.menu;
+
+import java.util.Iterator;
+import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.menu.item.SelectableMenuItem;
+
+/**
+ *
+ * @author Roland Haeder
+ * @todo find better name
+ */
+public interface Menu {
+
+ /**
+ * "Getter" for an iterator on all menu items of the current menu
+ *
+ * @return Iterator on all menu items
+ */
+ public Iterator<SelectableMenuItem> getMenuItemsIterator ();
+
+ /**
+ * Shows this menu
+ *
+ * @param client Client instance
+ */
+ public void show (final Client client);
+
+ /**
+ * Size of all menu items
+ *
+ * @return
+ */
+ public int getMenuItemsCount ();
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.menu;\r
-\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-import org.apache.logging.log4j.Logger;\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class MenuTools extends BaseFrameworkSystem {\r
-\r
- /**\r
- * Gets an array with all available access keys back from given menu map.\r
- * This can later be handle to the client's enterChar() method.\r
- *\r
- * @param menus A Map with all menus and their entries\r
- * @param menuType Menu type\r
- * @return An array with available access chars\r
- */\r
- public static char[] getAccessKeysFromMenuMap (final Map<String, Menu> menus, final String menuType) {\r
- // Get logger\r
- Logger logger = new MenuTools().getLogger();\r
-\r
- // First search for the proper menu class\r
- Menu menu = menus.get(menuType);\r
-\r
- // Is it there?\r
- if (!(menu instanceof Menu)) {\r
- // Not found\r
- // @todo Rewrite to exception\r
- logger.error("Menu '" + menuType + "' not found.");\r
- System.exit(1);\r
- }\r
-\r
- // Get iterator\r
- Iterator<SelectableMenuItem> iterator = menu.getMenuItemsIterator();\r
-\r
- // Init return array and counter 'i'\r
- char[] accessKeys = new char[menu.getMenuItemsCount()];\r
- int i = 0;\r
-\r
- // Now "walk" through all menu entries\r
- while (iterator.hasNext()) {\r
- // Get item\r
- SelectableMenuItem item = iterator.next();\r
- //* NOISY-DEBUG: */ logger.debug("item=" + item);\r
-\r
- // Get access key from item and add it to the array\r
- accessKeys[i] = item.getAccessKey();\r
- //* NOISY-DEBUG: */ logger.debug("accessKeys[" + i + "]=" + accessKeys[i]);\r
-\r
- // Increment counter\r
- i++;\r
- }\r
-\r
- // Return finished array\r
- return accessKeys;\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+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.menu.item.SelectableMenuItem;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public class MenuTools extends BaseFrameworkSystem {
+
+ /**
+ * Gets an array with all available access keys back from given menu map.
+ * This can later be handle to the client's enterChar() method.
+ *
+ * @param menus A Map with all menus and their entries
+ * @param menuType Menu type
+ * @return An array with available access chars
+ */
+ public static char[] getAccessKeysFromMenuMap (final Map<String, Menu> menus, final String menuType) {
+ // Get logger
+ Logger logger = new MenuTools().getLogger();
+
+ // First search for the proper menu class
+ Menu menu = menus.get(menuType);
+
+ // Is it there?
+ if (!(menu instanceof Menu)) {
+ // Not found
+ // @todo Rewrite to exception
+ logger.error("Menu '" + menuType + "' not found.");
+ System.exit(1);
+ }
+
+ // Get iterator
+ Iterator<SelectableMenuItem> iterator = menu.getMenuItemsIterator();
+
+ // Init return array and counter 'i'
+ char[] accessKeys = new char[menu.getMenuItemsCount()];
+ int i = 0;
+
+ // Now "walk" through all menu entries
+ while (iterator.hasNext()) {
+ // Get item
+ SelectableMenuItem item = iterator.next();
+ //* NOISY-DEBUG: */ logger.debug("item=" + item);
+
+ // Get access key from item and add it to the array
+ accessKeys[i] = item.getAccessKey();
+ //* NOISY-DEBUG: */ logger.debug("accessKeys[" + i + "]=" + accessKeys[i]);
+
+ // Increment counter
+ i++;
+ }
+
+ // Return finished array
+ return accessKeys;
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.menu.console;\r
-\r
-import org.mxchange.addressbook.client.Client;\r
-import org.mxchange.addressbook.menu.AddressbookMenu;\r
-import org.mxchange.addressbook.menu.BaseMenu;\r
-import org.mxchange.addressbook.menu.Menu;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class ConsoleMenu extends BaseMenu implements Menu {\r
- /**\r
- * Constructor for this menu\r
- * @param menuType Menu type to initialize\r
- * @param client CLient to call back\r
- */\r
- public ConsoleMenu (final String menuType, final Client client) {\r
- this.initMenu(menuType, client);\r
- \r
- // Add all items\r
- AddressbookMenu.addItemsToList(this.getMenuList(), menuType, client);\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.menu.console;
+
+import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.menu.AddressbookMenu;
+import org.mxchange.addressbook.menu.BaseMenu;
+import org.mxchange.addressbook.menu.Menu;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public class ConsoleMenu extends BaseMenu implements Menu {
+
+ /**
+ * Constructor for this menu
+ *
+ * @param menuType Menu type to initialize
+ * @param client CLient to call back
+ */
+ public ConsoleMenu (final String menuType, final Client client) {
+ this.initMenu(menuType, client);
+
+ // Add all items
+ AddressbookMenu.addItemsToList(this.getMenuList(), menuType, client);
+ }
+}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.menu.item;\r
-\r
-import org.mxchange.addressbook.client.Client;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public interface SelectableMenuItem {\r
-\r
- /**\r
- * Shows this menu item\r
- * @param client Client instance\r
- */\r
- public void show (final Client client);\r
-\r
- /**\r
- * Access key\r
- * @return the accessKey\r
- */\r
- public char getAccessKey();\r
-\r
- /**\r
- * Text to user\r
- * @return the text\r
- */\r
- public String getText();\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.menu.item;
+
+import org.mxchange.addressbook.client.Client;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public interface SelectableMenuItem {
+
+ /**
+ * Shows this menu item
+ *
+ * @param client Client instance
+ */
+ public void show (final Client client);
+
+ /**
+ * Access key
+ *
+ * @return the accessKey
+ */
+ public char getAccessKey ();
+
+ /**
+ * Text to user
+ *
+ * @return the text
+ */
+ public String getText ();
+}
* @author Roland Haeder
*/
public class ConsoleMenuItem extends BaseMenuItem implements SelectableMenuItem {
- /**
- * Access key
- */
- private char accessKey;
- /**
- * Text to user
- */
- private String text;
+ /**
+ * Access key
+ */
+ private char accessKey;
- /**
- * Constructor for building a console menu with access key and text
- *
- * @param accessKey Access key for this menu entry
- * @param text Text to show to user
- */
- public ConsoleMenuItem (final char accessKey, final String text) {
- this.accessKey = accessKey;
- this.text = text;
- }
+ /**
+ * Text to user
+ */
+ private String text;
- /**
- * Access key
- * @return the accessKey
- */
- @Override
- public final char getAccessKey () {
- return this.accessKey;
- }
+ /**
+ * Constructor for building a console menu with access key and text
+ *
+ * @param accessKey Access key for this menu entry
+ * @param text Text to show to user
+ */
+ public ConsoleMenuItem (final char accessKey, final String text) {
+ this.accessKey = accessKey;
+ this.text = text;
+ }
- /**
- * Text to user
- * @return the text
- */
- @Override
- public String getText () {
- return this.text;
- }
+ /**
+ * Access key
+ *
+ * @return the accessKey
+ */
+ @Override
+ public final char getAccessKey () {
+ return this.accessKey;
+ }
- @Override
- public void show (final Client client) {
- // Call-back client over menu
- client.showEntry(this);
- }
+ /**
+ * Text to user
+ *
+ * @return the text
+ */
+ @Override
+ public String getText () {
+ 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) {
+ // Call-back client over menu
+ client.showEntry(this);
+ }
+
+ /**
+ * 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;
+ }
- /**
- * Access key
- * @param accessKey the accessKey to set
- */
- private void setAccessKey (char accessKey) {
- this.accessKey = accessKey;
- }
-
}
-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.model;\r
-\r
-import java.text.MessageFormat;\r
-import javax.swing.event.EventListenerList;\r
-import javax.swing.event.TableModelListener;\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class BaseModel extends BaseFrameworkSystem {\r
- /** List of listeners */\r
- private final EventListenerList listenerList;\r
-\r
- /**\r
- * Protected constructor\r
- */\r
- protected BaseModel () {\r
- // Init listener list\r
- this.listenerList = new EventListenerList();\r
- }\r
-\r
- /**\r
- * Adds a TableModel listener instance to the event list.\r
- * \r
- * @param listener Lister instance\r
- */\r
- public void addTableModelListener (final TableModelListener listener) {\r
- // Debug message\r
- this.getLogger().debug(MessageFormat.format("Adding listener {0} ...", listener.getClass()));\r
-\r
- // Add listener\r
- this.listenerList.add(TableModelListener.class, listener);\r
- }\r
-\r
- /**\r
- * Removes a TableModel listener instance from the event list.\r
- * \r
- * @param listener Listener instance\r
- */\r
- public void removeTableModelListener (final TableModelListener listener) {\r
- // Debug message\r
- this.getLogger().debug(MessageFormat.format("Removing listener {0} ...", listener.getClass()));\r
-\r
- // Remove listener\r
- this.listenerList.remove(TableModelListener.class, listener);\r
- }\r
-}\r
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.model;
+
+import java.text.MessageFormat;
+import javax.swing.event.EventListenerList;
+import javax.swing.event.TableModelListener;
+import org.mxchange.addressbook.BaseFrameworkSystem;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public class BaseModel extends BaseFrameworkSystem {
+
+ /**
+ * List of listeners
+ */
+ private final EventListenerList listenerList;
+
+ /**
+ * Protected constructor
+ */
+ protected BaseModel () {
+ // Init listener list
+ this.listenerList = new EventListenerList();
+ }
+
+ /**
+ * Adds a TableModel listener instance to the event list.
+ *
+ * @param listener Lister instance
+ */
+ public void addTableModelListener (final TableModelListener listener) {
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("Adding listener {0} ...", listener.getClass()));
+
+ // Add listener
+ this.listenerList.add(TableModelListener.class, listener);
+ }
+
+ /**
+ * Removes a TableModel listener instance from the event list.
+ *
+ * @param listener Listener instance
+ */
+ public void removeTableModelListener (final TableModelListener listener) {
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("Removing listener {0} ...", listener.getClass()));
+
+ // Remove listener
+ this.listenerList.remove(TableModelListener.class, listener);
+ }
+}
+++ /dev/null
-/*
- * 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 <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.addressbook.model.address;
-
-import javax.swing.table.TableModel;
-import org.mxchange.addressbook.client.Client;
-import org.mxchange.addressbook.model.BaseModel;
-
-/**
- *
- * @author Roland Haeder
- */
-public class AddressTableModel extends BaseModel implements TableModel {
-
- /**
- * Constructor with Client instance which holds the contact manager
- *
- * @param client Client instance
- */
- public AddressTableModel (final Client client) {
- // Parent super constructor
- super();
-
- // Set client
- this.setClient(client);
- }
-
- @Override
- public Class<?> getColumnClass (final int columnIndex) {
- throw new UnsupportedOperationException("Not supported yet. columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public int getColumnCount () {
- // Deligate this call to contact manager
- return this.getClient().getContactManager().getColumnCount();
- }
-
- @Override
- public String getColumnName (final int columnIndex) {
- // Deligate this call to contact manager
- return this.getClient().getContactManager().getColumnName(columnIndex);
- }
-
- @Override
- public int getRowCount () {
- // Deligate this call to contact manager
- return this.getClient().getContactManager().size();
- }
-
- @Override
- public Object getValueAt (final int rowIndex, final int columnIndex) {
- throw new UnsupportedOperationException("Not supported yet. rowIndex=" + rowIndex + ",columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public boolean isCellEditable (final int rowIndex, final int columnIndex) {
- throw new UnsupportedOperationException("Not supported yet. rowIndex=" + rowIndex + ",columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
- }
-
- @Override
- public void setValueAt (final Object value, final int rowIndex, final int columnIndex) {
- throw new UnsupportedOperationException("Not supported yet. value=" + value + ",rowIndex=" + rowIndex + ",columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
- }
-}
--- /dev/null
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.model.contact;
+
+import javax.swing.table.TableModel;
+import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.model.BaseModel;
+
+/**
+ * A table model for contacts
+ *
+ * @author Roland Haeder
+ */
+public class ContactTableModel extends BaseModel implements TableModel {
+
+ /**
+ * Constructor with Client instance which holds the contact manager
+ *
+ * @param client Client instance
+ */
+ public ContactTableModel (final Client client) {
+ // Parent super constructor
+ super();
+
+ // Set client
+ this.setClient(client);
+ }
+
+ @Override
+ public Class<?> getColumnClass (final int columnIndex) {
+ throw new UnsupportedOperationException("Not supported yet. columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public int getColumnCount () {
+ // Deligate this call to contact manager
+ return this.getClient().getContactManager().getColumnCount();
+ }
+
+ @Override
+ public String getColumnName (final int columnIndex) {
+ // Deligate this call to contact manager
+ return this.getClient().getContactManager().getColumnName(columnIndex);
+ }
+
+ @Override
+ public int getRowCount () {
+ // Deligate this call to contact manager
+ return this.getClient().getContactManager().size();
+ }
+
+ @Override
+ public Object getValueAt (final int rowIndex, final int columnIndex) {
+ throw new UnsupportedOperationException("Not supported yet. rowIndex=" + rowIndex + ",columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public boolean isCellEditable (final int rowIndex, final int columnIndex) {
+ throw new UnsupportedOperationException("Not supported yet. rowIndex=" + rowIndex + ",columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void setValueAt (final Object value, final int rowIndex, final int columnIndex) {
+ throw new UnsupportedOperationException("Not supported yet. value=" + value + ",rowIndex=" + rowIndex + ",columnIndex=" + columnIndex); //To change body of generated methods, choose Tools | Templates.
+ }
+}