package org.chartsy.chatsy.chat;
import org.chartsy.chatsy.MainWindow;
import org.chartsy.chatsy.Chatsy;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smackx.MessageEventManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.chartsy.chatsy.chat.search.SearchManager;
import org.chartsy.chatsy.chat.ui.ContactList;
import org.chartsy.chatsy.chatimpl.profile.VCardManager;
import java.awt.Component;
import java.awt.KeyboardFocusManager;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.text.SimpleDateFormat;
import javax.swing.ImageIcon;
import org.chartsy.chatsy.chat.util.log.Log;
import org.openide.windows.WindowManager;
public final class ChatsyManager
{
private static final String dateFormat = ((SimpleDateFormat)SimpleDateFormat
.getDateTimeInstance(SimpleDateFormat.FULL,SimpleDateFormat.MEDIUM)).toPattern();
public static final SimpleDateFormat DATE_SECOND_FORMATTER = new SimpleDateFormat(dateFormat);
private static SessionManager sessionManager;
private static MessageEventManager messageEventManager;
private static UserManager userManager;
private static ChatManager chatManager;
private static VCardManager vcardManager;
private static NativeManager nativeManager;
private static Component focusedComponent;
private ChatsyManager()
{
}
static
{
KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
focusManager.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent e)
{
String prop = e.getPropertyName();
if (("focusOwner".equals(prop)) && (e.getNewValue() != null))
focusedComponent = (Component)e.getNewValue();
}
});
}
public static XMPPConnection getConnection()
{
return sessionManager.getConnection();
}
public static MainWindow getMainWindow()
{
return MainWindow.getInstance();
}
public static Workspace getWorkspace()
{
return Workspace.getInstance();
}
public static SessionManager getSessionManager()
{
if (sessionManager == null)
sessionManager = new SessionManager();
return sessionManager;
}
public static UserManager getUserManager()
{
if (userManager == null)
userManager = new UserManager();
return userManager;
}
public static ChatManager getChatManager()
{
if (chatManager == null)
chatManager = ChatManager.getInstance();
return chatManager;
}
public static MessageEventManager getMessageEventManager()
{
if (messageEventManager == null)
messageEventManager = new MessageEventManager(getConnection());
return messageEventManager;
}
public static VCardManager getVCardManager()
{
if (vcardManager == null)
vcardManager = new VCardManager();
return vcardManager;
}
public static NativeManager getNativeManager()
{
if (nativeManager == null)
nativeManager = new NativeManager();
return nativeManager;
}
public static String getClipboard()
{
Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
try
{
if (transferable != null
&& transferable.isDataFlavorSupported(DataFlavor.stringFlavor))
return (String)transferable.getTransferData(DataFlavor.stringFlavor);
}
catch (Exception e)
{
Log.error(e);
}
return null;
}
public static void setClipboard(String str)
{
StringSelection ss = new StringSelection(str);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
}
public static SearchManager getSearchManager()
{
return SearchManager.getInstance();
}
public static ContactList getContactList()
{
return getWorkspace().getContactList();
}
public static File getUserDirectory()
{
final String bareJID = sessionManager.getBareAddress();
File userDirectory = new File(Chatsy.getChatUserHome(), bareJID);
if (!userDirectory.exists())
userDirectory.mkdirs();
return userDirectory;
}
public static Component getFocusedComponent()
{
return focusedComponent;
}
public static void addFeature(String namespace)
{
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(getConnection());
discoManager.addFeature(namespace);
}
public static void removeFeature(String namespace)
{
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(getConnection());
discoManager.removeFeature(namespace);
}
public static ImageIcon getApplicationImage()
{
return new ImageIcon(WindowManager.getDefault().getMainWindow().getIconImage());
}
}