package com.jzh.news.xmpp;

import java.util.HashMap;

import java.util.Map;

import org.jivesoftware.smack.AccountManager;

import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;

import org.jivesoftware.smack.Roster;

import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;

import com.google.gson.Gson;
import com.jzh.news.entity.User;

/**
 * <b>function:</b> ����Smack������ XMPP Э��ͨ��
 * 
 * @author hoojo
 * @createDate 2012-5-22 ����10:28:18
 * @file ConnectionServerTest.java
 * @package com.hoo.smack.conn
 * @project jwchat
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
public class XmppTool {

	private static Connection connection;
	private static ConnectionConfiguration config;

	 public static String server = "123.207.145.194";
	//public static String server = "127.0.0.1";

	public static boolean create(User user) {
		if (connection == null) {
			init();
		}

		// String strs = user.getUser() + ";" + user.getNickname() + ";"
		// + user.getIcon() + ";" + user.getSex();
		String pswd = user.getPassword();
		user.setPassword(null);
		String strs = new Gson().toJson(user);
		System.out.println(strs);
		AccountManager accountManager = connection.getAccountManager();
		try {
			/**
			 * ����һ���û�boy������Ϊboy��������ڹ��Ա����̨ҳ��http://192.168.8.32:9090/user-
			 * summary.jsp�鿴�û�/��������Ϣ�����鿴�Ƿ�ɹ������û�
			 */
			Map<String, String> map = new HashMap<String, String>();
			map.put("name", strs);
			map.put("email", "[email protected]");
			accountManager.createAccount(user.getUser(), pswd, map);
			System.out.println(user.getUser() + "\t" + pswd + "��xmppע��ɹ�");
			return true;
			/** �޸����� */
			// accountManager.changePassword("abc");
		} catch (XMPPException e) {

			e.printStackTrace();
			return true;
		}
	}

	/**
	 * ��¼
	 * 
	 * @param user
	 * @param password
	 */
	public static void login(String user, String password) {

		if (connection == null) {
			init();
		}
		try {
			/** �û���½���û�������� */
			connection.login(user, password);
		} catch (XMPPException e) {
			e.printStackTrace();
		}
		/** ��ȡ��ǰ��½�û� */
		fail("User:", connection.getUser());
		addGroup(connection.getRoster(), "�ҵĺ���");
		addGroup(connection.getRoster(), "�����");
		System.out.println("OK");

	}

	/** * ���һ���� */
	public static boolean addGroup(Roster roster, String groupName) {
		try {
			roster.createGroup(groupName);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	// -----------���²��ÿ�-----------------------------------------------------

	private final static void fail(Object o) {
		if (o != null) {
			System.out.println(o);
		}
	}

	private final static void fail(Object o, Object... args) {
		if (o != null && args != null && args.length > 0) {
			String s = o.toString();
			for (int i = 0; i < args.length; i++) {
				String item = args[i] == null ? "" : args[i].toString();
				if (s.contains("{" + i + "}")) {
					s = s.replace("{" + i + "}", item);
				} else {
					s += " " + item;
				}
			}
			System.out.println(s);
		}
	}

	/**
	 * <b>function:</b> ��ʼSmack��openfire��������ӵĻ�������
	 * 
	 * @author hoojo
	 * @createDate 2012-6-25 ����04:06:42
	 */

	public static void init() {
		try {
			// connection = new XMPPConnection(server);
			// connection.connect();

			/**
			 * 5222��openfire�����Ĭ�ϵ�ͨ�Ŷ˿ڣ�����Ե�¼http://192.168.8.32:9090/
			 * �����Ա����̨�鿴�ͻ��˵�������˿�
			 */
			config = new ConnectionConfiguration(server, 5222);

			/** �Ƿ�����ѹ� */
			config.setCompressionEnabled(true);
			/** �Ƿ����ð�ȫ��֤ */
			config.setSASLAuthenticationEnabled(false);
			/** �Ƿ����õ��� */
			config.setDebuggerEnabled(false);
			// config.setReconnectionAllowed(true);
			// config.setRosterLoadedAtLogin(true);

			/** ����connection���� */
			connection = new XMPPConnection(config);
			/** �������� */
			connection.connect();
		} catch (XMPPException e) {
			e.printStackTrace();
		}
		// fail(connection);
		// fail(connection.getConnectionID());
	}

}