From 62aa219fc59fdb351aa2cd1c4e6012c8eb4f6634 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Thu, 21 Apr 2016 18:02:05 +0200
Subject: [PATCH] Continued with contact data editing (admin): - added instance
 to helper - renamed editFooData() to changeFooData() - added handling
 contactId - added form (with include) - added method
 copyContactToController() - added admin helper injection
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 ...AddressbookAdminContactWebRequestBean.java | 102 +++++++++++++++++-
 ...sbookAdminContactWebRequestController.java |   7 ++
 .../AddressbookAdminWebRequestController.java |  20 ++++
 .../AddressbookAdminWebRequestHelper.java     |  44 +++++++-
 .../AddressbookAdminUserWebRequestBean.java   |   2 +-
 ...ressbookAdminUserWebRequestController.java |   2 +-
 .../localization/bundle_de_DE.properties      |   2 +-
 .../localization/bundle_en_US.properties      |   2 +-
 web/admin/contact/admin_contact_edit.xhtml    |  28 ++++-
 9 files changed, 197 insertions(+), 12 deletions(-)

diff --git a/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java
index 93c7f7e9..af146c08 100644
--- a/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java
+++ b/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java
@@ -28,12 +28,17 @@ import javax.inject.Named;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
+import org.mxchange.addressbook.beans.helper.AddressbookAdminWebRequestController;
 import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jcontacts.contact.ContactSessionBeanRemote;
 import org.mxchange.jcontacts.contact.gender.Gender;
+import org.mxchange.jcontacts.contact.utils.ContactUtils;
 import org.mxchange.jcountry.data.Country;
+import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
+import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
 import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
-import org.mxchange.jusercore.events.user.AdminAddedUserEvent;
+import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
+import org.mxchange.jusercore.events.user.update.AdminUserDataUpdatedEvent;
 
 /**
  * A user bean (controller)
@@ -56,6 +61,12 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo
 	@Any
 	private Event<AdminAddedUserEvent> addedUserEvent;
 
+	/**
+	 * Admin helper instance
+	 */
+	@Inject
+	private AddressbookAdminWebRequestController adminHelper;
+
 	/**
 	 * Birth day
 	 */
@@ -196,15 +207,48 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo
 		}
 	}
 
+	@Override
+	public String changeContactData () {
+		// Get contact instance
+		Contact contact = this.adminHelper.getContact();
+
+		// Check if contact instance is in helper and valid
+		if (null == contact) {
+			// Throw NPE
+			throw new NullPointerException("adminHelper.contact is null"); //NOI18N
+		} else if (contact.getContactId() == null) {
+			// Throw NPE again
+			throw new NullPointerException("adminHelper.contact.contactId is null"); //NOI18N //NOI18N
+		} else if (contact.getContactId() < 1) {
+			// Invalid id
+			throw new IllegalStateException(MessageFormat.format("adminHelper.contact.contactId={0} is invalid", contact.getContactId())); //NOI18N
+		}
+
+		// Update all data in contact
+		this.updateContactData(contact);
+
+		// Call EJB for updating contact data
+		Contact updatedContact = this.contactBean.updateContactData(contact);
+
+		// Update list
+		this.updateList(updatedContact);
+
+		// Fire event
+		this.updatedContactDataEvent.fire(new AdminUserDataUpdatedEvent(updatedContact));
+
+		// Return to contact list (for now)
+		return "admin_list_contact"; //NOI18N
+	}
+
 	@Override
 	public void copyContactToController (final Contact contact) {
 		// The contact instance must be valid
 		if (null == contact) {
 			// Throw NPE again
-			throw new NullPointerException("this.user.userContact is null");
+			throw new NullPointerException("contact is null"); //NOI18N
 		} else if (contact.getContactId() < 1) {
 			// Not valid
-			throw new IllegalStateException(MessageFormat.format("this.user.userContact.contactId={0} is not valid.", contact.getContactId()));
+			throw new IllegalStateException(MessageFormat.format("contact.contactId={0} is not valid.", contact.getContactId())); //NOI18N
 		}
 
 		// Set all fields: contact
@@ -476,4 +520,56 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo
 	public void init () {
 	}
 
+	/**
+	 * Updates all data in contact instance.
+	 * <p>
+	 * @param contact Contact instance
+	 */
+	private void updateContactData (final Contact contact) {
+		// Contact instance should be valid
+		if (null == contact) {
+			// Throw NPE
+			throw new NullPointerException("contact is null"); //NOI18N
+		} else if (contact.getContactId() == null) {
+			// Throw NPE again
+			throw new NullPointerException("contact.contactId is null"); //NOI18N //NOI18N
+		} else if (contact.getContactId() < 1) {
+			// Invalid id
+			throw new IllegalStateException(MessageFormat.format("contact.contactId={0} is invalid", contact.getContactId())); //NOI18N
+		}
+
+		// Update all fields
+		contact.setContactGender(this.getGender());
+		contact.setContactFirstName(this.getFirstName());
+		contact.setContactFamilyName(this.getFamilyName());
+		contact.setContactStreet(this.getStreet());
+		contact.setContactHouseNumber(this.getHouseNumber());
+		contact.setContactZipCode(this.getZipCode());
+		contact.setContactCity(this.getCity());
+		contact.setContactCountry(this.getCountry());
+
+		// Update contact's cellphone number
+		ContactUtils.updateCellPhoneNumber(contact, this.getCellphoneCarrier(), this.getCellphoneNumber());
+
+		// Is there a phone number?
+		if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) {
+			// Debug message
+			System.out.println(MessageFormat.format("updateContactData: phoneId={0}", contact.getContactLandLineNumber().getPhoneId())); //NOI18N
+
+			// Yes, then update as well
+			contact.getContactLandLineNumber().setPhoneAreaCode(this.getPhoneAreaCode());
+			contact.getContactLandLineNumber().setPhoneNumber(this.getPhoneNumber());
+		}
+
+		// Is there a fax number?
+		if (contact.getContactFaxNumber() instanceof DialableFaxNumber) {
+			// Debug message
+			System.out.println(MessageFormat.format("updateContactData: faxId={0}", contact.getContactFaxNumber().getPhoneId())); //NOI18N
+
+			// Yes, then update as well
+			contact.getContactFaxNumber().setPhoneAreaCode(this.getFaxAreaCode());
+			contact.getContactFaxNumber().setPhoneNumber(this.getFaxNumber());
+		}
+	}
+
 }
diff --git a/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestController.java b/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestController.java
index 6de461ba..b737bea2 100644
--- a/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestController.java
+++ b/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestController.java
@@ -37,6 +37,13 @@ public interface AddressbookAdminContactWebRequestController extends Serializabl
 	 */
 	void copyContactToController (final Contact contact);
 
+	/**
+	 * Edits cuirrently loaded contact's data in database.
+	 * <p>
+	 * @return Redirect outcome
+	 */
+	String changeContactData ();
+
 	/**
 	 * Getter for cellphone id
 	 * <p>
diff --git a/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestController.java b/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestController.java
index 24f2a10c..fb9cea97 100644
--- a/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestController.java
+++ b/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestController.java
@@ -17,6 +17,7 @@
 package org.mxchange.addressbook.beans.helper;
 
 import java.io.Serializable;
+import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jusercore.model.user.User;
 
 /**
@@ -45,4 +46,23 @@ public interface AddressbookAdminWebRequestController extends Serializable {
 	 */
 	void copyUserToController ();
 
+	/**
+	 * Getter for contact instance
+	 * <p>
+	 * @return Contact instance
+	 */
+	Contact getContact ();
+
+	/**
+	 * Setter for contact instance
+	 * <p>
+	 * @param contact Contact instance
+	 */
+	void setContact (final Contact contact);
+
+	/**
+	 * Copies currently set contact instance's data to adminContactController
+	 */
+	void copyContactToController ();
+
 }
diff --git a/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestHelper.java b/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestHelper.java
index 9c599d16..bf8080af 100644
--- a/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestHelper.java
+++ b/src/java/org/mxchange/addressbook/beans/helper/AddressbookAdminWebRequestHelper.java
@@ -51,6 +51,11 @@ public class AddressbookAdminWebRequestHelper implements AddressbookAdminWebRequ
 	@Inject
 	private AddressbookAdminUserWebRequestController adminUserController;
 
+	/**
+	 * Contact instance
+	 */
+	private Contact contact;
+
 	/**
 	 * User instance
 	 */
@@ -62,6 +67,30 @@ public class AddressbookAdminWebRequestHelper implements AddressbookAdminWebRequ
 	public AddressbookAdminWebRequestHelper () {
 	}
 
+	@Override
+	public void copyContactToController () {
+		// Log message
+		System.out.println("AdminHelper::copyContactToController - CALLED!"); //NOI18N
+
+		// Validate user instance
+		if (this.getContact() == null) {
+			// Throw NPE
+			throw new NullPointerException("this.contact is null"); //NOI18N
+		} else if (this.getContact().getContactId() == null) {
+			// Throw NPE again
+			throw new NullPointerException("this.contact.contactId is null"); //NOI18N
+		} else if (this.getContact().getContactId() < 1) {
+			// Not valid
+			throw new IllegalStateException(MessageFormat.format("this.contact.contactId={0} is not valid.", this.getContact().getContactId())); //NOI18N
+		}
+
+		// Set all fields: user
+		this.adminContactController.copyContactToController(this.getContact());
+
+		// Log message
+		System.out.println("AdminHelper::copyContactToController - EXIT!"); //NOI18N
+	}
+
 	@Override
 	public void copyUserToController () {
 		// Validate user instance
@@ -79,11 +108,18 @@ public class AddressbookAdminWebRequestHelper implements AddressbookAdminWebRequ
 		// Set all fields: user
 		this.adminUserController.setUserName(this.getUser().getUserName());
 
-		// Get contact instance (shortens stuff)
-		Contact contact = this.getUser().getUserContact();
+		// Log message
+		System.out.println("AdminHelper::copyUserToController - EXIT!"); //NOI18N
+	}
 
-		// Call contact controller
-		this.adminContactController.copyContactToController(contact);
+	@Override
+	public Contact getContact () {
+		return this.contact;
+	}
+
+	@Override
+	public void setContact (final Contact contact) {
+		this.contact = contact;
 	}
 
 	@Override
diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java
index 70860336..fbaad336 100644
--- a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java
+++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java
@@ -237,7 +237,7 @@ public class AddressbookAdminUserWebRequestBean implements AddressbookAdminUserW
 	}
 
 	@Override
-	public String editUserData () {
+	public String changeUserData () {
 		// Get user instance
 		User user = this.adminHelper.getUser();
 
diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestController.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestController.java
index 9433b920..b26579cd 100644
--- a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestController.java
+++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestController.java
@@ -76,7 +76,7 @@ public interface AddressbookAdminUserWebRequestController extends Serializable {
 	 * <p>
 	 * @return Redirect outcome
 	 */
-	String editUserData();
+	String changeUserData ();
 
 	/**
 	 * Getter for user name
diff --git a/src/java/org/mxchange/localization/bundle_de_DE.properties b/src/java/org/mxchange/localization/bundle_de_DE.properties
index 304eb362..3ed960a6 100644
--- a/src/java/org/mxchange/localization/bundle_de_DE.properties
+++ b/src/java/org/mxchange/localization/bundle_de_DE.properties
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 Cho-Time GmbH
+# Copyright (C) 2016 Roland Haeder
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as
diff --git a/src/java/org/mxchange/localization/bundle_en_US.properties b/src/java/org/mxchange/localization/bundle_en_US.properties
index d0342a28..f1c4b8aa 100644
--- a/src/java/org/mxchange/localization/bundle_en_US.properties
+++ b/src/java/org/mxchange/localization/bundle_en_US.properties
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 Cho-Time GmbH
+# Copyright (C) 2016 Roland Haeder
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as
diff --git a/web/admin/contact/admin_contact_edit.xhtml b/web/admin/contact/admin_contact_edit.xhtml
index 9397ecfd..1df661ec 100644
--- a/web/admin/contact/admin_contact_edit.xhtml
+++ b/web/admin/contact/admin_contact_edit.xhtml
@@ -8,6 +8,11 @@
 	xmlns:f="http://xmlns.jcp.org/jsf/core"
 	>
 
+	<f:metadata>
+		<f:viewParam name="contactId" value="#{adminHelper.contact}" converter="UserConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_CONTACT_ID_NOT_SET}" />
+		<f:viewAction action="#{adminHelper.copyContactToController()}" />
+	</f:metadata>
+
 	<ui:composition template="/WEB-INF/templates/admin/admin_base.tpl">
 		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_EDIT_CONTACT}</ui:define>
 
@@ -16,7 +21,28 @@
 		</ui:define>
 
 		<ui:define name="content">
-			Here goes your content.
+			<h:outputText styleClass="errors" value="#{msg.ERROR_CONTACT_ID_NOT_FOUND}" rendered="#{empty adminHelper.contact}" />
+
+			<h:form id="admin_edit_user" rendered="#{not empty adminHelper.user}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.ADMIN_EDIT_CONTACT_TITLE}
+					</div>
+
+					<div class="para notice">
+						#{msg.ADMIN_PERSONAL_DATA_MINIMUM_NOTICE}
+					</div>
+
+					<ui:include src="/WEB-INF/templates/admin/contact/admin_form_contact_data.tpl">
+						<ui:param name="mode" value="edit" />
+					</ui:include>
+
+					<div class="table_footer">
+						<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+						<h:commandButton class="submit" type="submit" id="register" value="#{msg.BUTTON_ADMIN_EDIT_CONTACT}" action="#{adminUserController.changeContactData()}" />
+					</div>
+				</div>
+			</h:form>
 		</ui:define>
 	</ui:composition>
 </html>
-- 
2.39.5