package org.chartsy.chatsy.chatimpl.plugin.manager; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.ServiceDiscoveryManager; import org.jivesoftware.smackx.packet.DiscoverInfo; import org.jivesoftware.smackx.packet.DiscoverItems; import org.chartsy.chatsy.chat.ChatsyManager; import org.chartsy.chatsy.chat.util.log.Log; import java.util.Iterator; public class Enterprise { private static Enterprise instance; public static final String MUC_FEATURE = "muc"; public static final String VCARD_FEATURE = "vcard"; private static DiscoverInfo featureInfo; private boolean chatsyManagerInstalled = true; public static Enterprise getInstance() { if (instance == null) instance = new Enterprise(); return instance; } private Enterprise() { populateFeatureSet(); } public boolean isChatsyManagerInstalled() { return chatsyManagerInstalled; } public static boolean containsFeature(String feature) { if (featureInfo == null) return true; return featureInfo.containsFeature(feature); } private void populateFeatureSet() { final ServiceDiscoveryManager disco = ServiceDiscoveryManager.getInstanceFor(ChatsyManager.getConnection()); final DiscoverItems items = ChatsyManager.getSessionManager().getDiscoveredItems(); Iterator<DiscoverItems.Item> iter = items.getItems(); while (iter.hasNext()) { DiscoverItems.Item item = iter.next(); String entity = item.getEntityID(); if (entity != null) { if (entity.startsWith("manager.")) { chatsyManagerInstalled = true; try { featureInfo = disco.discoverInfo(item.getEntityID()); } catch (XMPPException e) { Log.error("Error while retrieving feature list for ChatsyManager.", e); } } } } } }