From: Roland Haeder <roland@mxchange.org>
Date: Tue, 21 Jul 2015 11:22:44 +0000 (+0200)
Subject: Introduced a lot Swing stuff + moved some attributes
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=d16c6288f14c09b779d9d8f395529d411cdd156e;p=jaddressbook-lib.git

Introduced a lot Swing stuff + moved some attributes
Signed-off-by:Roland Häder <roland@mxchange.org>
---

diff --git a/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java b/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java
index 2d3237a6..fcda1bca 100644
--- a/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java
+++ b/Addressbook/src/org/mxchange/addressbook/application/AddressbookApplication.java
@@ -16,10 +16,12 @@
  */
 package org.mxchange.addressbook.application;
 
+import java.text.MessageFormat;
 import org.mxchange.addressbook.BaseFrameworkSystem;
 import org.mxchange.addressbook.UnhandledUserChoiceException;
 import org.mxchange.addressbook.client.Client;
 import org.mxchange.addressbook.client.console.ConsoleClient;
+import org.mxchange.addressbook.client.gui.SwingClient;
 import org.mxchange.addressbook.manager.application.ApplicationManager;
 
 /**
@@ -117,7 +119,7 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli
     /**
      * Application title
      */
-    public static final String APP_TITLE = "Addressbuch";
+    public static final String APP_TITLE = "Adressbuch";
 
     /**
      * Application version
@@ -125,14 +127,14 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli
     public static final String APP_VERSION = "0.0";
 
     /**
-     * Main method (entry point)
-     *
-     * @param args the command line arguments
+     * Console client is enabled by default
      */
-    public static void main (String[] args) {
-	// Start application
-	new AddressbookApplication().start();
-    }
+    private boolean consoleClient = true;
+
+    /**
+     * GUI client is disabled by default
+     */
+    private boolean guiClient = false;
 
     /**
      * Bootstraps application
@@ -140,11 +142,30 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli
     @Override
     public void doBootstrap () {
 	this.getLogger().debug("Initializing application ...");
-	
-	// Init client instance
-	Client client = new ConsoleClient(this);
 
-		// Init client instance
+	// 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);
+	}
+	
+	// Set client instance
 	this.setClient(client);
 	
 	// The application is running at this point
@@ -182,6 +203,67 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli
 	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
      */
@@ -192,14 +274,28 @@ public class AddressbookApplication extends BaseFrameworkSystem implements Appli
 
     /**
      * Launches the application
+     * 
+     * @param args Arguments handled to program
      */
-    private void start () {
+    private void start (final String args[]) {
 	this.getLogger().info("Program is started.");
 
+	// Parse arguments
+	this.parseArguments(args);
+
 	// Launch application
 	ApplicationManager.getManager(this).start();
 
 	this.getLogger().info("End of program (last line)");
     }
 
+    /**
+     * Main method (entry point)
+     *
+     * @param args the command line arguments
+     */
+    public static void main (String[] args) {
+	// Start application
+	new AddressbookApplication().start(args);
+    }
 }
diff --git a/Addressbook/src/org/mxchange/addressbook/client/BaseClient.java b/Addressbook/src/org/mxchange/addressbook/client/BaseClient.java
index 706229c3..399ddb4a 100644
--- a/Addressbook/src/org/mxchange/addressbook/client/BaseClient.java
+++ b/Addressbook/src/org/mxchange/addressbook/client/BaseClient.java
@@ -16,6 +16,8 @@
  */
 package org.mxchange.addressbook.client;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.mxchange.addressbook.BaseFrameworkSystem;
 import org.mxchange.addressbook.menu.Menu;
 
@@ -36,11 +38,19 @@ public abstract class BaseClient extends BaseFrameworkSystem {
      */
     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);
     }
 
     /**
@@ -75,12 +85,24 @@ public abstract class BaseClient extends BaseFrameworkSystem {
     }
 
     /**
-     * Some kind of "getter" for a Menu instance from given menu type
+     * "Getter" for given menu type
      *
-     * @param menuType Menu type, e.g. "main" for main menu
-     * @return
+     * @param menuType Menu type instance to return
+     * @return Menu or null if not found
      */
-    public abstract Menu getMenu (final String menuType);
+    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
@@ -93,6 +115,19 @@ public abstract class BaseClient extends BaseFrameworkSystem {
 	return this.isRunning;
     }
 
+    /**
+     * 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;
+    }
+
     /**
      * Shows given menu
      *
diff --git a/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java b/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java
index 160eab33..5249c5f9 100644
--- a/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java
+++ b/Addressbook/src/org/mxchange/addressbook/client/console/ConsoleClient.java
@@ -18,8 +18,6 @@ package org.mxchange.addressbook.client.console;
 
 import java.text.MessageFormat;
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Scanner;
 import org.mxchange.addressbook.UnhandledUserChoiceException;
 import org.mxchange.addressbook.application.AddressbookApplication;
@@ -39,11 +37,6 @@ import org.mxchange.addressbook.menu.item.console.ConsoleMenuItem;
  * @author Roland Haeder
  */
 public class ConsoleClient extends BaseClient implements Client {
-    /**
-     * Menu system
-     */
-    private final Map<String, Menu> menus;
-
     /**
      * Scanner instance for reading data from console input
      */
@@ -65,11 +58,8 @@ public class ConsoleClient extends BaseClient implements Client {
 	// Init scanner instance
 	this.scanner = new Scanner(System.in);
 
-	// Init menu map
-	this.menus = new HashMap<>(10);
-
 	// Fill menu map
-	this.fillConsoleMenuMap();
+	this.fillMenuMap();
     }
 
     /**
@@ -123,7 +113,7 @@ public class ConsoleClient extends BaseClient implements Client {
     @Override
     public void doUserMenuChoice () throws UnhandledUserChoiceException {
 	// Get all access keys from menu
-	char[] accessKeys = MenuTools.getAccessKeysFromMenuMap(this.menus, this.getCurrentMenu());
+	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): ");
@@ -142,11 +132,19 @@ public class ConsoleClient extends BaseClient implements Client {
 		this.getContactManager().addOtherAddress();
 		break;
 	
-	    case '4': // Change other addess
+	    case '4': // List contacts
+		this.getContactManager().listContacts();
+		break;
+	
+	    case '5': // Search addresses
+		this.getContactManager().searchContacts();
+		break;
+
+	    case '6': // Change other addess
 		this.getContactManager().changeOtherAddress();
 		break;
 	
-	    case '5': // Delete other address
+	    case '7': // Delete other address
 		this.getContactManager().deleteOtherAddress();
 		break;
 
@@ -276,6 +274,11 @@ public class ConsoleClient extends BaseClient implements Client {
 	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
@@ -293,7 +296,7 @@ public class ConsoleClient extends BaseClient implements Client {
 	
 	// Debug message
 	this.getLogger().debug("Intro shown to user");
-     }
+    }
 
     @Override
     public void userChooseChangeContactData (final Contact contact) throws UnhandledUserChoiceException {
@@ -379,32 +382,12 @@ public class ConsoleClient extends BaseClient implements Client {
     /**
      * Fills menu map with menu entries
      */
-    protected void fillConsoleMenuMap () {
+    @Override
+    protected final void fillMenuMap () {
 	// Initialize first (main) menu
 	Menu menu = new ConsoleMenu("main", this);
 	
 	// Add it
-	this.menus.put("main", menu);
-    }
-
-    /**
-     * "Getter" for given menu type
-     *
-     * @param menuType Menu type instance to return
-     * @return Menu or null if not found
-     */
-    @Override
-    public Menu getMenu (final String menuType) {
-	// Default is not found
-	Menu menu = null;
-	
-	// Check array
-	if (this.menus.containsKey(menuType)) {
-	    // Found!
-	    menu = this.menus.get(menuType);
-	}
-	
-	// Return it
-	return menu;
+	this.getMenus().put("main", menu);
     }
 }
diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java b/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java
new file mode 100644
index 00000000..83417e16
--- /dev/null
+++ b/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java
@@ -0,0 +1,136 @@
+/*
+ * 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.client.gui;
+
+import org.mxchange.addressbook.UnhandledUserChoiceException;
+import org.mxchange.addressbook.application.AddressbookApplication;
+import org.mxchange.addressbook.client.BaseClient;
+import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.contact.Contact;
+import org.mxchange.addressbook.menu.Menu;
+import org.mxchange.addressbook.menu.item.SelectableMenuItem;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public class SwingClient extends BaseClient implements Client {
+    /**
+     * Constructor with application instance
+     * @param application 
+     */
+    public SwingClient (final AddressbookApplication application) {
+	super();
+
+	// Set application instance
+	this.setApplication(application);
+
+	// Init contact manager here
+	this.initContactManager(this);
+
+	// Fill menu map
+	this.fillMenuMap();
+    }
+
+    @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 doUserMenuChoice () throws UnhandledUserChoiceException {
+	throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @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
+     * @todo Make sure the access key is unique
+     */
+    @Override
+    public SelectableMenuItem getMenuItem (final char accessKey, final String text) {
+	// Returns null as the menu is now no longer controlled here.
+	return null;
+    }
+
+    @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 () {
+	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 () {
+	throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @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
+    }
+    
+}
diff --git a/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java b/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
index 419436dc..04990119 100644
--- a/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
+++ b/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
@@ -289,6 +289,11 @@ public class ContactManager extends BaseManager implements ManageableContact {
 	return Collections.unmodifiableList(this.contacts);
     }
 
+    @Override
+    public void listContacts () {
+	throw new UnsupportedOperationException("Not supported yet.");
+    }
+
     /**
      * Adds given contact to address book and flushes all entries to database
      *
@@ -316,6 +321,11 @@ public class ContactManager extends BaseManager implements ManageableContact {
 	this.flush();
     }
 
+    @Override
+    public void searchContacts () {
+	throw new UnsupportedOperationException("Not supported yet.");
+    }
+
     /**
      * Getter for size
      *
diff --git a/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java b/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java
index 94d4d55a..a9285059 100644
--- a/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java
+++ b/Addressbook/src/org/mxchange/addressbook/manager/contact/ManageableContact.java
@@ -26,6 +26,12 @@ import org.mxchange.addressbook.manager.Manageable;
  * @author Roland Haeder
  */
 public interface ManageableContact extends Manageable {
+
+    /**
+     * List all contacts
+     */
+    public void listContacts ();
+
     /**
      * Adds given contact to address book
      *
@@ -98,6 +104,11 @@ public interface ManageableContact extends Manageable {
      */
     public List<Contact> getList ();
 
+    /**
+     * Searches address book for a contact
+     */
+    public void searchContacts ();
+
     /**
      * Getter for size
      *
diff --git a/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java b/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java
new file mode 100644
index 00000000..d81c0714
--- /dev/null
+++ b/Addressbook/src/org/mxchange/addressbook/menu/BaseMenu.java
@@ -0,0 +1,100 @@
+/*
+ * 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);
+    }
+}
diff --git a/Addressbook/src/org/mxchange/addressbook/menu/console/BaseMenu.java b/Addressbook/src/org/mxchange/addressbook/menu/console/BaseMenu.java
deleted file mode 100644
index afa83c39..00000000
--- a/Addressbook/src/org/mxchange/addressbook/menu/console/BaseMenu.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2015 Roland Haeder
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.addressbook.menu.console;
-
-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.AddressbookMenu;
-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);
-	}
-    }
-
-    /**
-     * 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);
-	
-	// Add all items
-	AddressbookMenu.addItemsToList(this.menuList, menuType, client);
-    }
-}
diff --git a/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java b/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java
index 82d9f6b5..cefa2c54 100644
--- a/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java
+++ b/Addressbook/src/org/mxchange/addressbook/menu/console/ConsoleMenu.java
@@ -17,6 +17,8 @@
 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;
 
 /**
@@ -31,5 +33,8 @@ public class ConsoleMenu extends BaseMenu implements Menu {
      */
     public ConsoleMenu (final String menuType, final Client client) {
 	this.initMenu(menuType, client);
+	
+	// Add all items
+	AddressbookMenu.addItemsToList(this.getMenuList(), menuType, client);
     }
 }