/* * 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.service.protocol.icqconstants; import java.io.*; import java.util.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; /** * An enumeration containing all status instances that MUST be supported by * an implementation of the ICQ (Oscar) protocol. Implementations may * support other forms of PresenceStatus but they MUST ALL support those * enumerated here. * <p> * For testing purposes, this class also provides a <tt>List</tt> containing * all of the status fields. * * @author Emil Ivov */ public class IcqStatusEnum extends PresenceStatus { /** * The <tt>Logger</tt> used by the <tt>IcqStatusEnum</tt> class and its * instances for logging output. */ private static Logger logger = Logger.getLogger(IcqStatusEnum.class); /** * The Free For Chat ICQ status. Indicates that the user is eager to * communicate. */ public static final IcqStatusEnum FREE_FOR_CHAT = new IcqStatusEnum(85, "Free For Chat", loadIcon("resources/images/protocol/icq/icq16x16-ffc.png")); /** * The Online ICQ status. Indicate that the user is able and willing to * communicate. */ public static final IcqStatusEnum ONLINE = new IcqStatusEnum(65, "Online", loadIcon("resources/images/protocol/icq/icq16x16-online.png")); /** * The Away ICQ status. Indicates that the user has connectivity but might * not be able to immediately act upon initiation of communication. */ public static final IcqStatusEnum AWAY = new IcqStatusEnum(48, "Away", loadIcon("resources/images/protocol/icq/icq16x16-away.png")); /** * The Invisible ICQ 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 IcqStatusEnum INVISIBLE = new IcqStatusEnum(45, "Invisible", loadIcon("resources/images/protocol/icq/icq16x16-invisible.png")); /** * The Not Available ICQ 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 IcqStatusEnum NOT_AVAILABLE = new IcqStatusEnum(35, "Not Available", loadIcon("resources/images/protocol/icq/icq16x16-na.png")); /** * The DND ICQ status. Indicates that the user has connectivity but prefers * not to be contacted. */ public static final IcqStatusEnum DO_NOT_DISTURB = new IcqStatusEnum(30, "Do Not Disturb", loadIcon("resources/images/protocol/icq/icq16x16-dnd.png")); /** * The Occupied ICQ status. Indicates that the user has connectivity and * communication is particularly unwanted. */ public static final IcqStatusEnum OCCUPIED = new IcqStatusEnum(25, "Occupied", loadIcon("resources/images/protocol/icq/icq16x16-occupied.png")); /** * The Offline ICQ status. Indicates the user does not seem to be connected * to the ICQ network or at least does not want us to know she is */ public static final IcqStatusEnum OFFLINE = new IcqStatusEnum(0, "Offline", loadIcon("resources/images/protocol/icq/icq16x16-offline.png")); /** * The minimal set of states that any ICQ implementation must support. */ public static final ArrayList<IcqStatusEnum> icqStatusSet = new ArrayList<IcqStatusEnum>(); static{ icqStatusSet.add(FREE_FOR_CHAT); icqStatusSet.add(ONLINE); icqStatusSet.add(INVISIBLE); icqStatusSet.add(AWAY); icqStatusSet.add(NOT_AVAILABLE); icqStatusSet.add(DO_NOT_DISTURB); icqStatusSet.add(OCCUPIED); icqStatusSet.add(OFFLINE); } /** * Creates a status with the specified connectivity coeff, name and icon. * @param status the connectivity coefficient for the specified status * @param statusName String * @param statusIcon the icon associated with this status */ protected IcqStatusEnum(int status, String statusName, byte[] statusIcon) { super(status, statusName, statusIcon); } /** * Loads an image from a given image path. * @param imagePath The identifier of the image. * @return The image for the given identifier. */ public static byte[] loadIcon(String imagePath) { InputStream is = IcqStatusEnum.class.getClassLoader() .getResourceAsStream(imagePath); if(is == null) return null; byte[] icon = null; try { icon = new byte[is.available()]; is.read(icon); } catch (IOException e) { logger.error("Failed to load icon: " + imagePath, e); } return icon; } }