Package org.mokai.web.admin.jogger.controllers

Source Code of org.mokai.web.admin.jogger.controllers.Messages

package org.mokai.web.admin.jogger.controllers;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jogger.http.Request;
import org.jogger.http.Response;
import org.jogger.http.Value;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.mokai.Message;
import org.mokai.Message.Direction;
import org.mokai.RoutingEngine;
import org.mokai.persist.MessageCriteria;
import org.mokai.persist.MessageCriteria.OrderType;
import org.mokai.web.admin.jogger.annotations.Secured;

@Secured
public class Messages {

  private RoutingEngine routingEngine;

  public void connections(Request request, Response response) throws JSONException {
    Value to = request.getParameter("recipient");
    Value status = request.getParameter("status");
    Value numRecords = request.getParameter("numRecords");

    Collection<Message> messages = listMessages(Direction.TO_CONNECTIONS, "to", to, status, numRecords);

    boolean htmlResponse = request.getHeader("Accept").contains("text/html");
    if (htmlResponse) {
      Map<String,Object> root = new HashMap<String,Object>();
      root.put( "messages", convertMessages(messages) );
      root.put( "tab", "connections-messages" );

      response.contentType("text/html; charset=UTF-8").render("messages.ftl", root);
    } else {
      JSONArray jsonMessages = getJSONMessages(messages);
      response.contentType("application/json; charset=UTF-8").print( jsonMessages.toString() );
    }
  }

  public void applications(Request request, Response response) throws JSONException {
    Value from = request.getParameter("recipient");
    Value status = request.getParameter("status");
    Value numRecords = request.getParameter("numRecords");

    Collection<Message> messages = listMessages(Direction.TO_APPLICATIONS, "from", from, status, numRecords);

    boolean htmlResponse = request.getHeader("Accept").contains("text/html");
    if (htmlResponse) {
      Map<String,Object> root = new HashMap<String,Object>();
      root.put( "messages", convertMessages(messages) );
      root.put( "tab", "applications-messages" );

      response.contentType("text/html; charset=UTF-8").render("messages.ftl", root);
    } else {
      JSONArray jsonMessages = getJSONMessages(messages);
      response.contentType("application/json; charset=UTF-8").print( jsonMessages.toString() );
    }
  }

  private Collection<Message> listMessages(Direction direction, String recipientKey, Value recipientValue, Value status, Value numRecords) {
    MessageCriteria criteria = new MessageCriteria()
      .direction(direction)
      .orderBy("id")
      .orderType(OrderType.DOWNWARDS)
      .numRecords( numRecords == null ? 2000 : numRecords.asInteger() );

    if (recipientValue != null) {
      criteria.addProperty(recipientKey, recipientValue.asString());
    }

    if (status != null) {
      List<Value> statusList = status.asList();
      for (Value s : statusList) {
        criteria.addStatus(s.asInteger().byteValue());
      }
    }

    return routingEngine.getMessageStore().list(criteria);
  }

  private List<MessageUI> convertMessages(Collection<Message> messages) {
    List<MessageUI> uiMessages = new ArrayList<MessageUI>();
    for (Message message : messages) {
      uiMessages.add( new MessageUI(message) );
    }

    return uiMessages;
  }

  private JSONArray getJSONMessages(Collection<Message> messages) throws JSONException {
    JSONArray jsonMessages = new JSONArray();
    for (Message message : messages) {
      jsonMessages.put( getJSONMessage(message) );
    }

    return jsonMessages;
  }

  private JSONObject getJSONMessage(Message message) throws JSONException {
    JSONObject jsonMessage = new JSONObject()
      .put("id", message.getId())
      .put("reference", message.getReference())
      .put("source", message.getSource())
      .put("destination", message.getDestination())
      .put("status", message.getStatus())
      .put("creationTime", message.getCreationTime())
      .put("modificationTime", message.getModificationTime());

    Map<String,Object> properties = message.getProperties();
    for (Map.Entry<String,Object> property : properties.entrySet()) {
      jsonMessage.put(property.getKey(), property.getValue());
    }

    return jsonMessage;
  }

  public void setRoutingEngine(RoutingEngine routingEngine) {
    this.routingEngine = routingEngine;
  }

}
TOP

Related Classes of org.mokai.web.admin.jogger.controllers.Messages

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.