/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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 net.java.sip.communicator.impl.protocol.gibberish;
import java.io.*;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
/**
* An implementation of <tt>PresenceStatus</tt> that enumerates all states that
* a Gibberish contact can fall into.
*
* @author Emil Ivov
*/
public class GibberishStatusEnum
extends PresenceStatus
{
private static final Logger logger
= Logger.getLogger(GibberishStatusEnum.class);
/**
* Indicates an Offline status or status with 0 connectivity.
*/
public static final GibberishStatusEnum OFFLINE
= new GibberishStatusEnum(
0,
"Offline",
getImageInBytes("service.protocol.gibberish.OFFLINE_STATUS_ICON"));
/**
* An Occupied status. Indicates that the user has connectivity and
* communication is particularly unwanted.
*/
public static final GibberishStatusEnum OCCUPIED
= new GibberishStatusEnum(
20,
"Occupied",
getImageInBytes("service.protocol.gibberish.OCCUPIED_STATUS_ICON"));
/**
* The DND status. Indicates that the user has connectivity but prefers
* not to be contacted.
*/
public static final GibberishStatusEnum DO_NOT_DISTURB
= new GibberishStatusEnum(
30,
"Do Not Disturb",
getImageInBytes("service.protocol.gibberish.DND_STATUS_ICON"));
/**
* The Not Available status. Indicates that the user has connectivity
* but might not be able to immediately act (i.e. even less immediately than
* when in an Away status ;-P ) upon initiation of communication.
*
*/
public static final GibberishStatusEnum NOT_AVAILABLE
= new GibberishStatusEnum(
35,
"Not Available",
getImageInBytes("service.protocol.gibberish.NA_STATUS_ICON"));
/**
* The Away status. Indicates that the user has connectivity but might
* not be able to immediately act upon initiation of communication.
*/
public static final GibberishStatusEnum AWAY
= new GibberishStatusEnum(
40,
"Away",
getImageInBytes("service.protocol.gibberish.AWAY_STATUS_ICON"));
/**
* The Invisible status. Indicates that the user has connectivity even
* though it may appear otherwise to others, to whom she would appear to be
* offline.
*/
public static final GibberishStatusEnum INVISIBLE
= new GibberishStatusEnum(
45,
"Invisible",
getImageInBytes("service.protocol.gibberish.INVISIBLE_STATUS_ICON"));
/**
* The Online status. Indicate that the user is able and willing to
* communicate.
*/
public static final GibberishStatusEnum ONLINE
= new GibberishStatusEnum(
65,
"Online",
getImageInBytes("service.protocol.gibberish.ONLINE_STATUS_ICON"));
/**
* The Free For Chat status. Indicates that the user is eager to
* communicate.
*/
public static final GibberishStatusEnum FREE_FOR_CHAT
= new GibberishStatusEnum(
85,
"Free For Chat",
getImageInBytes("service.protocol.gibberish.FFC_STATUS_ICON"));
/**
* Initialize the list of supported status states.
*/
private static List<PresenceStatus> supportedStatusSet = new LinkedList<PresenceStatus>();
static
{
supportedStatusSet.add(OFFLINE);
supportedStatusSet.add(OCCUPIED);
supportedStatusSet.add(DO_NOT_DISTURB);
supportedStatusSet.add(NOT_AVAILABLE);
supportedStatusSet.add(AWAY);
supportedStatusSet.add(INVISIBLE);
supportedStatusSet.add(ONLINE);
supportedStatusSet.add(FREE_FOR_CHAT);
}
/**
* Creates an instance of <tt>GibberishPresneceStatus</tt> with the
* specified parameters.
* @param status the connectivity level of the new presence status instance
* @param statusName the name of the presence status.
* @param statusIcon the icon associated with this status
*/
private GibberishStatusEnum(int status,
String statusName,
byte[] statusIcon)
{
super(status, statusName, statusIcon);
}
/**
* Returns an iterator over all status instances supproted by the gibberish
* provider.
* @return an <tt>Iterator</tt> over all status instances supported by the
* gibberish provider.
*/
static Iterator<PresenceStatus> supportedStatusSet()
{
return supportedStatusSet.iterator();
}
/**
* Returns the byte representation of the image corresponding to the given
* identifier.
*
* @param imageID the identifier of the image
* @return the byte representation of the image corresponding to the given
* identifier.
*/
private static byte[] getImageInBytes(String imageID)
{
InputStream in = GibberishActivator.getResources().
getImageInputStream(imageID);
if (in == null)
return null;
byte[] image = null;
try
{
image = new byte[in.available()];
in.read(image);
}
catch (IOException e)
{
logger.error("Failed to load image:" + imageID, e);
}
return image;
}
}