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		if (this.messages == null) return;
 82		for(int i = this.messages.size() -1; i >= 0; --i) {
 83			if (messages.get(i).isRead()) return;
 84			this.messages.get(i).markRead();
 85		}
 86	}
 87	
 88	public String getLatestMessage() {
 89		if ((this.messages == null)||(this.messages.size()==0)) {
 90			return null;
 91		} else {
 92			return this.messages.get(this.messages.size() - 1).getBody();
 93		}
 94	}
 95	
 96	public long getLatestMessageDate() {
 97		if ((this.messages == null)||(this.messages.size()==0)) {
 98			return this.getCreated();
 99		} else {
100			return this.messages.get(this.messages.size() - 1).getTimeSent();
101		}
102	}
103
104	public void setMessages(List<Message> msgs) {
105		this.messages = msgs;
106	}
107
108	public String getName() {
109		if (this.contact!=null) {
110			return this.contact.getDisplayName();
111		} else {
112			return this.name;
113		}
114	}
115
116	public String getProfilePhotoString() {
117		if (this.contact==null) {
118			return null;
119		} else {
120			return this.contact.getProfilePhoto();
121		}
122	}
123
124	public String getAccountUuid() {
125		return this.accountUuid;
126	}
127	
128	public Account getAccount() {
129		return this.account;
130	}
131	
132	public Contact getContact() {
133		return this.contact;
134	}
135	
136	public void setContact(Contact contact) {
137		this.contact = contact;
138		if (contact!=null) {
139			this.contactUuid = contact.getUuid();
140		}
141	}
142
143	public void setAccount(Account account) {
144		this.account = account;
145	}
146	
147	public String getContactJid() {
148		return this.contactJid;
149	}
150
151	public Uri getProfilePhotoUri() {
152		if (this.getProfilePhotoString() != null) {
153			return Uri.parse(this.getProfilePhotoString());
154		}
155		return null;
156	}
157
158	public int getStatus() {
159		return this.status;
160	}
161	
162	public long getCreated() {
163		return this.created;
164	}
165
166	public ContentValues getContentValues() {
167		ContentValues values = new ContentValues();
168		values.put(UUID, uuid);
169		values.put(NAME, name);
170		values.put(CONTACT, contactUuid);
171		values.put(ACCOUNT, accountUuid);
172		values.put(CONTACTJID, contactJid);
173		values.put(CREATED, created);
174		values.put(STATUS, status);
175		values.put(MODE,mode);
176		return values;
177	}
178
179	public static Conversation fromCursor(Cursor cursor) {
180		return new Conversation(cursor.getString(cursor.getColumnIndex(UUID)),
181				cursor.getString(cursor.getColumnIndex(NAME)),
182				cursor.getString(cursor.getColumnIndex(CONTACT)),
183				cursor.getString(cursor.getColumnIndex(ACCOUNT)),
184				cursor.getString(cursor.getColumnIndex(CONTACTJID)),
185				cursor.getLong(cursor.getColumnIndex(CREATED)),
186				cursor.getInt(cursor.getColumnIndex(STATUS)),
187				cursor.getInt(cursor.getColumnIndex(MODE)));
188	}
189
190	public void setStatus(int status) {
191		this.status = status;
192	}
193
194	public int getMode() {
195		return this.mode;
196	}
197
198	public void setMode(int mode) {
199		this.mode = mode;
200	}
201}