/*
* Copyright 2016 Sam Sun <me@samczsun.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.samczsun.skype4j.participants.info;
import com.samczsun.skype4j.chat.Chat;
import com.samczsun.skype4j.exceptions.ChatNotFoundException;
import com.samczsun.skype4j.exceptions.ConnectionException;
import com.samczsun.skype4j.exceptions.NoSuchContactException;
import java.awt.image.BufferedImage;
import java.util.Date;
/**
* Represents a contact
*/
public interface Contact {
/**
* Get the username of this contact
*
* @return The username
*/
String getUsername();
/**
* Get the displayname of this contact. Can return null if not found
*
* @return The displayname
*/
String getDisplayName();
/**
* Get the first name of this contact. Can return null if not found
*
* @return The first name
*/
String getFirstName();
/**
* Get the last name of this contact. Can return null if not found
*
* @return The last name
*/
String getLastName();
/**
* Get the avatar as a {@link BufferedImage}. Can return null if not found.
* Once the image is loaded it is cached
* so if the first call suceeds it is implied no more exceptions will be thrown
*
* @return A clone of the original BufferedImage
* @throws ConnectionException If an error occurs while fetching the original image
*/
BufferedImage getAvatarPicture() throws ConnectionException;
/**
* Get the avatar as a URL. Can return null if not found.
*
* @return The URL to the avatar
*/
String getAvatarURL();
/**
* Get the mood of this contact. Can return null if not found
*
* @return The mood
*/
String getMood();
/**
* Get the mood as richtext of this contact. Can return null if not found
*
* @return The mood as richtext
*/
@Deprecated
String getRichMood();
/**
* Get the country this contact lives in. Can return null if not found
*
* @return The country
*/
String getCountry();
/**
* Get the city this contact lives in. Can return null if not found
*
* @return The city
*/
String getCity();
/**
* Get whether this contact is authorized by you to be a contact
*
* @return Whether the contact is authorized
*/
boolean isAuthorized();
/**
* Authorize this contact
*
* @throws ConnectionException If an error occurs while connecting to the endpoint
*/
void authorize() throws ConnectionException;
/**
* Unauthorize this contact
*
* @throws ConnectionException If an error occurs while connecting to the endpoint
*/
void unauthorize() throws ConnectionException;
/**
* Send a authorization request to this user
* @param message The message to attach
* @throws ConnectionException If an error occurs while sending the request
* @throws NoSuchContactException If the user does not exist
*/
void sendRequest(String message) throws ConnectionException, NoSuchContactException;
/**
* Get whether this contact is blocked
*
* @return Whether the contact is blocked
*/
boolean isBlocked();
/**
* Block this contact
*
* @param reportAbuse Whether to report abuse
* @throws ConnectionException If an error occurs while connecting to the endpoint
*/
void block(boolean reportAbuse) throws ConnectionException;
/**
* Unblock this contact
*
* @throws ConnectionException If an error occurs while connecting to the endpoint
*/
void unblock() throws ConnectionException;
/**
* Get whether this contact is a phone number
*
* @return Whether this contact is a phone number
*/
boolean isPhone();
/**
* Get the private conversation between you and this user
* @return The private conversation
* @throws ConnectionException If an error occurs while connecting to the endpoint
* @throws ChatNotFoundException If the contact does not exist or is a phone
*/
Chat getPrivateConversation() throws ConnectionException, ChatNotFoundException;
interface ContactRequest {
/**
* Get the time at which this contact request was sent
*
* @return The time it was sent
*/
Date getTime();
/**
* Get the user who sent this contact request
*
* @return The contact
* @throws ConnectionException If loading the contact failed
*/
Contact getSender() throws ConnectionException;
/**
* Get the custom message sent by the sender
*
* @return The message
*/
String getMessage();
/**
* Accept the contact request represented by this object
*
* @throws ConnectionException If the accepting of the contact request failed
*/
void accept() throws ConnectionException;
/**
* Declines the contact request represented by this object
*
* @throws ConnectionException If the declining of the contact request failed
*/
void decline() throws ConnectionException;
}
}