package dk.silverbullet.telemed.questionnaire.node; import android.app.ProgressDialog; import android.util.Log; import dk.silverbullet.telemed.questionnaire.Questionnaire; import dk.silverbullet.telemed.questionnaire.R; import dk.silverbullet.telemed.questionnaire.element.ButtonElement; import dk.silverbullet.telemed.questionnaire.element.ClinicMessageBubbleElement; import dk.silverbullet.telemed.questionnaire.element.PatientMessageBubbleElement; import dk.silverbullet.telemed.questionnaire.element.TextViewElement; import dk.silverbullet.telemed.questionnaire.expression.Variable; import dk.silverbullet.telemed.questionnaire.expression.VariableLinkFailedException; import dk.silverbullet.telemed.rest.Resources; import dk.silverbullet.telemed.rest.listener.RetrieveEntityListener; import dk.silverbullet.telemed.rest.tasks.MarkMessagesAsReadTask; import dk.silverbullet.telemed.rest.bean.message.MessageItem; import dk.silverbullet.telemed.rest.bean.message.Messages; import dk.silverbullet.telemed.utils.Util; import java.util.LinkedList; import java.util.List; import java.util.Map; public class MessageDialogNode extends IONode implements RetrieveEntityListener<Messages> { private static final String TAG = Util.getTag(MessageDialogNode.class); private Node newMessageNode; private Variable<Long> departmentId; @SuppressWarnings("rawtypes") private Variable<Map> departmentNameMap; private LinkedList<MessageItem> messages; private ProgressDialog dialog; public MessageDialogNode(Questionnaire questionnaire, String nodeName) { super(questionnaire, nodeName); } @Override public void enter() { if (null != messages) { messages.clear(); clearElements(); } dialog = ProgressDialog.show(questionnaire.getContext(), Util.getString(R.string.message_fetching, questionnaire), Util.getString(R.string.default_please_wait, questionnaire), true); Resources.getMessages(questionnaire, this); super.enter(); } public void setView() { clearElements(); String departmentName = (String) departmentNameMap.getExpressionValue().getValue() .get(departmentId.getExpressionValue().getValue()); Log.d(TAG, "questionnaire.getUserId(): " + questionnaire.getUserId()); Log.d(TAG, "questionnaire.getFullName(): " + questionnaire.getFullName()); if (messages != null && messages.size() > 0) { addElement(new TextViewElement(this, departmentName, false)); for (MessageItem msg : messages) { boolean isFromPatient = msg.getFrom().getType().equals("Patient"); if (isFromPatient) { Log.d(TAG, "Adding PatientMessageBubbleElement"); addElement(new PatientMessageBubbleElement(this, msg)); } else { Log.d(TAG, "Adding ClinicMessageBubbleElement"); addElement(new ClinicMessageBubbleElement(this, msg)); } } } else { addElement(new TextViewElement(this, departmentName, false)); addElement(new TextViewElement(this, Util.getString(R.string.message_read_write, questionnaire))); addElement(new TextViewElement(this, Util.getString(R.string.message_write_instructions, questionnaire))); } ButtonElement be = new ButtonElement(this); be.setNextNode(newMessageNode); be.setText(Util.getString(R.string.message_new, questionnaire)); addElement(be); } @Override public void leave() { super.leave(); Util.saveVariables(questionnaire); } @Override public void linkVariables(Map<String, Variable<?>> map) throws VariableLinkFailedException { super.linkVariables(map); Util.linkVariable(map, departmentId); Util.linkVariable(map, departmentNameMap); } @Override public String toString() { return "MessageListNode"; } @Override public void retrieveError() { dialog.dismiss(); } @Override public void retrieved(Messages result) { messages = new LinkedList<MessageItem>(); final List<Long> messagesToRead = new LinkedList<Long>(); long departmentId = this.departmentId.getExpressionValue().getValue(); for (MessageItem message : result.messages) { boolean isFromDepartment = message.getFrom().getType().equals("Department") && message.getFrom().getId() == departmentId; boolean isToDepartment = message.getTo().getType().equals("Department") && message.getTo().getId() == departmentId; if (isFromDepartment || isToDepartment) { messages.add(0, message); } if (isFromDepartment && !message.isRead()) { messagesToRead.add(message.getId()); } } new MarkMessagesAsReadTask(getQuestionnaire()).execute(messagesToRead.toArray(new Long[0])); setView(); createView(); dialog.dismiss(); } public void setNewMessageNode(Node newMessageNode) { this.newMessageNode = newMessageNode; } public void setDepartmentId(Variable<Long> departmentId) { this.departmentId = departmentId; } public void setDepartmentNameMap(Variable<Map> departmentNameMap) { this.departmentNameMap = departmentNameMap; } }