com.infotree.qliktest.admin.web.controller.ProjectController.java Source code

Java tutorial

Introduction

Here is the source code for com.infotree.qliktest.admin.web.controller.ProjectController.java

Source

/**
 * @author koteswara.g
 */
package com.infotree.qliktest.admin.web.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.infotree.qliktest.admin.dao.referencedata.NotificationsDao;
import com.infotree.qliktest.admin.entity.referencedata.AuditLogRecord;
import com.infotree.qliktest.admin.entity.referencedata.Module;
import com.infotree.qliktest.admin.entity.referencedata.Notifications;
import com.infotree.qliktest.admin.entity.referencedata.Project;
import com.infotree.qliktest.admin.entity.referencedata.ProjectModule;
import com.infotree.qliktest.admin.entity.referencedata.ProjectModuleComp;
import com.infotree.qliktest.admin.entity.referencedata.ProjectTenant;
import com.infotree.qliktest.admin.entity.referencedata.ProjectTenantComp;
import com.infotree.qliktest.admin.entity.referencedata.Tenant;
import com.infotree.qliktest.admin.entity.referencedata.User;
import com.infotree.qliktest.admin.entity.referencedata.UserTenant;
import com.infotree.qliktest.admin.entity.system.AuditType;
import com.infotree.qliktest.admin.service.QTAdminService;
import com.infotree.qliktest.admin.service.mail.MailService;
import com.infotree.qliktest.admin.service.referencedata.AuditLogRecordService;
import com.infotree.qliktest.admin.service.referencedata.ModuleService;
import com.infotree.qliktest.admin.service.referencedata.PermissionsService;
import com.infotree.qliktest.admin.service.referencedata.ProjectModuleService;
import com.infotree.qliktest.admin.service.referencedata.ProjectService;
import com.infotree.qliktest.admin.service.referencedata.ProjectTenantService;
import com.infotree.qliktest.admin.service.referencedata.RoleService;
import com.infotree.qliktest.admin.service.referencedata.TenantService;
import com.infotree.qliktest.admin.service.referencedata.UserProfileService;
import com.infotree.qliktest.admin.service.referencedata.UserRoleService;
import com.infotree.qliktest.admin.service.referencedata.UserTenantService;
import com.infotree.qliktest.admin.web.validator.DoNothingValidator;

@Controller
@RequestMapping("/project")
public class ProjectController extends AbstractQTAdminController<Project> {
    private static final Logger LOG = LoggerFactory.getLogger(ProjectController.class);

    @Autowired
    private ProjectService projectService;

    @Autowired
    private AuditLogRecordService auditLogService;

    @Autowired
    private TenantService tenantService;

    @Autowired
    private UserRoleService userRoleService;

    @Autowired
    private PermissionsService permissionsService;

    @Autowired
    private RoleService roleService;

    @Autowired
    private MailService mailService;

    @Autowired
    private NotificationsDao notificationsDao;

    @Autowired
    private ModuleService moduleService;

    @Autowired
    private UserProfileService userProfileService;

    @Autowired
    private UserTenantService userTenantService;

    @Autowired
    private ProjectTenantService projectTenantService;

    @Autowired
    private ProjectModuleService projectModuleService;

    @Autowired
    private UserProfileService userService;

    @Autowired
    private ModuleService testingTypeService;

    @Autowired
    private DoNothingValidator validator;

    /**
     * This method retturns the UI to create the project
     */
    @RequestMapping(value = "/createproject", method = RequestMethod.GET)
    public String landingPage(Model model) {
        try {
            model.addAttribute("crudObj", getEntityInstance());
            model.addAttribute("createproject", "createproject");
            model.addAttribute("module_list", moduleService.list());
            model.addAttribute("project_list", projectService.list());
            model.addAttribute("tenant_list", tenantService.list());
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method is used to view the projects
     */
    @RequestMapping(value = "/viewproject", method = RequestMethod.GET)
    public String viewTenant(@ModelAttribute("crudObj") @Valid Project entity, Model model) {
        try {

            model.addAttribute("crudObj", getEntityInstance());
            List<Project> projList = new ArrayList<Project>();

            //List<Project> projectsList = projectService.getActiveProjects();
            List<Project> projectsList = projectService.list();
            Iterator<Project> iterator = projectsList.iterator();
            while (iterator.hasNext()) {
                String moduleNames = "";
                Project proj = iterator.next();
                SimpleDateFormat formatt = new SimpleDateFormat("yyyy-MM-dd");

                proj.setStartingDate(formatt.format(proj.getStartDate()));
                proj.setEndingDate(formatt.format(proj.getEndDate()));
                proj.setDisabled(proj.isDisabled());
                Tenant t = tenantService.findByProject(proj.getId());
                if (t != null) {
                    proj.setTenantName(t.getName());
                } else {
                    proj.setTenantName("No Tenant");
                }
                int moduleCount = projectModuleService.getModuleCountByProjectId(proj.getId());
                List<ProjectModule> projModList = projectModuleService.findByProjectId(proj.getId());
                proj.setModuleCount(moduleCount);
                if (moduleCount == 0) {
                    moduleNames = "No Packages Available";
                } else {
                    if (projModList != null) {
                        Iterator<ProjectModule> itr = projModList.iterator();
                        while (itr.hasNext()) {
                            ProjectModule pm = itr.next();
                            Module m = moduleService.getById(pm.getProjectModuleComp().getModuleId());
                            if (moduleNames == "") {
                                moduleNames = m.getName();
                            } else {
                                moduleNames = moduleNames + " " + "<br>" + m.getName();
                            }
                        }

                    }
                }
                proj.setModuleNames(
                        "<center><table width=70% border=1><tr><th><center>Package Names</center></th></tr><tr><td><center>"
                                + moduleNames + "</center></td></tr></table></center>");
                projList.add(proj);

            }
            model.addAttribute("tenantname_list", tenantService.list());
            model.addAttribute("project_list", projList);
            model.addAttribute("modulename_list", moduleService.list());
            //model.addAttribute("projectname_list",projectService.getActiveProjects());
            model.addAttribute("projectname_list", projectService.list());
            model.addAttribute("viewproject", "viewproject");
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method retruns the UI to edit project with the list of the projects
     */
    @RequestMapping(value = "/editproject", method = RequestMethod.GET)
    public String editTenant(Model model) {
        try {
            model.addAttribute("crudObj", getEntityInstance());
            //List<Project> projList =  projectService.getActiveProjects();
            List<Project> projList = projectService.list();
            List<Project> projectsList = new ArrayList<Project>();
            if (projList != null) {
                Iterator<Project> iterator = projList.iterator();
                while (iterator.hasNext()) {
                    Project p = iterator.next();
                    if (p.getModifiedBy() != null) {
                        Integer id = Integer.parseInt(p.getModifiedBy());
                        User u = userService.getById(id);
                        p.setCreatedName(u.getUserName());
                    } else {
                        Integer id = Integer.parseInt(p.getCreatedBy());
                        User u = userService.getById(id);
                        p.setCreatedName(u.getUserName());
                    }
                    projectsList.add(p);
                }
            }

            model.addAttribute("tenantname_list", tenantService.list());
            model.addAttribute("project_list", projectsList);
            model.addAttribute("editproject", "editproject");
            //model.addAttribute("projectname_list", projectService.getActiveProjects());
            model.addAttribute("projectname_list", projectService.list());

        } catch (NumberFormatException e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method returns the UI to delete the project with the list of projects
     */
    @RequestMapping(value = "/deleteproject", method = RequestMethod.GET)
    public String deleteTenant(Model model) {
        try {
            model.addAttribute("crudObj", getEntityInstance());
            //model.addAttribute("active_projects", projectService.getActiveProjects());
            model.addAttribute("active_projects", projectService.list());
            model.addAttribute("deleteproject", "deleteproject");
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method is to save the new projects
     */
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public String saveProject(@ModelAttribute("crudObj") @Valid Project entity, BindingResult bindingResult,
            Model model, HttpServletRequest request) {
        try {
            /*DateTime dt = new DateTime();
            DateTimeZone dtZone = DateTimeZone.forID("Asia/Kolkata");
            DateTime dtus = dt.withZone(dtZone);
            Date dateInIndia = dtus.toLocalDateTime().toDate();*/
            Locale clientLocale = request.getLocale();
            Calendar calendar = Calendar.getInstance(clientLocale);
            TimeZone clientTimeZone = calendar.getTimeZone();
            String clientZone = clientTimeZone.getID();
            DateTime dt = new DateTime();
            DateTimeZone dtZone = DateTimeZone.forID(clientZone);
            DateTime dtus = dt.withZone(dtZone);
            Date dateInIndia = dtus.toLocalDateTime().toDate();
            model.addAttribute("crudObj", getEntityInstance());
            if (projectService.findByName(entity.getName()) != null) {
                model.addAttribute("createproject", "createproject");
                model.addAttribute("project_list", projectService.list());
                //model.addAttribute("active_project_list", projectService.getActiveProjects());
                model.addAttribute("active_project_list", projectService.list());
                model.addAttribute("projectalreadyexists",
                        "'" + entity.getName() + "' already exists. Pl. enter a different Name.");
            } else {
                Notifications notifications = new Notifications();
                Project p = new Project();
                p.setName(entity.getName().trim());
                p.setStartDate(entity.getStartDate());
                p.setEndDate(entity.getEndDate());
                p.setDisabled(false);
                p.setDescription(entity.getDescription());
                p.setCreatedBy(entity.getCreatedBy());

                p.setCreatedDate(dateInIndia);
                if (projectService.save(p) == null) {
                    model.addAttribute("createproject", "createproject");
                    model.addAttribute("project_list", projectService.list());
                    model.addAttribute("projectsnotselected", "Error in creating Module. Pl. contact Sys Admin.");
                } else {
                    /**
                     * save the project to the tenant
                     */
                    ProjectTenant projectTenant = new ProjectTenant();
                    ProjectTenantComp projectTenantComp = new ProjectTenantComp();
                    projectTenantComp.setProjectId(p.getId());
                    projectTenantComp.setTenantId(entity.getTenantId());
                    projectTenant.setProjectTenantComp(projectTenantComp);

                    projectTenant.setCreatedBy(entity.getCreatedBy());

                    projectTenant.setCreatedDate(dateInIndia);
                    projectTenant.setModifiedBy(entity.getModifiedBy());
                    projectTenant.setModifiedDate(dateInIndia);
                    try {
                        projectTenantService.insertNewProjectTenantEntity(projectTenant);
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }

                    /**
                     * assigning the modules to the project
                     */
                    List<Integer> moduleList = entity.getModuleId();
                    if (moduleList != null) {
                        Iterator<Integer> iterator = moduleList.iterator();
                        while (iterator.hasNext()) {
                            ProjectModule projectModule = new ProjectModule();
                            ProjectModuleComp projectModuleComp = new ProjectModuleComp();
                            projectModuleComp.setProjectId(p.getId());
                            projectModuleComp.setModuleId(iterator.next());
                            projectModule.setProjectModuleComp(projectModuleComp);
                            projectModule.setCreatedBy(entity.getCreatedBy());
                            projectModule.setCreatedDate(dateInIndia);
                            projectModule.setModifiedBy(entity.getModifiedBy());
                            projectModule.setModifiedDate(dateInIndia);
                            projectModuleService.save(projectModule);

                        }
                    }

                    /**
                     * Preparing the notification for the application admin 
                     */
                    UserTenant userTenant = userTenantService.findByTenantIdAndCreatedBy(entity.getTenantId(),
                            (Integer) request.getSession().getAttribute("userid"));
                    notifications.setId(notificationsDao.getMaxId() + 1);
                    notifications.setAssignedBy((Integer) request.getSession().getAttribute("userid") + "");
                    notifications.setAssignedTo(userTenant.getUserTenantComp().getUserId() + "");
                    notifications.setAssignedData(p.getName() + " Assigned for you");
                    notifications.setStatus("UnRead");
                    notifications.setCreatedBy(entity.getCreatedBy());
                    notifications.setModifiedBy(entity.getModifiedBy());
                    notifications.setCreatedDate(dateInIndia);
                    notifications.setModifiedDate(dateInIndia);
                    notificationsDao.saveNotification(notifications);
                    /**
                     * preparing the audit record
                     */

                    AuditLogRecord record = new AuditLogRecord();
                    record.setActionDate(dateInIndia);
                    record.setActionType(AuditType.CREATE);
                    record.setActionPerformed("Project Created with Name " + entity.getName());
                    record.setActionData("Project Name :" + entity.getName() + " start date is :"
                            + entity.getStartDate() + " end date is" + entity.getEndDate());
                    record.setIpOrigin(request.getSession().getAttribute("ipAddress").toString());
                    /*try {
                       java.net.InetAddress inetAddress = java.net.InetAddress.getLocalHost();
                       record.setIpOrigin(inetAddress.getHostAddress());
                    } catch (UnknownHostException e) {
                       e.printStackTrace();
                    }*/
                    record.setUserId((Integer) request.getSession().getAttribute("userid"));
                    record.setUserName(request.getSession().getAttribute("username").toString());
                    auditLogService.saveRecord(record);
                    model.addAttribute("createproject", "createproject");
                    model.addAttribute("project_list", projectService.list());
                    model.addAttribute("module_list", moduleService.list());
                    model.addAttribute("tenant_list", tenantService.list());
                    //model.addAttribute("active_project_list", projectService.getActiveProjects());
                    model.addAttribute("active_project_list", projectService.list());
                    model.addAttribute("projectcreated", "'" + entity.getName() + "' created.");
                }
            }
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method returns the UI to update project with the editable mode
     */
    @RequestMapping(value = "/edit/{projectId}/update", method = RequestMethod.GET)
    public String updateModules(@ModelAttribute("crudObj") @Valid Project entity, @PathVariable Integer projectId,
            Model model) {
        try {
            Project entityToBeUpdated = projectService.getById(projectId);
            Project project = new Project();
            project.setName(entityToBeUpdated.getName());
            project.setDescription(entityToBeUpdated.getDescription());
            project.setStartDate(entityToBeUpdated.getStartDate());
            project.setEndDate(entityToBeUpdated.getEndDate());
            Tenant t = tenantService.findByProject(entityToBeUpdated.getId());
            if (t != null) {
                project.setTenantName(t.getName());
            } else {
                project.setTenantName("No Tenant");
            }
            model.addAttribute("module_list", moduleService.getByProjectId(entityToBeUpdated.getId()));
            model.addAttribute("crudObj", project);
            //model.addAttribute("project_list", projectService.getActiveProjects());
            model.addAttribute("project_list", projectService.list());
            model.addAttribute("idToBeUpdated", entityToBeUpdated.getId());
            model.addAttribute("updateproject", "updateproject");
            model.addAttribute("assigned_module_list", moduleService.getByModuleId(entityToBeUpdated.getId()));
            model.addAttribute("available_module_list",
                    moduleService.getByNotInModuleId(entityToBeUpdated.getId()));
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * Thie method is to update the project
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String updateProject(@ModelAttribute("crudObj") @Valid Project entity, BindingResult bindingResult,
            Model model, HttpServletRequest request) {
        //System.out.println("Time in Project: "+entity.getCreatedDate()+" , @: "+entity.getModifiedDate());
        try {
            /*DateTime dt = new DateTime();
            DateTimeZone dtZone = DateTimeZone.forID("Asia/Kolkata");
            DateTime dtus = dt.withZone(dtZone);
            Date dateInIndia = dtus.toLocalDateTime().toDate();*/
            Locale clientLocale = request.getLocale();
            Calendar calendar = Calendar.getInstance(clientLocale);
            TimeZone clientTimeZone = calendar.getTimeZone();
            String clientZone = clientTimeZone.getID();
            DateTime dt = new DateTime();
            DateTimeZone dtZone = DateTimeZone.forID(clientZone);
            DateTime dtus = dt.withZone(dtZone);
            Date dateInIndia = dtus.toLocalDateTime().toDate();
            Project p = projectService.getById(entity.getId());
            if (p == null) {
                model.addAttribute("createproject", "createproject");
                //model.addAttribute("project_list", projectService.getActiveProjects());
                model.addAttribute("project_list", projectService.list());
                model.addAttribute("projectcreated", "Data cannot be saved. Pl. try again.");
            } else {
                p.setName(entity.getName().trim());
                p.setStartDate(entity.getStartDate());
                p.setEndDate(entity.getEndDate());
                p.setDisabled(false);
                p.setModifiedBy(entity.getModifiedBy());

                p.setModifiedDate(dateInIndia);
                super.save(p, bindingResult, model);
                /**
                 * preparing the audit log service
                 */

                AuditLogRecord record = new AuditLogRecord();
                record.setActionDate(dateInIndia);
                record.setActionType(AuditType.MODIFY);
                record.setActionData("after updation Project Name :" + entity.getName() + "start date is :"
                        + entity.getStartDate() + " end date is" + entity.getEndDate());
                record.setActionPerformed("Project updated with name " + entity.getName());
                record.setIpOrigin(request.getSession().getAttribute("ipAddress").toString());
                /*try {
                   InetAddress inetAddress = InetAddress.getLocalHost();
                   record.setIpOrigin(inetAddress.getHostAddress());
                } catch (UnknownHostException e) {
                   e.printStackTrace();
                }*/
                record.setUserId((Integer) request.getSession().getAttribute("userid"));
                record.setUserName(request.getSession().getAttribute("username").toString());
                auditLogService.saveRecord(record);
                //delete the existing modules which were already assigned to the project

                projectModuleService.deleteByProjectId(entity.getId());
                /**
                 * assigning the licenses to the project
                 */
                List<Integer> moduleList = entity.getModuleId();
                if (moduleList != null) {
                    Iterator<Integer> iterator = moduleList.iterator();
                    while (iterator.hasNext()) {
                        ProjectModule md = new ProjectModule();
                        ProjectModuleComp modperComp = new ProjectModuleComp();
                        modperComp.setProjectId(entity.getId());
                        modperComp.setModuleId(iterator.next());
                        md.setProjectModuleComp(modperComp);
                        md.setCreatedBy(entity.getCreatedBy());
                        md.setCreatedDate(dateInIndia);
                        md.setModifiedBy(entity.getModifiedBy());
                        md.setModifiedDate(dateInIndia);
                        projectModuleService.save(md);
                    }

                }
                model.addAttribute("editproject", "editproject");

                model.addAttribute("projectupdated", "'" + entity.getName() + "' updated.");
            }

            //List<Project> projList =  projectService.getActiveProjects();
            List<Project> projList = projectService.list();
            List<Project> projectsList = new ArrayList<Project>();
            if (projList != null) {
                Iterator<Project> iterator = projList.iterator();
                while (iterator.hasNext()) {
                    Project proj = iterator.next();
                    if (proj.getModifiedBy() != null) {
                        Integer id = Integer.parseInt(proj.getModifiedBy());
                        User u = userService.getById(id);
                        proj.setCreatedName(u.getUserName());
                    } else {
                        Integer id = Integer.parseInt(proj.getCreatedBy());
                        User u = userService.getById(id);
                        proj.setCreatedName(u.getUserName());
                    }
                    projectsList.add(proj);
                }
            }
            model.addAttribute("tenantname_list", tenantService.list());
            model.addAttribute("project_list", projectsList);
            //model.addAttribute("projectname_list", projectService.getActiveProjects());
            model.addAttribute("projectname_list", projectService.list());
            model.addAttribute("crudObj", getEntityInstance());
            entity.setEndDate(null);
            entity.setStartDate(null);
        } catch (NumberFormatException e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method deletes the project which was selected by the user
     */
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    public String delete(@ModelAttribute("crudObj") @Valid Project entity, BindingResult bindingResult,
            Model model) {
        try {
            Project p = projectService.getById(entity.getId());
            if (p == null) {
                model.addAttribute("deleteproject", "deleteproject");
                //model.addAttribute("active_projects", projectService.getActiveProjects());
                model.addAttribute("active_projects", projectService.list());
                model.addAttribute("projectdeleted", "Data cannot be deleted. Pl. try again.");
            } else {
                p.setDisabled(true);
                p.setCreatedDate(new java.sql.Date(System.currentTimeMillis()));
                p.setModifiedDate(new java.sql.Date(System.currentTimeMillis()));
                projectService.delete(p);
                model.addAttribute("crudObj", getEntityInstance());
                model.addAttribute("deleteproject", "deleteproject");
                //model.addAttribute("active_projects",projectService.getActiveProjects());
                model.addAttribute("active_projects", projectService.list());
                model.addAttribute("projectdeleted", "'" + entity.getName() + "' deleted.");
            }
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method is to get the list of projects which are assigned to the tenant
     */
    @RequestMapping(value = "/getprojectsbyid", method = RequestMethod.GET)
    public String getProjectsById(Model model, HttpServletRequest request, HttpServletResponse response) {
        try {
            model.addAttribute("viewprojectsbasedonid", "viewprojectsbasedonid");

            HttpSession session = request.getSession();
            Integer id = (Integer) session.getAttribute("userid");
            UserTenant userTenant = userTenantService.findByUserId(id);
            List<Project> projects = projectService
                    .getProjectsByUserId(userTenant.getUserTenantComp().getTenantId());
            model.addAttribute("projects_list_byid", projects);
            AuditLogRecord record = new AuditLogRecord();
            record.setActionDate(new java.util.Date());
            record.setActionType(AuditType.VIEW);
            record.setActionPerformed("viewed the list of projects");
            record.setIpOrigin(request.getSession().getAttribute("ipAddress").toString());
            /*try {
               InetAddress inetAddress = InetAddress.getLocalHost();
               record.setIpOrigin(inetAddress.getHostAddress());
            } catch (UnknownHostException e) {
               e.printStackTrace();
            }*/
            record.setUserId((Integer) request.getSession().getAttribute("userid"));
            record.setUserName(request.getSession().getAttribute("username").toString());
            auditLogService.saveRecord(record);
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method is to search the list of projects by taking the filters
     */
    @RequestMapping(value = "/searchprojects", method = RequestMethod.POST)
    public String searchProjects(@ModelAttribute("crudObj") @Valid Project entity, BindingResult bindingResult,
            Model model, HttpServletRequest request) {
        try {
            List<Project> projList = new ArrayList<Project>();
            try {
                Map<String, String> map = new HashMap<String, String>();
                Integer tenantId = entity.getTenantId();
                String tenId = "";
                if (tenantId != null) {
                    tenId = tenantId + "";
                }

                if (tenId != null && tenId != "") {
                    map.put("tenant_id", tenId);
                }

                if (entity.getStartingDate() != null && entity.getStartingDate() != "") {
                    map.put("start_date", entity.getStartingDate());
                }

                if (entity.getEndingDate() != null && entity.getEndingDate() != "") {
                    map.put("end_date", entity.getEndingDate());
                }
                if (entity.getModId() != null && entity.getModId() != "") {
                    map.put("module_id", entity.getModId());
                }
                if (entity.getId() != null) {
                    map.put("id", entity.getId() + "");
                }

                StringBuffer sb = new StringBuffer();

                sb.append("select * from project where ");

                Iterator<Entry<String, String>> it = map.entrySet().iterator();
                int i = 1;

                while (it.hasNext()) {
                    @SuppressWarnings("rawtypes")
                    Map.Entry pairs = (Map.Entry) it.next();

                    if (i > 1) {
                        sb.append(" or ");
                    }

                    if (pairs.getKey().toString().equalsIgnoreCase("start_date")) {
                        sb.append(pairs.getKey().toString() + ">='" + pairs.getValue().toString() + "'");
                    }

                    if (pairs.getKey().toString().equalsIgnoreCase("end_date")) {
                        sb.append(pairs.getKey().toString() + "<='" + pairs.getValue().toString() + "'");
                    }

                    if (pairs.getKey().toString().equalsIgnoreCase("tenant_id")) {
                        sb.append("id in (select project_id from project_tenant where ");
                        sb.append(pairs.getKey().toString() + "=" + pairs.getValue().toString());
                        sb.append(")");
                    }
                    if (pairs.getKey().toString().equalsIgnoreCase("id")) {
                        sb.append(pairs.getKey().toString() + "='" + pairs.getValue().toString() + "'");
                    }
                    if (pairs.getKey().toString().equalsIgnoreCase("module_id")) {
                        sb.append("id in (select project_id from project_module where ");
                        sb.append(pairs.getKey().toString() + "=" + pairs.getValue().toString());
                        sb.append(")");
                    }

                    i++;

                }
                List<Project> projectList = new ArrayList<Project>();
                if (sb.toString().equals("select * from project where ")) {
                    //projectList = projectService.getActiveProjects();
                    projectList = projectService.list();
                } else {
                    projectList = projectService.executeQuery(sb.toString());
                }
                Iterator<Project> iterator = projectList.iterator();
                while (iterator.hasNext()) {
                    String moduleNames = "";
                    Project proj = iterator.next();
                    SimpleDateFormat formatt = new SimpleDateFormat("yyyy-MM-dd");

                    proj.setStartingDate(formatt.format(proj.getStartDate()));
                    proj.setEndingDate(formatt.format(proj.getEndDate()));
                    proj.setDisabled(proj.isDisabled());
                    Tenant t = tenantService.findByProject(proj.getId());
                    if (t != null) {
                        proj.setTenantName(t.getName());
                    } else {
                        proj.setTenantName("No Tenant");
                    }
                    int moduleCount = projectModuleService.getModuleCountByProjectId(proj.getId());
                    List<ProjectModule> projModList = projectModuleService.findByProjectId(proj.getId());
                    proj.setModuleCount(moduleCount);
                    if (moduleCount == 0) {
                        moduleNames = "No Packages Available";
                    } else {
                        if (projModList != null) {
                            Iterator<ProjectModule> itr = projModList.iterator();
                            while (itr.hasNext()) {
                                ProjectModule pm = itr.next();
                                Module m = moduleService.getById(pm.getProjectModuleComp().getModuleId());
                                if (moduleNames == "") {
                                    moduleNames = m.getName();
                                } else {
                                    moduleNames = moduleNames + " " + "<br>" + m.getName();
                                }
                            }

                        }
                    }
                    proj.setModuleNames(
                            "<center><table width=70% border=1><tr><th><center>Package Names</center></th></tr><tr><td><center>"
                                    + moduleNames + "</center></td></tr></table></center>");
                    projList.add(proj);

                }
                model.addAttribute("tenantname_list", tenantService.list());
                model.addAttribute("project_list", projList);
                model.addAttribute("modulename_list", moduleService.list());
                model.addAttribute("projectname_list", projectService.getActiveProjects());
                model.addAttribute("viewproject", "viewproject");
                model.addAttribute("crudObj", entity);
            } catch (Exception e) {
                e.printStackTrace();
            }
            entity.setEndingDate(entity.getEndingDate());
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    /**
     * This method is to search the projects by taking user entered filters
     */
    @RequestMapping(value = "/searcheditproject", method = RequestMethod.POST)
    public String searchEditProjects(@ModelAttribute("crudObj") @Valid Project entity, BindingResult bindingResult,
            Model model, HttpServletRequest request) {
        List<Project> projList = new ArrayList<Project>();
        try {
            Map<String, String> map = new HashMap<String, String>();

            Integer tenantId = entity.getTenantId();
            String tenId = "";
            if (tenantId != null) {
                tenId = tenantId + "";
            }

            if (tenId != null && tenId != "") {
                map.put("tenant_id", tenId);
            }

            if (entity.getStartingDate() != null && entity.getStartingDate() != "") {
                map.put("start_date", entity.getStartingDate());
            }

            if (entity.getEndingDate() != null && entity.getEndingDate() != "") {
                map.put("end_date", entity.getEndingDate());
            }

            if (entity.getId() != null) {
                map.put("id", entity.getId() + "");
            }
            StringBuffer sb = new StringBuffer();

            sb.append("select * from project where ");

            Iterator<Entry<String, String>> it = map.entrySet().iterator();
            int i = 1;

            while (it.hasNext()) {
                @SuppressWarnings("rawtypes")
                Map.Entry pairs = (Map.Entry) it.next();

                if (i > 1) {
                    sb.append(" or ");
                }

                if (pairs.getKey().toString().equalsIgnoreCase("start_date")) {
                    sb.append(pairs.getKey().toString() + ">='" + pairs.getValue().toString() + "'");
                }

                if (pairs.getKey().toString().equalsIgnoreCase("end_date")) {
                    sb.append(pairs.getKey().toString() + "<='" + pairs.getValue().toString() + "'");
                }

                if (pairs.getKey().toString().equalsIgnoreCase("tenant_id")) {
                    sb.append("id in (select project_id from project_tenant where ");
                    sb.append(pairs.getKey().toString() + "=" + pairs.getValue().toString());
                    sb.append(")");
                }

                if (pairs.getKey().toString().equalsIgnoreCase("id")) {
                    sb.append(pairs.getKey().toString() + "=" + pairs.getValue().toString());
                }

                i++;

            }
            List<Project> projectList = null;
            if (sb.toString().equals("select * from project where ")) {
                //projectList = projectService.getActiveProjects();
                projectList = projectService.list();
            } else {
                projectList = projectService.executeQuery(sb.toString());
            }
            Iterator<Project> iterator = projectList.iterator();
            while (iterator.hasNext()) {
                Project proj = iterator.next();
                Project p = new Project();
                p.setId(proj.getId());
                p.setName(proj.getName());
                p.setDescription(proj.getDescription());
                p.setStartDate(proj.getStartDate());
                p.setEndDate(proj.getEndDate());
                p.setCreatedDate(proj.getCreatedDate());
                if (proj.getModifiedBy() != null) {
                    Integer id = Integer.parseInt(proj.getModifiedBy());
                    User u = userService.getById(id);
                    p.setCreatedName(u.getUserName());
                } else {
                    Integer id = Integer.parseInt(proj.getCreatedBy());
                    User u = userService.getById(id);
                    p.setCreatedName(u.getUserName());
                }
                p.setCreatedBy(proj.getCreatedBy());
                p.setModifiedBy(proj.getModifiedBy());
                p.setModifiedDate(proj.getModifiedDate());
                Tenant t = tenantService.findByProject(proj.getId());
                if (t != null) {
                    p.setTenantName(t.getName());
                } else {
                    p.setTenantName("No Tenant");
                }
                projList.add(p);
            }

            model.addAttribute("tenantname_list", tenantService.list());
            model.addAttribute("project_list", projList);
            //model.addAttribute("projectname_list", projectService.getActiveProjects());
            model.addAttribute("projectname_list", projectService.list());
            model.addAttribute("editproject", "editproject");
        } catch (Exception e) {
            LOG.error(e.toString());
            e.printStackTrace();
        }
        return "home";
    }

    @Override
    public QTAdminService<Project> getTService() {
        return projectService;
    }

    @Override
    protected Validator getValidator() {
        return validator;
    }
}