// Path: game-common/src/main/java/com/game/common/model/Friend.java
// public class Friend implements Serializable {
// 	private static final long serialVersionUID = 1L;
// 
// 	protected Hash id;
// 	protected String username;
// 	protected transient boolean online;
// 
// 	public Friend(Hash id, String username, boolean online) {
// 		this.id = id;
// 		this.username = username;
// 		this.online = online;
// 	}
// 
// 	@SuppressWarnings("unused")
// 	private Friend() { } // for hibernate
// 
// 	public Hash getID() {
// 		return id;
// 	}
// 
// 	public String getUsername() {
// 		return username;
// 	}
// 
// 	public boolean isOnline() {
// 		return online;
// 	}
// 
// 	public void setOnline(boolean online) {
// 		this.online = online;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return id.hashCode();
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Friend))
// 			return false;
// 
// 		Friend f = (Friend) o;
// 		return id.equals(f.id);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "friend[id = " + id + ", username = '" + username + "', online = " + online + "]";
// 	}
// 
// 	private void writeObject(ObjectOutputStream out) throws IOException {
// 		out.defaultWriteObject();
// 	}
// 
// 	private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
// 		in.defaultReadObject();
// 		this.setOnline(false); // Default to offline unless we're told otherwise
// 	}
// }
// 
// Path: game-common/src/main/java/com/game/common/model/Hash.java
// public class Hash implements Comparable<Hash>, Serializable {
// 	private static final Logger log = LoggerFactory.getLogger(Hash.class);
// 	private static final long serialVersionUID = 1L;
// 
// 	public static final int LENGTH = 20; // in bytes
// 	public static final String ALGORITHM = "SHA-1";
// 
// 	protected static MessageDigest digest;
// 
// 	static {
// 		try {
// 			digest = MessageDigest.getInstance(ALGORITHM);
// 		}
// 		catch (NoSuchAlgorithmException e) {
// 			log.error("No such hashing algorithm: " + ALGORITHM);
// 			System.exit(1); // fatal error
// 		}
// 	}
// 
// 	public static Hash fromString(String hex) {
// 		Hash hash = new Hash();
// 		hash.setHex(hex);
// 
// 		return hash;
// 	}
// 
// 	public static Hash fromBytes(byte[] bytes) {
// 		Hash hash = new Hash();
// 		hash.setBytes(bytes);
// 
// 		return hash;
// 	}
// 
// 	protected String hex;
// 
// 	public Hash(String str) {
// 		try {
// 			digest.update(str.getBytes("UTF-8"));
// 		}
// 		catch (UnsupportedEncodingException e) { }
// 
// 		this.setBytes(digest.digest());
// 	}
// 
// 	private Hash() {
// 		hex = null;
// 	}
// 
// 	private void setHex(String hex) {
// 		this.hex = hex;
// 	}
// 
// 	private void setBytes(byte[] bytes) {
// 		Formatter foramtter = new Formatter();
// 
// 		for (byte b : bytes)
// 			foramtter.format("%02x", b);
// 
// 		this.hex = foramtter.toString();
// 	}
// 
// 	public byte[] getBytes() {
// 		byte[] bytes = new byte[LENGTH];
// 
// 		for (int i = 0;i < LENGTH;i++)
// 			bytes[i] = (byte) Short.parseShort(hex.substring(2 * i, 2 * (i + 1)), 16);
// 
// 		return bytes;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return hex;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return hex.hashCode();
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Hash))
// 			return false;
// 
// 		Hash h = (Hash) o;
// 		return hex.equals(h.hex);
// 	}
// 
// 	@Override
// 	public int compareTo(Hash h) {
// 		return hex.compareTo(h.hex);
// 	}
// }


import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.game.common.model.Friend;
import com.game.common.model.Hash;
package com.game.common.util;



public class FriendList implements Iterable<Friend>, Serializable {
	private static final long serialVersionUID = 1L;

	protected Map<Hash, Friend> friends;

	public FriendList() {
		friends = new HashMap<Hash, Friend>();
	}

	public void add(Friend friend) {
		friends.put(friend.getID(), friend);
	}

	public boolean contains(Hash id) {
		return friends.containsKey(id);
	}

	public Friend get(Hash id) {
		return friends.get(id);
	}

	public Friend remove(Hash id) {
		return friends.remove(id);
	}

// Path: game-common/src/main/java/com/game/common/model/Friend.java
// public class Friend implements Serializable {
// 	private static final long serialVersionUID = 1L;
// 
// 	protected Hash id;
// 	protected String username;
// 	protected transient boolean online;
// 
// 	public Friend(Hash id, String username, boolean online) {
// 		this.id = id;
// 		this.username = username;
// 		this.online = online;
// 	}
// 
// 	@SuppressWarnings("unused")
// 	private Friend() { } // for hibernate
// 
// 	public Hash getID() {
// 		return id;
// 	}
// 
// 	public String getUsername() {
// 		return username;
// 	}
// 
// 	public boolean isOnline() {
// 		return online;
// 	}
// 
// 	public void setOnline(boolean online) {
// 		this.online = online;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return id.hashCode();
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Friend))
// 			return false;
// 
// 		Friend f = (Friend) o;
// 		return id.equals(f.id);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "friend[id = " + id + ", username = '" + username + "', online = " + online + "]";
// 	}
// 
// 	private void writeObject(ObjectOutputStream out) throws IOException {
// 		out.defaultWriteObject();
// 	}
// 
// 	private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
// 		in.defaultReadObject();
// 		this.setOnline(false); // Default to offline unless we're told otherwise
// 	}
// }
// 
// Path: game-common/src/main/java/com/game/common/model/Hash.java
// public class Hash implements Comparable<Hash>, Serializable {
// 	private static final Logger log = LoggerFactory.getLogger(Hash.class);
// 	private static final long serialVersionUID = 1L;
// 
// 	public static final int LENGTH = 20; // in bytes
// 	public static final String ALGORITHM = "SHA-1";
// 
// 	protected static MessageDigest digest;
// 
// 	static {
// 		try {
// 			digest = MessageDigest.getInstance(ALGORITHM);
// 		}
// 		catch (NoSuchAlgorithmException e) {
// 			log.error("No such hashing algorithm: " + ALGORITHM);
// 			System.exit(1); // fatal error
// 		}
// 	}
// 
// 	public static Hash fromString(String hex) {
// 		Hash hash = new Hash();
// 		hash.setHex(hex);
// 
// 		return hash;
// 	}
// 
// 	public static Hash fromBytes(byte[] bytes) {
// 		Hash hash = new Hash();
// 		hash.setBytes(bytes);
// 
// 		return hash;
// 	}
// 
// 	protected String hex;
// 
// 	public Hash(String str) {
// 		try {
// 			digest.update(str.getBytes("UTF-8"));
// 		}
// 		catch (UnsupportedEncodingException e) { }
// 
// 		this.setBytes(digest.digest());
// 	}
// 
// 	private Hash() {
// 		hex = null;
// 	}
// 
// 	private void setHex(String hex) {
// 		this.hex = hex;
// 	}
// 
// 	private void setBytes(byte[] bytes) {
// 		Formatter foramtter = new Formatter();
// 
// 		for (byte b : bytes)
// 			foramtter.format("%02x", b);
// 
// 		this.hex = foramtter.toString();
// 	}
// 
// 	public byte[] getBytes() {
// 		byte[] bytes = new byte[LENGTH];
// 
// 		for (int i = 0;i < LENGTH;i++)
// 			bytes[i] = (byte) Short.parseShort(hex.substring(2 * i, 2 * (i + 1)), 16);
// 
// 		return bytes;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return hex;
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return hex.hashCode();
// 	}
// 
// 	@Override
// 	public boolean equals(Object o) {
// 		if (!(o instanceof Hash))
// 			return false;
// 
// 		Hash h = (Hash) o;
// 		return hex.equals(h.hex);
// 	}
// 
// 	@Override
// 	public int compareTo(Hash h) {
// 		return hex.compareTo(h.hex);
// 	}
// }


// Path: game-common/src/main/java/com/game/common/util/FriendList.java
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.game.common.model.Friend;
import com.game.common.model.Hash;

package com.game.common.util;



public class FriendList implements Iterable<Friend>, Serializable {
	private static final long serialVersionUID = 1L;

	protected Map<Hash, Friend> friends;

	public FriendList() {
		friends = new HashMap<Hash, Friend>();
	}

	public void add(Friend friend) {
		friends.put(friend.getID(), friend);
	}

	public boolean contains(Hash id) {
		return friends.containsKey(id);
	}

	public Friend get(Hash id) {
		return friends.get(id);
	}

	public Friend remove(Hash id) {
		return friends.remove(id);
	}

	public int size() {