package com.rayo.server.jmx; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import com.rayo.server.CallActor; import com.rayo.server.CallRegistry; import com.rayo.server.CdrManager; import com.rayo.server.verb.VerbHandler; import com.rayo.core.cdr.Cdr; public class Call { private transient com.voxeo.moho.Call call; private transient CallRegistry callRegistry; private transient CdrManager cdrManager; public Call(com.voxeo.moho.Call call, CallRegistry registry, CdrManager cdrManager) { this.call = call; this.callRegistry = registry; this.cdrManager = cdrManager; } public String getCallState() { return call.getCallState().toString(); } public String getCallId() { return call.getId(); } public String getAddress() { if (call.getAddress() != null) { return call.getAddress().getURI().toString(); } return ""; } public String getInvitee() { if (call.getInvitee() != null) { return call.getInvitee().getURI().toString(); } return ""; } public String getInvitor() { if (call.getInvitor() != null) { return call.getInvitor().getURI().toString(); } return ""; } public Map<String, String> getHeaders() { Map<String, String> map = new HashMap<String, String>(); Iterator<String> it = call.getHeaderNames(); while (it.hasNext()) { String header = it.next(); map.put(header, call.getHeader(header)); } return map; } public String getHeadersString() { StringBuilder builder = new StringBuilder("["); Iterator<String> it = call.getHeaderNames(); while (it.hasNext()) { String header = it.next(); builder.append(header + "=" + call.getHeader(header) + ", "); } if (builder.length() > 1) { builder = builder.delete(builder.length()-2, builder.length()); } builder.append("]"); return builder.toString(); } public Map<String,String> getAttributes() { Map<String, String> attributes = new HashMap<String, String>(); for (Map.Entry<String, Object> entry: call.getAttributeMap().entrySet()) { attributes.put(entry.getKey(), entry.getValue().toString()); } return attributes; } public String getAttributesString() { StringBuilder builder = new StringBuilder("["); for (Map.Entry<String, Object> entry: call.getAttributeMap().entrySet()) { builder.append(entry.getKey() + "=" + entry.getValue().toString() + ", "); } if (builder.length() > 1) { builder = builder.delete(builder.length()-2, builder.length()); } builder.append("]"); return builder.toString(); } public List<Peer> getPeers() { List<Peer> peers = new ArrayList<Peer>(); for(com.voxeo.moho.Call peer: call.getPeers()) { peers.add(new Peer(peer.getAddress().toString())); } return peers; } public List<Verb> getVerbs() { List<Verb> verbs = new ArrayList<Verb>(); CallActor<?> actor = callRegistry.get(call.getId()); if (actor != null) { Collection<VerbHandler<?,?>> verbHandlers = actor.getVerbs(); for (VerbHandler<?,?> handler: verbHandlers) { com.rayo.core.verb.Verb verb = handler.getModel(); if (verb != null) { Verb jmxVerb = new Verb(handler, verb); verbs.add(jmxVerb); } } } return verbs; } public Cdr getCdr() { return cdrManager.getCdr(call.getId()); } }