From: Roland Häder Date: Sun, 18 Mar 2018 21:05:28 +0000 (+0100) Subject: Continued: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=12faad5115ebfb768e753bcfc38ac861d1d0a3bd;p=jcontacts-core.git Continued: - renamed ContactUtils -> Contacts - added public method Contacts.compare() for comparing two contact instances Signed-off-by: Roland Häder --- diff --git a/src/org/mxchange/jcontacts/model/contact/ContactUtils.java b/src/org/mxchange/jcontacts/model/contact/ContactUtils.java deleted file mode 100644 index d39444c..0000000 --- a/src/org/mxchange/jcontacts/model/contact/ContactUtils.java +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (C) 2016 - 2018 Free Software Foundation - * - * 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 . - */ -package org.mxchange.jcontacts.model.contact; - -import java.io.Serializable; -import java.util.Objects; -import org.mxchange.jcountry.model.data.Country; -import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber; -import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber; -import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber; -import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber; -import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber; -import org.mxchange.jphone.model.phonenumbers.mobile.MobileNumber; -import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider; - -/** - * Utilities for contacts - *

- * @author Roland Häder - */ -public class ContactUtils implements Serializable { - - /** - * Serial number - */ - private static final long serialVersionUID = 26_785_734_719_670L; - - /** - * Copies all attributes from other contact object to this - *

- * @param sourceContact Source instance - * @param targetContact Target instance - */ - public static void copyAll (final Contact sourceContact, final Contact targetContact) { - // Contact should be valid - if (null == sourceContact) { - // Throw NPE - throw new NullPointerException("sourceContact is null"); //NOI18N - } else if (null == targetContact) { - // Throw NPE - throw new NullPointerException("targetContact is null"); //NOI18N - } - - // Copy all: - // - base data - targetContact.setContactPersonalTitle(sourceContact.getContactPersonalTitle()); - targetContact.setContactTitle(sourceContact.getContactTitle()); - targetContact.setContactFirstName(sourceContact.getContactFirstName()); - targetContact.setContactFamilyName(sourceContact.getContactFamilyName()); - targetContact.setContactStreet(sourceContact.getContactStreet()); - targetContact.setContactHouseNumber(sourceContact.getContactHouseNumber()); - targetContact.setContactHouseNumberExtension(sourceContact.getContactHouseNumberExtension()); - targetContact.setContactZipCode(sourceContact.getContactZipCode()); - targetContact.setContactCity(sourceContact.getContactCity()); - targetContact.setContactCountry(sourceContact.getContactCountry()); - - // - phone, fax, email - targetContact.setContactLandLineNumber(sourceContact.getContactLandLineNumber()); - targetContact.setContactFaxNumber(sourceContact.getContactFaxNumber()); - targetContact.setContactMobileNumber(sourceContact.getContactMobileNumber()); - - // - other data - targetContact.setContactBirthday(sourceContact.getContactBirthday()); - targetContact.setContactComment(sourceContact.getContactComment()); - targetContact.setContactCreated(sourceContact.getContactCreated()); - targetContact.setContactUpdated(sourceContact.getContactUpdated()); - } - - /** - * Checks whether both contacts are same, but ignoring id number. If you - * want to include id number in comparison, better use Objects.equals() as - * the equal() method is implemented and checks all fields. - *

- * @param contact Contact one - * @param other Contact two - *

- * @return Whether both are the same - */ - public static boolean isSameContact (final Contact contact, final Contact other) { - // Both should not be null - if (null == contact) { - // First contact is null - throw new NullPointerException("contact is null"); //NOI18N - } else if (null == other) { - // Secondcontact is null - throw new NullPointerException("other is null"); //NOI18N - } - - // Check all data fields, except id number - return ((Objects.equals(contact.getContactBirthday(), other.getContactBirthday())) && - (Objects.equals(contact.getContactCity(), other.getContactCity())) && - (Objects.equals(contact.getContactCountry(), other.getContactCountry())) && - (Objects.equals(contact.getContactEmailAddress(), other.getContactEmailAddress())) && - (Objects.equals(contact.getContactFamilyName(), other.getContactFamilyName())) && - (Objects.equals(contact.getContactFirstName(), other.getContactFirstName())) && - (Objects.equals(contact.getContactPersonalTitle(), other.getContactPersonalTitle())) && - (Objects.equals(contact.getContactHouseNumber(), other.getContactHouseNumber())) && - (Objects.equals(contact.getContactStreet(), other.getContactStreet())) && - (Objects.equals(contact.getContactTitle(), other.getContactTitle())) && - (Objects.equals(contact.getContactZipCode(), other.getContactZipCode()))); - } - - /** - * Updates land-line data in contact instance. This method also removes the - * land-line instance if no country is selected. A bean (mostly EJB) should - * then make sure that the land-line entry is being unlinked from contact - * instance or being removed, if no longer used. - *

- * @param contact Contact instance being updated - * @param faxCountry Updated fax number or null - * @param faxAreaCode Updated fax area code or null - * @param faxNumber Updated fax number - *

- * @return Whether the fax number has been unlinked in contact object - */ - public static boolean updateFaxNumber (final Contact contact, final Country faxCountry, final Integer faxAreaCode, final Long faxNumber) { - // At least contact must be valid - if (null == contact) { - // Throw NPE - throw new NullPointerException("contact is null"); //NOI18N - } - - // Default is not unlinked - boolean isUnlinked = false; - - // Is there a fax instance? - if (contact.getContactFaxNumber() instanceof DialableFaxNumber) { - // Found existing fax number, remove it? - if ((null == faxCountry) || (null == faxAreaCode) || (null == faxNumber)) { - // Remove existing instance - contact.setContactFaxNumber(null); - - // Mark it as being removed - isUnlinked = true; - } else { - // Set all data - contact.getContactFaxNumber().setPhoneCountry(faxCountry); - contact.getContactFaxNumber().setPhoneAreaCode(faxAreaCode); - contact.getContactFaxNumber().setPhoneNumber(faxNumber); - } - } else if ((faxCountry instanceof Country) && (faxAreaCode > 0) && (faxNumber > 0)) { - // Set new land-line number - DialableFaxNumber fax = new FaxNumber(faxCountry, faxAreaCode, faxNumber); - - // Set it in contact - contact.setContactFaxNumber(fax); - } - - // Return status - return isUnlinked; - } - - /** - * Updates land-line data in contact instance. This method also removes the - * land-line instance if no country is selected. A bean (mostly EJB) should - * then make sure that the land-line entry is being unlinked from contact - * instance or being removed, if no longer used. - *

- * @param contact Contact instance being updated - * @param phoneCountry New phone country or old or null - * @param phoneAreaCode New phone's area code (or old) - * @param phoneNumber New phone number (or old) - *

- * @return Whether the land-line number has been unlinked in contact object - */ - public static boolean updateLandLineNumber (final Contact contact, final Country phoneCountry, final Integer phoneAreaCode, final Long phoneNumber) { - // At least contact must be valid - if (null == contact) { - // Throw NPE - throw new NullPointerException("contact is null"); //NOI18N - } - - // Default is not unlinked - boolean isUnlinked = false; - - // Is there a land-line instance? - if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) { - // Found existing land-line number, remove it? - if ((null == phoneCountry) || (null == phoneAreaCode) || (null == phoneNumber)) { - // Remove existing instance - contact.setContactLandLineNumber(null); - - // Mark it as being removed - isUnlinked = true; - } else { - // Set all data - contact.getContactLandLineNumber().setPhoneCountry(phoneCountry); - contact.getContactLandLineNumber().setPhoneAreaCode(phoneAreaCode); - contact.getContactLandLineNumber().setPhoneNumber(phoneNumber); - } - } else if ((phoneCountry instanceof Country) && (phoneAreaCode > 0) && (phoneNumber > 0)) { - // Set new land-line number - DialableLandLineNumber landLine = new LandLineNumber(phoneCountry, phoneAreaCode, phoneNumber); - - // Set it in contact - contact.setContactLandLineNumber(landLine); - } - - // Return status - return isUnlinked; - } - - /** - * Updates mobile data in contact instance. This method also removes the - * mobile instance if no provider is selected. A bean (mostly EJB) should - * then make sure that the mobile entry is being unlinked from contact - * instance or being removed, if no longer used. - *

- * @param contact Contact instance to update - * @param mobileProvider New mobile provider (or old) - * @param mobileNumber New mobile number (or old) - *

- * @return Whether the mobile has been unlinked in contact object - */ - public static boolean updateMobileNumber (final Contact contact, final MobileProvider mobileProvider, final Long mobileNumber) { - // At least contact must be valid - if (null == contact) { - // Throw NPE - throw new NullPointerException("contact is null"); //NOI18N - } else if ((mobileProvider instanceof MobileProvider) && (null == mobileNumber)) { - // Mobile provider given, but no number - throw new NullPointerException("mobileNumber is null"); //NOI18N - } - - // Default is not unlinked - boolean isUnlinked = false; - - // Is there a mobile number? - if (contact.getContactMobileNumber() instanceof DialableMobileNumber) { - // Is provider null? - if ((null == mobileProvider) || (null == mobileNumber) || (mobileNumber == 0)) { - // Remove instance - contact.setContactMobileNumber(null); - - // Mark as unlinked - isUnlinked = true; - } else { - // Yes, then update as well - contact.getContactMobileNumber().setMobileProvider(mobileProvider); - contact.getContactMobileNumber().setPhoneNumber(mobileNumber); - } - } else if ((mobileProvider instanceof MobileProvider) && (mobileNumber > 0)) { - // Create new instance - DialableMobileNumber mobile = new MobileNumber(mobileProvider, mobileNumber); - - // Set it in contact - contact.setContactMobileNumber(mobile); - } - - // Return status - return isUnlinked; - } - - /** - * Private constructor for utilities - */ - private ContactUtils () { - } - -} diff --git a/src/org/mxchange/jcontacts/model/contact/Contacts.java b/src/org/mxchange/jcontacts/model/contact/Contacts.java new file mode 100644 index 0000000..86d67dd --- /dev/null +++ b/src/org/mxchange/jcontacts/model/contact/Contacts.java @@ -0,0 +1,302 @@ +/* + * Copyright (C) 2016 - 2018 Free Software Foundation + * + * 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 . + */ +package org.mxchange.jcontacts.model.contact; + +import java.io.Serializable; +import java.util.Objects; +import org.mxchange.jcountry.model.data.Country; +import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber; +import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber; +import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber; +import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber; +import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber; +import org.mxchange.jphone.model.phonenumbers.mobile.MobileNumber; +import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider; + +/** + * Utilities for contacts + *

+ * @author Roland Häder + */ +public class Contacts implements Serializable { + + /** + * Serial number + */ + private static final long serialVersionUID = 26_785_734_719_670L; + + /** + * Compares both contact instances. This method returns -1 if second + * instance is null. + *

+ * @param contact1 Contact instance 1 + * @param contact2 Contact instance 2 + *

+ * @return Comparison value + *

+ * @throws NullPointerException If first instance is null + */ + public static int compare (final Contact contact1, final Contact contact2) { + // Check euqality, then at least first must be given + if (Objects.equals(contact1, contact2)) { + // Both are same + return 0; + } else if (null == contact1) { + // First cannot be null + throw new NullPointerException("contact1 is null"); //NOI18N + } else if (null == contact2) { + // Second is null + return -1; + } + + // Invoke compareTo() method + return contact1.compareTo(contact2); + } + + /** + * Copies all attributes from other contact object to this + *

+ * @param sourceContact Source instance + * @param targetContact Target instance + */ + public static void copyAll (final Contact sourceContact, final Contact targetContact) { + // Contact should be valid + if (null == sourceContact) { + // Throw NPE + throw new NullPointerException("sourceContact is null"); //NOI18N + } else if (null == targetContact) { + // Throw NPE + throw new NullPointerException("targetContact is null"); //NOI18N + } + + // Copy all: + // - base data + targetContact.setContactPersonalTitle(sourceContact.getContactPersonalTitle()); + targetContact.setContactTitle(sourceContact.getContactTitle()); + targetContact.setContactFirstName(sourceContact.getContactFirstName()); + targetContact.setContactFamilyName(sourceContact.getContactFamilyName()); + targetContact.setContactStreet(sourceContact.getContactStreet()); + targetContact.setContactHouseNumber(sourceContact.getContactHouseNumber()); + targetContact.setContactHouseNumberExtension(sourceContact.getContactHouseNumberExtension()); + targetContact.setContactZipCode(sourceContact.getContactZipCode()); + targetContact.setContactCity(sourceContact.getContactCity()); + targetContact.setContactCountry(sourceContact.getContactCountry()); + + // - phone, fax, email + targetContact.setContactLandLineNumber(sourceContact.getContactLandLineNumber()); + targetContact.setContactFaxNumber(sourceContact.getContactFaxNumber()); + targetContact.setContactMobileNumber(sourceContact.getContactMobileNumber()); + + // - other data + targetContact.setContactBirthday(sourceContact.getContactBirthday()); + targetContact.setContactComment(sourceContact.getContactComment()); + targetContact.setContactCreated(sourceContact.getContactCreated()); + targetContact.setContactUpdated(sourceContact.getContactUpdated()); + } + + /** + * Checks whether both contacts are same, but ignoring id number. If you + * want to include id number in comparison, better use Objects.equals() as + * the equal() method is implemented and checks all fields. + *

+ * @param contact Contact one + * @param other Contact two + *

+ * @return Whether both are the same + */ + public static boolean isSameContact (final Contact contact, final Contact other) { + // Both should not be null + if (null == contact) { + // First contact is null + throw new NullPointerException("contact is null"); //NOI18N + } else if (null == other) { + // Secondcontact is null + throw new NullPointerException("other is null"); //NOI18N + } + + // Check all data fields, except id number + return ((Objects.equals(contact.getContactBirthday(), other.getContactBirthday())) && + (Objects.equals(contact.getContactCity(), other.getContactCity())) && + (Objects.equals(contact.getContactCountry(), other.getContactCountry())) && + (Objects.equals(contact.getContactEmailAddress(), other.getContactEmailAddress())) && + (Objects.equals(contact.getContactFamilyName(), other.getContactFamilyName())) && + (Objects.equals(contact.getContactFirstName(), other.getContactFirstName())) && + (Objects.equals(contact.getContactPersonalTitle(), other.getContactPersonalTitle())) && + (Objects.equals(contact.getContactHouseNumber(), other.getContactHouseNumber())) && + (Objects.equals(contact.getContactStreet(), other.getContactStreet())) && + (Objects.equals(contact.getContactTitle(), other.getContactTitle())) && + (Objects.equals(contact.getContactZipCode(), other.getContactZipCode()))); + } + + /** + * Updates land-line data in contact instance. This method also removes the + * land-line instance if no country is selected. A bean (mostly EJB) should + * then make sure that the land-line entry is being unlinked from contact + * instance or being removed, if no longer used. + *

+ * @param contact Contact instance being updated + * @param faxCountry Updated fax number or null + * @param faxAreaCode Updated fax area code or null + * @param faxNumber Updated fax number + *

+ * @return Whether the fax number has been unlinked in contact object + */ + public static boolean updateFaxNumber (final Contact contact, final Country faxCountry, final Integer faxAreaCode, final Long faxNumber) { + // At least contact must be valid + if (null == contact) { + // Throw NPE + throw new NullPointerException("contact is null"); //NOI18N + } + + // Default is not unlinked + boolean isUnlinked = false; + + // Is there a fax instance? + if (contact.getContactFaxNumber() instanceof DialableFaxNumber) { + // Found existing fax number, remove it? + if ((null == faxCountry) || (null == faxAreaCode) || (null == faxNumber)) { + // Remove existing instance + contact.setContactFaxNumber(null); + + // Mark it as being removed + isUnlinked = true; + } else { + // Set all data + contact.getContactFaxNumber().setPhoneCountry(faxCountry); + contact.getContactFaxNumber().setPhoneAreaCode(faxAreaCode); + contact.getContactFaxNumber().setPhoneNumber(faxNumber); + } + } else if ((faxCountry instanceof Country) && (faxAreaCode > 0) && (faxNumber > 0)) { + // Set new land-line number + DialableFaxNumber fax = new FaxNumber(faxCountry, faxAreaCode, faxNumber); + + // Set it in contact + contact.setContactFaxNumber(fax); + } + + // Return status + return isUnlinked; + } + + /** + * Updates land-line data in contact instance. This method also removes the + * land-line instance if no country is selected. A bean (mostly EJB) should + * then make sure that the land-line entry is being unlinked from contact + * instance or being removed, if no longer used. + *

+ * @param contact Contact instance being updated + * @param phoneCountry New phone country or old or null + * @param phoneAreaCode New phone's area code (or old) + * @param phoneNumber New phone number (or old) + *

+ * @return Whether the land-line number has been unlinked in contact object + */ + public static boolean updateLandLineNumber (final Contact contact, final Country phoneCountry, final Integer phoneAreaCode, final Long phoneNumber) { + // At least contact must be valid + if (null == contact) { + // Throw NPE + throw new NullPointerException("contact is null"); //NOI18N + } + + // Default is not unlinked + boolean isUnlinked = false; + + // Is there a land-line instance? + if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) { + // Found existing land-line number, remove it? + if ((null == phoneCountry) || (null == phoneAreaCode) || (null == phoneNumber)) { + // Remove existing instance + contact.setContactLandLineNumber(null); + + // Mark it as being removed + isUnlinked = true; + } else { + // Set all data + contact.getContactLandLineNumber().setPhoneCountry(phoneCountry); + contact.getContactLandLineNumber().setPhoneAreaCode(phoneAreaCode); + contact.getContactLandLineNumber().setPhoneNumber(phoneNumber); + } + } else if ((phoneCountry instanceof Country) && (phoneAreaCode > 0) && (phoneNumber > 0)) { + // Set new land-line number + DialableLandLineNumber landLine = new LandLineNumber(phoneCountry, phoneAreaCode, phoneNumber); + + // Set it in contact + contact.setContactLandLineNumber(landLine); + } + + // Return status + return isUnlinked; + } + + /** + * Updates mobile data in contact instance. This method also removes the + * mobile instance if no provider is selected. A bean (mostly EJB) should + * then make sure that the mobile entry is being unlinked from contact + * instance or being removed, if no longer used. + *

+ * @param contact Contact instance to update + * @param mobileProvider New mobile provider (or old) + * @param mobileNumber New mobile number (or old) + *

+ * @return Whether the mobile has been unlinked in contact object + */ + public static boolean updateMobileNumber (final Contact contact, final MobileProvider mobileProvider, final Long mobileNumber) { + // At least contact must be valid + if (null == contact) { + // Throw NPE + throw new NullPointerException("contact is null"); //NOI18N + } else if ((mobileProvider instanceof MobileProvider) && (null == mobileNumber)) { + // Mobile provider given, but no number + throw new NullPointerException("mobileNumber is null"); //NOI18N + } + + // Default is not unlinked + boolean isUnlinked = false; + + // Is there a mobile number? + if (contact.getContactMobileNumber() instanceof DialableMobileNumber) { + // Is provider null? + if ((null == mobileProvider) || (null == mobileNumber) || (mobileNumber == 0)) { + // Remove instance + contact.setContactMobileNumber(null); + + // Mark as unlinked + isUnlinked = true; + } else { + // Yes, then update as well + contact.getContactMobileNumber().setMobileProvider(mobileProvider); + contact.getContactMobileNumber().setPhoneNumber(mobileNumber); + } + } else if ((mobileProvider instanceof MobileProvider) && (mobileNumber > 0)) { + // Create new instance + DialableMobileNumber mobile = new MobileNumber(mobileProvider, mobileNumber); + + // Set it in contact + contact.setContactMobileNumber(mobile); + } + + // Return status + return isUnlinked; + } + + /** + * Private constructor for utilities + */ + private Contacts () { + } + +}