/**
   * Imports the entities
   *
   * @return the SUCCESS result
   */
  public String importCSV() throws Exception {
    File file = this.getUpload();
    CsvListReader reader = new CsvListReader(new FileReader(file), CsvPreference.EXCEL_PREFERENCE);
    int failedNum = 0;
    int successfulNum = 0;
    try {
      final String[] header = reader.getCSVHeader(true);

      List<String> line = new ArrayList<String>();
      Map<String, String> failedMsg = new HashMap<String, String>();
      while ((line = reader.read()) != null) {

        Map<String, String> row = new HashMap<String, String>();
        for (int i = 0; i < line.size(); i++) {
          row.put(header[i], line.get(i));
        }

        TargetList targetList = new TargetList();
        try {
          String id = row.get(getText("entity.id.label"));
          if (!CommonUtil.isNullOrEmpty(id)) {
            targetList.setId(Integer.parseInt(id));
          }
          targetList.setName(CommonUtil.fromNullToEmpty(row.get(getText("entity.name.label"))));
          targetList.setDescription(
              CommonUtil.fromNullToEmpty(row.get(getText("entity.description.label"))));
          targetList.setNotes(CommonUtil.fromNullToEmpty(row.get(getText("entity.notes.label"))));
          String assignedToID = row.get(getText("entity.assigned_to_id.label"));
          if (CommonUtil.isNullOrEmpty(assignedToID)) {
            targetList.setAssigned_to(null);
          } else {
            User assignedTo = userService.getEntityById(User.class, Integer.parseInt(assignedToID));
            targetList.setAssigned_to(assignedTo);
          }
          baseService.makePersistent(targetList);
          successfulNum++;
        } catch (Exception e) {
          failedNum++;
          String Name = CommonUtil.fromNullToEmpty(targetList.getName());
          failedMsg.put(Name, e.getMessage());
        }
      }

      this.setFailedMsg(failedMsg);
      this.setFailedNum(failedNum);
      this.setSuccessfulNum(successfulNum);
      this.setTotalNum(successfulNum + failedNum);
    } finally {
      reader.close();
    }
    return SUCCESS;
  }
  private InputStream getDownloadContent(boolean isTemplate) throws Exception {
    UserUtil.permissionCheck("view_targetList");
    String fileName = getText("entity.targetList.label") + ".csv";
    fileName = new String(fileName.getBytes(), "ISO8859-1");
    File file = new File(fileName);
    ICsvMapWriter writer = new CsvMapWriter(new FileWriter(file), CsvPreference.EXCEL_PREFERENCE);
    try {
      final String[] header =
          new String[] {
            getText("entity.id.label"),
            getText("entity.name.label"),
            getText("entity.description.label"),
            getText("entity.notes.label"),
            getText("entity.assigned_to_id.label"),
            getText("entity.assigned_to_name.label")
          };
      writer.writeHeader(header);
      if (!isTemplate) {
        String[] ids = seleteIDs.split(",");
        for (int i = 0; i < ids.length; i++) {
          String id = ids[i];
          TargetList targetList = baseService.getEntityById(TargetList.class, Integer.parseInt(id));
          final HashMap<String, ? super Object> data1 = new HashMap<String, Object>();
          data1.put(header[0], targetList.getId());
          data1.put(header[1], CommonUtil.fromNullToEmpty(targetList.getName()));
          data1.put(header[2], CommonUtil.fromNullToEmpty(targetList.getDescription()));
          data1.put(header[3], CommonUtil.fromNullToEmpty(targetList.getNotes()));
          if (targetList.getAssigned_to() != null) {
            data1.put(header[4], targetList.getAssigned_to().getId());
            data1.put(header[5], targetList.getAssigned_to().getName());
          } else {
            data1.put(header[4], "");
            data1.put(header[5], "");
          }
          writer.write(data1, header);
        }
      }
    } catch (Exception e) {
      throw e;
    } finally {
      writer.close();
    }

    InputStream in = new FileInputStream(file);
    this.setFileName(fileName);
    return in;
  }
  private Collection<ChangeLog> changeLog(TargetList originalTargetList, TargetList targetList) {
    Collection<ChangeLog> changeLogs = null;
    if (originalTargetList != null) {
      ActionContext context = ActionContext.getContext();
      Map<String, Object> session = context.getSession();
      String entityName = TargetList.class.getSimpleName();
      Integer recordID = targetList.getId();
      User loginUser = (User) session.get(AuthenticationSuccessListener.LOGIN_USER);
      changeLogs = new ArrayList<ChangeLog>();

      String oldName = CommonUtil.fromNullToEmpty(originalTargetList.getName());
      String newName = CommonUtil.fromNullToEmpty(targetList.getName());
      if (!oldName.equals(newName)) {
        ChangeLog changeLog =
            saveChangeLog(entityName, recordID, "entity.name.label", oldName, newName, loginUser);
        changeLogs.add(changeLog);
      }

      String oldDescription = CommonUtil.fromNullToEmpty(originalTargetList.getDescription());
      String newDescription = CommonUtil.fromNullToEmpty(targetList.getDescription());
      if (!oldDescription.equals(newDescription)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.description.label",
                oldDescription,
                newDescription,
                loginUser);
        changeLogs.add(changeLog);
      }

      String oldNotes = CommonUtil.fromNullToEmpty(originalTargetList.getNotes());
      String newNotes = CommonUtil.fromNullToEmpty(targetList.getNotes());
      if (!oldNotes.equals(newNotes)) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName, recordID, "entity.notes.label", oldNotes, newNotes, loginUser);
        changeLogs.add(changeLog);
      }

      String oldAssignedToName = "";
      User oldAssignedTo = originalTargetList.getAssigned_to();
      if (oldAssignedTo != null) {
        oldAssignedToName = oldAssignedTo.getName();
      }
      String newAssignedToName = "";
      User newAssignedTo = targetList.getAssigned_to();
      if (newAssignedTo != null) {
        newAssignedToName = newAssignedTo.getName();
      }
      if (oldAssignedToName != newAssignedToName) {
        ChangeLog changeLog =
            saveChangeLog(
                entityName,
                recordID,
                "entity.assigned_to.label",
                CommonUtil.fromNullToEmpty(oldAssignedToName),
                CommonUtil.fromNullToEmpty(newAssignedToName),
                loginUser);
        changeLogs.add(changeLog);
      }
    }
    return changeLogs;
  }
  /**
   * Gets the list JSON data.
   *
   * @return list JSON data
   */
  public static void getListJson(
      Iterator<TargetList> targetLists,
      long totalRecords,
      SearchCondition searchCondition,
      boolean isList)
      throws Exception {

    StringBuilder jsonBuilder = new StringBuilder("");
    jsonBuilder.append(getJsonHeader(totalRecords, searchCondition, isList));

    String assignedTo = null;
    while (targetLists.hasNext()) {
      TargetList instance = targetLists.next();
      int id = instance.getId();
      String name = CommonUtil.fromNullToEmpty(instance.getName());
      String description = CommonUtil.fromNullToEmpty(instance.getDescription());
      User user = instance.getAssigned_to();
      if (user != null) {
        assignedTo = user.getName();
      } else {
        assignedTo = "";
      }

      if (isList) {
        User createdBy = instance.getCreated_by();
        String createdByName = "";
        if (createdBy != null) {
          createdByName = CommonUtil.fromNullToEmpty(createdBy.getName());
        }
        User updatedBy = instance.getUpdated_by();
        String updatedByName = "";
        if (updatedBy != null) {
          updatedByName = CommonUtil.fromNullToEmpty(updatedBy.getName());
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DATE_TIME_FORMAT);
        Date createdOn = instance.getCreated_on();
        String createdOnName = "";
        if (createdOn != null) {
          createdOnName = dateFormat.format(createdOn);
        }
        Date updatedOn = instance.getUpdated_on();
        String updatedOnName = "";
        if (updatedOn != null) {
          updatedOnName = dateFormat.format(updatedOn);
        }

        jsonBuilder
            .append("{\"cell\":[\"")
            .append(id)
            .append("\",\"")
            .append(name)
            .append("\",\"")
            .append(description)
            .append("\",\"")
            .append(assignedTo)
            .append("\",\"")
            .append(createdByName)
            .append("\",\"")
            .append(updatedByName)
            .append("\",\"")
            .append(createdOnName)
            .append("\",\"")
            .append(updatedOnName)
            .append("\"]}");
      } else {
        jsonBuilder
            .append("{\"id\":\"")
            .append(id)
            .append("\",\"name\":\"")
            .append(name)
            .append("\",\"assigned_to.name\":\"")
            .append(assignedTo)
            .append("\"}");
      }
      if (targetLists.hasNext()) {
        jsonBuilder.append(",");
      }
    }
    jsonBuilder.append("]}");

    // Returns JSON data back to page
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setContentType("text/html;charset=UTF-8");
    response.getWriter().write(jsonBuilder.toString());
  }