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}