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}