package com.rayo.core.cdr; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.time.DateFormatUtils; public class Cdr implements Serializable { private static final long serialVersionUID = -1948067531358803733L; private String callId; private long startTime; private long endTime; private String from; private String to; private String state; private List<String> transcript = new ArrayList<String>(); public String getCallId() { return callId; } public void setCallId(String callId) { this.callId = callId; } public void add(String element) { transcript.add(timestamp(element)); } public List<String> getTranscript() { return transcript; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public long getEndTime() { return endTime; } public void setEndTime(long endTime) { this.endTime = endTime; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getState() { return state; } public void setState(String state) { this.state = state; } public void setTranscript(List<String> transcript) { this.transcript = transcript; } public String toString() { StringBuilder builder = new StringBuilder(String.format( "<cdr callId=\"%s\" from=\"%s\" to=\"%s\" start=\"%s\" end=\"%s\" state=\"%s\" xmlns=\"http://tropo.com/schema/cdr\" xmlns:cdr=\"http://tropo.com/schema/cdr\">", getCallId(), getFrom(), getTo(), formatDate(new Date(getStartTime())), formatDate(new Date(getEndTime())), getState() )); for (String element: getTranscript()) { builder.append(element); } builder.append("</cdr>\n"); return builder.toString(); } private String timestamp(String element) { int i = element.indexOf('>'); if (i == element.length()-1) { i--; } StringBuffer builder = new StringBuffer(element.substring(0,i)); if (! (builder.charAt(builder.length()-1) == ' ')) { builder.append(' '); } builder.append(String.format("cdr:ts=\"%s\"", formatDate(new Date()))); builder.append(element.substring(i)); return builder.toString(); } private String formatDate(Date date) { return DateFormatUtils.format(new Date(), "yyyy-dd-MM hh:mm:ss.SZ"); } }