package org.ifsoft.openlink.view;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.*;
import javax.servlet.annotation.*;
import org.jivesoftware.util.Log;
import org.jivesoftware.util.cache.Cache;
import org.jivesoftware.util.cache.CacheFactory;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.session.LocalClientSession;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserNotFoundException;
import org.ifsoft.openlink.*;
import org.ifsoft.openlink.component.*;
import org.xmpp.packet.JID;
import org.slf4j.*;
import org.slf4j.Logger;
@WebServlet(value="/traderlyncInterestDetail", name="traderlyncInterestDetail") public class InterestDetail extends HttpServlet {
private static final Logger Log = LoggerFactory.getLogger(InterestDetail.class);
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-Type", "text/html");
response.setHeader("Connection", "close");
ServletOutputStream out = response.getOutputStream();
try {
out.println("");
out.println("<html>");
out.println(" <head>");
out.println(" <title>User Interest Calls</title>");
out.println(" <meta name=\"pageID\" content=\"TRADERLYNC-PROFILE-SUMMARY\"/>");
out.println(" </head>");
out.println(" <body>");
out.println("");
out.println("<br>");
String interestKey = request.getParameter("interest");
String action = request.getParameter("action");
String destination = request.getParameter("destination");
String callId = request.getParameter("callId");
String requestAction = request.getParameter("requestAction");
if (OpenlinkComponent.self.openlinkInterests.containsKey(interestKey))
{
OpenlinkUserInterest traderLyncUserInterest = OpenlinkComponent.self.openlinkInterests.get(interestKey);
OpenlinkUser traderLyncUser = traderLyncUserInterest.getUser();
OpenlinkInterest traderLyncInterest = traderLyncUserInterest.getInterest();
if (action != null)
{
if ("makeCall".equals(action))
{
try {
int pos = destination.indexOf("@");
if ( pos > -1)
{
OpenlinkComponent.self.intercomCall(null, traderLyncUser.getProfileName(), new JID(destination), null);
} else {
OpenlinkComponent.self.makeCall(null, interestKey, traderLyncUser.getHandsetNo(), null, null, destination);
}
} catch (Exception e) {
Log.error("Interest Detail Make call failure " + e);
}
}
if ("requestAction".equals(action) && callId != null && requestAction != null && !"".equals(requestAction))
{
OpenlinkComponent.self.processUserAction(null, interestKey, requestAction, callId, destination);
}
Thread.sleep(1000); // wait for first Openlink event and cache update before we update UI
}
String returnAnchor2 = "<a href='traderlync-profile-detail?user=" + traderLyncUser.getProfileName() + "'>" + traderLyncUser.getUserName() + "</a>";
out.println("<form action=\"traderlync-interest-detail\" method=\"get\" name='openlink'>");
out.println("<input type='hidden' name='action' value='makeCall'>");
out.println("<input type='hidden' name='interest' value='" + interestKey + "'>");
out.println("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\"><tr>");
out.println("<td><div id='jive-title'>" + returnAnchor2 + " > " + traderLyncInterest.getInterestValue() + "</div></td>");
out.println("<td><button onclick='openlink.action.value=\"\";openlink.destination.value=\"\";location.href=\"traderlync-interest-detail?interest=" + interestKey + "\"'>Refresh</button></td>");
out.println("<td align='right'><input type='text' name='destination'><input type=\"submit\" value=\"Make Call\"></td></tr></table>");
out.println("<div class=\"jive-table\">");
out.println("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\">");
out.println("<thead>");
out.println("<tr>");
out.println("<th nowrap>Call Id</th>");
out.println("<th nowrap>Caller Id</th>");
out.println("<th nowrap>Caller Name</th>");
out.println("<th nowrap>Called Id</th>");
out.println("<th nowrap>Called Name</th>");
out.println("<th nowrap>Device</th>");
out.println("<th nowrap>HS</th>");
out.println("<th nowrap>State</th>");
out.println("<th nowrap>Action</th>");
out.println("<th nowrap>Direction</th>");
out.println("<th nowrap>Active</th>");
out.println("<th nowrap>Privacy</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
Iterator<OpenlinkCall> iter = traderLyncUserInterest.getCalls().values().iterator();
int i = 1;
while(iter.hasNext())
{
OpenlinkCall traderLyncCall = (OpenlinkCall)iter.next();
try
{
if(i % 2 == 1)
out.println("<tr class=\"jive-odd\">");
else
out.println("<tr class=\"jive-even\">");
out.println("<td width=\"4%\">");
out.println("<div title='" + traderLyncCall.getCallID() + "'>" + (traderLyncCall.getCallID().length() > 6 ? traderLyncCall.getCallID().substring(0, 6) + ".." : traderLyncCall.getCallID()) + "</div>");
out.println("</td>");
out.println("<td width=\"15%\">");
out.println(traderLyncCall.getCallerNumber(traderLyncInterest.getInterestType()));
out.println("</td>");
out.println("<td width=\"15%\">");
out.println(traderLyncCall.getCallerName(traderLyncInterest.getInterestType()));
out.println("</td>");
out.println("<td width=\"15%\">");
out.println(traderLyncCall.getCalledNumber(traderLyncInterest.getInterestType()));
out.println("</td>");
out.println("<td width=\"15%\">");
out.println(traderLyncCall.getCalledName(traderLyncInterest.getInterestType()));
out.println("</td>");
out.println("<td width=\"8%\">");
out.println(traderLyncUser.getDeviceNo());
out.println("</td>");
out.println("<td width=\"4%\">");
out.println(traderLyncCall.getHandset());
out.println("</td>");
out.println("<td width=\"4%\">");
out.println(getStateIcon(traderLyncCall.getState()));
out.println("</td>");
out.println("<td width=\"4%\">");
out.println("<select size='1' onchange='location.href=\"traderlync-interest-detail?action=requestAction&callId=" + traderLyncCall.getCallID() + "&interest=" + interestKey + "&destination=\" + openlink.destination.value + \"&requestAction=\" + this.options[this.selectedIndex].value'><option value=''>Select Action</option>");
Iterator it4 = traderLyncCall.getValidActions().iterator();
while( it4.hasNext() )
{
String callAction = (String)it4.next();
out.println("<option value='" + callAction + "'>" + callAction + "</option>");
}
out.println("</select>");
out.println("</td>");
out.println("<td width=\"4%\">");
out.println("Incoming".equals(traderLyncCall.getDirection()) ? "<img src=\"images/incoming.jpg\" alt=\"Incoming\" border=\"0\">In" : "<img src=\"images/outgoing.jpg\" alt=\"Outgoing\" border=\"0\">Out");
out.println("</td>");
out.println("<td width=\"4%\">");
out.println("Active".equals(traderLyncCall.getParticipation()) ? "<img src=\"images/success-16x16.gif\" alt=\"Yes\" border=\"0\">" : " ");
out.println("</td>");
out.println("<td width=\"4%\">");
out.println("Y".equals(traderLyncCall.getPrivacy()) ? "<img src=\"images/success-16x16.gif\" alt=\"Yes\" border=\"0\">" : " ");
out.println("</td>");
out.println("</tr>");
i++;
}
catch(Exception e)
{
}
}
out.println("</tbody>");
out.println("</table>");
out.println("</div>");
out.println("<p> </p><p> </p>");
out.println("<div id='jive-title'>Interest Subscribers</div>");
out.println("<div class=\"jive-table\">");
out.println("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\">");
out.println("<thead>");
out.println("<tr>");
out.println("<th nowrap>Subscriber</th>");
out.println("<th nowrap>User Name</th>");
out.println("<th nowrap>Full Name</th>");
out.println("<th nowrap>IP Address</th>");
out.println("<th nowrap>Online</th>");
out.println("<th nowrap>Subscription</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
Iterator<OpenlinkSubscriber> iter2 = traderLyncUserInterest.getSubscribers().values().iterator();
int j = 1;
while( iter2.hasNext() )
{
OpenlinkSubscriber subscriber = (OpenlinkSubscriber)iter2.next();
if(j % 2 == 1)
out.println("<tr valign='top' class=\"jive-odd\">");
else
out.println("<tr valign='top' class=\"jive-even\">");
out.println("<td width=\"20%\">");
out.println(subscriber.getJID().toString());
out.println("</td>");
out.println("<td width=\"20%\">");
out.println(subscriber.getJID().getNode() == null ? "" : subscriber.getJID().getNode());
out.println("</td>");
out.println("<td width=\"20%\">");
out.println(subscriber.getName());
out.println("</td>");
LocalClientSession session = null;
try {
session = (LocalClientSession) XMPPServer.getInstance().getSessionManager().getSession(subscriber.getJID());
}
catch (Exception e) { }
out.println("<td width=\"10%\">");
out.println(session == null ? " " : session.getHostAddress());
out.println("</td>");
String icon = "<img src=\"images/unavailable.png\" alt=\"Offline\" border=\"0\">";
if (subscriber.getOnline())
{
icon = "<img src=\"images/available.png\" alt=\"Online\" border=\"0\">";
}
out.println("<td width=\"10%\">");
out.println(icon);
out.println("</td>");
out.println("<td width=\"20%\">");
out.println(subscriber.getSubscription());
out.println("</td>");
out.println("</tr>");
j++;
}
out.println("</tbody>");
out.println("</table>");
out.println("</div>");
}
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
catch (Exception e) {
Log.error("InterestDetail", e);
}
}
private String getStateIcon(String state)
{
String icon = "<img src='images/call_cleared.png' alt='Cleared' border='0'> " + state;
if ("ConnectionCleared".equals(state))
{
icon = "<img src='images/call_cleared.png' alt='Cleared' border='0'> Cleared";
}
if ("CallConferenced".equals(state))
{
icon = "<img src='images/call_conferenced.png' alt='Conferenced' border='0'> Conferenced";
}
if ("CallDelivered".equals(state))
{
icon = "<img src='images/call_delivered.png' alt='Delivered' border='0'> Delivered";
}
if ("CallOriginated".equals(state))
{
icon = "<img src='images/call_originated.png' alt='Originated' border='0'> Originated";
}
if ("CallEstablished".equals(state))
{
icon = "<img src='images/call_established.png' alt='Established' border='0'> Established";
}
if ("CallBusy".equals(state))
{
icon = "<img src='images/call_busy.png' alt='Busy' border='0'> Busy";
}
if ("CallHeld".equals(state))
{
icon = "<img src='images/call_held.png' alt='Held' border='0'> Held";
}
if ("CallMissed".equals(state))
{
icon = "<img src='images/call_missed.png' alt='Missed' border='0'> Missed";
}
if ("CallHeldElsewhere".equals(state))
{
icon = "<img src='images/call_held.png' alt='Held' border='0'> Held";
}
if ("CallFailed".equals(state))
{
icon = "<img src='images/call_cleared.png' alt='Failed' border='0'> Failed";
}
if ("CallTransferred".equals(state))
{
icon = "<img src='images/call_unknown.png' alt='Transferred' border='0'> Transferred";
}
if ("CallTransferring".equals(state))
{
icon = "<img src='images/call_unknown.png' alt='Transferring' border='0'> Transferring";
}
return icon;
}
}