package org.ifsoft.openlink.view;
import java.io.IOException;
import java.util.*;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.roster.Roster;
import org.jivesoftware.openfire.roster.RosterItem;
import org.jivesoftware.openfire.roster.RosterManager;
import org.jivesoftware.openfire.user.UserManager;
import org.jivesoftware.openfire.user.User;
import org.ifsoft.openlink.*;
import org.ifsoft.openlink.component.*;
import org.xmpp.packet.JID;
@WebServlet(value="/traderlyncProfileDetail", name="traderlyncProfileDetail") public class ProfileDetail extends HttpServlet
{
private static final Logger Log = LoggerFactory.getLogger(ProfileDetail.class);
private String defaultInterestKey = null;
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 {
String userKey = request.getParameter("user");
String siteID = request.getParameter("site");
String siteName = request.getParameter("siteName");
String action = request.getParameter("action");
String vMesssage = request.getParameter("vmsg");
String vmComment = request.getParameter("vmComment");
String vmName = request.getParameter("vmName");
String vmLabel = request.getParameter("vmLabel");
out.println("");
out.println("<html>");
out.println("<head>");
out.println(" <title>User Interests</title>");
out.println(" <meta name=\"pageID\" content=\"TRADERLYNC-PROFILE-SUMMARY\"/>");
out.println(" <script>function doCollapse(id){if(document.getElementById(id).style.display == \"none\"){document.getElementById(id).style.display = \"\";}else{document.getElementById(id).style.display = \"none\";}}</script>");
out.println("</head>");
out.println("<body>");
out.println("<br>");
if (OpenlinkComponent.self.traderLyncUserTable.containsKey(userKey))
{
OpenlinkUser traderLyncUser = OpenlinkComponent.self.traderLyncUserTable.get(userKey);
try {
//OpenlinkComponent.self.getSkype4BUser(userKey);
} catch (Exception e) {}
if (action != null)
{
if ("play".equals(action))
{
}
else
if ("edit".equals(action))
{
}
else
if ("create".equals(action))
{
}
else
if ("delete".equals(action))
{
}
Thread.sleep(1000);
response.sendRedirect("traderlync-profile-detail?user=" + userKey + "&site=" + siteID + "&siteName=" + siteName);
}
out.println("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\"><tr valign='top'><td colspan='2'><div id='jive-title'>" + traderLyncUser.getProfileName() + " (" + traderLyncUser.getUserName() + ")</div></td></tr>");
out.println("<tr valign='top'><td><div id='jive-title'></div></td></tr>");
out.println("<tr valign='top'><td><div id='jive-title'><center>Direct Lines</center></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>Interest Id</th>");
out.println("<th nowrap>Label</th>");
out.println("<th nowrap>Line</th>");
out.println("<th nowrap>Subs</th>");
out.println("<th nowrap>Calls</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
Iterator<OpenlinkInterest> iter = traderLyncUser.getInterests().values().iterator();
int i = 1;
while( iter.hasNext() )
{
OpenlinkInterest traderLyncInterest = (OpenlinkInterest)iter.next();
try
{
if ("L".equals(traderLyncInterest.getInterestType()))
{
if(i % 2 == 1)
out.println("<tr valign='top' class=\"jive-odd\">");
else
out.println("<tr valign='top' class=\"jive-even\">");
String traderLyncInterestKey = traderLyncInterest.getInterestId() + traderLyncUser.getUserNo();
String interestValue = traderLyncInterest.getInterestValue();
if (interestValue.startsWith("tel:")) interestValue = interestValue.substring(4);
OpenlinkUserInterest traderLyncUserInterest = traderLyncInterest.getUserInterests().get(traderLyncUser.getUserNo());
int callCount = traderLyncUserInterest.getCalls().size();
int subscriberCount = traderLyncUserInterest.getSubscribers().size();
out.println("<td width=\"10%\">");
out.println("<a href='traderlync-interest-detail?interest=" + traderLyncInterestKey + (callCount == 0 ? "&action=makeCall&destination=" + java.net.URLEncoder.encode(interestValue, "UTF-8") : "") + "'>" + traderLyncInterest.getInterestId() + "</a>");
out.println("</td>");
out.println("<td width=\"60%\">");
out.println(traderLyncInterest.getInterestLabel());
out.println("</td>");
out.println("<td width=\"10%\">");
out.println(traderLyncInterest.getInterestValue());
out.println("</td>");
out.println("<td width=\"10%\">");
out.println(subscriberCount == 0 ? "" : String.valueOf(subscriberCount));
out.println("</td>");
if (callCount == 0)
{
out.println("<td width=\"20\"> </td>");
} else {
out.println("<td style='background-color:#4dc027;text-align:center' width=\"20\"><font color='#ffffff'>");
out.println(String.valueOf(callCount));
out.println("</font></td>");
}
out.println("</tr>");
i++;
}
}
catch(Exception e)
{
}
}
out.println("</tbody>");
out.println("</table>");
out.println("</div>");
out.println("<p></p>");
out.println("</td><td>");
out.println("<div id='jive-title'><center>Directory Numbers</center></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>Interest Id</th>");
out.println("<th nowrap>Label</th>");
out.println("<th nowrap>DN</th>");
out.println("<th nowrap>Callset</th>");
out.println("<th nowrap>Subs</th>");
out.println("<th nowrap>Max</th>");
out.println("<th nowrap>Calls</th>");
out.println("<th nowrap>Fwd</th>");
out.println("<th nowrap>Def</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
iter = traderLyncUser.getInterests().values().iterator();
i = 1;
while( iter.hasNext() ){
OpenlinkInterest traderLyncInterest = (OpenlinkInterest)iter.next();
try
{
if ("D".equals(traderLyncInterest.getInterestType()))
{
if(i % 2 == 1)
out.println("<tr valign='top' class=\"jive-odd\">");
else
out.println("<tr valign='top' class=\"jive-even\">");
String traderLyncInterestKey = traderLyncInterest.getInterestId() + traderLyncUser.getUserNo();
OpenlinkUserInterest traderLyncUserInterest = traderLyncInterest.getUserInterests().get(traderLyncUser.getUserNo());
int callCount = traderLyncUserInterest.getCalls().size();
int max = traderLyncUserInterest.getMaxNumCalls();
int subscriberCount = traderLyncUserInterest.getSubscribers().size();
out.println("<td width=\"10%\">");
out.println("<a href='traderlync-interest-detail?interest=" + traderLyncInterestKey + "'>" + traderLyncInterest.getInterestId() + "</a>");
out.println("</td>");
out.println("<td width=\"30%\">");
out.println(traderLyncInterest.getInterestLabel());
out.println("</td>");
out.println("<td width=\"10%\">");
out.println(traderLyncInterest.getInterestValue());
out.println("</td>");
out.println("<td width=\"10%\">");
out.println(traderLyncInterest.getCallset() == null ? "" : traderLyncInterest.getCallset());
out.println("</td>");
out.println("<td width=\"10%\">");
out.println(subscriberCount == 0 ? "" : String.valueOf(subscriberCount));
out.println("</td>");
out.println("<td width=\"10%\">");
out.println(max == 0 ? "" : String.valueOf(max));
out.println("</td>");
if (callCount == 0)
{
out.println("<td width=\"10%\"> </td>");
} else {
out.println("<td style='background-color:#4dc027;text-align:center' width=\"10%\"><font color='#ffffff'>");
out.println(String.valueOf(callCount));
out.println("</font></td>");
}
out.println("<td width=\"5%\">");
out.println("true".equals(traderLyncUserInterest.getCallFWD()) ? "<img src=\"images/success-16x16.gif\" alt='" + traderLyncInterest.getUserInterests().get(traderLyncUser.getUserNo()).getCallFWDDigits() + "' border=\"0\">" : " ");
out.println("</td>");
out.println("<td width=\"5%\">");
out.println("true".equals(traderLyncUserInterest.getDefault()) ? "<img src=\"images/success-16x16.gif\" alt=\"Yes\" border=\"0\">" : " ");
out.println("</td>");
out.println("</tr>");
if ("true".equals(traderLyncUserInterest.getDefault())) defaultInterestKey = traderLyncInterestKey;
i++;
}
}
catch(Exception e)
{
}
}
out.println("</tbody>");
out.println("</table>");
out.println("</div>");
out.println("<p></p>");
out.println("</td></tr><tr valign='top'><td>");
out.println("<div id='jive-title'><center>Speed Dial Features</center></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>Feature Id</th>");
out.println("<th nowrap>Label</th>");
out.println("<th nowrap>Dialable Number</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
RosterManager rosterManager = XMPPServer.getInstance().getRosterManager();
Roster roster = rosterManager.getRoster(userKey);
List<RosterItem> rosterItems = new ArrayList<RosterItem>(roster.getRosterItems());
Collections.sort(rosterItems, new RosterItemComparator());
i = 1;
for (RosterItem rosterItem : rosterItems)
{
try {
String itemUsername = rosterItem.getJid().getNode();
User itemUser = XMPPServer.getInstance().getUserManager().getUser(itemUsername);
String phone = itemUser.getProperties().get("wirelynk.phone.other");
if (phone != null && phone.startsWith("tel:") && phone.indexOf(";wl=") == -1)
{
if (phone.startsWith("tel:")) phone = phone.substring(4);
if(i % 2 == 1)
out.println("<tr valign='top' class=\"jive-odd\">");
else
out.println("<tr valign='top' class=\"jive-even\">");
out.println("<td width=\"10%\">");
if (defaultInterestKey == null)
{
out.println(itemUsername);
} else {
out.println("<a href='traderlync-interest-detail?interest=" + defaultInterestKey + "&action=makeCall&destination=" + java.net.URLEncoder.encode(phone, "UTF-8") + "'>" + itemUsername + "</a>");
}
out.println("</td>");
out.println("<td width=\"70%\">");
out.println(rosterItem.getNickname());
out.println("</td>");
out.println("<td width=\"20%\">");
out.println(phone);
out.println("</td>");
out.println("</tr>");
i++;
}
} catch (Exception e) {
}
}
out.println("</tbody>");
out.println("</table>");
out.println("</div>");
out.println("<p></p>");
out.println("</td><td>");
out.println("<div id='jive-title'><center>Intercom Group Features</center></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>Feature Id</th>");
out.println("<th nowrap>Label</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
Iterator<OpenlinkGroup> iter3 = traderLyncUser.getGroups().iterator();
i = 1;
while( iter3.hasNext() )
{
OpenlinkGroup traderLyncGroup = (OpenlinkGroup)iter3.next();
try
{
if(i % 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(traderLyncGroup.getGroupID());
out.println("</td>");
out.println("<td width=\"80%\">");
out.println(traderLyncGroup.getName());
out.println("</td>");;
out.println("</tr>");
i++;
}
catch(Exception e)
{
}
}
out.println("</tbody>");
out.println("</table>");
out.println("</div>");
out.println("<p></p>");
out.println("</td></tr></table>");
}
out.println("</body>");
out.println("</html>");
}
catch (Exception e) {
Log.error("profile detail", e);
}
}
class RosterItemComparator implements Comparator<RosterItem>
{
public int compare(RosterItem itemA, RosterItem itemB)
{
return itemA.getJid().toBareJID().compareTo(itemB.getJid().toBareJID());
}
}
}