From 59a751b134cdf4bd0f30e3065c6cf544edcf027c Mon Sep 17 00:00:00 2001
From: Roland Haeder <roland@mxchange.org>
Date: Tue, 28 Jul 2015 14:20:57 +0200
Subject: [PATCH] =?utf8?q?Introduced=20more=20methods=20+=20added=20first?=
 =?utf8?q?=20dialog=20call=20(yes,=20it=20is=20still=20visible=20by=20star?=
 =?utf8?q?tup=20as=20I'm=20not=20finished=20with=20it)=20+=20many=20initFo?=
 =?utf8?q?o()=20methods=20now=20expect=20a=20JDialog=20instance=20Signed-o?=
 =?utf8?q?ff-by:Roland=20H=C3=A4der=20<roland@mxchange.org>?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 .../client/gui/AddressbookFrame.java          | 100 ++++++++++++++++--
 .../addressbook/client/gui/ClientFrame.java   |  13 +++
 .../addressbook/client/gui/SwingClient.java   |  47 ++++----
 .../localization/bundle_de_DE.properties      |   5 +-
 .../localization/bundle_en_US.properties      |   5 +-
 .../manager/contact/ContactManager.java       |  17 ++-
 6 files changed, 144 insertions(+), 43 deletions(-)

diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java b/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java
index 92e8dfe..ea74026 100644
--- a/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java
+++ b/Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java
@@ -46,6 +46,7 @@ import javax.swing.table.TableModel;
 import org.mxchange.addressbook.BaseFrameworkSystem;
 import org.mxchange.addressbook.application.AddressbookApplication;
 import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.contact.Contact;
 import org.mxchange.addressbook.contact.Gender;
 import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException;
 import org.mxchange.addressbook.model.contact.ContactTableModel;
@@ -140,6 +141,24 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 		this.setClient(client);
 	}
 
+	@Override
+	public Contact doEnterOwnData () {
+		// Is the "add contact" window visible?
+		if (this.addContact.isVisible()) {
+			// Something bad happened
+			throw new IllegalStateException("Window addContact is already visible.");
+		}
+
+		// Disable main window
+		this.frame.setEnabled(false);
+
+		// Make other window visible
+		this.addContact.setVisible(true);
+
+		// Return value is not supported
+		return null;
+	}
+
 	/**
 	 * Shutdown this frame
 	 */
@@ -149,6 +168,19 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 		this.updateStatus("shutdown"); //NOI18N
 	}
 
+
+	/**
+	 * Enables main window (frame)
+	 */
+	@Override
+	public void enableMainWindow () {
+		// Enable it again
+		this.frame.setEnabled(true);
+
+		// Request focus for this window
+		this.frame.requestFocus();
+	}
+
 	/**
 	 * Setups the frame, do not set isInitialized here
 	 *
@@ -262,6 +294,12 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 		return title;
 	}
 
+	/**
+	 * Initializes "add" and "cancel" buttons
+	 */
+	private void initAddCancelButtons () {
+	}
+
 	/**
 	 * Initializes "add contact" dialog
 	 */
@@ -284,32 +322,58 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 		// Initial dimension
 		this.addContact.setSize(500, 500);
 
+		// And it is not resizeable
+		this.addContact.setResizable(false);
+
 		/*
 		 * Add listener which asks for confirmation, if data has been entered
 		 * but not saved yet. The user may appriciate this ... ;-)
 		 *
 		 * @TODO Unfinished
 		 */
+		this.addContact.addWindowListener(new WindowAdapter() {
+			/**
+			 * Invoked when a window has been closed.
+			 */
+			@Override
+			public void windowClosed (final WindowEvent e) {
+				// Enable main window again
+				AddressbookFrame.getSelfInstance(null).enableMainWindow();
+			}
+
+			/**
+			 * 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) {
+				e.getWindow().dispose();
+			}
+		});
+
 		// Init 3 panels:
 		// 1) "name" panel
-		initNameDataPanel();
+		initNameDataPanel(this.addContact);
 
 		// 2) "address" panel
-		initAddressDataPanel();
+		initAddressDataPanel(this.addContact);
 
 		// 3) "other" panel
-		initOtherDataPanel();
+		initOtherDataPanel(this.addContact);
+
+		// 4) "Add" and "Cancel" buttons
+		initAddCancelButtons();
 
 		// x)Only for developing:
-		/*
-		 * DEBUG:
-		 */ this.addContact.setVisible(true);
+		/* DEBUG: */ this.addContact.setVisible(true);
 	}
 
 	/**
 	 * Initializes address panel
+	 *
+	 * @param dialog A JDialog instance to this components to
 	 */
-	private void initAddressDataPanel () {
+	private void initAddressDataPanel (final JDialog dialog) {
 		// Panel "address" input boxes
 		JPanel addressPanel = new JPanel();
 		addressPanel.setLayout(new BoxLayout(addressPanel, BoxLayout.Y_AXIS));
@@ -437,7 +501,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 		addressPanel.add(zipCityPanel);
 
 		// Add panel to dialog
-		this.addContact.add(addressPanel);
+		dialog.add(addressPanel);
 	}
 
 	/**
@@ -584,8 +648,10 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 
 	/**
 	 * Initializes name panel
+	 *
+	 * @param dialog A JDialog instance to this components to
 	 */
-	private void initNameDataPanel () {
+	private void initNameDataPanel (final JDialog dialog) {
 		// Panel "name" input boxes
 		JPanel namePanel = new JPanel();
 		namePanel.setLayout(new BoxLayout(namePanel, BoxLayout.Y_AXIS));
@@ -651,13 +717,25 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
 		namePanel.add(fPanel);
 
 		// Finally add panel to dialog
-		this.addContact.add(namePanel);
+		dialog.add(namePanel);
 	}
 
 	/**
 	 * Initializes "other" data panel
+	 *
+	 * @param dialog A JDialog instance to this components to
+	 * @todo Fill this with life
 	 */
-	private void initOtherDataPanel () {
+	private void initOtherDataPanel (final JDialog dialog) {
+		// Panel "other" input boxes
+		JPanel otherPanel = new JPanel();
+		otherPanel.setLayout(new BoxLayout(otherPanel, BoxLayout.Y_AXIS));
+
+		// Set border to titled version
+		otherPanel.setBorder(new TitledBorder(this.generateBorderTitle("other"))); //NOI18N
+
+		// Finally add panel to dialog
+		dialog.add(otherPanel);
 	}
 
 	/**
diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java b/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java
index 6a7d6b0..ce9b49f 100644
--- a/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java
+++ b/Addressbook/src/org/mxchange/addressbook/client/gui/ClientFrame.java
@@ -18,6 +18,7 @@ package org.mxchange.addressbook.client.gui;
 
 import org.mxchange.addressbook.FrameworkInterface;
 import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.contact.Contact;
 import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException;
 
 /**
@@ -27,11 +28,23 @@ import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException;
  */
 public interface ClientFrame extends FrameworkInterface {
 
+	/**
+	 * Shows the user the "add contact" form with some special text
+	 * 
+	 * @return Contact instance
+	 */
+	public Contact doEnterOwnData ();
+
 	/**
 	 * Shutdown this frame
 	 */
 	public void doShutdown ();
 
+	/**
+	 * Enables main window (frame)
+	 */
+	public void enableMainWindow ();
+
 	/**
 	 * Setups the frame (and starts it). You have to call init() before you can
 	 * call this method.
diff --git a/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java b/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java
index 17d3e1b..a8c1a72 100644
--- a/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java
+++ b/Addressbook/src/org/mxchange/addressbook/client/gui/SwingClient.java
@@ -46,7 +46,7 @@ public class SwingClient extends BaseClient implements Client {
 		super();
 
 		// Debug message
-		this.getLogger().trace("CALLED!");
+		this.getLogger().trace("CALLED!"); //NOI18N
 
 		// Set application instance
 		this.setApplication(application);
@@ -57,32 +57,32 @@ public class SwingClient extends BaseClient implements Client {
 
 	@Override
 	public void displayAddressBox (final Contact contact) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public void displayNameBox (final Contact contact) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public void displayOtherDataBox (final Contact contact) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public void doChangeOwnAddressData (Contact contact) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public void doChangeOwnNameData (Contact contact) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public void doChangeOwnOtherData (Contact contact) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	/**
@@ -92,7 +92,8 @@ public class SwingClient extends BaseClient implements Client {
 	 */
 	@Override
 	public Contact doEnterOwnData () {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		// Deligate this call to the frame
+		return this.frame.doEnterOwnData();
 	}
 
 	/**
@@ -101,7 +102,7 @@ public class SwingClient extends BaseClient implements Client {
 	@Override
 	public void doShutdown () {
 		// Debug message
-		this.getLogger().trace("CALLED!");
+		this.getLogger().trace("CALLED!"); //NOI18N
 
 		// Parent call
 		super.doShutdown();
@@ -111,7 +112,7 @@ public class SwingClient extends BaseClient implements Client {
 
 		// @TODO Add other shutdown stuff
 		// Debug message
-		this.getLogger().trace("EXIT!");
+		this.getLogger().trace("EXIT!"); //NOI18N
 	}
 
 	@Override
@@ -124,27 +125,27 @@ public class SwingClient extends BaseClient implements Client {
 
 	@Override
 	public char enterChar (final char[] validChars, String message) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public Gender enterGender (final String message) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@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.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@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.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public Menu getMenu (final String menuType) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	/**
@@ -157,7 +158,7 @@ public class SwingClient extends BaseClient implements Client {
 	@Override
 	public SelectableMenuItem getMenuItem (final char accessKey, final String text) {
 		// Debug message
-		this.getLogger().trace("CALLED!");
+		this.getLogger().trace("CALLED!"); //NOI18N
 
 		// Returns null as the menu is now no longer controlled here.
 		return null;
@@ -169,7 +170,7 @@ public class SwingClient extends BaseClient implements Client {
 	@Override
 	public void init () {
 		// Debug message
-		this.getLogger().trace("CALLED!");
+		this.getLogger().trace("CALLED!"); //NOI18N
 
 		// Init contact manager here
 		this.initContactManager();
@@ -186,12 +187,12 @@ public class SwingClient extends BaseClient implements Client {
 		this.frame.setupFrame(this);
 
 		// Debug message
-		this.getLogger().trace("EXIT!");
+		this.getLogger().trace("EXIT!"); //NOI18N
 	}
 
 	@Override
 	public void outputMessage (final String message) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
@@ -204,20 +205,20 @@ public class SwingClient extends BaseClient implements Client {
 
 	@Override
 	public void showEntry (final SelectableMenuItem item) {
-		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	@Override
 	public void showWelcome () {
 		// Debug message
-		this.getLogger().trace("CALLED!");
+		this.getLogger().trace("CALLED!"); //NOI18N
 
 		// 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.
+		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. //NOI18N
 	}
 
 	/**
@@ -226,6 +227,6 @@ public class SwingClient extends BaseClient implements Client {
 	@Override
 	protected final void fillMenuMap () {
 		// Nothing to fill here as the Swing frame is handling this all
-		throw new UnsupportedOperationException("Not implemented.");
+		throw new UnsupportedOperationException("Not implemented."); //NOI18N
 	}
 }
diff --git a/Addressbook/src/org/mxchange/addressbook/localization/bundle_de_DE.properties b/Addressbook/src/org/mxchange/addressbook/localization/bundle_de_DE.properties
index 570c12f..4cf5579 100644
--- a/Addressbook/src/org/mxchange/addressbook/localization/bundle_de_DE.properties
+++ b/Addressbook/src/org/mxchange/addressbook/localization/bundle_de_DE.properties
@@ -13,6 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+AddressbookFrame.border.name.title.text=Anrede, Vorname, Nachname:
+AddressbookFrame.border.address.title.text=Anschrift:
+AddressbookFrame.border.other.title.text=Andere Angaben:
 AddressbookFrame.menu.file.text=Datei
 AddressbookFrame.menu.addressbook.text=Adressbuch
 AddressbookFrame.statusLabel.initializing.text=Initialisiere ...
@@ -26,8 +29,6 @@ AddressbookFrame.menuItem.editOwnData.text=Eigene Adresse \u00e4ndern
 AddressbookFrame.menuItem.editOwnData.toolTipText=Erlaubt das \u00c4ndern eigener Daten.
 AddressbookFrame.dialog.addContact.title.text=Neue Adresse hinzuf\u00fcgen
 AddressbookFrame.main.title.text=Adressen auflisten
-AddressbookFrame.border.name.title.text=Anrede, Vorname, Nachname:
-AddressbookFrame.border.address.title.text=Anschrift:
 AddressbookFrame.gender.text=Anrede:
 AddressbookFrame.gender.tooltipText=W\u00e4hlen Sie die Anrede aus.
 AddressbookFrame.surname.text=Vorname:
diff --git a/Addressbook/src/org/mxchange/addressbook/localization/bundle_en_US.properties b/Addressbook/src/org/mxchange/addressbook/localization/bundle_en_US.properties
index 7800af3..4126173 100644
--- a/Addressbook/src/org/mxchange/addressbook/localization/bundle_en_US.properties
+++ b/Addressbook/src/org/mxchange/addressbook/localization/bundle_en_US.properties
@@ -13,6 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+AddressbookFrame.border.name.title.text=Gender, surname, family name:
+AddressbookFrame.border.address.title.text=Address:
+AddressbookFrame.border.other.title.text=Other data:
 AddressbookFrame.menu.file.text=File
 AddressbookFrame.menu.addressbook.text=Addressbook
 AddressbookFrame.statusLabel.initializing.text=Initializing ...
@@ -26,8 +29,6 @@ AddressbookFrame.menuItem.editOwnData.text=Edit own data
 AddressbookFrame.menuItem.editOwnData.toolTipText=Allows the user to edit own address data
 AddressbookFrame.dialog.addContact.title.text=Add new address
 AddressbookFrame.main.title.text=List addresses
-AddressbookFrame.border.name.title.text=Gender, surname, family name:
-AddressbookFrame.border.address.title.text=Anschrift:
 AddressbookFrame.gender.text=Gender:
 AddressbookFrame.gender.tooltipText=Choose gender.
 AddressbookFrame.surname.text=Surname:
diff --git a/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java b/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
index 62bcfbd..f502e1e 100644
--- a/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
+++ b/Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
@@ -237,8 +237,11 @@ public class ContactManager extends BaseManager implements ManageableContact {
 		// Deligate this call to the client
 		Contact contact = this.getClient().doEnterOwnData();
 
-		// Add it to contact "book"
-		this.registerContact(contact);
+		// Is it set?
+		if (contact instanceof Contact) {
+			// Add it to contact "book"
+			this.registerContact(contact);
+		}
 	}
 
 	@Override
@@ -474,6 +477,12 @@ public class ContactManager extends BaseManager implements ManageableContact {
 	 */
 	@Override
 	public void registerContact (final Contact contact) {
+		// Sanity check
+		if (contact == null) {
+			// Abort here
+			throw new NullPointerException("contact is null");
+		}
+
 		// Check if contact is found
 		if (this.isContactAlreadyAdded(contact)) {
 			// Contact already added
@@ -484,9 +493,7 @@ public class ContactManager extends BaseManager implements ManageableContact {
 		}
 
 		// Debug message
-	/*
-		 * NOISY-DEBUG:
-		 */ this.getLogger().debug(MessageFormat.format("Adding '{0}' '{1}' at pos '{2}' ...", contact.getSurname(), contact.getFamilyName(), this.size()));
+		/* 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);
-- 
2.39.5