Package ar.com.AmberSoft.iEvenTask.services

Source Code of ar.com.AmberSoft.iEvenTask.services.ListTaskService

package ar.com.AmberSoft.iEvenTask.services;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.MethodUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.log4j.Logger;

import ar.com.AmberSoft.iEvenTask.backend.entities.Comentario;
import ar.com.AmberSoft.iEvenTask.backend.entities.Tarea;
import ar.com.AmberSoft.iEvenTask.backend.entities.User;
import ar.com.AmberSoft.iEvenTask.backend.entities.Visible;
import ar.com.AmberSoft.iEvenTask.utils.AppAdmin;
import ar.com.AmberSoft.iEvenTask.utils.Tools;
import ar.com.AmberSoft.util.AsignadoTareaComparatorASC;
import ar.com.AmberSoft.util.AsignadoTareaComparatorDESC;
import ar.com.AmberSoft.util.LDAPUtils;
import ar.com.AmberSoft.util.PKGenerator;
import ar.com.AmberSoft.util.ParamsConst;

public class ListTaskService extends ListService {

  private static Logger logger = Logger.getLogger(ListTaskService.class);

  @Override
  public Map execute(Map params) throws Exception  {

    Map result = super.execute(params);

    HttpServletRequest request = (HttpServletRequest) params
        .get(ParamsConst.REQUEST);
    User user = null;
    if (request != null) {
      user = (User) request.getSession().getAttribute(ParamsConst.USER);
    }

    try {

      Map<String, User> users = null;
      if (user != null) {
        if (!AppAdmin.getInstance().getConfig().isEmulate()){
          users = LDAPUtils.getUsersMap(user.getId(), user.getPassword());
        }
      }

      Collection<Tarea> tareas = (Collection<Tarea>) result.get(ParamsConst.DATA);
      Iterator<Tarea> it = tareas.iterator();
      while (it.hasNext()) {
        Tarea tarea = (Tarea) it.next();
        if (users != null) {
          User actualUser = users.get(tarea.getId_usuario());
          if (actualUser != null) {
            tarea.setAsignado(actualUser.getName());
          }
        }

        Collection<Comentario> comentarios = tarea.getComentarios();
        if (comentarios!=null){
          Iterator<Comentario> itComentarios = comentarios.iterator();
          Set<Comentario> nuevosComentarios = new HashSet<Comentario>();
          while (itComentarios.hasNext()) {
            Comentario comentario = (Comentario) itComentarios.next();
            if (users != null) {
              User commentUser = users.get(comentario.getUsuario());
              if (commentUser != null) {
                comentario.setNombreUsuario(commentUser.getName());
              }
            }
            comentario.setTarea(null);
            nuevosComentarios.add(comentario);
          }
          tarea.setComentarios(nuevosComentarios);
        }
       
        Collection<Visible> visibles = tarea.getVisibles();
        if (visibles!=null){
          Iterator<Visible> itVisibles = visibles.iterator();
          Set<Visible> nuevosVisibles = new HashSet<Visible>();
          while (itVisibles.hasNext()) {
            Visible visible = (Visible) itVisibles.next();
            visible.setTarea(null);
            nuevosVisibles.add(visible);
          }
          tarea.setVisibles(nuevosVisibles);
        }
       
        //Este seteo previene un ciclo infinito en la adaptacion de tipos, previo a la vista
        //tarea.setSubtareas(null);
        //FIXME: No necesario lo vamos a resolver en otro servicio
        Collection<Tarea> subtareas = tarea.getSubtareas();
        if (subtareas!=null){
          Iterator<Tarea> itTareas = subtareas.iterator();
          Set<Tarea> nuevasSubTareas = new HashSet<Tarea>();
          while (itTareas.hasNext()) {
            Tarea subTarea = (Tarea) itTareas.next();
            Tarea nuevaSubTarea = new Tarea();
            PropertyUtils.copyProperties(nuevasSubTareas, subTarea);
            nuevaSubTarea.setSubtareas(null);
            nuevaSubTarea.setTareaPadre(null);
            nuevasSubTareas.add(nuevaSubTarea);
          }
          tarea.setSubtareas(nuevasSubTareas);
        }
      }
      ordenarAsignado(params, result);
    } catch (UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }

    return result;

  }
 

  protected void ordenarAsignado(Map params, Map map) {
    Boolean notCommonPaging = (Boolean)params.get(ParamsConst.NOT_COMMON_PAGING);
    if ((notCommonPaging!=null) && (notCommonPaging)){
      List list = (List)map.get(ParamsConst.DATA);
     
      if (list!=null){
        Object sortDir = params.get(SORT_DIR);
        String sortDirText="";
        try {
          sortDirText = (String) MethodUtils.invokeExactMethod(sortDir, NAME, null);
        } catch (Exception e) {
          logger.error(Tools.getStackTrace(e));
        }
        if ("ASC".equalsIgnoreCase(sortDirText)){
          Collections.sort(list, new AsignadoTareaComparatorASC());
        } else {
          Collections.sort(list, new AsignadoTareaComparatorDESC());
        }
        Integer offset = (Integer)params.get(OFFSET);
        Integer limit = (Integer)params.get(LIMIT);
        List nueva = new ArrayList();
        Integer indice = offset;
        while ((indice<limit) && (indice<list.size())){
          nueva.add(list.get(indice));
          indice++;
        }
        map.put(ParamsConst.DATA, nueva);
      }
    }
  }

  @Override
  public Map onExecute(Map params) {
    Map result = super.onExecute(params);

    // Esto es necesario realizar para que estas colecciones no den Lazy
    // initialization exception

    Collection<Tarea> tareas = (Collection<Tarea>) result
        .get(ParamsConst.DATA);
    Iterator<Tarea> it = tareas.iterator();
    while (it.hasNext()) {
      Tarea tarea = (Tarea) it.next();
      preventLazy(tarea.getComentarios());
      preventLazy(tarea.getVisibles());
      preventLazy(tarea.getSubtareas());
    }

    return result;
  }

  public void preventLazy(Collection collection) {
    if (collection != null) {
      collection.iterator();
    }
  }

  @Override
  protected String getEntity() {
    return Tarea.class.getName();
  }

  @SuppressWarnings({ "unchecked", "rawtypes" })
  @Override
  public Map onEmulate(Map params) {
    Map<String, Object> map = new HashMap();
    Collection<Tarea> list = new ArrayList<Tarea>();
    addTarea(list);
    addTarea(list);
    addTarea(list);
    addTarea(list);
    addTarea(list);
    addTarea(list);
    addTarea(list);
    map.put(ParamsConst.DATA, list);
    map.put(ParamsConst.TOTAL_COUNT, new Long(list.size()));
    map.put(ParamsConst.OFFSET, (Integer) params.get("offset"));
    map.put(ParamsConst.PAGING_LOAD_RESULT, Boolean.TRUE);
    return map;
  }

  public static void addTarea(Collection<Tarea> list) {
    PKGenerator generator = new PKGenerator();
    Tarea tarea = new Tarea();
    tarea.setId(generator.getIntLastTime());
    tarea.setNombreTarea("Tarea" + generator.getPk());
    tarea.setFechaComienzo(new Date());
    tarea.setFechaFin(new Date());
    //tarea.setDuracion(String.valueOf(generator.getLastTime()));
    tarea.setDescripcion("Descripcion" + generator.getPk());
    tarea.setId_usuario(generator.getPk());

    Comentario comentario = new Comentario();
    comentario.setComentario("Comentarios" + generator.getPk());
    comentario.setFecha(new Date());
    comentario.setUsuario("USERTEST");
    Set comentarios = new HashSet();
    comentarios.add(comentario);
    tarea.setComentarios(comentarios);

    Set<Visible> visibles = new HashSet<Visible>();
    setVisible(tarea, visibles, "1");
    setVisible(tarea, visibles, "3");
    setVisible(tarea, visibles, "5");
    tarea.setVisibles(visibles);
   
    Tarea tarea2 = new Tarea();
    tarea2.setId(generator.getIntLastTime());
    tarea2.setNombreTarea("Tarea" + generator.getPk());
    tarea2.setFechaComienzo(new Date());
    tarea2.setFechaFin(new Date());
    tarea2.setDescripcion("Descripcion" + generator.getPk());
    tarea2.setId_usuario(generator.getPk());
    Set subtareas = new HashSet();
    subtareas.add(tarea2);
    tarea.setSubtareas(subtareas);
       
    list.add(tarea);
  }

  public static void setVisible(Tarea tarea, Set<Visible> visibles, String id) {
    Visible visible = new Visible(tarea, id);
    visibles.add(visible);

  }
}
TOP

Related Classes of ar.com.AmberSoft.iEvenTask.services.ListTaskService

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.