Package controllers.api

Source Code of controllers.api.Outbox

package controllers.api;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import play.Logger;
import play.mvc.Controller;
import play.mvc.Router;
import models.Content;
import models.ContentTag;
import models.InboxMessage;
import models.Message;
import models.Message.Receiver;
import models.Notification;
import models.OutboxMessage;
import models.Subscriber;
import models.Tag;
import models.User;
import models.Message.SharedContent;

import com.google.appengine.api.NamespaceManager;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions.Method;

import static com.google.appengine.api.taskqueue.TaskOptions.Builder.*;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import controllers.Data;
import play.mvc.Http.StatusCode;
import play.mvc.Scope.Session;
import play.mvc.results.Error;
import utils.constants.SessionConstants;

public class Outbox extends MeApi {
 
  public static void list(Integer offset, Integer limit) {
    if(offset == null) offset = 0;
    if(limit==null || limit > LIMIT || limit==0) {
      limit = LIMIT;
    }
    User current = getCurrentUser();
    Data<OutboxMessage> data = new Data<OutboxMessage>();
    List<OutboxMessage> messages = OutboxMessage.paginate(OutboxMessage.findSent(current), offset, limit);
    data.total = OutboxMessage.countSent(current);
    data.data = messages;
    for(OutboxMessage message : messages) {
       message.message.get();
    }
    renderTemplate("api/messageList.json",data);
  }
 
 
/*  public static void add_old(JsonObject body) {
    User from = getCurrentUser();
    String text = body.get("body").getAsString();
    List<SharedContent> sharedContents = new ArrayList<SharedContent>();
    for(JsonElement element : body.get("contents").getAsJsonArray()) {
      JsonObject contentElement = element.getAsJsonObject();
      String type = contentElement.get("type").getAsString();
      String source = contentElement.get("source").getAsString();
      Long id = contentElement.get("id").getAsLong();
      if(type==null) {
        Error error = new Error("Type field is empty.");
        error.apply(request, response);
        return;
      }
      Content.ContentType contentType = Content.ContentType.valueOf(type.toUpperCase());
      if(contentType == null) {
        Error error = new Error(type + " is not a correct type value.");
        error.apply(request, response);
        return;
      }
      if(source==null) {
        Error error = new Error("Source field is empty");
        error.apply(request, response);
        return;
      }
      if(id==null) {
        Error error = new Error("Id field is empty");
        error.apply(request, response);
        return;
      }
     
      SharedContent sharedContent = new Message().new SharedContent();
      sharedContent.type = contentType;
      sharedContent.id = id;
      sharedContent.source = source;
      sharedContents.add(sharedContent);
    }
   
    for(JsonElement element : body.get("receivers").getAsJsonArray()) {
      JsonObject toElement = element.getAsJsonObject();
      Long userId = toElement.get("id").getAsLong();
      String firstName = toElement.get("firstName").getAsString();
      if(userId == null) {
        Error error = new Error("The id field of " + firstName + " is empty.");
        error.apply(request, response);
        return;
      }
      User to = User.findById(userId);
      if(to == null) {
        Error error = new Error(firstName + " is not a registered user.");
        error.apply(request, response);
        return;
      }
     
      // INFO: Se crean dos mensajes para diferenciar las carpetas de outbox e inbox. Asi un usuario si lo elimina de la suya permanece en la otra.
     
      //Se inserta un mensaje que pertenece al emisor. // TODO esta parte esta duplicada, deberia ir fuera de la iteracion de receivers. Problema el to (deberia de ser una lista)
      Message message = new Message(from, from, to);
      message.text = text;
      message.contents = sharedContents;
      message.insert();
      //Se inserta un mensaje que pertenece al receptor
     
      message = new Message(to, from, to);
      message.text = text;
      message.contents = sharedContents;
      message.insert();
      Tag sharedTag = Tag.findOrCreateByName("shared", to);
      for(SharedContent sharedContent : sharedContents) {
        if(Content.ContentType.PHOTO == sharedContent.type) {
          ContentTag contentTag = new ContentTag(sharedContent.id, Content.ContentType.PHOTO, sharedTag);
          contentTag.save();
        }
      }
      Notification notification = new Notification();
      if(from.basic_information != null) {
        notification.message = from.basic_information.firstName
            + " " + from.basic_information.lastName + " ha compartido contigo "
            + sharedContents.size() + " contenidos.";
      } else {
        notification.message =  "El administrador ha compartido contigo "
            + sharedContents.size() + " contenidos.";
      }
      notification.owner = to;
      notification.type = Notification.NotificationType.INBOX;
      notification.insert();
    }
    ok();
  }
*/ 
  public static void add(JsonObject body) {
    User from = getCurrentUser();
    String text = body.get("body").getAsString();
    if(text != null && !("").equals(text)) {
      text = text.trim();
    }
    List<SharedContent> sharedContents = new ArrayList<SharedContent>();
    for(JsonElement element : body.get("contents").getAsJsonArray()) {
      JsonObject contentElement = element.getAsJsonObject();
      String type = contentElement.get("type").getAsString();
      String source = contentElement.get("source").getAsString();
      Long id = contentElement.get("id") != null ? contentElement.get("id").getAsLong() : null;
      if(type==null) {
        Error error = new Error("Type field is empty.");
        error.apply(request, response);
        return;
      }
      Content.ContentType contentType = Content.ContentType.valueOf(type.toUpperCase());
      if(contentType == null) {
        Error error = new Error(type + " is not a correct type value.");
        error.apply(request, response);
        return;
      }
      if(source==null) {
        Error error = new Error("Source field is empty");
        error.apply(request, response);
        return;
      }
      // Se comenta esto para permitir contenido externo
      /*if(id==null) {
        Error error = new Error("Id field is empty");
        error.apply(request, response);
        return;
      }*/
     
      SharedContent sharedContent = new Message().new SharedContent();
      sharedContent.type = contentType;
      sharedContent.id = id;
      sharedContent.source = source;
      sharedContents.add(sharedContent);
    }
   
    ArrayList<User> receivers = new ArrayList<User>();
    for(JsonElement element : body.get("receivers").getAsJsonArray()) {
      JsonObject toElement = element.getAsJsonObject();
      Long userId = toElement.get("id").getAsLong();
      String firstName = toElement.get("firstName").getAsString();
      if(userId == null) {
        Error error = new Error("The id field of " + firstName + " is empty.");
        error.apply(request, response);
        return;
      }
      User to = User.findById(userId);
      if(to == null) {
        Error error = new Error(firstName + " is not a registered user.");
        error.apply(request, response);
        return;
      }
     
      receivers.add(to);
    }
      // INFO: Se crean dos mensajes para diferenciar las carpetas de outbox e inbox. Asi un usuario si lo elimina de la suya permanece en la otra.
     
    //Se inserta un mensaje que pertenece al emisor. // TODO esta parte esta duplicada, deberia ir fuera de la iteracion de receivers. Problema el to (deberia de ser una lista)
    Message message = new Message();
    message.from = from;
    //message.to = receivers;
    message.text = text;
    message.contents = sharedContents;
   
    for(User receiver : receivers) {
      message.addReceiver(receiver);
    }
    message.insert();
   
    // Create the outbox message
    OutboxMessage outMessage = new OutboxMessage(from, message);
    outMessage.save()
   
       
    //Se inserta un mensaje que pertenece al receptor
     
    for(User receiver : receivers)  {
      InboxMessage inbox = new InboxMessage(receiver, message);
      inbox.save();
     
       Tag sharedTag = Tag.findOrCreateByName("shared", receiver);
        for(SharedContent sharedContent : sharedContents) {
          if(Content.ContentType.PHOTO == sharedContent.type) {
            ContentTag contentTag = new ContentTag(sharedContent.id, Content.ContentType.PHOTO, sharedTag);
            contentTag.save();
          }
        }
        Notification notification = new Notification();
        if(from.basic_information != null) {
          StringBuffer textSb = new StringBuffer();
          textSb.append(from.basic_information.firstName).append(" ").
          append(from.basic_information.lastName).append(" te ha enviado un mensaje.");
         
          if(sharedContents.size() > 0) {
            textSb.append(" Tiene ").append(sharedContents.size()).append(" contenidos.");
          }
          notification.message = textSb.toString();
         
        } else {
          notification.message =  "El administrador ha compartido contigo "
              + sharedContents.size() + " contenidos.";
        }
        notification.owner = receiver;
        notification.type = Notification.NotificationType.INBOX;
        notification.insert();
       
        // Creating a task for send an email with the notification.
        Queue queue = QueueFactory.getDefaultQueue();
        String residenceDomain = null;
        String username = Session.current().get(SessionConstants.USER);
        if(username.contains("@")){
          residenceDomain = username.substring(username.indexOf("@")+1);
        } else {
          residenceDomain = "";
        }
       
          queue.add(withUrl("/task/notificate/mail").method(Method.POST).
              param("fromId", String.valueOf(from.id)).
              param("dstId", String.valueOf(receiver.id)).
              param("msgContent", message.text).
              param("numberAttach", String.valueOf(sharedContents.size())).
              param("residenceDomain", residenceDomain));
    }
    ok();
  }
 
  /*public static void migrateMessages() {
    User from = User.findById(new Long(26001));
   
    String text = "Aquí con los mejores leones!!!!";
   
    List<SharedContent> sharedContents = new ArrayList<SharedContent>();
    SharedContent sharedContent0 = new Message().new SharedContent();
    sharedContent0.type =  Content.ContentType.valueOf("PHOTO".toUpperCase());;
    sharedContent0.id = new Long(40001);
    sharedContent0.source = "/api/file/AMIfv97vY9YVIBbILz8cBUxiDz0ShCSNEgU-Y6ymC70c5cBzOM5kat984-tH4GFGknErKSFza-KsOMlm2BJaiyKTMfLgHjq6mZJCvhpZJdnCrvst2Y7whE99aklBrWW6FOHyO2l6PV1ZNayTdIGt-T0Y5zmco0v-Yg";
    sharedContents.add(sharedContent0);
   
   
    SharedContent sharedContent1 = new Message().new SharedContent();
    sharedContent1.type =  Content.ContentType.valueOf("PHOTO".toUpperCase());;
    sharedContent1.id = new Long(37005);
    sharedContent1.source = "/api/file/AMIfv95MewlUoqV9ygaXwbbRRbzfed6KPGWHsaQA1VKB9jr--L2B7luP3hKfewMoTHqyKp8zrpp9iPC2mRXHT73JmC4BgqhVLFlBy5ZfAatme6ki31kE8UPBVLnWDLDh6H9A4Ix1D0gdaV6CT3OpDfLZAJKn0agPjA";
    sharedContents.add(sharedContent1);
   
    SharedContent sharedContent2 = new Message().new SharedContent();
    sharedContent2.type =  Content.ContentType.valueOf("PHOTO".toUpperCase());;
    sharedContent2.id = new Long(36003);
    sharedContent2.source = "/api/file/AMIfv94ZLp7NJ-qq_WOS4Sy3YKPV6tnshTacHifwQvj1omAUbnSTbTU2fVsfthuvrTk0NqkRVFlWOwS6-pszn7bLWijvMUbV1Fg8qYwtzFE2kWFV20SZrVY7SReyGngmHzIOQVEeVxbVVphJdZVawOTRBNGkp9jbYA";
    sharedContents.add(sharedContent2);   
   
    SharedContent sharedContent3 = new Message().new SharedContent();
    sharedContent3.type =  Content.ContentType.valueOf("PHOTO".toUpperCase());;
    sharedContent3.id = new Long(40002);
    sharedContent3.source = "/api/file/AMIfv978EdqyIvpqL2E88-rD4yTbexhSxK86ELTpCLOU6lEGF9d3u4UWBneRukmIYfYibeBhR7Ig4CcF-XMevyTGsl9NF8HCganp7kLymyK5YALI7bAhdo6jFcq-FBoijDpJb-47MK0yUhwM_VzfdFtiBCNhNJNVMg";
    sharedContents.add(sharedContent3);   
   
    ArrayList<User> receivers = new ArrayList<User>();
    User to = User.findById(new Long(24001));
    receivers.add(to);
   
    // INFO: Se crean dos mensajes para diferenciar las carpetas de outbox e inbox. Asi un usuario si lo elimina de la suya permanece en la otra.
     
    //Se inserta un mensaje que pertenece al emisor. // TODO esta parte esta duplicada, deberia ir fuera de la iteracion de receivers. Problema el to (deberia de ser una lista)
    Message message = new Message();
    message.from = from;
    //message.to = receivers;
    message.text = text;
    message.contents = sharedContents;
    message.created_time = new Date(Long.parseLong("1331768446114"));
    message.updated_time = new Date(Long.parseLong("1331768446114"));
   
    for(User receiver : receivers) {
      message.addReceiver(receiver);
    }
    message.insert();
   
    // Create the outbox message
    OutboxMessage outMessage = new OutboxMessage(from, message);
    outMessage.save(); 
   
       
    //Se inserta un mensaje que pertenece al receptor
     
    for(User receiver : receivers)  {
      InboxMessage inbox = new InboxMessage(receiver, message);
      inbox.readed = Boolean.TRUE;
      inbox.save();
   
       Tag sharedTag = Tag.findOrCreateByName("shared", receiver);
        for(SharedContent sharedContent : sharedContents) {
          if(Content.ContentType.PHOTO == sharedContent.type) {
            ContentTag contentTag = new ContentTag(sharedContent.id, Content.ContentType.PHOTO, sharedTag);
            contentTag.save();
          }
        }
     
    }
    ok();
   
  }*/
 
/*  public static void get_old(Long id) {
    User current = getCurrentUser();
    Message message = Message.findById(id);
    if(message==null) notFound();
    if(message.owner.id.longValue() != current.id.longValue()) forbidden();
    renderTemplate("api/message.json",message);
  }
*/ 
  public static void get(Long id) {
    User current = getCurrentUser();
    OutboxMessage message = OutboxMessage.getSent(id, current);
    if(message==null) notFound();
    //if(message.owner.id.longValue() != current.id.longValue()) forbidden();
    renderTemplate("api/message.json",message);
  }
 
  public static void delete(Long id) {
    User current = getCurrentUser();
    OutboxMessage message = OutboxMessage.getSent(id, current);
    if(message==null) notFound();
    //if(message.owner.id.longValue() != current.id.longValue()) forbidden();
    message.delete();
 
 
  /*public static void delete_old(Long id) {
    User current = getCurrentUser();
    Message message = Message.findById(id);
    if(message==null) notFound();
    if(message.owner.id.longValue() != current.id.longValue()) forbidden();
    message.delete();
  } */ 
 
}
TOP

Related Classes of controllers.api.Outbox

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.