/* JFox, the OpenSource J2EE Application Server
 *
 * Copyright (C) 2002 huihoo.com
 * Distributable under GNU LGPL license
 * See the GNU Lesser General Public License for more details.
 */

package org.jfox.mx.http;

import java.util.Properties;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;

import org.jfox.mx.MxServer;
import org.jfox.mx.ObjectName;

/**
 * 
 * @author <a href="mailto:young_yy@hotmail.com">Young Yang</a>
 */

public class AgentCommand implements Command {

  public String doGet(MxServer mx, Properties queryMap) throws Exception {
    StringBuffer sb = new StringBuffer();
    sb.append(PageUtil.head("agent view",mx.getDomains()));
    sb.append(PageUtil.banner("Agent View"));
    sb.append(table1(mx));

    String domainFilter = "*";
    if(queryMap.containsKey("domain")) {
      domainFilter = queryMap.getProperty("domain");
    }

    sb.append(table2(mx,domainFilter));
    sb.append(PageUtil.foot());
    return sb.toString();
  }

  public static String table1(MxServer mx){
    StringBuffer sb = new StringBuffer();
    sb.append("<table width=\"780\" align=\"center\">");
    sb.append("<tr>");

    sb.append("<td>found <b>");
    sb.append(mx.getMxCount());
    String defaultDomain = mx.getDefaultDomain();
    sb.append("</b> mx bean in <b>")
            .append(mx.getDomains().length)
            .append("</b> domains, default domain is <a href=\"?action=Agent&domain=")
            .append(defaultDomain).append("\">")
            .append(defaultDomain)
            .append("</a> . </td>");
    sb.append("</tr>");
    sb.append("</table>");
    return sb.toString();
  }

  public static String table2(MxServer mx,String domainFilter){
    Iterator it = mx.queryMX(domainFilter);
    Map domainsMap = new HashMap();
    while(it.hasNext()){
      ObjectName on = (ObjectName)it.next();
      String domain = on.getDomain();
      if(domain.equals("")) {
        domain = mx.getDefaultDomain();
      }
      if(!domainsMap.containsKey(domain)) {
        List objectNames = new ArrayList();
        objectNames.add(on);
        domainsMap.put(domain,objectNames);
      }
      else {
        List objectNames = (List)domainsMap.get(domain);
        objectNames.add(on);
      }
    }
    StringBuffer sb = new StringBuffer();
    sb.append("<table width=\"780\" align=\"center\">\n" +
"  <tr>\n" +
"    <td>\n" +
"      <ul>\n");
    for(Iterator iter = domainsMap.entrySet().iterator();iter.hasNext();){
      Map.Entry entry = (Map.Entry)iter.next();
      String domain = (String)entry.getKey();
      List objectNames = (List)entry.getValue();
      sb.append("<li> <a href=\"?action=Agent&domain=").append(domain).append("\" class=\"head\">").append(domain).append("</a> &nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?action=CreateMX&domain=")
              .append(domain)
              .append("\"><font size=\"-2\" face=\"verdana\" color=\"#666666\">Create MX</font></a>\n");
      sb.append("<br>\n");
      sb.append("<ul>\n");
      for(int i=0;i<objectNames.size();i++){
        ObjectName on = (ObjectName)objectNames.get(i);
        sb.append("<li><a href=\"?action=ViewMX&objectname=")
                .append(on).append("\" >")
                .append(on.getKeyPropertyListString())
                .append("</a> &nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?action=UnregisterMX&objectname=")
                .append(on)
                .append("&domain=")
                .append(domainFilter)
                .append("\"><font size=\"-2\" face=\"verdana\" color=\"#666666\">Unregister MX</font></a>\n");
      }
      sb.append("        </ul>\n");
    }
    sb.append(
"        <p>\n" +
"      </ul>\n" +
"    </td>\n" +
"  </tr>\n" +
"</table>");
    return sb.toString();
  }

  public static void main(String[] args) {

  }
}