--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/utils/Status.java Thu Apr 16 00:33:00 2009 +0200
@@ -0,0 +1,112 @@
+/**
+ *
+ */
+package com.beem.project.beem.utils;
+
+import org.jivesoftware.smack.packet.Presence;
+import org.jivesoftware.smack.packet.Presence.Mode;
+
+/**
+ * @author darisk
+ */
+public class Status {
+
+ /**
+ * Status of a disconnected contact.
+ */
+ public static final int CONTACT_STATUS_DISCONNECT = 100;
+
+ /**
+ * Status of a unavailable (long away) contact.
+ */
+ public static final int CONTACT_STATUS_UNAVAILABLE = 200;
+
+ /**
+ * Status of a away contact.
+ */
+ public static final int CONTACT_STATUS_AWAY = 300;
+
+ /**
+ * Status of a busy contact.
+ */
+ public static final int CONTACT_STATUS_BUSY = 400;
+
+ /**
+ * Status of a available contact.
+ */
+ public static final int CONTACT_STATUS_AVAILABLE = 500;
+
+ /**
+ * Status of a available for chat contact.
+ */
+ public static final int CONTACT_STATUS_AVAILABLE_FOR_CHAT = 600;
+
+ /**
+ * Get the status of from a presence packet.
+ * @param presence the presence containing status
+ */
+ public static int getStatusFromPresence(Presence presence) {
+ int res = Status.CONTACT_STATUS_DISCONNECT;
+ if (presence.getType().equals(Presence.Type.unavailable)) {
+ res = Status.CONTACT_STATUS_DISCONNECT;
+ } else {
+ Mode mode = presence.getMode();
+ if (mode == null) {
+ res = Status.CONTACT_STATUS_AVAILABLE;
+ } else {
+ switch (mode) {
+ case available:
+ res = Status.CONTACT_STATUS_AVAILABLE;
+ break;
+ case away:
+ res = Status.CONTACT_STATUS_AWAY;
+ break;
+ case chat:
+ res = Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT;
+ break;
+ case dnd:
+ res = Status.CONTACT_STATUS_BUSY;
+ break;
+ case xa:
+ res = Status.CONTACT_STATUS_UNAVAILABLE;
+ break;
+ default:
+ res = Status.CONTACT_STATUS_DISCONNECT;
+ break;
+ }
+ }
+ }
+ return res;
+ }
+
+ /**
+ * Get the smack presence mode for a status
+ * @param status the status in beem
+ * @return the presence mode to use in presence packet
+ * or null if there is no mode to use
+ */
+ public static Presence.Mode getPresenceModeFromStatus(int status){
+ Presence.Mode res;
+ switch (status) {
+ case CONTACT_STATUS_AVAILABLE:
+ res = Presence.Mode.available;
+ break;
+ case CONTACT_STATUS_AVAILABLE_FOR_CHAT:
+ res = Presence.Mode.chat;
+ break;
+ case CONTACT_STATUS_AWAY:
+ res = Presence.Mode.away;
+ break;
+ case CONTACT_STATUS_BUSY:
+ res = Presence.Mode.dnd;
+ break;
+ case CONTACT_STATUS_UNAVAILABLE:
+ res = Presence.Mode.xa;
+ break;
+ default:
+ return null;
+ }
+ return res;
+ }
+
+}