From: Roland Haeder <roland@mxchange.org>
Date: Fri, 9 Oct 2015 07:57:00 +0000 (+0200)
Subject: This lib should only contain remote EJB interfaces for the addressbook application... 
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=3708c5248bf51d1a84043b4094b9b34cb79af004;p=jfinancials-lib.git

This lib should only contain remote EJB interfaces for the addressbook application and no other classes. A better place for them is maybe addressbook-swing
Signed-off-by:Roland Häder <roland@mxchange.org>
---

diff --git a/lib/javaee-api-7.0/javaee-api-7.0.jar b/lib/javaee-api-7.0/javaee-api-7.0.jar
new file mode 100644
index 0000000..9e38d4c
Binary files /dev/null and b/lib/javaee-api-7.0/javaee-api-7.0.jar differ
diff --git a/lib/javaee-api-7.0/javaee-doc-api.jar b/lib/javaee-api-7.0/javaee-doc-api.jar
new file mode 100644
index 0000000..2859e3d
Binary files /dev/null and b/lib/javaee-api-7.0/javaee-doc-api.jar differ
diff --git a/lib/jpa20-persistence/javax.persistence-2.1.0-doc.zip b/lib/jpa20-persistence/javax.persistence-2.1.0-doc.zip
deleted file mode 100644
index fd55e6e..0000000
Binary files a/lib/jpa20-persistence/javax.persistence-2.1.0-doc.zip and /dev/null differ
diff --git a/lib/jpa20-persistence/javax.persistence_2.1.0.v201304241213.jar b/lib/jpa20-persistence/javax.persistence_2.1.0.v201304241213.jar
deleted file mode 100644
index 841d2e1..0000000
Binary files a/lib/jpa20-persistence/javax.persistence_2.1.0.v201304241213.jar and /dev/null differ
diff --git a/lib/nblibraries.properties b/lib/nblibraries.properties
index 7ee5412..2e2f7c6 100644
--- a/lib/nblibraries.properties
+++ b/lib/nblibraries.properties
@@ -2,6 +2,12 @@ libs.CopyLibs.classpath=\
     ${base}/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar
 libs.CopyLibs.displayName=CopyLibs Task
 libs.CopyLibs.prop-version=2.0
+libs.javaee-api-7.0.classpath=\
+    ${base}/javaee-api-7.0/javaee-api-7.0.jar
+libs.javaee-api-7.0.displayName=Java EE 7 API Library
+libs.javaee-api-7.0.javadoc=\
+    ${base}/javaee-api-7.0/javaee-doc-api.jar
+libs.javaee-api-7.0.prop-maven-dependencies=javax:javaee-api:7.0:jar
 libs.jpa20-persistence.classpath=\
     ${base}/jpa20-persistence/javax.persistence_2.1.0.v201304241213.jar
 libs.jpa20-persistence.displayName=Persistence (JPA 2.1)
diff --git a/nbproject/project.properties b/nbproject/project.properties
index f292095..cd344ff 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -45,7 +45,7 @@ javac.classpath=\
     ${file.reference.jcore-logger-lib.jar}:\
     ${file.reference.jcontacts-core.jar}:\
     ${file.reference.jcontacts-business-core.jar}:\
-    ${libs.jpa20-persistence.classpath}
+    ${libs.javaee-api-7.0.classpath}
 # Space-separated list of extra javac options
 javac.compilerargs=-Xlint:deprecation -Xlint:unchecked
 javac.deprecation=true
diff --git a/src/org/mxchange/addressbook/BaseAddressbookSystem.java b/src/org/mxchange/addressbook/BaseAddressbookSystem.java
deleted file mode 100644
index 772922b..0000000
--- a/src/org/mxchange/addressbook/BaseAddressbookSystem.java
+++ /dev/null
@@ -1,85 +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;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import org.mxchange.jcore.BaseFrameworkSystem;
-import org.mxchange.jcoreeelogger.beans.local.logger.Log;
-import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
-
-/**
- * A general addressbook class
- * <p>
- * @author Roland Haeder
- */
-public abstract class BaseAddressbookSystem extends BaseFrameworkSystem {
-
-	/**
-	 * Logger instance
-	 */
-	@Log
-	private LoggerBeanLocal logger;
-
-	/**
-	 * Protected constructor
-	 */
-	protected BaseAddressbookSystem () {
-		try {
-			// Get initial context
-			Context context = new InitialContext();
-
-			// Lookup logger
-			this.logger = (LoggerBeanLocal) context.lookup("java:global/jcore-logger-ejb/logger!org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal"); //NOI18N
-		} catch (final NamingException ex) {
-			// Continue to throw
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * Log exception and abort program.
-	 * <p>
-	 * @param throwable Throwable
-	 */
-	protected void abortProgramWithException (final Throwable throwable) {
-		// Log exception
-		this.logException(throwable);
-		
-		// Abort here
-		System.exit(1);
-	}
-
-	/**
-	 * Getter for logger instance
-	 * <p>
-	 * @return Logger instance
-	 */
-	protected LoggerBeanLocal getLogger () {
-		return this.logger;
-	}
-
-	/**
-	 * Logs given exception
-	 * <p>
-	 * @param exception Throwable
-	 */
-	protected void logException (final Throwable exception) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
-	}
-}
diff --git a/src/org/mxchange/addressbook/client/AddressbookClient.java b/src/org/mxchange/addressbook/client/AddressbookClient.java
deleted file mode 100644
index ff8442b..0000000
--- a/src/org/mxchange/addressbook/client/AddressbookClient.java
+++ /dev/null
@@ -1,173 +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.client;
-
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;
-import org.mxchange.jcontacts.contact.Contact;
-import org.mxchange.jcontacts.contact.gender.Gender;
-import org.mxchange.jcore.client.Client;
-import org.mxchange.jcore.exceptions.MenuInitializationException;
-import org.mxchange.jcore.exceptions.UnhandledUserChoiceException;
-
-/**
- * A special client interface for addressbook applications.
- * <p>
- * @author Roland Haeder
- */
-public interface AddressbookClient extends Client {
-
-	/**
-	 * Displays a "box" for the address
-	 * <p>
-	 * @param contact Contact to show address from
-	 */
-	public void displayAddressBox (final Contact contact);
-
-	/**
-	 * Displays a "box" for the name
-	 * <p>
-	 * @param contact Contact to show name from
-	 */
-	public void displayNameBox (final Contact contact);
-
-	/**
-	 * Displays a "box" for other data
-	 * <p>
-	 * @param contact Contact to show other data from
-	 */
-	public void displayOtherDataBox (final Contact contact);
-
-	/**
-	 * Shows given contact instamce
-	 *
-	 * @param contact Contact instance
-	 */
-	public void show (final Contact contact);
-
-	/**
-	 * The user changes own address data
-	 * <p>
-	 * @param contact Contact instance to change
-	 */
-	public void doChangeOwnAddressData (final Contact contact);
-
-	/**
-	 * The user changes own name data
-	 * <p>
-	 * @param contact
-	 */
-	public void doChangeOwnNameData (final Contact contact);
-
-	/**
-	 * The user changes own other data
-	 * <p>
-	 * @param contact Constact instance to change
-	 */
-	public void doChangeOwnOtherData (final Contact contact);
-
-	/**
-	 * Allows the user to enter own data
-	 * <p>
-	 * @return Finished Contact instance
-	 */
-	public Contact doEnterOwnData ();
-
-	/**
-	 * Asks the user for a choice and proceeds accordingly
-	 * <p>
-	 * @throws UnhandledUserChoiceException If choice is not supported
-	 * @throws org.mxchange.jcore.exceptions.MenuInitializationException If the menu cannot be initialized
-	 */
-	public void doUserMenuChoice () throws UnhandledUserChoiceException, MenuInitializationException;
-
-	/**
-	 * Asks the the user to enter a single character which must match validChars
-	 * <p>
-	 * @param	validChars Valid chars that are accepted
-	 * @param	message	Message to user
-	 * @return	Allowed character
-	 */
-	public char enterChar (final char[] validChars, final String message);
-
-	/**
-	 * Asks the user to enter his/her gender (M=Male, F=Female, C=Company)
-	 * <p>
-	 * @param message Message to output
-	 * @return Gender enum
-	 */
-	public Gender enterGender (final String message);
-
-	/**
-	 * Reads an integer (int) from the user
-	 * <p>
-	 * @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);
-
-	/**
-	 * 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.
-	 * <p>
-	 * @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);
-
-	/**
-	 * Setter for current menu choice
-	 * <p>
-	 * @param currentMenu Current menu choice
-	 */
-	public void setCurrentMenu (final String currentMenu);
-
-	/**
-	 * Some "Getter" for menu item
-	 * <p>
-	 * @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);
-
-	/**
-	 * Shows current menu selection to the user
-	 */
-	public void showCurrentMenu ();
-
-	/**
-	 * Shows given menu entry in client
-	 * <p>
-	 * @param item Menu item to show
-	 */
-	public void showEntry (final SelectableMenuItem item);
-
-	/**
-	 * Let the user choose what to change on the address: [n]ame, [a]ddress,
-	 * [o]ther
-	 * <p>
-	 * @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;
-}
diff --git a/src/org/mxchange/addressbook/client/BaseAddressbookClient.java b/src/org/mxchange/addressbook/client/BaseAddressbookClient.java
deleted file mode 100644
index 69b631d..0000000
--- a/src/org/mxchange/addressbook/client/BaseAddressbookClient.java
+++ /dev/null
@@ -1,208 +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.client;
-
-import java.sql.SQLException;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import org.mxchange.addressbook.facade.contact.AddressbookContactFacade;
-import org.mxchange.addressbook.facade.contact.ContactFacade;
-import org.mxchange.addressbook.menu.Menu;
-import org.mxchange.jcore.client.BaseClient;
-import org.mxchange.jcore.client.Client;
-import org.mxchange.jcoreeelogger.beans.local.logger.Log;
-import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
-
-/**
- * A general addressbook client
- * <p>
- * @author Roland Haeder TODO: Find better name
- */
-public abstract class BaseAddressbookClient extends BaseClient implements AddressbookClient {
-
-	/**
-	 * Current menu choice
-	 */
-	private String currentMenu;
-
-	/**
-	 * Logger instance
-	 */
-	@Log
-	private LoggerBeanLocal logger;
-
-	/**
-	 * Menu system
-	 */
-	private final Map<String, Menu> menus;
-
-	/**
-	 * No instances can be created of this class
-	 */
-	protected BaseAddressbookClient () {
-		// Init menu map
-		this.menus = new HashMap<>(10);
-
-		// Try it
-		try {
-			// Get context
-			Context context = new InitialContext();
-
-			// Lookup logger
-			this.logger = (LoggerBeanLocal) context.lookup("java:global/jcore-logger-ejb/logger!org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal"); //NOI18N
-		} catch (final NamingException ex) {
-			// Continue to throw
-			throw new RuntimeException(ex);
-		}
-	}
-
-	/**
-	 * Current menu choice
-	 * <p>
-	 * @return the currentMenu
-	 */
-	public final String getCurrentMenu () {
-		return this.currentMenu;
-	}
-
-	@Override
-	public final void setCurrentMenu (final String currentMenu) {
-		this.currentMenu = currentMenu;
-	}
-
-	/**
-	 * "Getter" for given menu type
-	 * <p>
-	 * @param menuType Menu type instance to return
-	 * @return Menu or null if not found
-	 */
-	private 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;
-	}
-
-	/**
-	 * Logs exception and exits program
-	 * <p>
-	 * @param throwable Throwable
-	 */
-	protected void abortProgramWithException (final Throwable throwable) {
-		// Log exception
-		this.logException(throwable);
-		
-		// Abort here
-		System.exit(1);
-	}
-
-	/**
-	 * Fills menu map with swing menus
-	 */
-	protected abstract void fillMenuMap ();
-
-	/**
-	 * Getter for logger instance
-	 * <p>
-	 * @return Logger instance
-	 */
-	protected LoggerBeanLocal getLogger () {
-		return this.logger;
-	}
-
-	/**
-	 * Getter for menus map
-	 * <p>
-	 * @return Map of all menus
-	 */
-	protected final Map<String, Menu> getMenus () {
-		return this.menus;
-	}
-
-	/**
-	 * Initializes contact manager
-	 * <p>
-	 * @throws java.sql.SQLException If any SQL error occurs
-	 */
-	protected void initContactManager () throws SQLException {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Debug message
-		this.getLogger().logDebug("Initializing contact manager ..."); //NOI18N
-
-		// Init contact facade with console client
-		// TODO Static initial amount of contacts
-		ContactFacade facade = new AddressbookContactFacade((Client) this);
-
-		// Set it here
-		this.setFacade(facade);
-
-		// Debug message
-		this.getLogger().logDebug("Contact manager has been initialized."); //NOI18N
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	/**
-	 * Logs an exception
-	 * <p>
-	 * @param throwable Throwable
-	 */
-	protected void logException (final Throwable throwable) {
-		// Deligate to logger
-		this.getLogger().logException(throwable);
-	}
-
-	/**
-	 * Shows given menu
-	 * <p>
-	 * @param menuType Given menu to show
-	 */
-	protected void showMenu (final String menuType) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("menuType={0} - CALLED!", menuType)); //NOI18N
-
-		// Get menu from type
-		Menu menu = this.getMenu(menuType);
-
-		// Is the menu set?
-		if (!(menu instanceof Menu)) {
-			// Not found
-			// TODO Own exception?
-			throw new NullPointerException(MessageFormat.format("Menu '{0}' not found.", menuType)); //NOI18N
-		}
-
-		// Show menu
-		menu.show(this);
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-}
diff --git a/src/org/mxchange/addressbook/facade/contact/AddressbookContactFacade.java b/src/org/mxchange/addressbook/facade/contact/AddressbookContactFacade.java
deleted file mode 100644
index 592d5b7..0000000
--- a/src/org/mxchange/addressbook/facade/contact/AddressbookContactFacade.java
+++ /dev/null
@@ -1,643 +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.facade.contact;
-
-import java.io.IOException;
-import java.sql.SQLException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import org.mxchange.addressbook.client.AddressbookClient;
-import org.mxchange.jcontacts.contact.Contact;
-import org.mxchange.jcontacts.contact.gender.Gender;
-import org.mxchange.jcontacts.exceptions.ContactAlreadyAddedException;
-import org.mxchange.jcore.client.Client;
-import org.mxchange.jcore.exceptions.UnhandledUserChoiceException;
-import org.mxchange.jcore.facade.BaseFacade;
-import org.mxchange.jcoreeelogger.beans.local.logger.Log;
-import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
-
-/**
- * A facade for contacts.
- * <p>
- * @author Roland Haeder
- * @version 0.0
- */
-public class AddressbookContactFacade extends BaseFacade implements ContactFacade {
-
-	/**
-	 * Column name list
-	 */
-	private final List<String> columnNames;
-
-	/**
-	 * Entity manager
-	 */
-	@PersistenceContext
-	private EntityManager entityManager;
-
-	/**
-	 * Logger instance
-	 */
-	@Log
-	private LoggerBeanLocal logger;
-
-	/**
-	 * Translated column name list
-	 */
-	private final List<String> translatedColumnNames;
-
-	/**
-	 * Constructor which accepts maxContacts for maximum (initial) contacts and
-	 * a client instance.
-	 * <p>
-	 * @param client Client instance to use
-	 * @throws java.sql.SQLException If an SQL error occurs
-	 */
-	public AddressbookContactFacade (final Client client) throws SQLException {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("client={1} - CALLED!", client)); //NOI18N
-
-		// Make sure all parameters are set correctly
-		if (null == client) {
-			// Abort here
-			throw new NullPointerException("client is null"); //NOI18N
-		}
-
-		// Set client instance
-		this.setClient(client);
-
-		// Initialize list
-		this.columnNames = new ArrayList<>(15);
-		this.translatedColumnNames = new ArrayList<>(15);
-
-		// And fill it
-		this.fillColumnNamesFromBundle();
-
-		// Debug message
-		//* NOISY-DEBUG: */ this.getLogger().logDebug("client=" + client);
-	}
-
-	@Override
-	public void addContact (final Contact contact) throws ContactAlreadyAddedException {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("contact={0} - CALLED!", contact)); //NOI18N
-
-		// Contact instance must not be null
-		if (null == contact) {
-			// Abort here
-			throw new NullPointerException("contact is null"); //NOI18N
-		}
-
-		// Add it
-		this.entityManager.persist(contact);
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public void doAddOtherAddress () {
-		throw new UnsupportedOperationException("Not supported yet."); //NOI18N
-	}
-
-	@Override
-	public void doChangeAddressData (final Contact contact) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("contact={0} CALLED!", contact)); //NOI18N
-
-		// Contact must not be null
-		if (null == contact) {
-			// Abort here
-			throw new NullPointerException("contact is null"); //NOI18N
-		}
-		if (!(this.getClient() instanceof AddressbookClient)) {
-			// Cannot cast
-			throw new IllegalArgumentException(MessageFormat.format("this.getClient()={0} does not implement AddressbookClient", this.getClient())); //NOI18N
-		}
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		// First display it again
-		client.displayAddressBox(contact);
-
-		// Is it own data?
-		if (contact.isOwnContact()) {
-			// Deligate to client
-			client.doChangeOwnAddressData(contact);
-		} else {
-			// Other contact's address data to change
-			throw new UnsupportedOperationException("Changing contact entries not finished."); //NOI18N
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public void doChangeNameData (final Contact contact) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("contact={0} CALLED!", contact)); //NOI18N
-
-		// Contact must not be null
-		if (null == contact) {
-			// Abort here
-			throw new NullPointerException("contact is null"); //NOI18N
-		}
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		// First display them again
-		client.displayNameBox(contact);
-
-		// Is this own data?
-		if (contact.isOwnContact()) {
-			// Re-ask own data
-			client.doChangeOwnNameData(contact);
-		} else {
-			// Then re-ask them ...
-			throw new UnsupportedOperationException("Changing contact entries not finished."); //NOI18N
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public void doChangeOtherAddress () {
-		throw new UnsupportedOperationException("Not supported yet."); //NOI18N
-	}
-
-	@Override
-	public void doChangeOtherData (final Contact contact) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("contact={0} CALLED!", contact)); //NOI18N
-
-		// Contact must not be null
-		if (null == contact) {
-			// Abort here
-			throw new NullPointerException("contact is null"); //NOI18N
-		}
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		// First display them again
-		client.displayOtherDataBox(contact);
-
-		// Is this own data?
-		if (contact.isOwnContact()) {
-			// Re-ask own data
-			client.doChangeOwnOtherData(contact);
-		} else {
-			// Then re-ask them ...
-			throw new UnsupportedOperationException("Changing contact entries not finished."); //NOI18N
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public void doChangeOwnData () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		/*
-		 * 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."); //NOI18N
-
-			// Skip any below code
-			return;
-		}
-
-		// Instance
-		Contact contact = this.getOwnContact();
-
-		// It must be found
-		assert (contact instanceof Contact) : ": contact is not implementing Contact: " + contact;
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		// Display contact
-		client.show(contact);
-
-		try {
-			// Ask user what to change
-			client.userChooseChangeContactData(contact);
-		} catch (final UnhandledUserChoiceException ex) {
-			this.getLogger().logException(ex);
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public void doDeleteOtherAddress () {
-		throw new UnsupportedOperationException("Not supported yet."); //NOI18N
-	}
-
-	@Override
-	public void doEnterOwnData () throws ContactAlreadyAddedException {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Is own contact already added?
-		if (this.isOwnContactAdded()) {
-			// Don't continue here
-			throw new ContactAlreadyAddedException();
-		}
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		// Deligate this call to the client
-		Contact contact = client.doEnterOwnData();
-
-		// Is it set?
-		if (contact instanceof Contact) {
-			// Add it to contact "book"
-			this.registerContact(contact);
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public void doListContacts () {
-		throw new UnsupportedOperationException("Not supported yet."); //NOI18N
-	}
-
-	@Override
-	public void doSearchContacts () {
-		throw new UnsupportedOperationException("Not supported yet."); //NOI18N
-	}
-
-	@Override
-	public void doShutdown () throws SQLException, IOException {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Shut down the database layer
-		this.entityManager.close();
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	@Override
-	public String enterOwnCellNumber () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(5, 30, "Bitte geben Sie Ihre Handynummer an: ", true);
-	}
-
-	@Override
-	public String enterOwnCity () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(3, 50, "Bitte geben Sie Ihren Wohnort ein: ", false);
-	}
-
-	@Override
-	public String enterOwnComment () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(0, 100, "Kommentar zu Ihrem Eintrag: ", true);
-	}
-
-	@Override
-	public String enterOwnCompanyName () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true);
-	}
-
-	@Override
-	public String enterOwnCountryCode () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(2, 2, "Bitte geben Sie den zweistelligen Ländercode von Ihrem Land ein: ", false).toUpperCase();
-	}
-
-	@Override
-	public String enterOwnEmailAddress () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(10, 50, "Bitte geben Sie Ihre Email-Adresse ein: ", true);
-	}
-
-	@Override
-	public String enterOwnFamilyName () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false);
-	}
-
-	@Override
-	public String enterOwnFaxNumber () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(5, 30, "Bitte geben Sie Ihre Faxnummer an: ", true);
-	}
-
-	@Override
-	public String enterOwnFirstName () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false);
-	}
-
-	@Override
-	public Gender enterOwnGender () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterGender("Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): ");
-	}
-
-	@Override
-	public String enterOwnPhoneNumber () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(5, 30, "Bitte geben Sie Ihre Telefonnummer an: ", true);
-	}
-
-	@Override
-	public String enterOwnStreet () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.enterString(5, 50, "Bitte geben Sie Ihre Strasse und Hausnummer ein: ", false);
-	}
-
-	@Override
-	public int enterOwnZipCode () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Get and cast client instance
-		AddressbookClient client = (AddressbookClient) this.getClient();
-
-		return client.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"; //NOI18N
-
-		return this.columnNames.size();
-	}
-
-	@Override
-	public String getColumnName (final int columnIndex) {
-		assert (this.columnNames instanceof List) : "this.columnNames is not initialized"; //NOI18N
-
-		// Get column name at index
-		return this.columnNames.get(columnIndex);
-	}
-
-	@Override
-	public String getTranslatedColumnName (final int columnIndex) {
-		assert (this.translatedColumnNames instanceof List) : "this.translatedColumnNames is not initialized"; //NOI18N
-
-		// Get column name at index
-		return this.translatedColumnNames.get(columnIndex);
-	}
-
-	@Override
-	public Object getValueFromRowColumn (final int rowIndex, final int columnIndex) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("rowIndex={0},columnIndex={1} CALLED!", rowIndex, columnIndex)); //NOI18N
-
-		// Convert column index -> name
-		String columnName = this.getColumnName(columnIndex);
-
-		// Debug message
-		this.getLogger().logDebug(MessageFormat.format("columnName={0}", columnName)); //NOI18N
-
-		// Init value
-		Object value = null;
-
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("value={0} - EXIT!", value)); //NOI18N
-
-		// Return it
-		return value;
-	}
-
-	@Override
-	public boolean isOwnContactAdded () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Init variable
-		boolean isAdded = false;
-
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("isAdded={0} : EXIT!", isAdded)); //NOI18N
-
-		// Return result
-		return isAdded;
-	}
-
-	@Override
-	public void registerContact (final Contact contact) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("contact={0} CALLED!", contact)); //NOI18N
-
-		// Sanity check
-		if (null == contact) {
-			// Abort here
-			throw new NullPointerException("contact is null"); //NOI18N
-		}
-		try {
-			// Check if contact is found
-			if (this.entityManager.contains(contact)) {
-				// Contact already added
-				// TODO Do something here
-			} else if ((contact.isOwnContact()) && (this.isOwnContactAdded())) {
-				// Own contact already added
-				// TODO Do something
-			}
-
-			// Add contact to internal list
-			this.addContact(contact);
-		} catch (final ContactAlreadyAddedException ex) {
-			// Abort here
-			this.abortProgramWithException(ex);
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	/**
-	 * Logs given exception and exits program
-	 * <p>
-	 * @param throwable Throwable
-	 */
-	private void abortProgramWithException (Throwable throwable) {
-		// Log exception
-		this.logException(throwable);
-
-		// Abort here
-		System.exit(1);
-	}
-
-	/**
-	 * Fills the column names array with strings from bundle
-	 */
-	private void fillColumnNamesFromBundle () {
-		assert (this.columnNames instanceof List) : "this.columnNames is not initialized"; //NOI18N
-		assert (this.translatedColumnNames instanceof List) : "this.translatedColumnNames is not initialized"; //NOI18N
-
-		// Debug message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// 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().toLowerCase();
-
-			// Does the key start with AddressbookContactFacade.columnName ?
-			if (key.startsWith("ContactManager.columnName")) { //NOI18N
-				// This is the wanted entry.
-				this.getLogger().logDebug(MessageFormat.format("key={0}", key)); //NOI18N
-
-				// Convert string to array based on delimiter '.'
-				String[] tokens = this.getArrayFromString(key, "."); //NOI18N
-
-				// Token array must contain 4 elements (AddressbookContactFacade.columnName.foo.text)
-				assert (tokens.length == 4) : MessageFormat.format("Array tokens contains not 4 elements: {0}", Arrays.toString(tokens)); //NOI18N
-
-				// Get pre-last element
-				String columnName = tokens[tokens.length - 2];
-
-				// Debug message
-				this.getLogger().logDebug(MessageFormat.format("columnName={0} - adding ...", columnName)); //NOI18N
-
-				// So add it
-				this.columnNames.add(columnName);
-				this.translatedColumnNames.add(this.getBundle().getString(key));
-			}
-		}
-
-		// Debug message
-		this.getLogger().logTrace(MessageFormat.format("getColumnCount()={0}: EXIT!", this.getColumnCount())); //NOI18N
-	}
-
-	/**
-	 * Getter for logger instance
-	 * <p>
-	 * @return Logger instance
-	 */
-	private LoggerBeanLocal getLogger () {
-		return this.logger;
-	}
-
-	/**
-	 * "Getter" for own contact instance or null if not found
-	 * <p>
-	 * @return Contact instance or null
-	 */
-	private Contact getOwnContact () {
-		// Trace message
-		this.getLogger().logTrace("CALLED!"); //NOI18N
-
-		// Deligate this call to database frontend
-		Contact contact = null;
-		//Contact contact = ((AddressbookContactFrontend) this.getFrontend()).getOwnContact();
-
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("contact={0} - EXIT!", contact)); //NOI18N
-
-		// Return instance or null
-		return contact;
-	}
-
-	/**
-	 * Logs given exception
-	 * <p>
-	 * @param exception Throwable
-	 */
-	protected void logException (final Throwable exception) {
-		this.getLogger().logException(exception);
-	}
-}
diff --git a/src/org/mxchange/addressbook/facade/contact/ContactFacade.java b/src/org/mxchange/addressbook/facade/contact/ContactFacade.java
deleted file mode 100644
index aac08dd..0000000
--- a/src/org/mxchange/addressbook/facade/contact/ContactFacade.java
+++ /dev/null
@@ -1,241 +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.facade.contact;
-
-import java.io.IOException;
-import org.mxchange.jcontacts.contact.Contact;
-import org.mxchange.jcontacts.contact.gender.Gender;
-import org.mxchange.jcontacts.exceptions.ContactAlreadyAddedException;
-import org.mxchange.jcore.facade.Facade;
-
-/**
- * An interface for addressbook contact manager
- * <p>
- * @author Roland Haeder
- */
-public interface ContactFacade extends Facade {
-
-	/**
-	 * Adds given Contact instance to list
-	 * <p>
-	 * @param contact Contact instance to add
-	 * @throws org.mxchange.jcontacts.exceptions.ContactAlreadyAddedException If the contact is already added
-	 */
-	public void addContact (final Contact contact) throws ContactAlreadyAddedException;
-
-	/**
-	 * 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.
-	 * <p>
-	 * @param contact Instance to change data
-	 */
-	public void doChangeAddressData (final Contact contact);
-
-	/**
-	 * The user can change name data, like gender, surname, family name and
-	 * company name (if business contact).
-	 * <p>
-	 * @param contact Instance to change data
-	 */
-	public void doChangeNameData (final Contact contact);
-
-	/**
-	 * Let the user change other address
-	 */
-	public void doChangeOtherAddress ();
-
-	/**
-	 * The user can change other data, like phone numbers or comments.
-	 * <p>
-	 * @param contact Instance to change data
-	 */
-	public void doChangeOtherData (final Contact contact);
-
-	/**
-	 * Let the user change own data
-	 * <p>
-	 */
-	public void doChangeOwnData ();
-
-	/**
-	 * Let the user delete other address
-	 */
-	public void doDeleteOtherAddress ();
-
-	/**
-	 * Asks user for own data
-	 * <p>
-	 * @throws org.mxchange.jcontacts.exceptions.ContactAlreadyAddedException If own contact is already added
-	 * @throws java.io.IOException If an IO error was found
-	 */
-	public void doEnterOwnData () throws ContactAlreadyAddedException;
-
-	/**
-	 * List all contacts
-	 */
-	public void doListContacts ();
-
-	/**
-	 * Searches address book for a contact
-	 */
-	public void doSearchContacts ();
-
-	/**
-	 * Allows the user to enter own cellphone number.
-	 * <p>
-	 * @return Cellphone number
-	 */
-	public String enterOwnCellNumber ();
-
-	/**
-	 * Allows the user to enter own city name.
-	 * <p>
-	 * @return City name
-	 */
-	public String enterOwnCity ();
-
-	/**
-	 * Allows the user to enter comment for own entry.
-	 * <p>
-	 * @return Comment
-	 */
-	public String enterOwnComment ();
-
-	/**
-	 * Allows the user to enter own company name.
-	 * <p>
-	 * @return Company name
-	 */
-	public String enterOwnCompanyName ();
-
-	/**
-	 * Allows the user to enter own country code.
-	 * <p>
-	 * @return Country code
-	 */
-	public String enterOwnCountryCode ();
-
-	/**
-	 * Allows the user to enter own email address.
-	 * <p>
-	 * @return Email address
-	 */
-	public String enterOwnEmailAddress ();
-
-	/**
-	 * Allows the user to enter own family name.
-	 * <p>
-	 * @return Family name
-	 */
-	public String enterOwnFamilyName ();
-
-	/**
-	 * Allows the user to enter own fax number.
-	 * <p>
-	 * @return Fax number
-	 */
-	public String enterOwnFaxNumber ();
-
-	/**
-	 * Allows the user to enter own surname.
-	 * <p>
-	 * @return Surname
-	 */
-	public String enterOwnFirstName ();
-
-	/**
-	 * Allows the user to enter own gender.
-	 * <p>
-	 * @return Gender
-	 */
-	public Gender enterOwnGender ();
-
-	/**
-	 * Allows the user to enter own phone number.
-	 * <p>
-	 * @return Phone number
-	 */
-	public String enterOwnPhoneNumber ();
-
-	/**
-	 * Allows the user to enter own street and house number.
-	 * <p>
-	 * @return Street and house number
-	 */
-	public String enterOwnStreet ();
-
-	/**
-	 * Allows the user to enter own ZIP code.
-	 * <p>
-	 * @return ZIP code
-	 */
-	public int enterOwnZipCode ();
-
-	/**
-	 * Getter for column count
-	 * <p>
-	 * @return Column count TODO: This is needed for TableModel in Swing
-	 */
-	public int getColumnCount ();
-
-	/**
-	 * Getter for column name at given index.
-	 * <p>
-	 * @param columnIndex Column index
-	 * @return Database column name TODO: This is needed for TableModel in Swing
-	 */
-	public String getColumnName (final int columnIndex);
-
-	/**
-	 * Getter for translated column name at given index.
-	 * <p>
-	 * @param columnIndex Column index
-	 * @return Human-readable column name TODO: This is needed for TableModel in
-	 * Swing
-	 */
-	public String getTranslatedColumnName (final int columnIndex);
-
-	/**
-	 * Somewhat "getter" for value from given row and column index
-	 * <p>
-	 * @param rowIndex Row index
-	 * @param columnIndex Column index
-	 * @return Value from given row/column
-	 */
-	public Object getValueFromRowColumn (final int rowIndex, final int columnIndex);
-
-	/**
-	 * Checks whether own contact is already added by checking all entries for
-	 * isOwnContact flag
-	 * <p>
-	 * @return Whether own contact is already added
-	 * @throws java.io.IOException If an IO error occurs
-	 */
-	public boolean isOwnContactAdded () throws IOException;
-
-	/**
-	 * Adds given contact to address book
-	 * <p>
-	 * @param contact Contact being added TODO Add check for book size
-	 */
-	public void registerContact (final Contact contact);
-}
diff --git a/src/org/mxchange/addressbook/menu/AddressbookMenu.java b/src/org/mxchange/addressbook/menu/AddressbookMenu.java
deleted file mode 100644
index 8ef43f4..0000000
--- a/src/org/mxchange/addressbook/menu/AddressbookMenu.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;
-
-import java.text.MessageFormat;
-import java.util.List;
-import org.mxchange.addressbook.client.AddressbookClient;
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;
-import org.mxchange.jcore.client.Client;
-
-/**
- * Utility class for menu structure
- * <p>
- * @author Roland Haeder
- */
-public class AddressbookMenu extends BaseMenu {
-
-	/**
-	 * Copies entries for given type into the menu list
-	 * <p>
-	 * @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) {
-		// Some instances must be set
-		if (null == menuList) {
-			// Abort here
-			throw new NullPointerException("menuList is null"); //NOI18N
-		} else if (null == client) {
-			// Abort here
-			throw new NullPointerException("contact is null"); //NOI18N
-		} else if (!(client instanceof AddressbookClient)) {
-			// Not correct instance
-			throw new IllegalArgumentException(MessageFormat.format("client{0} must implement AddressbookClient", client));
-		}
-
-		// Cast client to proper interface
-		AddressbookClient c = (AddressbookClient) client;
-
-		// Get list size
-		int size = menuList.size();
-
-		// Depends on type
-		switch (menuType) {
-			case "main": // Main menu //NOI18N
-				// Enter own data
-				menuList.add(c.getMenuItem('1', "Eigene Adresse anlegen"));
-
-				// Change own data
-				menuList.add(c.getMenuItem('2', "Eigene Adresse ändern"));
-
-				// Add new addess
-				menuList.add(c.getMenuItem('3', "Neue Adresse hinzufügen"));
-
-				// List entries
-				menuList.add(c.getMenuItem('4', "Adressbuch anzeigen"));
-
-				// Address search
-				menuList.add(c.getMenuItem('5', "Adresse suchen"));
-
-				// Change other address
-				menuList.add(c.getMenuItem('6', "Adresse ändern"));
-
-				// Delete other address
-				menuList.add(c.getMenuItem('7', "Adresse löschen"));
-
-				// Always last line: Exit program
-				menuList.add(c.getMenuItem('0', "Programm verlassen"));
-				break;
-
-			default: // Not supported
-				System.err.println(MessageFormat.format("Menu type '{0}' ont supported", menuType)); //NOI18N
-				System.exit(1);
-		}
-
-		// Size must have changed to more entries than before
-		assert (menuList.size() > size);
-	}
-
-}
diff --git a/src/org/mxchange/addressbook/menu/BaseMenu.java b/src/org/mxchange/addressbook/menu/BaseMenu.java
deleted file mode 100644
index cf5b916..0000000
--- a/src/org/mxchange/addressbook/menu/BaseMenu.java
+++ /dev/null
@@ -1,110 +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;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.mxchange.addressbook.BaseAddressbookSystem;
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;
-import org.mxchange.jcore.client.Client;
-
-/**
- * A general menu class
- * <p>
- * @author Roland Haeder
- */
-public abstract class BaseMenu extends BaseAddressbookSystem implements Menu {
-
-	/**
-	 * Menu list
-	 */
-	private List<SelectableMenuItem> menuList;
-
-	/**
-	 * No instance from this object
-	 */
-	protected BaseMenu () {
-	}
-
-	@Override
-	public int getMenuItemsCount () {
-		return this.menuList.size();
-	}
-
-	@Override
-	public Iterator<SelectableMenuItem> getMenuItemsIterator () {
-		return this.menuList.iterator();
-	}
-
-	@Override
-	public void show (final Client client) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("client={0} CALLED!", client)); //NOI18N
-
-		// Client must not be null
-		if (null == client) {
-			// Abort here
-			throw new NullPointerException("client is null"); //NOI18N
-		}
-
-		// Get values
-		Iterator<SelectableMenuItem> iterator = this.menuList.iterator();
-
-		// Debug message
-		this.getLogger().logDebug("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);
-		}
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-
-	/**
-	 * Getter for menu list
-	 * <p>
-	 * @return	menuList List of menu entries
-	 */
-	protected final List<SelectableMenuItem> getMenuList () {
-		return this.menuList;
-	}
-
-	/**
-	 * Initializes menu
-	 * <p>
-	 * @param menuType	Menu type to initialize
-	 * @param client CLient to call back
-	 */
-	protected void initMenu (final String menuType, final Client client) {
-		// Trace message
-		this.getLogger().logTrace(MessageFormat.format("menuType={0},client={1} - CALLED!", menuType, client)); //NOI18N
-
-		// Init menu list
-		this.menuList = new ArrayList<>(5);
-
-		// Trace message
-		this.getLogger().logTrace("EXIT!"); //NOI18N
-	}
-}
diff --git a/src/org/mxchange/addressbook/menu/Menu.java b/src/org/mxchange/addressbook/menu/Menu.java
deleted file mode 100644
index a0ba62f..0000000
--- a/src/org/mxchange/addressbook/menu/Menu.java
+++ /dev/null
@@ -1,50 +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;
-
-import java.util.Iterator;
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;
-import org.mxchange.jcore.client.Client;
-
-/**
- * An interface for menus
- * <p>
- * @author Roland Haeder TODO find better name
- */
-public interface Menu {
-
-	/**
-	 * Size of all menu items
-	 * <p>
-	 * @return
-	 */
-	public int getMenuItemsCount ();
-
-	/**
-	 * "Getter" for an iterator on all menu items of the current menu
-	 * <p>
-	 * @return Iterator on all menu items
-	 */
-	public Iterator<SelectableMenuItem> getMenuItemsIterator ();
-
-	/**
-	 * Shows this menu
-	 * <p>
-	 * @param client Client instance
-	 */
-	public void show (final Client client);
-}
diff --git a/src/org/mxchange/addressbook/menu/MenuTools.java b/src/org/mxchange/addressbook/menu/MenuTools.java
deleted file mode 100644
index 87f8c11..0000000
--- a/src/org/mxchange/addressbook/menu/MenuTools.java
+++ /dev/null
@@ -1,75 +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;
-
-import java.util.Iterator;
-import java.util.Map;
-import org.mxchange.addressbook.BaseAddressbookSystem;
-import org.mxchange.addressbook.menu.item.SelectableMenuItem;
-import org.mxchange.jcore.exceptions.MenuInitializationException;
-
-/**
- * Menu utilities
- * <p>
- * @author Roland Haeder
- */
-public class MenuTools extends BaseAddressbookSystem {
-
-	/**
-	 * Gets an array with all available access keys back from given menu map.
-	 * This can later be handle to the client's enterChar() method.
-	 * <p>
-	 * @param menus A Map with all menus and their entries
-	 * @param menuType Menu type
-	 * @return An array with available access chars
-	 * @throws org.mxchange.jcore.exceptions.MenuInitializationException If the menu cannot be initialized
-	 */
-	public static char[] getAccessKeysFromMenuMap (final Map<String, Menu> menus, final String menuType) throws MenuInitializationException {
-		// First search for the proper menu class
-		Menu menu = menus.get(menuType);
-
-		// Is it there?
-		if (!(menu instanceof Menu)) {
-			// Not found
-			throw new MenuInitializationException(menu, menuType);
-		}
-
-		// 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.logDebug("item=" + item);
-
-			// Get access key from item and add it to the array
-			accessKeys[i] = item.getAccessKey();
-			//* NOISY-DEBUG: */ logger.logDebug("accessKeys[" + i + "]=" + accessKeys[i]);
-
-			// Increment counter
-			i++;
-		}
-
-		// Return finished array
-		return accessKeys;
-	}
-}
diff --git a/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java b/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java
deleted file mode 100644
index 473e9e4..0000000
--- a/src/org/mxchange/addressbook/menu/item/BaseMenuItem.java
+++ /dev/null
@@ -1,28 +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.item;
-
-import org.mxchange.addressbook.BaseAddressbookSystem;
-
-/**
- * A general menu item class
- * <p>
- * @author Roland Haeder
- */
-public abstract class BaseMenuItem extends BaseAddressbookSystem {
-
-}
diff --git a/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java b/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java
deleted file mode 100644
index 59758f8..0000000
--- a/src/org/mxchange/addressbook/menu/item/SelectableMenuItem.java
+++ /dev/null
@@ -1,49 +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.item;
-
-import org.mxchange.jcore.FrameworkInterface;
-import org.mxchange.jcore.client.Client;
-
-/**
- * A selectable menu item intereface
- * <p>
- * @author Roland Haeder
- */
-public interface SelectableMenuItem extends FrameworkInterface {
-
-	/**
-	 * Access key
-	 * <p>
-	 * @return the accessKey
-	 */
-	public char getAccessKey ();
-
-	/**
-	 * Text to user
-	 * <p>
-	 * @return the text
-	 */
-	public String getText ();
-
-	/**
-	 * Shows this menu item
-	 * <p>
-	 * @param client Client instance
-	 */
-	public void show (final Client client);
-}
diff --git a/src/org/mxchange/addressbook/model/addressbooks/AddressbookSessionBeanRemote.java b/src/org/mxchange/addressbook/model/addressbooks/AddressbookSessionBeanRemote.java
new file mode 100644
index 0000000..93e6bb3
--- /dev/null
+++ b/src/org/mxchange/addressbook/model/addressbooks/AddressbookSessionBeanRemote.java
@@ -0,0 +1,29 @@
+/*
+ * 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.addressbooks;
+
+import java.io.Serializable;
+import javax.ejb.Remote;
+
+/**
+ * A remote session interface for addressbook handling
+ * <p>
+ * @author Roland Haeder
+ */
+@Remote
+public interface AddressbookSessionBeanRemote extends Serializable {
+}