Conversation.java

  1package de.gultsch.chat.entities;
  2
  3import java.util.ArrayList;
  4import java.util.List;
  5
  6import android.content.ContentValues;
  7import android.database.Cursor;
  8import android.net.Uri;
  9import android.util.Log;
 10
 11public class Conversation extends AbstractEntity {
 12
 13	private static final long serialVersionUID = -6727528868973996739L;
 14	
 15	public static final String TABLENAME = "conversations";
 16	
 17	public static final int STATUS_AVAILABLE = 0;
 18	public static final int STATUS_ARCHIVED = 1;
 19	public static final int STATUS_DELETED = 2;
 20	
 21	public static final int MODE_MULTI = 1;
 22	public static final int MODE_SINGLE = 0;
 23
 24	public static final String NAME = "name";
 25	public static final String ACCOUNT = "accountUuid";
 26	public static final String CONTACT = "contactUuid";
 27	public static final String CONTACTJID = "contactJid";
 28	public static final String STATUS = "status";
 29	public static final String CREATED = "created";
 30	public static final String MODE = "mode";
 31
 32	private String name;
 33	private String contactUuid;
 34	private String accountUuid;
 35	private String contactJid;
 36	private int status;
 37	private long created;
 38	private int mode;
 39
 40	private transient List<Message> messages = null;
 41	private transient Account account = null;
 42	private transient Contact contact;
 43
 44	public Conversation(String name, Account account,
 45			String contactJid, int mode) {
 46		this(java.util.UUID.randomUUID().toString(), name, null, account.getUuid(), contactJid, System
 47				.currentTimeMillis(), STATUS_AVAILABLE,mode);
 48		this.account = account;
 49	}
 50
 51	public Conversation(String uuid, String name, String contactUuid,
 52			String accountUuid, String contactJid, long created, int status, int mode) {
 53		this.uuid = uuid;
 54		this.name = name;
 55		this.contactUuid = contactUuid;
 56		this.accountUuid = accountUuid;
 57		this.contactJid = contactJid;
 58		this.created = created;
 59		this.status = status;
 60		this.mode = mode;
 61	}
 62
 63	public List<Message> getMessages() {
 64		if (messages == null) this.messages = new ArrayList<Message>(); //prevent null pointer
 65		
 66		//populate with Conversation (this)
 67		
 68		for(Message msg : messages) {
 69			msg.setConversation(this);
 70		}
 71		
 72		return messages;
 73	}
 74	
 75	public boolean isRead() {
 76		if ((this.messages == null)||(this.messages.size() == 0)) return true;
 77		return this.messages.get(this.messages.size() - 1).isRead();
 78	}
 79	
 80	public void markRead() {
 81		Log.d("xmppService", "inside mark read method");
 82		if (this.messages == null) return;
 83		for(int i = this.messages.size() -1; i >= 0; --i) {
 84			if (messages.get(i).isRead()) return;
 85			this.messages.get(i).markRead();
 86		}
 87	}
 88	
 89	public String getLatestMessage() {
 90		if ((this.messages == null)||(this.messages.size()==0)) {
 91			return null;
 92		} else {
 93			return this.messages.get(this.messages.size() - 1).getBody();
 94		}
 95	}
 96	
 97	public long getLatestMessageDate() {
 98		if ((this.messages == null)||(this.messages.size()==0)) {
 99			return this.getCreated();
100		} else {
101			return this.messages.get(this.messages.size() - 1).getTimeSent();
102		}
103	}
104
105	public void setMessages(List<Message> msgs) {
106		this.messages = msgs;
107	}
108
109	public String getName() {
110		if (this.contact!=null) {
111			return this.contact.getDisplayName();
112		} else {
113			return this.name;
114		}
115	}
116
117	public String getProfilePhotoString() {
118		if (this.contact==null) {
119			return null;
120		} else {
121			return this.contact.getProfilePhoto();
122		}
123	}
124
125	public String getAccountUuid() {
126		return this.accountUuid;
127	}
128	
129	public Account getAccount() {
130		return this.account;
131	}
132	
133	public Contact getContact() {
134		return this.contact;
135	}
136	
137	public void setContact(Contact contact) {
138		this.contact = contact;
139		if (contact!=null) {
140			this.contactUuid = contact.getUuid();
141		}
142	}
143
144	public void setAccount(Account account) {
145		this.account = account;
146	}
147	
148	public String getContactJid() {
149		return this.contactJid;
150	}
151
152	public Uri getProfilePhotoUri() {
153		if (this.getProfilePhotoString() != null) {
154			return Uri.parse(this.getProfilePhotoString());
155		}
156		return null;
157	}
158
159	public int getStatus() {
160		return this.status;
161	}
162	
163	public long getCreated() {
164		return this.created;
165	}
166
167	public ContentValues getContentValues() {
168		ContentValues values = new ContentValues();
169		values.put(UUID, uuid);
170		values.put(NAME, name);
171		values.put(CONTACT, contactUuid);
172		values.put(ACCOUNT, accountUuid);
173		values.put(CONTACTJID, contactJid);
174		values.put(CREATED, created);
175		values.put(STATUS, status);
176		values.put(MODE,mode);
177		return values;
178	}
179
180	public static Conversation fromCursor(Cursor cursor) {
181		return new Conversation(cursor.getString(cursor.getColumnIndex(UUID)),
182				cursor.getString(cursor.getColumnIndex(NAME)),
183				cursor.getString(cursor.getColumnIndex(CONTACT)),
184				cursor.getString(cursor.getColumnIndex(ACCOUNT)),
185				cursor.getString(cursor.getColumnIndex(CONTACTJID)),
186				cursor.getLong(cursor.getColumnIndex(CREATED)),
187				cursor.getInt(cursor.getColumnIndex(STATUS)),
188				cursor.getInt(cursor.getColumnIndex(MODE)));
189	}
190
191	public void setStatus(int status) {
192		this.status = status;
193	}
194
195	public int getMode() {
196		return this.mode;
197	}
198
199	public void setMode(int mode) {
200		this.mode = mode;
201	}
202}