X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fmxchange%2Faddressbook%2Fbeans%2Fcontact%2FAddressbookAdminContactWebRequestBean.java;h=6b77e0c161e1c86c8756322c81a9f60cb7da119c;hb=54e0a0c6198c9c9eb5a2db76ca78565a2b48ccf0;hp=93c7f7e91b9dc3b72316f56b3f4ba125005e129c;hpb=3911252862ccc3e9555f4eec8a82b74aea241abe;p=addressbook-war.git diff --git a/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java index 93c7f7e9..6b77e0c1 100644 --- a/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java +++ b/src/java/org/mxchange/addressbook/beans/contact/AddressbookAdminContactWebRequestBean.java @@ -18,6 +18,8 @@ package org.mxchange.addressbook.beans.contact; import java.text.MessageFormat; import java.util.Date; +import java.util.Iterator; +import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.enterprise.event.Event; @@ -28,15 +30,28 @@ 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.UserContact; import org.mxchange.jcontacts.contact.gender.Gender; +import org.mxchange.jcontacts.contact.utils.ContactUtils; +import org.mxchange.jcontacts.events.contact.add.AdminAddedContactEvent; +import org.mxchange.jcontacts.events.contact.add.AdminContactAddedEvent; +import org.mxchange.jcontacts.events.contact.update.AdminContactUpdatedEvent; +import org.mxchange.jcontacts.events.contact.update.AdminUpdatedContactEvent; +import org.mxchange.jcontacts.exceptions.ContactAlreadyAddedException; import org.mxchange.jcountry.data.Country; +import org.mxchange.jphone.phonenumbers.cellphone.CellphoneNumber; +import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber; +import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber; +import org.mxchange.jphone.phonenumbers.fax.FaxNumber; +import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber; +import org.mxchange.jphone.phonenumbers.landline.LandLineNumber; import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider; -import org.mxchange.jusercore.events.user.AdminAddedUserEvent; /** - * A user bean (controller) + * An administrative user bean (controller) *

* @author Roland Haeder */ @@ -50,11 +65,17 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo private static final long serialVersionUID = 542_145_347_916L; /** - * An event fired when the administrator has added a new user + * An event fired when the administrator has added a new contact */ @Inject @Any - private Event addedUserEvent; + private Event addedContactEvent; + + /** + * Admin helper instance + */ + @Inject + private AddressbookAdminWebRequestController adminHelper; /** * Birth day @@ -91,6 +112,12 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo */ private final ContactSessionBeanRemote contactBean; + /** + * General contact controller + */ + @Inject + private AddressbookContactWebSessionController contactController; + /** * Contact id */ @@ -146,6 +173,21 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo */ private Short houseNumber; + /** + * Whether a cellphone entry has been unlinked + */ + private boolean isCellphoneUnlinked; + + /** + * Whether a fax entry has been unlinked + */ + private boolean isFaxUnlinked; + + /** + * Whether a land-line number has been unlinked + */ + private boolean isLandLineUnlinked; + /** * Land-line id number */ @@ -171,6 +213,13 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo */ private String street; + /** + * An event fired when the administrator has updated contact data + */ + @Inject + @Any + private Event updatedContactEvent; + /** * ZIP code */ @@ -196,15 +245,71 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo } } + @Override + public String addContact () { + // Are all minimum fields set? + if (this.getGender() == null) { + // Throw NPE + throw new NullPointerException("gender is null"); //NOI18N + } else if (this.getFirstName() == null) { + // Throw NPE + throw new NullPointerException("firstName is null"); //NOI18N + } else if (this.getFirstName().isEmpty()) { + // Empty string + throw new IllegalStateException("firstName is empty"); //NOI18N + } else if (this.getFamilyName() == null) { + // Throw NPE + throw new NullPointerException("familyName is null"); //NOI18N + } else if (this.getFamilyName().isEmpty()) { + // Empty string + throw new IllegalStateException("familyName is empty"); //NOI18N + } + + // Create new contact instance + Contact contact = this.createContactInstance(); + + // Default is not same contact + if (this.isSameContactFound(contact)) { + // Already registered + throw new FaceletException(new ContactAlreadyAddedException(contact)); + } + + // Init contact + Contact updatedContact; + + // Try to call EJB + try { + // Call EJB + updatedContact = this.contactBean.addContact(contact); + } catch (final ContactAlreadyAddedException ex) { + // Throw again + throw new FaceletException(ex); + } + + // Fire event + this.addedContactEvent.fire(new AdminContactAddedEvent(updatedContact)); + + // Return outcome + return "admin_list_contact"; //NOI18N + } + + @Override + public List allContacts () { + return this.contactController.allContacts(); + } + @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() == null) { + // Throw NPE again + throw new NullPointerException("contact.contactId is null"); //NOI18N //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 @@ -240,11 +345,84 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo } @Override + public Contact createContactInstance () { + // Generate phone number + DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber()); + DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber()); + DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber()); + + // Create new instance + Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName()); + + // 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, this.isCellphoneUnlinked, this.isLandLineUnlinked, this.isFaxUnlinked); + + // Fire event + this.updatedContactEvent.fire(new AdminContactUpdatedEvent(updatedContact)); + + // Clear bean + this.clear(); + + // Return it + return contact; + } + + @Override + public String editContactData () { + // 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, this.isCellphoneUnlinked, this.isLandLineUnlinked, this.isFaxUnlinked); + + // Fire event + this.updatedContactEvent.fire(new AdminContactUpdatedEvent(updatedContact)); + + // Clear bean + this.clear(); + + // Return to contact list (for now) + return "admin_list_contact"; //NOI18N + } + + @Override + @SuppressWarnings ("ReturnOfDateField") public Date getBirthday () { return this.birthday; } @Override + @SuppressWarnings ("AssignmentToDateFieldFromParameter") public void setBirthday (final Date birthday) { this.birthday = birthday; } @@ -469,6 +647,11 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo this.zipCode = zipCode; } + @Override + public boolean hasContacts () { + return (!this.allContacts().isEmpty()); + } + /** * Post-initialization of this class */ @@ -476,4 +659,104 @@ public class AddressbookAdminContactWebRequestBean implements AddressbookAdminCo public void init () { } + /** + * Clears this bean + */ + private void clear () { + // Clear all data + // - personal data + this.setGender(Gender.UNKNOWN); + this.setFirstName(null); + this.setFamilyName(null); + this.setStreet(null); + this.setHouseNumber(null); + this.setZipCode(null); + this.setCity(null); + this.setCountry(null); + + // - contact data + this.setEmailAddress(null); + this.setPhoneCountry(null); + this.setPhoneAreaCode(null); + this.setPhoneNumber(null); + this.setCellphoneCarrier(null); + this.setCellphoneNumber(null); + this.setFaxCountry(null); + this.setFaxAreaCode(null); + this.setFaxNumber(null); + + // - other data + this.setBirthday(null); + this.setComment(null); + } + + /** + * Checks whether the given contact is found + *

+ * @param contact Contact inastance + * + * @return Wether contact has been found + */ + private boolean isSameContactFound (final Contact contact) { + // Default is not found + boolean IsFound = false; + + // Get iterator + Iterator iterator = this.allContacts().iterator(); + + // Loop through all + while (iterator.hasNext()) { + // Get next contact + Contact next = iterator.next(); + + // Is the same? + if (ContactUtils.isSameContact(contact, next)) { + // Yes, then abort loop + IsFound = false; + break; + } + } + + // Return status + return IsFound; + } + + /** + * Updates all data in contact instance. + *

+ * @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 + this.isCellphoneUnlinked = ContactUtils.updateCellPhoneNumber(contact, this.getCellphoneCarrier(), this.getCellphoneNumber()); + + // Update contact's land-line number + this.isLandLineUnlinked = ContactUtils.updateLandLineNumber(contact, this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber()); + + // Update contact's fax number + this.isFaxUnlinked = ContactUtils.updateFaxNumber(contact, this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber()); + } + }