+/*
+ * Copyright (C) 2016, 2017 Roland Häder
+ *
+ * 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.jcontacts.model.phone;
+
+import java.io.Serializable;
+import javax.ejb.Remote;
+import org.mxchange.jcontacts.model.contact.Contact;
+import org.mxchange.jphone.exceptions.PhoneNumberAlreadyLinkedException;
+import org.mxchange.jphone.exceptions.PhoneNumberNotLinkedException;
+import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
+import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
+
+/**
+ * A remote interface for administrative purposes around contact's phone numbers
+ * (any type).
+ * <p>
+ * @author Roland Häder<roland@mxchange.org>
+ */
+@Remote
+public interface AdminContactsPhoneSessionBeanRemote extends Serializable {
+
+ /**
+ * Links existing fax number with given contact instance. The id number
+ * should be set.
+ * <p>
+ * @param contact Contact to link to
+ * @param faxNumber Fax number to link
+ * <p>
+ * @return Updated contact
+ * <p>
+ * @throws PhoneNumberAlreadyLinkedException If a fax number is already
+ * linked in contact
+ */
+ Contact linkExistingFaxNumberWithContact (final Contact contact, final DialableFaxNumber faxNumber) throws PhoneNumberAlreadyLinkedException;
+
+ /**
+ * Links existing land-line number with given contact instance. The id
+ * number should be set.
+ * <p>
+ * @param contact Contact to link to
+ * @param landLineNumber Land-line number to link
+ * <p>
+ * @return Updated contact
+ * <p>
+ * @throws PhoneNumberAlreadyLinkedException If a land-line number is
+ * already linked in contact
+ */
+ Contact linkExistingLandLineNumberWithContact (final Contact contact, final DialableLandLineNumber landLineNumber) throws PhoneNumberAlreadyLinkedException;
+
+ /**
+ * Links existing mobile number with given contact instance. The id number
+ * should be set.
+ * <p>
+ * @param contact Contact to link to
+ * @param mobileNumber Mobile number to link
+ * <p>
+ * @return Updated contact
+ * <p>
+ * @throws PhoneNumberAlreadyLinkedException If a mobile number is already
+ * linked in contact
+ */
+ Contact linkExistingMobileNumberWithContact (final Contact contact, final DialableMobileNumber mobileNumber) throws PhoneNumberAlreadyLinkedException;
+
+ /**
+ * Links new fax number with given contact instance. The id number should
+ * NOT be set.
+ * <p>
+ * @param contact Contact to link to
+ * @param faxNumber Fax number to link
+ * <p>
+ * @return Updated contact
+ * <p>
+ * @throws PhoneNumberAlreadyLinkedException If a fax number is already
+ * linked in contact
+ */
+ Contact linkNewFaxNumberWithContact (final Contact contact, final DialableFaxNumber faxNumber) throws PhoneNumberAlreadyLinkedException;
+
+ /**
+ * Links new land-line number with given contact instance. The id number
+ * should NOT be set.
+ * <p>
+ * @param contact Contact to link to
+ * @param landLineNumber Land-line number to link
+ * <p>
+ * @return Updated contact
+ * <p>
+ * @throws PhoneNumberAlreadyLinkedException If a land-line number is
+ * already linked in contact
+ */
+ Contact linkNewLandLineNumberWithContact (final Contact contact, final DialableLandLineNumber landLineNumber) throws PhoneNumberAlreadyLinkedException;
+
+ /**
+ * Links new mobile number with given contact instance. The id number should
+ * NOT be set.
+ * <p>
+ * @param contact Contact to link to
+ * @param mobileNumber Mobile number to link
+ * <p>
+ * @return Updated contact
+ * <p>
+ * @throws PhoneNumberAlreadyLinkedException If a mobile number is already
+ * linked in contact
+ */
+ Contact linkNewMobileNumberWithContact (final Contact contact, final DialableMobileNumber mobileNumber) throws PhoneNumberAlreadyLinkedException;
+
+ /**
+ * Unlinks fax data from given contact and returns the updated (managed)
+ * version.
+ * <p>
+ * @param contact Contact to unlink mobile instance
+ * @param faxNumber Fax number being unlinked
+ * <p>
+ * @return Updated contact instance
+ * <p>
+ * @throws PhoneNumberNotLinkedException If a mobile instance is not linked
+ * (null) with this contact
+ */
+ Contact unlinkFaxDataFromContact (final Contact contact, final DialableFaxNumber faxNumber) throws PhoneNumberNotLinkedException;
+
+ /**
+ * Unlinks land-line data from given contact and returns the updated
+ * (managed) version.
+ * <p>
+ * @param contact Contact to unlink mobile instance
+ * @param landLineNumber Land-line number being unlinked
+ * <p>
+ * @return Updated contact instance
+ * <p>
+ * @throws PhoneNumberNotLinkedException If a mobile instance is not linked
+ * (null) with this contact
+ */
+ Contact unlinkLandLineDataFromContact (final Contact contact, final DialableLandLineNumber landLineNumber) throws PhoneNumberNotLinkedException;
+
+ /**
+ * Unlinks mobile data from given contact and returns the updated (managed)
+ * version.
+ * <p>
+ * @param contact Contact to unlink mobile instance
+ * @param mobileNumber Mobile number being unlinked
+ * <p>
+ * @return Updated contact instance
+ * <p>
+ * @throws PhoneNumberNotLinkedException If a mobile instance is not linked
+ * (null) with this contact
+ */
+ Contact unlinkMobileDataFromContact (final Contact contact, final DialableMobileNumber mobileNumber) throws PhoneNumberNotLinkedException;
+
+}