/* * 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.util.account; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.globalstatus.*; import net.java.sip.communicator.util.*; import java.util.*; /** * The <tt>AccountStatusUtils</tt> provides utility methods for account status * management. * * @author Yana Stamcheva */ public class AccountStatusUtils { private static GlobalStatusService globalStatusService; /** * If the protocol provider supports presence operation set searches the * last status which was selected, otherwise returns null. * * @param protocolProvider the protocol provider we're interested in. * @return the last protocol provider presence status, or null if this * provider doesn't support presence operation set */ public static Object getProtocolProviderLastStatus( ProtocolProviderService protocolProvider) { if(getProtocolPresenceOpSet(protocolProvider) != null) return getLastPresenceStatus(protocolProvider); else return getGlobalStatusService() .getLastStatusString(protocolProvider); } /** * Returns the presence operation set for the given protocol provider. * * @param protocolProvider The protocol provider for which the * presence operation set is searched. * @return the presence operation set for the given protocol provider. */ public static OperationSetPresence getProtocolPresenceOpSet( ProtocolProviderService protocolProvider) { OperationSet opSet = protocolProvider.getOperationSet(OperationSetPresence.class); return (opSet instanceof OperationSetPresence) ? (OperationSetPresence) opSet : null; } /** * Returns the last status that was stored in the configuration xml for the * given protocol provider. * * @param protocolProvider the protocol provider * @return the last status that was stored in the configuration xml for the * given protocol provider */ public static PresenceStatus getLastPresenceStatus( ProtocolProviderService protocolProvider) { if (getGlobalStatusService() != null) return getGlobalStatusService().getLastPresenceStatus( protocolProvider); return null; } /** * Returns the current status for protocol provider. * * @param protocolProvider the protocol provider * @return the current status for protocol provider */ public static PresenceStatus getPresenceStatus( ProtocolProviderService protocolProvider) { PresenceStatus status = null; OperationSetPresence opSet = protocolProvider.getOperationSet(OperationSetPresence.class); if(opSet != null) status = opSet.getPresenceStatus(); return status; } /** * Returns the online status of provider. * @param protocolProvider the protocol provider * @return the online status of provider. */ public static PresenceStatus getOnlineStatus( ProtocolProviderService protocolProvider) { PresenceStatus onlineStatus = null; OperationSetPresence presence = protocolProvider.getOperationSet(OperationSetPresence.class); // presence can be not supported if(presence != null) { Iterator<PresenceStatus> statusIterator = presence.getSupportedStatusSet(); while (statusIterator.hasNext()) { PresenceStatus status = statusIterator.next(); int connectivity = status.getStatus(); if ((onlineStatus != null && (onlineStatus.getStatus() < connectivity)) || (onlineStatus == null && (connectivity > 50 && connectivity < 80))) { onlineStatus = status; } } } return onlineStatus; } /** * Returns the offline status of provider. * @param protocolProvider the protocol provider * @return the offline status of provider. */ public static PresenceStatus getOfflineStatus( ProtocolProviderService protocolProvider) { PresenceStatus offlineStatus = null; OperationSetPresence presence = protocolProvider.getOperationSet(OperationSetPresence.class); // presence can be not supported if(presence != null) { Iterator<PresenceStatus> statusIterator = presence.getSupportedStatusSet(); while (statusIterator.hasNext()) { PresenceStatus status = statusIterator.next(); int connectivity = status.getStatus(); if (connectivity < 1) { offlineStatus = status; } } } return offlineStatus; } /** * Returns the last contact status saved in the configuration. * * @param protocolProvider the protocol provider to which the status * corresponds * @return the last contact status saved in the configuration. */ public String getLastStatusString(ProtocolProviderService protocolProvider) { return getGlobalStatusService().getLastStatusString(protocolProvider); } /** * Returns the <tt>GlobalStatusService</tt> obtained from the bundle * context. * @return the <tt>GlobalStatusService</tt> obtained from the bundle * context */ public static GlobalStatusService getGlobalStatusService() { if (globalStatusService == null) { globalStatusService = ServiceUtils.getService( UtilActivator.bundleContext, GlobalStatusService.class); } return globalStatusService; } }