com.stoxx.portlet.manageusers.controller.ManageUsersController.java Source code

Java tutorial

Introduction

Here is the source code for com.stoxx.portlet.manageusers.controller.ManageUsersController.java

Source

package com.stoxx.portlet.manageusers.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.portlet.bind.annotation.ActionMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import org.springframework.web.portlet.bind.annotation.ResourceMapping;
import com.liferay.portal.NoSuchLayoutException;
import com.liferay.portal.kernel.dao.orm.Criterion;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.portlet.LiferayPortletURL;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Layout;
import com.liferay.portal.model.Role;
import com.liferay.portal.model.RoleConstants;
import com.liferay.portal.model.User;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.service.LayoutLocalServiceUtil;
import com.liferay.portal.service.RoleLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.PortletURLFactoryUtil;
import com.stoxx.digital.platform.model.EmailDomain;
import com.stoxx.digital.platform.model.SalesEntry;
import com.stoxx.digital.platform.service.EmailDomainLocalServiceUtil;
import com.stoxx.digital.platform.service.SalesEntryLocalServiceUtil;
import com.stoxx.portlet.manageusers.deligate.ManageUsersDeligate;
import com.stoxx.portlet.manageusers.model.CompanyVO;
import com.stoxx.portlet.manageusers.model.ManageUsersBean;
import com.stoxx.portlet.manageusers.model.UserListModel;
import com.stoxx.portlet.manageusers.model.UserModel;
import com.stoxx.portlet.manageusers.model.UserTypeModel;
import com.stoxx.portlet.manageusers.util.ManageUserUtil;
import com.stoxx.service.business.userprofile.UserProfileService;
import com.stoxx.service.constant.STOXXConstants;
import com.stoxx.service.domain.TranslatorAgency;
import com.stoxx.service.exception.STOXXException;
import com.stoxx.service.util.STOXXDateUtil;
import com.stoxx.service.util.SendNotificationUtil;

import com.liferay.portal.kernel.cache.CacheRegistryUtil;
import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
import com.liferay.portal.kernel.webcache.WebCachePoolUtil;

@Controller
@RequestMapping("VIEW")
public class ManageUsersController {

    private static final String GENERAL_DATA = "generalData";
    private static final String STAFF_DATA = "staffData";
    private static final String CUSTOMER_DATA = "customerData";
    private static final String SEARCH_TERM = "searchTerm";
    private static final String SEARCH_CATEGORY = "selectedCategory";
    private static final String TYPE = "type";
    private static final String CURRENT_TILE_PAGE = "currentTilePage";
    private static final String NO_OF_TILE_PAGES = "noOfTilePages";
    private static final String NO = "NO";
    private static final String YES = "YES";
    private static final String SESSION_USER_LIST_MODEL = "sessionUserListModel";
    private static final String USER_LIST_MODEL1 = "userListModel1";
    private static final String CURRENT_PAGE = "currentPage";
    private static final String USERTYPE_CUSTOMER = "Customer";
    private static final String THE_LIFERAY_USER_ID_IS = "The Liferay User Id is ::::";
    private static final String COMPANY_USER = "companyUser";
    private static final String TRANSLATOR_USER = "translatorUser";
    private static final String PAGE_NAME = "pageName";
    private static final String GENERAL_MODEL = "generalModel";
    private static final String STOXX_EXCEPTION = "STOXXException";
    private static final String SYSTEM_EXCEPTION = "SystemException";
    private static final String EXCEPTION = "Exception";
    private static final String TRANSLATOR = "translator";
    private static final String CUSTOMER = "customer";
    private static final String HOME = "home";
    private static final String TRANS_USERS = "transUsers";
    private static final String CUST_USER = "custUser";
    private static final String TRANS_COMPANY = "transCompany";
    private static final String CUSTOMER_COMPANY = "customerCompany";
    private static final String GENERAL_USERS = "generalUsers";
    private static final String STAFF_USERS = "staffUsers";
    private static final String PAGE = "page";
    private static final String REDIRECTED_PAGE = "redirectedPage";
    private static final String GENERAL_USER = "generalUser";
    private static final String STAFF = "staff";
    private static final String MANAGEUSERSBEAN = "manageUsersBean";
    private static final String SHOW_HOME = "displayGroup";
    private static final String SHOW_CUSTOMER_COMPANY = CUSTOMER_COMPANY;
    private static final String SHOW_TRANSLATOR_COMPANY = "translatorCompany";
    private static final String SHOW_CUSTOMER_USER = "customerUser";
    private static final String SHOW_TRANSLATOR_USER = "translatorStaff";
    private static final String SHOW_PACKAGES_SUBSCRIBED = "packageCompany";
    private static final String SHOW_STAFF_ROLE = "staffRoles";
    private static final String USER_MODEL = "UserModel";
    private static final String ROLE_CUSTOM_FIELD = "isStaffRole";
    private static final String FRIENDLYURL_MANAGE_SALES_ENTRY = "/manage-sales-entry-account";
    private String companyName = StringPool.BLANK;
    private String transCompanyName = StringPool.BLANK;
    private static final String SHOW_TILE_PAGINATION = "showTilePagination";

    private ManageUsersDeligate manageUsersDeligate;

    private UserProfileService userProfileService;

    public void setManageUsersDeligate(ManageUsersDeligate manageUsersDeligate) {
        this.manageUsersDeligate = manageUsersDeligate;
    }

    public void setUserProfileService(UserProfileService userProfileService) {
        this.userProfileService = userProfileService;
    }

    public ManageUsersDeligate getManageUsersDeligate() {
        return manageUsersDeligate;
    }

    public UserProfileService getUserProfileService() {
        return userProfileService;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getTransCompanyName() {
        return transCompanyName;
    }

    public void setTransCompanyName(String transCompanyName) {
        this.transCompanyName = transCompanyName;
    }

    @ActionMapping(params = "action=staffData")
    public void invokeStaff(ActionRequest actionRequest, ActionResponse actionResponse, Model model) {
        log.info("Inside staff display>>> ");
        actionResponse.setRenderParameter(REDIRECTED_PAGE, STAFF);
    }

    @ActionMapping(params = "action=customerData")
    public void invokeCustomer(ActionRequest actionRequest, ActionResponse actionResponse, Model model) {
        log.info("Inside Customer display>>> ");
        actionResponse.setRenderParameter(REDIRECTED_PAGE, CUSTOMER);
    }

    @ActionMapping(params = "action=translatorData")
    public void invokeTranslator(ActionRequest actionRequest, ActionResponse actionResponse, Model model) {
        log.info("Inside translator display>>> ");
        actionResponse.setRenderParameter(REDIRECTED_PAGE, TRANSLATOR);
    }

    @ActionMapping(params = "action=cancel")
    public void cancel(ActionRequest actionRequest, ActionResponse actionResponse) {
        log.info("Inside cancel method>>> ");
        if (actionRequest.getParameter(PAGE) != null
                && actionRequest.getParameter(PAGE).equalsIgnoreCase(STAFF_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, HOME);
        } else if (actionRequest.getParameter(PAGE) != null
                && actionRequest.getParameter(PAGE).equalsIgnoreCase(GENERAL_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, HOME);
        } else {
            cancelRemaining(actionRequest, actionResponse);
        }

    }

    /**
     * @param actionRequest
     * @param actionResponse
     */
    private void cancelRemaining(ActionRequest actionRequest, ActionResponse actionResponse) {
        if (actionRequest.getParameter(PAGE) != null
                && actionRequest.getParameter(PAGE).equalsIgnoreCase(CUSTOMER_COMPANY)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, HOME);
        } else if (actionRequest.getParameter(PAGE) != null
                && actionRequest.getParameter(PAGE).equalsIgnoreCase(TRANS_COMPANY)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, HOME);
        } else if (actionRequest.getParameter(PAGE) != null
                && actionRequest.getParameter(PAGE).equalsIgnoreCase(CUST_USER)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, CUSTOMER);
        } else if (actionRequest.getParameter(PAGE) != null
                && actionRequest.getParameter(PAGE).equalsIgnoreCase(TRANS_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, TRANSLATOR);
        }
    }

    @ActionMapping(params = "action=generalData")
    public void invokeGeneralUser(ActionRequest actionRequest, ActionResponse actionResponse, Model model) {
        log.info("Inside general display>>> ");
        actionResponse.setRenderParameter(REDIRECTED_PAGE, GENERAL_USER);
    }

    @ActionMapping(params = "action=search")
    public void searchUser(ActionRequest actionRequest, ActionResponse actionResponse, Model model) {
        log.info("Inside search User display>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        String userType = ParamUtil.get(actionRequest, TYPE, StringPool.BLANK);
        String searchCategory = ParamUtil.get(actionRequest, SEARCH_CATEGORY, StringPool.BLANK);
        String searchTerm = ParamUtil.get(actionRequest, SEARCH_TERM, StringPool.BLANK);
        log.info("the userType is " + userType + " searchCategory is " + searchCategory + " searchTerm is "
                + searchTerm);
        actionResponse.setRenderParameter(SEARCH_CATEGORY, searchCategory);
        actionResponse.setRenderParameter(SEARCH_TERM, searchTerm);

        if (CUSTOMER_DATA.equalsIgnoreCase(userType)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, CUSTOMER);
            if (LanguageUtil.get(themeDisplay.getLocale(), "stoxx-manage-user-individual").trim()
                    .equalsIgnoreCase(searchCategory)
                    || LanguageUtil.get(themeDisplay.getLocale(), "stoxx-manage-user-email").trim()
                            .equalsIgnoreCase(searchCategory)) {
                actionResponse.setRenderParameter(REDIRECTED_PAGE, COMPANY_USER);
            }
        } else if (STAFF_DATA.equalsIgnoreCase(userType)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, STAFF);
        } else if (GENERAL_DATA.equalsIgnoreCase(userType)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, GENERAL_USER);
        }
    }

    @RenderMapping(params = "redirectedPage=staff")
    public String displayStaff(@ModelAttribute(USER_MODEL) UserModel userModel, RenderRequest request,
            RenderResponse response, Model model) {
        log.info("staff render method is called");
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        UserListModel userListModel = new UserListModel();
        UserListModel userListModel1 = new UserListModel();
        List<UserModel> subUserList = null;

        String searchCategory = request.getParameter(SEARCH_CATEGORY);
        String searchTerm = request.getParameter(SEARCH_TERM);

        try {
            userListModel.setUserList(manageUsersDeligate.getAllStaff(themeDisplay.getLocale(),
                    themeDisplay.getCompanyId(), searchCategory, searchTerm));
        } catch (STOXXException e) {
            log.error(e.getMessage(), e);
        }
        PortletSession session = request.getPortletSession();

        String currentPage = request.getParameter(CURRENT_PAGE);
        currentPage = (currentPage == null) ? "1" : currentPage;

        if (Validator.isNotNull(userListModel.getUserList()) && userListModel.getUserList().size() > 0) {

            userListModel1.setUserList(userListModel.getUserList());
            session.setAttribute(USER_LIST_MODEL1, userListModel1);

            int noOfPages = (int) Math.ceil(userListModel.getUserList().size() * 1.0 / 10);
            int currentPageInt = GetterUtil.getInteger(currentPage);

            int startIndex = (currentPageInt - 1) * 10;
            int endIndex = currentPageInt * 10;

            if (noOfPages == currentPageInt) {
                endIndex = userListModel.getUserList().size();
            }

            if (noOfPages > 1) {
                request.setAttribute(SHOW_TILE_PAGINATION, YES);
                request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
            } else {
                request.setAttribute(SHOW_TILE_PAGINATION, NO);
            }
            subUserList = userListModel.getUserList().subList(startIndex, endIndex);
            userListModel.setUserList(subUserList);
        } else {
            request.setAttribute(SHOW_TILE_PAGINATION, NO);
        }
        userListModel.setSearchCriterionList(ManageUserUtil.loadGeneralSearchList(themeDisplay.getLocale()));
        model.addAttribute("staffModel", userListModel);

        try {
            model.addAttribute("departmentList", manageUsersDeligate.getAllDepartments());
        } catch (STOXXException e) {
            log.error("Unable to retrieve departments");
        }
        request.setAttribute(SEARCH_CATEGORY, searchCategory);
        request.setAttribute(SEARCH_TERM, searchTerm);
        return STAFF;
    }

    @RenderMapping(params = "redirectedPage=generalUser")
    public String displayGeneralUser(@ModelAttribute(USER_MODEL) UserModel userModel, RenderRequest request,
            RenderResponse response, Model model) {
        log.info("general user render method is called");
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        UserListModel userListModel = new UserListModel();
        UserListModel sessionUserListModel = new UserListModel();
        List<UserModel> subUserList = null;
        String searchCategory = request.getParameter(SEARCH_CATEGORY);
        String searchTerm = request.getParameter(SEARCH_TERM);
        try {
            userListModel.setUserList(manageUsersDeligate.getAllGeneralUser(themeDisplay.getLocale(),
                    themeDisplay.getCompanyId(), searchCategory, searchTerm));
        } catch (com.stoxx.service.exception.STOXXException e) {
            log.error(e.getMessage(), e);
        }

        PortletSession session = request.getPortletSession();
        String currentPage = request.getParameter(CURRENT_PAGE);
        currentPage = (currentPage == null) ? "1" : currentPage;

        if (Validator.isNotNull(userListModel.getUserList()) && userListModel.getUserList().size() > 0) {

            sessionUserListModel.setUserList(userListModel.getUserList());
            session.setAttribute(SESSION_USER_LIST_MODEL, sessionUserListModel);

            int noOfPages = (int) Math.ceil(userListModel.getUserList().size() * 1.0 / 10);
            int currentPageInt = GetterUtil.getInteger(currentPage);

            int startIndex = (currentPageInt - 1) * 10;
            int endIndex = currentPageInt * 10;

            if (noOfPages == currentPageInt) {
                endIndex = userListModel.getUserList().size();
            }

            if (noOfPages > 1) {
                request.setAttribute(SHOW_TILE_PAGINATION, YES);
                request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
            } else {
                request.setAttribute(SHOW_TILE_PAGINATION, NO);
            }
            subUserList = userListModel.getUserList().subList(startIndex, endIndex);
            userListModel.setUserList(subUserList);
        } else {
            request.setAttribute(SHOW_TILE_PAGINATION, NO);
        }
        userListModel.setSearchCriterionList(ManageUserUtil.loadGeneralSearchList(themeDisplay.getLocale()));
        request.setAttribute(SEARCH_CATEGORY, searchCategory);
        request.setAttribute(SEARCH_TERM, searchTerm);
        model.addAttribute(GENERAL_MODEL, userListModel);
        return GENERAL_USER;
    }

    @RenderMapping(params = "redirectedPage=customer")
    public String displayCustomer(RenderRequest request, RenderResponse response, Model model) {
        log.info("customer render method is called");
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        Boolean flag = Boolean.TRUE;
        DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(SalesEntry.class,
                PortalClassLoaderUtil.getClassLoader());
        Criterion criterion = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("status", 1),
                RestrictionsFactoryUtil.eq("status", 2));
        dynamicQuery.add(criterion);
        String searchCategory = request.getParameter(SEARCH_CATEGORY);
        String searchTerm = request.getParameter(SEARCH_TERM);
        if (Validator.isNotNull(searchCategory) && LanguageUtil
                .get(themeDisplay.getLocale(), "stoxx-manage-company-name").equalsIgnoreCase(searchCategory)) {
            dynamicQuery.add(RestrictionsFactoryUtil.ilike("companyName", "%" + searchTerm + "%"));
        }
        if (Validator.isNotNull(searchCategory)
                && LanguageUtil.get(themeDisplay.getLocale(), "stoxx-manage-company-expiry-date")
                        .equalsIgnoreCase(searchCategory)) {
            Date date1 = null;
            try {
                date1 = STOXXDateUtil.convertStringToDateInStoxxApplicationDateFormat(searchTerm);
                log.info("Expiry date is " + date1);
                Criterion dateRangeCriterion = RestrictionsFactoryUtil.eq("endDate",
                        new java.sql.Timestamp(date1.getTime()));
                dynamicQuery.add(dateRangeCriterion);
            } catch (STOXXException e) {
                log.error(e.getMessage(), e);
            }
        }

        if (Validator.isNotNull(searchCategory) && LanguageUtil
                .get(themeDisplay.getLocale(), "stoxx-manage-company-domain").equalsIgnoreCase(searchCategory)) {
            DynamicQuery emaildynamicQuery = DynamicQueryFactoryUtil.forClass(EmailDomain.class,
                    PortalClassLoaderUtil.getClassLoader());
            emaildynamicQuery.add(RestrictionsFactoryUtil.ilike("domain", "%" + searchTerm + "%"));
            emaildynamicQuery
                    .setProjection(ProjectionFactoryUtil.distinct(ProjectionFactoryUtil.property("salesEntryId")));
            try {
                List<Long> salesEntryIdList = new ArrayList<Long>(
                        EmailDomainLocalServiceUtil.dynamicQuery(emaildynamicQuery));
                if (salesEntryIdList.size() == 0) {
                    flag = Boolean.FALSE;
                }
                for (Long salesEntryId : salesEntryIdList) {
                    dynamicQuery.add(RestrictionsFactoryUtil.eq("salesEntryId", salesEntryId));
                }
            } catch (SystemException e) {
                log.error(e.getMessage(), e);
            }
        }

        List<SalesEntry> salesEntryList = null;
        CompanyVO companyVO = new CompanyVO();
        List<SalesEntry> sessionSalesEntryList = null;
        try {
            if (flag) {
                salesEntryList = new ArrayList<SalesEntry>(SalesEntryLocalServiceUtil.dynamicQuery(dynamicQuery));
            } else {
                salesEntryList = new ArrayList<SalesEntry>();
            }

            if (Validator.isNotNull(salesEntryList) && salesEntryList.size() > 0) {
                Collections.sort(salesEntryList, new Comparator<SalesEntry>() {

                    @Override
                    public int compare(SalesEntry o1, SalesEntry o2) {
                        return o1.getCompanyName().compareToIgnoreCase(o2.getCompanyName());
                    }
                });

                PortletSession session = request.getPortletSession();
                String currentPage = request.getParameter(CURRENT_PAGE);
                currentPage = (currentPage == null) ? "1" : currentPage;

                sessionSalesEntryList = salesEntryList;
                session.setAttribute("sessionSalesEntryList", sessionSalesEntryList);

                int noOfPages = (int) Math.ceil(salesEntryList.size() * 1.0 / 10);
                int currentPageInt = GetterUtil.getInteger(currentPage);

                int startIndex = (currentPageInt - 1) * 10;
                int endIndex = currentPageInt * 10;

                if (noOfPages == currentPageInt) {
                    endIndex = salesEntryList.size();
                }

                if (noOfPages > 1) {
                    request.setAttribute(SHOW_TILE_PAGINATION, YES);
                    request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                    request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
                } else {
                    request.setAttribute(SHOW_TILE_PAGINATION, NO);
                }

                Map<Long, Map<String, Integer>> salesEntryIdToCompanyName = new LinkedHashMap<Long, Map<String, Integer>>();
                for (SalesEntry salesEntry : salesEntryList.subList(startIndex, endIndex)) {
                    Map<String, Integer> companyNameToStatusMap = new LinkedHashMap<String, Integer>();
                    companyNameToStatusMap.put(salesEntry.getCompanyName(), salesEntry.getStatus());
                    salesEntryIdToCompanyName.put(salesEntry.getSalesEntryId(), companyNameToStatusMap);
                }
                companyVO.setCompanyMap(salesEntryIdToCompanyName);
            } else {
                request.setAttribute(SHOW_TILE_PAGINATION, NO);
            }
            companyVO.setSearchCriterionList(ManageUserUtil.loadSearchListForCustomer(themeDisplay.getLocale()));
        } catch (SystemException e) {
            log.error(SYSTEM_EXCEPTION + e);
        }
        request.setAttribute(SEARCH_CATEGORY, searchCategory);
        request.setAttribute(SEARCH_TERM, searchTerm);
        model.addAttribute("companyVO", companyVO);
        return SHOW_CUSTOMER_COMPANY;
    }

    @ResourceMapping("staffPaginate")
    public String staffPaginate(@ModelAttribute(USER_MODEL) UserModel userModel, ResourceRequest request,
            ResourceResponse response, Model model) {

        log.info("staffPaginate >>>>>");
        List<UserModel> subUserList = null;
        UserListModel userListModel = null;
        UserListModel userListModel1 = null;

        String currentPage = request.getParameter(CURRENT_PAGE);
        currentPage = (currentPage == null) ? "1" : currentPage;

        PortletSession session = request.getPortletSession();

        if (session != null && session.getAttribute(USER_LIST_MODEL1) != null) {
            userListModel = (UserListModel) session.getAttribute(USER_LIST_MODEL1);

            userListModel1 = new UserListModel();
            userListModel1.setUserList(userListModel.getUserList());
            session.setAttribute(USER_LIST_MODEL1, userListModel1);
        }
        try {
            if (userListModel != null && Validator.isNotNull(userListModel.getUserList())
                    && userListModel.getUserList().size() > 0) {

                int noOfPages = (int) Math.ceil(userListModel.getUserList().size() * 1.0 / 10);

                int currentPageInt = GetterUtil.getInteger(currentPage);

                int startIndex = (currentPageInt - 1) * 10;
                int endIndex = currentPageInt * 10;

                if (noOfPages == currentPageInt) {
                    endIndex = userListModel.getUserList().size();
                }

                if (noOfPages > 1) {
                    request.setAttribute(SHOW_TILE_PAGINATION, YES);
                    request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                    request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
                } else {
                    request.setAttribute(SHOW_TILE_PAGINATION, NO);
                }

                log.info("startIndex >>> " + startIndex);
                log.info("endIndex >>> " + endIndex);

                subUserList = userListModel.getUserList().subList(startIndex, endIndex);
                userListModel.setUserList(subUserList);

            } else {
                request.setAttribute(SHOW_TILE_PAGINATION, NO);
            }
        } catch (Exception e1) {
            log.error(EXCEPTION, e1);

        }

        model.addAttribute("staffModel", userListModel);
        return "recordDetails";
    }

    @ResourceMapping(value = "updateDepartment")
    public void updateDepartment(@ModelAttribute(USER_MODEL) UserModel userModel, ResourceRequest request,
            ResourceResponse response) throws IOException {
        log.info("Updating to department: " + userModel.getDepartmentName() + " for emailaddress: "
                + userModel.getEmailAddress());
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            manageUsersDeligate.updateUserDepartment(userModel);
            JSONObject jsonObject = createJSONResult("SUCCESS",
                    LanguageUtil.get(themeDisplay.getLocale(), "stoxx-department-save-success-message"));
            response.getWriter().print(jsonObject.toString());
        } catch (STOXXException e) {
            log.error(
                    "Unable to save department change [emailAddress=" + userModel.getEmailAddress() + " department="
                            + userModel.getDepartmentName() + "] " + e.getExpCode() + " - " + e.getMessage());
            JSONObject jsonObject = createJSONResult("FAILURE",
                    LanguageUtil.get(themeDisplay.getLocale(), "stoxx-department-save-failure-message"));
            response.getWriter().print(jsonObject.toString());
        }
    }

    @RenderMapping(params = "action=editUserTypeForm")
    public String editUserTypeForm(@RequestParam(required = true) String emailAddress, RenderRequest request,
            RenderResponse response, Model model) {
        try {
            model.addAttribute("userTypeModel", manageUsersDeligate.getUserTypeModel(emailAddress));
            model.addAttribute("departmentList", manageUsersDeligate.getAllDepartments());
            List<String> userTypes = new ArrayList<String>(2);
            userTypes.add(STOXXConstants.STOXX_STAFF_USER);
            userTypes.add(USERTYPE_CUSTOMER);
            model.addAttribute("userTypes", userTypes);
        } catch (STOXXException e) {
            log.error("Unable to fetch department/userTypeModel" + e);
        }
        return "editUserTypeForm";
    }

    @ActionMapping(params = "action=saveUserType")
    public void saveUserType(@ModelAttribute("userTypeModel") UserTypeModel userTypeModel, ActionRequest request,
            ActionResponse response, Model model) throws IOException {
        log.info("Updating user type with information " + userTypeModel.toString());
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        if (USERTYPE_CUSTOMER.equalsIgnoreCase(userTypeModel.getUserType())) {
            try {
                Layout layout = LayoutLocalServiceUtil.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), true,
                        FRIENDLYURL_MANAGE_SALES_ENTRY);
                LiferayPortletURL displayUsersPortletURL = PortletURLFactoryUtil.create(request,
                        "STOXXPreRegCustomerAdminPortlet_WAR_STOXXPreRegCustomerAdminPortlet10", layout.getPlid(),
                        PortletRequest.RENDER_PHASE);
                displayUsersPortletURL.setParameter("action", "changeUserType");
                displayUsersPortletURL.setParameter("emailAddress", userTypeModel.getEmailAddress());
                response.sendRedirect(displayUsersPortletURL.toString());
            } catch (NoSuchLayoutException ex) {
                log.error("Users listing layout not found with friendly url " + FRIENDLYURL_MANAGE_SALES_ENTRY);
            } catch (PortalException e) {
                log.error(e.getMessage());
            } catch (SystemException e) {
                log.error(e.getMessage());
            }

        } else {
            try {
                manageUsersDeligate.updateUserType(userTypeModel, themeDisplay);
                SessionMessages.add(request, "requestProcessed",
                        LanguageUtil.get(themeDisplay.getLocale(), "stoxx-usertype-save-success-message"));
            } catch (STOXXException e) {
                log.error("Unable to update user type due to:" + e.getExpCode() + ":" + e.getExpMsg() + e);
                SessionErrors.add(request, "failed");
            }

            LiferayPortletURL redirectUrl = PortletURLFactoryUtil.create(request, PortalUtil.getPortletId(request),
                    themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
            redirectUrl.setParameter(REDIRECTED_PAGE, GENERAL_USER);
            response.sendRedirect(redirectUrl.toString());
        }
    }

    private JSONObject createJSONResult(String result, String message) {
        JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
        jsonObject.put("result", result);
        jsonObject.put("message", message);
        return jsonObject;
    }

    @ResourceMapping("customeCompanyPaginate")
    public String customeCompanyPaginate(ResourceRequest request, ResourceResponse response, Model model) {
        log.info("customeCompanyPaginate >>>>>");
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        List<SalesEntry> sessionSalesEntryList = null;
        List<SalesEntry> salesEntryList = null;
        CompanyVO companyVO = new CompanyVO();

        PortletSession session = request.getPortletSession();

        if (session != null && session.getAttribute("sessionSalesEntryList") != null) {
            sessionSalesEntryList = (List<SalesEntry>) session.getAttribute("sessionSalesEntryList");
            salesEntryList = sessionSalesEntryList;

        }
        try {
            if (Validator.isNotNull(salesEntryList) && salesEntryList.size() > 0) {
                Collections.sort(salesEntryList, new Comparator<SalesEntry>() {

                    @Override
                    public int compare(SalesEntry o1, SalesEntry o2) {
                        return o1.getCompanyName().compareToIgnoreCase(o2.getCompanyName());
                    }
                });

                String currentPage = request.getParameter(CURRENT_PAGE);
                currentPage = (currentPage == null) ? "1" : currentPage;

                int noOfPages = (int) Math.ceil(salesEntryList.size() * 1.0 / 10);
                int currentPageInt = GetterUtil.getInteger(currentPage);

                int startIndex = (currentPageInt - 1) * 10;
                int endIndex = currentPageInt * 10;

                if (noOfPages == currentPageInt) {
                    endIndex = salesEntryList.size();
                }

                if (noOfPages > 1) {
                    request.setAttribute(SHOW_TILE_PAGINATION, YES);
                    request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                    request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
                } else {
                    request.setAttribute(SHOW_TILE_PAGINATION, NO);
                }

                Map<Long, Map<String, Integer>> salesEntryIdToCompanyName = new LinkedHashMap<Long, Map<String, Integer>>();
                for (SalesEntry salesEntry : salesEntryList.subList(startIndex, endIndex)) {
                    Map<String, Integer> companyNameToStatusMap = new LinkedHashMap<String, Integer>();
                    companyNameToStatusMap.put(salesEntry.getCompanyName(), salesEntry.getStatus());
                    salesEntryIdToCompanyName.put(salesEntry.getSalesEntryId(), companyNameToStatusMap);
                }
                companyVO.setCompanyMap(salesEntryIdToCompanyName);
            } else {
                request.setAttribute(SHOW_TILE_PAGINATION, NO);
            }
            companyVO.setSearchCriterionList(ManageUserUtil.loadSearchListForCustomer(themeDisplay.getLocale()));
        } catch (Exception e1) {
            log.error(EXCEPTION, e1);
        }
        model.addAttribute("companyVO", companyVO);
        return "customerCompanyPaginate";
    }

    @RenderMapping(params = "action=companyPackageAction")
    public String companyPackageAction(@RequestParam long salesEntryId, @RequestParam String companyName,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, RenderRequest renderRequest,
            RenderResponse renderResponse, Model model) {
        log.info("Inside companyPackageAction  method>>>> ");

        try {
            List<String> allPackageNames = manageUsersDeligate.getDistinctPackageNames();
            String packagesSubscribed = manageUsersDeligate.getSubscibedpackagesForCompany(companyName);
            manageUsersBean.setAllPackageNames(allPackageNames);
            manageUsersBean.setCompanyName(companyName);
            manageUsersBean.setPackagesSubscribedByCommaSeperation(packagesSubscribed);
            manageUsersBean.setSalesEntryID(salesEntryId);
        } catch (Exception e) {
            log.error(EXCEPTION + e);
        } finally {
            model.addAttribute("manageUserVO", manageUsersBean);
        }
        return SHOW_PACKAGES_SUBSCRIBED;

    }

    @RenderMapping(params = "action=savePackageNames")
    public String savePackageNamesToCompany(@ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean,
            RenderRequest renderRequest, RenderResponse renderResponse, Model model) {
        log.info("Inside savePackageNamesToCompany  method>>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            log.info("The added packages are" + manageUsersBean.getAddedPackageNames());
            log.info("The deleted packages are" + manageUsersBean.getDeletedPackageNames());
            log.info("The sales entry id is" + manageUsersBean.getSalesEntryID());
            log.info("The updated packages are" + manageUsersBean.getNewPackageNames());
            List<String> newPackagesSubscribedList = new ArrayList<String>();
            List<String> alreadyPackagesSubscribedList = new ArrayList<String>();
            List<String> deletedUnscribedPackageNamesList = new ArrayList<String>();
            deletedUnscribedPackageNamesList = deleteUnscribedList(manageUsersBean,
                    deletedUnscribedPackageNamesList);
            log.info("The deletedUnscribedPackageNamesList is" + deletedUnscribedPackageNamesList);
            newPackagesSubscribedList = getSubscribedPackages(manageUsersBean, newPackagesSubscribedList);
            log.info("The company name is " + manageUsersBean.getCompanyName());
            manageUsersBean.setAllPackageNames(manageUsersBean.getAllPackageNames());
            manageUsersBean.setCompanyName(manageUsersBean.getCompanyName());
            manageUsersBean.setPackagesSubscribedByCommaSeperation(
                    manageUsersBean.getPackagesSubscribedByCommaSeperation());
            DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(SalesEntry.class,
                    PortalClassLoaderUtil.getClassLoader());
            Criterion criterion = RestrictionsFactoryUtil.eq("companyName", manageUsersBean.getCompanyName());
            dynamicQuery.add(criterion);
            List<SalesEntry> salesEntryList = null;
            List<Long> liferrayUserIDsForCustomer = new ArrayList<Long>();
            salesEntryList = SalesEntryLocalServiceUtil.dynamicQuery(dynamicQuery);

            if (Validator.isNotNull(salesEntryList) && salesEntryList.size() > 0) {
                SalesEntry salesEntry = salesEntryList.get(0);
                if (!Validator.isBlank(salesEntry.getPackageNames())) {
                    if (salesEntry.getPackageNames().contains(StringPool.COMMA)) {
                        alreadyPackagesSubscribedList = Arrays.asList(salesEntry.getPackageNames().split(","));
                    } else {
                        alreadyPackagesSubscribedList.add(salesEntry.getPackageNames());
                    }
                }
                salesEntry.setPackageNames(manageUsersBean.getNewPackageNames());
                SalesEntryLocalServiceUtil.updateSalesEntry(salesEntry);
                List<String> customerEmaiAddressList = userProfileService
                        .getLicensedUsersEmailAddress(manageUsersBean.getSalesEntryID());
                if (Validator.isNotNull(customerEmaiAddressList) && customerEmaiAddressList.size() > 0) {
                    for (String emailAddress : customerEmaiAddressList) {
                        User user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(),
                                emailAddress);
                        if (Validator.isNotNull(user)) {
                            liferrayUserIDsForCustomer.add(user.getUserId());
                        }
                    }
                }
                log.info("The new packagesSubscribedList is" + newPackagesSubscribedList);
                log.info("The already packagesSubscribedList is" + alreadyPackagesSubscribedList);
                log.info("The deletedUnscribedPackageNamesList is" + deletedUnscribedPackageNamesList);
                log.info("The no of users under this group is" + liferrayUserIDsForCustomer.size());
                addRole(themeDisplay, newPackagesSubscribedList, alreadyPackagesSubscribedList,
                        liferrayUserIDsForCustomer);
                removeRoles(themeDisplay, deletedUnscribedPackageNamesList, liferrayUserIDsForCustomer);
                SessionMessages.add(renderRequest, "packages-subscribed");
            }
        } catch (Exception e) {
            log.error(SYSTEM_EXCEPTION + e);
        } finally {
            List<String> allPackageNames;
            try {
                allPackageNames = manageUsersDeligate.getDistinctPackageNames();
                String packagesSubscribed = manageUsersDeligate
                        .getSubscibedpackagesForCompany(manageUsersBean.getCompanyName());
                manageUsersBean.setAllPackageNames(allPackageNames);
                manageUsersBean.setPackagesSubscribedByCommaSeperation(packagesSubscribed);
                model.addAttribute("manageUserVO", manageUsersBean);
            } catch (STOXXException e) {
                log.error(e.getMessage(), e);
            }
        }
        return SHOW_PACKAGES_SUBSCRIBED;

    }

    /**
     * @param manageUsersBean
     * @param deletedUnscribedPackageNamesList
     * @return
     */
    private List<String> deleteUnscribedList(ManageUsersBean manageUsersBean,
            List<String> deletedUnscribedPackageNamesList) {
        if (Validator.isNotNull(manageUsersBean.getDeletedPackageNames())
                && !manageUsersBean.getDeletedPackageNames().isEmpty()) {
            if (manageUsersBean.getDeletedPackageNames().contains(StringPool.COMMA)) {
                deletedUnscribedPackageNamesList = Arrays
                        .asList(manageUsersBean.getDeletedPackageNames().split(","));
            } else {
                deletedUnscribedPackageNamesList.add(manageUsersBean.getDeletedPackageNames());
            }
        }
        return deletedUnscribedPackageNamesList;
    }

    /**
     * @param manageUsersBean
     * @param newPackagesSubscribedList
     * @return
     */
    private List<String> getSubscribedPackages(ManageUsersBean manageUsersBean,
            List<String> newPackagesSubscribedList) {
        if (Validator.isNotNull(manageUsersBean.getAddedPackageNames())
                && !manageUsersBean.getAddedPackageNames().isEmpty()) {
            if (manageUsersBean.getAddedPackageNames().contains(StringPool.COMMA)) {
                newPackagesSubscribedList = Arrays.asList(manageUsersBean.getAddedPackageNames().split(","));
            } else {
                newPackagesSubscribedList.add(manageUsersBean.getAddedPackageNames());
            }
        }
        return newPackagesSubscribedList;
    }

    /**
     * @param themeDisplay
     * @param deletedUnscribedPackageNamesList
     * @param liferrayUserIDsForCustomer
     * @throws PortalException
     * @throws SystemException
     */
    private void removeRoles(ThemeDisplay themeDisplay, List<String> deletedUnscribedPackageNamesList,
            List<Long> liferrayUserIDsForCustomer) throws PortalException, SystemException {
        for (String packageName : deletedUnscribedPackageNamesList) {
            long[] roleIds = new long[] {
                    RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), packageName).getRoleId() };
            for (long userId : liferrayUserIDsForCustomer) {
                log.info("The packageName to be unset as role >>> is" + packageName);
                log.info("Unsetting user roles");
                log.info("The userId is " + userId + "in which >>>"
                        + RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), packageName).getName()
                        + " role has to be unassigned");
                RoleLocalServiceUtil.unsetUserRoles(userId, roleIds);
            }
            clearCacheFromServer();
        }
    }

    /**
     * @param themeDisplay
     * @param newPackagesSubscribedList
     * @param alreadyPackagesSubscribedList
     * @param liferrayUserIDsForCustomer
     * @throws PortalException
     * @throws SystemException
     */
    private void addRole(ThemeDisplay themeDisplay, List<String> newPackagesSubscribedList,
            List<String> alreadyPackagesSubscribedList, List<Long> liferrayUserIDsForCustomer)
            throws PortalException, SystemException {
        for (String packageName : newPackagesSubscribedList) {
            if (!(alreadyPackagesSubscribedList.contains(packageName))) {
                log.info("The packageName to be set as role >>> is" + packageName);
                for (long userId : liferrayUserIDsForCustomer) {
                    log.info("The userId is " + userId + "in which >>>"
                            + RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), packageName).getName()
                            + " role has to be assigned");
                    RoleLocalServiceUtil.addUserRole(userId,
                            RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), packageName).getRoleId());
                }
                clearCacheFromServer();
            }
        }
    }

    @RenderMapping(params = "redirectedPage=translator")
    public String displayTranslator(RenderRequest request, RenderResponse response, Model model) {
        List<TranslatorAgency> translatorCompanyList = null;
        List<TranslatorAgency> sessiontranslatorCompanyList = null;
        CompanyVO companyVO = new CompanyVO();
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            translatorCompanyList = manageUsersDeligate.getVendorCompanyList();
            log.info("Vendor company List>>>> " + translatorCompanyList.size());
            Map<Long, Map<String, Integer>> translatorCompanyMap = new HashMap<Long, Map<String, Integer>>();
            if (Validator.isNotNull(translatorCompanyList) && translatorCompanyList.size() > 0) {

                PortletSession session = request.getPortletSession();
                String currentPage = request.getParameter(CURRENT_PAGE);
                currentPage = (currentPage == null) ? "1" : currentPage;

                sessiontranslatorCompanyList = translatorCompanyList;
                session.setAttribute("sessiontranslatorCompanyList", sessiontranslatorCompanyList);

                int noOfPages = (int) Math.ceil(translatorCompanyList.size() * 1.0 / 10);
                int currentPageInt = GetterUtil.getInteger(currentPage);

                int startIndex = (currentPageInt - 1) * 10;
                int endIndex = currentPageInt * 10;

                if (noOfPages == currentPageInt) {
                    endIndex = translatorCompanyList.size();
                }

                if (noOfPages > 1) {
                    request.setAttribute(SHOW_TILE_PAGINATION, YES);
                    request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                    request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
                } else {
                    request.setAttribute(SHOW_TILE_PAGINATION, NO);
                }

                for (TranslatorAgency translatorAgency : translatorCompanyList.subList(startIndex, endIndex)) {
                    Map<String, Integer> translatorCompanyNameToStatus = new HashMap<String, Integer>();
                    translatorCompanyNameToStatus.put(translatorAgency.getCompanyName(),
                            translatorAgency.getCompanyStatus());
                    translatorCompanyMap.put(translatorAgency.getTranslatorAgencyId(),
                            translatorCompanyNameToStatus);
                }
                companyVO.setCompanyMap(translatorCompanyMap);
            }
        } catch (STOXXException e) {
            log.error(STOXX_EXCEPTION + e);
        }
        model.addAttribute("transVO", companyVO);
        return SHOW_TRANSLATOR_COMPANY;
    }

    @ResourceMapping("translatorCompanyPaginate")
    public String translatorCompanyPaginate(ResourceRequest request, ResourceResponse response, Model model) {
        log.info("translatorCompanyPaginate >>>>>");
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        List<TranslatorAgency> sessionSalesEntryList = null;
        List<TranslatorAgency> translatorCompanyList = null;
        CompanyVO companyVO = new CompanyVO();

        PortletSession session = request.getPortletSession();

        if (session != null && session.getAttribute("sessiontranslatorCompanyList") != null) {
            sessionSalesEntryList = (List<TranslatorAgency>) session.getAttribute("sessiontranslatorCompanyList");
            translatorCompanyList = sessionSalesEntryList;
        }
        try {
            Map<Long, Map<String, Integer>> translatorCompanyMap = new HashMap<Long, Map<String, Integer>>();
            if (Validator.isNotNull(translatorCompanyList) && translatorCompanyList.size() > 0) {

                String currentPage = request.getParameter(CURRENT_PAGE);
                currentPage = (currentPage == null) ? "1" : currentPage;

                int noOfPages = (int) Math.ceil(translatorCompanyList.size() * 1.0 / 10);
                int currentPageInt = GetterUtil.getInteger(currentPage);

                int startIndex = (currentPageInt - 1) * 10;
                int endIndex = currentPageInt * 10;

                if (noOfPages == currentPageInt) {
                    endIndex = translatorCompanyList.size();
                }

                if (noOfPages > 1) {
                    request.setAttribute(SHOW_TILE_PAGINATION, YES);
                    request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                    request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
                } else {
                    request.setAttribute(SHOW_TILE_PAGINATION, NO);
                }

                for (TranslatorAgency translatorAgency : translatorCompanyList.subList(startIndex, endIndex)) {
                    Map<String, Integer> translatorCompanyNameToStatus = new HashMap<String, Integer>();
                    translatorCompanyNameToStatus.put(translatorAgency.getCompanyName(),
                            translatorAgency.getCompanyStatus());
                    translatorCompanyMap.put(translatorAgency.getTranslatorAgencyId(),
                            translatorCompanyNameToStatus);
                }
                companyVO.setCompanyMap(translatorCompanyMap);
            }
        } catch (Exception e1) {
            log.error(EXCEPTION, e1);
        }
        model.addAttribute("transVO", companyVO);
        return "translatorCompanyPaginate";
    }

    @ResourceMapping("generalUserPaginate")
    public String generalUserPaginate(@ModelAttribute(USER_MODEL) UserModel userModel, ResourceRequest request,
            ResourceResponse response, Model model) {

        List<UserModel> subUserList = null;
        UserListModel userListModel = null;
        UserListModel sessionUserListModel = null;

        String currentPage = request.getParameter(CURRENT_PAGE);

        currentPage = (currentPage == null) ? "1" : currentPage;

        PortletSession session = request.getPortletSession();

        if (session != null && session.getAttribute(SESSION_USER_LIST_MODEL) != null) {
            userListModel = (UserListModel) session.getAttribute(SESSION_USER_LIST_MODEL);

            sessionUserListModel = new UserListModel();
            sessionUserListModel.setUserList(userListModel.getUserList());
            session.setAttribute(SESSION_USER_LIST_MODEL, sessionUserListModel);

        }
        try {
            if (userListModel != null && Validator.isNotNull(userListModel.getUserList())
                    && userListModel.getUserList().size() > 0) {

                int noOfPages = (int) Math.ceil(userListModel.getUserList().size() * 1.0 / 10);

                int currentPageInt = GetterUtil.getInteger(currentPage);

                int startIndex = (currentPageInt - 1) * 10;
                int endIndex = currentPageInt * 10;

                if (noOfPages == currentPageInt) {
                    endIndex = userListModel.getUserList().size();
                }

                if (noOfPages > 1) {
                    request.setAttribute(SHOW_TILE_PAGINATION, YES);
                    request.setAttribute(CURRENT_TILE_PAGE, currentPageInt);
                    request.setAttribute(NO_OF_TILE_PAGES, noOfPages);
                } else {
                    request.setAttribute(SHOW_TILE_PAGINATION, NO);
                }

                log.info("startIndex >>> " + startIndex);
                log.info("endIndex >>> " + endIndex);

                subUserList = userListModel.getUserList().subList(startIndex, endIndex);
                userListModel.setUserList(subUserList);

            } else {
                request.setAttribute(SHOW_TILE_PAGINATION, NO);
            }
        } catch (Exception e1) {
            log.error(EXCEPTION, e1);
        }

        model.addAttribute(GENERAL_MODEL, userListModel);
        return "generalUserPaginate";
    }

    @RenderMapping(params = "action=editUserRole")
    public String editStaffAction(@RequestParam String emailAddress,
            @ModelAttribute(USER_MODEL) UserModel userModel, RenderRequest renderRequest,
            RenderResponse renderResponse, Model model) {
        log.info("Inside render phase of showStaffRoles>>>>");
        ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
        try {

            User user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(), emailAddress);
            long userId = user.getUserId();
            log.info("the user iod is>>>>>>>>>>>>>>" + userId);
            log.info("the group id is" + themeDisplay.getScopeGroupId());
            List<Role> rolelist1 = RoleLocalServiceUtil.getUserRelatedRoles(userId, themeDisplay.getScopeGroupId());
            List<Role> allRoleslist = RoleLocalServiceUtil.getTypeRoles(RoleConstants.TYPE_REGULAR);
            List<String> userRoles = new ArrayList<String>();
            List<String> allRoles = new ArrayList<String>();
            List<String> inheritedRoleNames = new ArrayList<String>();
            long[] userGroupIds = user.getUserGroupIds();
            log.info("the usergroupIds are  >> " + Arrays.toString(userGroupIds));
            for (long groupName : userGroupIds) {
                long groupId = GroupLocalServiceUtil
                        .getGroup(themeDisplay.getCompanyId(), String.valueOf(groupName)).getGroupId();
                List<Role> roles = RoleLocalServiceUtil.getGroupRoles(groupId);
                for (Role role : roles) {
                    inheritedRoleNames.add(role.getName());
                }
            }

            for (Role role : rolelist1) {
                log.info("the role is " + role.getName());
                userRoles.add(role.getName());
            }
            for (Role role : allRoleslist) {
                if (GetterUtil
                        .getBoolean(role.getExpandoBridge().getAttribute(ROLE_CUSTOM_FIELD)) == Boolean.TRUE) {
                    allRoles.add(role.getName());
                }
            }
            log.info("inheritedRoleNames size after is >>>>" + inheritedRoleNames.size());

            List<String> roleNamesToIgnore = ListUtil.fromArray(RoleConstants.SYSTEM_ROLES);
            roleNamesToIgnore.addAll(ListUtil.fromArray(PropsUtil.getArray("stoxx.regular.roles.to.ignore")));
            allRoles.removeAll(roleNamesToIgnore);

            userModel.setUserRoles(userRoles);
            userModel.setAllUserRoles(allRoles);
            userModel.setLiferayUserId(userId);
            userModel.setInheritedRoles(inheritedRoleNames);
        } catch (Exception e) {
            log.error(EXCEPTION, e);
        }
        model.addAttribute("staffRoleModel", userModel);
        return SHOW_STAFF_ROLE;
    }

    @RenderMapping
    public String showHomePage(RenderRequest renderRequest, RenderResponse renderResponse) {
        log.info("Inside render phase>>>>");
        return SHOW_HOME;
    }

    @RenderMapping(params = "redirectedPage=home")
    public String showFirstPage(RenderRequest renderRequest, RenderResponse renderResponse) {
        return SHOW_HOME;
    }

    @ModelAttribute(USER_MODEL)
    public UserModel getCommandObject() {
        return new UserModel();
    }

    @ModelAttribute("companyVO")
    public CompanyVO getCompanyVO() {
        return new CompanyVO();
    }

    @ModelAttribute("userTypeModel")
    public UserTypeModel getUserTypeModel() {
        return new UserTypeModel();
    }

    @ActionMapping(params = "action=suspendCompanyAction")
    public void suspendCompanyAction(@RequestParam long salesEntryId,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        log.info("Inside company suspend  method>>>>");
        try {
            SalesEntry salesEntry = SalesEntryLocalServiceUtil.fetchSalesEntry(salesEntryId);
            salesEntry.setStatus(1);
            SalesEntryLocalServiceUtil.updateSalesEntry(salesEntry);
            List<String> licensedCustomers = null;
            List<String> licensedCustomersUserIds = new ArrayList<String>();
            if (Validator.isNotNull(salesEntry) && Validator.isNotNull(salesEntry.getSalesEntryId())
                    && salesEntry.getSalesEntryId() > 0) {
                licensedCustomers = userProfileService.getLicensedUsersEmailAddress(salesEntryId);
            }
            if (Validator.isNotNull(licensedCustomers) && licensedCustomers.size() > 0) {
                for (String emailAddress : licensedCustomers) {
                    User user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(),
                            emailAddress);
                    if (Validator.isNotNull(user)) {
                        licensedCustomersUserIds.add(String.valueOf(user.getUserId()));
                    }
                }
            }
            log.info("licensedCustomersUserIds size" + licensedCustomersUserIds.size());
            if (Validator.isNotNull(licensedCustomersUserIds) && licensedCustomersUserIds.size() > 0) {
                for (String userID : licensedCustomersUserIds) {
                    log.info(THE_LIFERAY_USER_ID_IS + userID);
                    manageUsersDeligate.suspendUser(userID);
                }
            }

        } catch (SystemException e) {
            log.error(SYSTEM_EXCEPTION, e);
        } catch (STOXXException e) {
            log.error(STOXX_EXCEPTION, e);
        }

    }

    @RenderMapping(params = "action=staffRoles")
    public String updateRoleAssignmentForStaff(@ModelAttribute("staffRoleModel") UserModel userModel,
            RenderRequest renderRequest, RenderResponse renderResponse, Model model) {
        log.info("Inside user updateRoleAssignmentForStaff  method>>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);

        try {
            log.info("the updated roles checked are" + userModel.getRolesAssigned());
            log.info("the User id " + userModel.getLiferayUserId());
            List<Role> rolelist = RoleLocalServiceUtil.getUserRelatedRoles(userModel.getLiferayUserId(),
                    themeDisplay.getScopeGroupId());
            List<String> userRoles = new ArrayList<String>();
            for (Role role : rolelist) {
                userRoles.add(role.getName());
            }
            userModel.setUserRoles(userRoles);
            List<String> assignedUserRoleNames = new ArrayList<String>();
            List<String> assignedUnsetUserRoleNames = new ArrayList<String>();
            List<String> selectedUserRoles = new ArrayList<String>();
            assignedUserRoleNames = assignRoles(userModel, assignedUserRoleNames);
            assignedUnsetUserRoleNames = unsetRoles(userModel, assignedUnsetUserRoleNames);
            addRole(userModel, themeDisplay, assignedUserRoleNames);
            removeRole(userModel, themeDisplay, assignedUnsetUserRoleNames);
            List<Role> allRoleslist = RoleLocalServiceUtil.getTypeRoles(RoleConstants.TYPE_REGULAR);
            List<Role> rolelist1 = RoleLocalServiceUtil.getUserRelatedRoles(userModel.getLiferayUserId(),
                    themeDisplay.getScopeGroupId());
            List<String> userRoles1 = new ArrayList<String>();
            List<String> allRoles = new ArrayList<String>();
            List<String> inheritedRoleNames = new ArrayList<String>();
            log.info("inheritedRoleNames size before is >>>>" + inheritedRoleNames.size());
            for (Role role : rolelist1) {
                userRoles1.add(role.getName());
            }
            for (Role role : allRoleslist) {
                if (GetterUtil
                        .getBoolean(role.getExpandoBridge().getAttribute(ROLE_CUSTOM_FIELD)) == Boolean.TRUE) {
                    allRoles.add(role.getName());
                }
            }
            User user = UserLocalServiceUtil.fetchUser(userModel.getLiferayUserId());
            long[] userGroupIds = user.getUserGroupIds();
            log.info("the usergroupIds are  >> " + Arrays.toString(userGroupIds));
            for (long groupName : userGroupIds) {
                long groupId = GroupLocalServiceUtil
                        .getGroup(themeDisplay.getCompanyId(), String.valueOf(groupName)).getGroupId();
                List<Role> roles = RoleLocalServiceUtil.getGroupRoles(groupId);
                for (Role role : roles) {
                    inheritedRoleNames.add(role.getName());
                }
            }
            log.info("inheritedRoleNames size after is >>>>" + inheritedRoleNames.size());
            List<String> roleNamesToIgnore = ListUtil.fromArray(RoleConstants.SYSTEM_ROLES);
            roleNamesToIgnore.addAll(ListUtil.fromArray(PropsUtil.getArray("stoxx.regular.roles.to.ignore")));
            allRoles.removeAll(roleNamesToIgnore);

            userModel.setUserRoles(userRoles1);
            userModel.setAllUserRoles(allRoles);
            userModel.setLiferayUserId(userModel.getLiferayUserId());
            userModel.setInheritedRoles(inheritedRoleNames);
            selectedUserRoles.addAll(userRoles1);
            selectedUserRoles.addAll(inheritedRoleNames);
            userModel.setSelectedUserRoles(selectedUserRoles);
            SessionMessages.add(renderRequest, "roles-updated");
        } catch (Exception e) {
            log.error(SYSTEM_EXCEPTION, e);
        }
        model.addAttribute("staffRoleModel", userModel);
        return SHOW_STAFF_ROLE;

    }

    /**
     * @param userModel
     * @param themeDisplay
     * @param assignedUnsetUserRoleNames
     * @throws PortalException
     * @throws SystemException
     */
    private void removeRole(UserModel userModel, ThemeDisplay themeDisplay, List<String> assignedUnsetUserRoleNames)
            throws PortalException, SystemException {
        for (String roleName : assignedUnsetUserRoleNames) {
            log.info("the unassigned role names unchecked are" + roleName);
            if (userModel.getUserRoles().contains(roleName)) {
                long[] roleIds = new long[] {
                        RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), roleName).getRoleId() };
                log.info("Unsetting user roles");
                RoleLocalServiceUtil.unsetUserRoles(userModel.getLiferayUserId(), roleIds);
            }
        }
        clearCacheFromServer();
    }

    /**
     * @param userModel
     * @param themeDisplay
     * @param assignedUserRoleNames
     * @throws SystemException
     * @throws PortalException
     */
    private void addRole(UserModel userModel, ThemeDisplay themeDisplay, List<String> assignedUserRoleNames)
            throws SystemException, PortalException {
        for (String roleName : assignedUserRoleNames) {
            log.info("the assigned role names checked are" + roleName);
            if (!(userModel.getUserRoles().contains(roleName))) {
                RoleLocalServiceUtil.addUserRole(userModel.getLiferayUserId(),
                        RoleLocalServiceUtil.getRole(themeDisplay.getCompanyId(), roleName));
            }
        }
        clearCacheFromServer();
    }

    /**
     * @param userModel
     * @param assignedUnsetUserRoleNames
     * @return
     */
    private List<String> unsetRoles(UserModel userModel, List<String> assignedUnsetUserRoleNames) {
        if (Validator.isNotNull(userModel.getDeletedRoles()) && !userModel.getDeletedRoles().isEmpty()) {
            if (userModel.getDeletedRoles().contains(StringPool.COMMA)) {
                assignedUnsetUserRoleNames = Arrays.asList(userModel.getDeletedRoles().split(","));
            } else {
                assignedUnsetUserRoleNames.add(userModel.getDeletedRoles());
            }
        }
        return assignedUnsetUserRoleNames;
    }

    /**
     * @param userModel
     * @param assignedUserRoleNames
     * @return
     */
    private List<String> assignRoles(UserModel userModel, List<String> assignedUserRoleNames) {
        if (Validator.isNotNull(userModel.getAddedRoles()) && !userModel.getAddedRoles().isEmpty()) {
            if (userModel.getAddedRoles().contains(StringPool.COMMA)) {
                assignedUserRoleNames = Arrays.asList(userModel.getAddedRoles().split(","));
            } else {
                assignedUserRoleNames.add(userModel.getAddedRoles());
            }
        }
        return assignedUserRoleNames;
    }

    @ActionMapping(params = "action=deleteCompanyAction")
    public void deleteCompanyAction(@RequestParam long salesEntryId,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside company delete method>>>> ");
        try {
            SalesEntry salesEntry = SalesEntryLocalServiceUtil.fetchSalesEntry(salesEntryId);
            salesEntry.setStatus(3);
            SalesEntryLocalServiceUtil.updateSalesEntry(salesEntry);
        } catch (SystemException e) {
            log.error(SYSTEM_EXCEPTION, e);
        }
    }

    @ActionMapping(params = "action=activateCompanyAction")
    public void activateCompanyAction(@RequestParam long salesEntryId,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside company activate method>>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            SalesEntry salesEntry = SalesEntryLocalServiceUtil.fetchSalesEntry(salesEntryId);
            salesEntry.setStatus(2);
            SalesEntryLocalServiceUtil.updateSalesEntry(salesEntry);
            List<String> licensedCustomers = null;
            List<String> licensedCustomersUserIds = new ArrayList<String>();
            if (Validator.isNotNull(salesEntry) && Validator.isNotNull(salesEntry.getSalesEntryId())
                    && salesEntry.getSalesEntryId() > 0) {
                licensedCustomers = userProfileService.getLicensedUsersEmailAddress(salesEntryId);
            }
            if (Validator.isNotNull(licensedCustomers) && licensedCustomers.size() > 0) {
                for (String emailAddress : licensedCustomers) {
                    User user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(),
                            emailAddress);
                    if (Validator.isNotNull(user)) {
                        licensedCustomersUserIds.add(String.valueOf(user.getUserId()));
                    }
                }
            }
            log.info("licensedCustomersUserIds size" + licensedCustomersUserIds.size());
            if (Validator.isNotNull(licensedCustomersUserIds) && licensedCustomersUserIds.size() > 0) {
                for (String userID : licensedCustomersUserIds) {
                    log.info(THE_LIFERAY_USER_ID_IS + userID);
                    manageUsersDeligate.activateUser(userID);
                }
            }

        } catch (Exception e) {
            log.error(SYSTEM_EXCEPTION, e);
        }
    }

    @ActionMapping(params = "action=deleteTranslatorCompanyAction")
    public void deleteTranslatorCompanyAction(@RequestParam long translatorAgencyId,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside Translator company delete method>>>> ");
        try {
            manageUsersDeligate.deleteTranslatorCompany(translatorAgencyId);
        } catch (Exception e) {
            log.error(SYSTEM_EXCEPTION, e);
        }
    }

    @ActionMapping(params = "action=suspendTranslatorCompanyAction")
    public void suspendTranslatorCompanyAction(@RequestParam long translatorAgencyId,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside Translator company suspend method>>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            TranslatorAgency translatorAgency = new TranslatorAgency();
            translatorAgency.setTranslatorAgencyId(translatorAgencyId);
            translatorAgency.setCompanyStatus(1);
            manageUsersDeligate.suspendTranslatorCompany(translatorAgency);
            List<String> translatorUsers = null;
            List<String> translatorUserIds = new ArrayList<String>();
            if (Validator.isNotNull(translatorAgencyId) && translatorAgencyId > 0) {
                translatorUsers = userProfileService.getTranslatorUsersByTranslatorId(translatorAgencyId);
            }
            if (Validator.isNotNull(translatorUsers) && translatorUsers.size() > 0) {
                for (String emailAddress : translatorUsers) {
                    log.info("emailAddress name" + emailAddress);
                    User user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(),
                            emailAddress);
                    if (Validator.isNotNull(user)) {
                        translatorUserIds.add(String.valueOf(user.getUserId()));
                    }
                }
            }
            log.info("translatorUserIds size" + translatorUserIds.size());
            if (Validator.isNotNull(translatorUserIds) && translatorUserIds.size() > 0) {
                for (String userID : translatorUserIds) {
                    log.info(THE_LIFERAY_USER_ID_IS + userID);
                    manageUsersDeligate.suspendUser(userID);
                }
            }
        } catch (Exception e) {
            log.error(SYSTEM_EXCEPTION, e);
        }
    }

    @ActionMapping(params = "action=activateTranslatorCompanyAction")
    public void activateTranslatorCompanyAction(@RequestParam long translatorAgencyId,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside Translator company activate method>>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            TranslatorAgency translatorAgency = new TranslatorAgency();
            translatorAgency.setTranslatorAgencyId(translatorAgencyId);
            translatorAgency.setCompanyStatus(2);
            manageUsersDeligate.activateTranslatorCompany(translatorAgency);
            List<String> translatorUsers = null;
            List<String> translatorUserIds = new ArrayList<String>();
            if (Validator.isNotNull(translatorAgencyId) && translatorAgencyId > 0) {
                translatorUsers = userProfileService.getTranslatorUsersByTranslatorId(translatorAgencyId);
            }
            if (Validator.isNotNull(translatorUsers) && translatorUsers.size() > 0) {
                for (String emailAddress : translatorUsers) {

                    User user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(),
                            emailAddress);
                    if (Validator.isNotNull(user)) {
                        translatorUserIds.add(String.valueOf(user.getUserId()));
                    }
                }
            }
            log.info("translatorUserIds size" + translatorUserIds.size());
            if (Validator.isNotNull(translatorUserIds) && translatorUserIds.size() > 0) {
                for (String userID : translatorUserIds) {
                    log.info(THE_LIFERAY_USER_ID_IS + userID);
                    manageUsersDeligate.activateUser(userID);
                }
            }

        } catch (Exception e) {
            log.error(SYSTEM_EXCEPTION, e);
        }
    }

    @ActionMapping(params = "action=DELETE")
    public void deleteUserAction(@RequestParam String userID,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside delete method>>>> ");
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        User user = null;
        try {
            if (StringUtils.isNotBlank(userID)) {
                String emailAddress = userID.toLowerCase().trim();
                user = UserLocalServiceUtil.fetchUserByEmailAddress(themeDisplay.getCompanyId(), emailAddress);

                if (Validator.isNotNull(user)) {
                    manageUsersDeligate.deleteUser(String.valueOf(user.getUserId()), themeDisplay.getUser());
                } else {
                    manageUsersDeligate.suspendInStoxxDB(emailAddress);
                }
            }
            if (actionRequest.getParameter(PAGE_NAME) != null
                    && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(STAFF_USERS)) {
                actionResponse.setRenderParameter(REDIRECTED_PAGE, STAFF);
            } else if (actionRequest.getParameter(PAGE_NAME) != null
                    && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(GENERAL_USERS)) {
                actionResponse.setRenderParameter(REDIRECTED_PAGE, GENERAL_USER);
            } else {
                redirectTranslatorCompanyUser(actionRequest, actionResponse);
            }
        } catch (Exception e) {
            log.error("Exception", e);
        }
    }

    @ActionMapping(params = "action=UNLOCK")
    public void unlockUserAccount(@RequestParam String userID,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside unlocking method>>>> ");
        try {
            manageUsersDeligate.unlockUser(userID);
        } catch (STOXXException e) {
            log.error("Unable to unlock account due to:" + e.getExpCode() + ":" + e.getExpMsg() + e);
            SessionErrors.add(actionRequest, "failed");
        }
        if (actionRequest.getParameter(PAGE_NAME) != null
                && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(STAFF_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, STAFF);
        } else if (actionRequest.getParameter(PAGE_NAME) != null
                && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(GENERAL_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, GENERAL_USER);
        } else {
            redirectTranslatorCompanyUser(actionRequest, actionResponse);
        }
    }

    @ActionMapping(params = "action=ACTIVE")
    public void activateUserAction(@RequestParam String userID,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside active method>>>> ");
        try {
            manageUsersDeligate.activateUser(userID);
        } catch (STOXXException e) {
            log.error(e.getMessage(), e);
        }
        if (actionRequest.getParameter(PAGE_NAME) != null
                && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(STAFF_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, STAFF);
        } else if (actionRequest.getParameter(PAGE_NAME) != null
                && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(GENERAL_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, GENERAL_USER);
        } else {
            redirectTranslatorCompanyUser(actionRequest, actionResponse);
        }
    }

    @ActionMapping(params = "action=SUSPEND")
    public void suspendUserAction(@RequestParam String userID,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        try {
            manageUsersDeligate.suspendUser(userID);
        } catch (STOXXException e) {
            log.error(e.getMessage(), e);
        }
        List<String> roleNameList = new ArrayList<String>();
        roleNameList.add(PropsUtil.get("stoxx.user.role.gateway.role"));
        try {
            User suspendeduser = UserLocalServiceUtil.fetchUser(Long.valueOf(userID));
            Set<User> userIds = SendNotificationUtil.getuserByRoleName(themeDisplay.getCompanyId(),
                    themeDisplay.getUserId(), roleNameList);
            if (Validator.isNotNull(suspendeduser)) {
                String message = LanguageUtil.get(themeDisplay.getLocale(), "notification_for_suspend_user1") + " "
                        + suspendeduser.getFullName() + " "
                        + LanguageUtil.get(themeDisplay.getLocale(), "notification_for_suspend_user2");
                sendnotification(themeDisplay, userIds, message);
                if (actionRequest.getParameter(PAGE_NAME) != null
                        && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(STAFF_USERS)) {
                    actionResponse.setRenderParameter(REDIRECTED_PAGE, STAFF);
                } else if (actionRequest.getParameter(PAGE_NAME) != null
                        && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(GENERAL_USERS)) {
                    actionResponse.setRenderParameter(REDIRECTED_PAGE, GENERAL_USER);
                } else {
                    redirectTranslatorCompanyUser(actionRequest, actionResponse);
                }

            }

        } catch (SystemException e) {
            log.error(e.getMessage(), e);
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        } catch (PortletException e) {
            log.error(e.getMessage(), e);
        } catch (PortalException e) {
            log.error(e.getMessage(), e);
        }

    }

    /**
     * @param actionRequest
     * @param actionResponse
     */
    private void redirectTranslatorCompanyUser(ActionRequest actionRequest, ActionResponse actionResponse) {
        if (actionRequest.getParameter(PAGE_NAME) != null
                && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase(TRANS_USERS)) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, TRANSLATOR_USER);
        } else if (actionRequest.getParameter(PAGE_NAME) != null
                && actionRequest.getParameter(PAGE_NAME).equalsIgnoreCase("customerUsers")) {
            actionResponse.setRenderParameter(REDIRECTED_PAGE, COMPANY_USER);
        }
    }

    /**
     * @param themeDisplay
     * @param userIds
     * @param message
     * @throws IOException
     * @throws PortletException
     */
    private void sendnotification(ThemeDisplay themeDisplay, Set<User> userIds, String message)
            throws IOException, PortletException {
        if (Validator.isNotNull(userIds) && userIds.size() > 0) {
            List<User> listUser = new ArrayList<User>(userIds);
            SendNotificationUtil.sendNotification(themeDisplay.getUserId(), listUser, message, "");
        } else {
            log.info("No user Exists with this role");
        }
    }

    @ActionMapping(params = "action=COMPANY")
    public void companyAction(@RequestParam String companyID,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside companyAction method>>>> " + companyID);
        companyName = companyID;
        actionResponse.setRenderParameter(REDIRECTED_PAGE, COMPANY_USER);

    }

    @ActionMapping(params = "action=TRANSLATOR")
    public void translatorAction(@RequestParam String companyID,
            @ModelAttribute(MANAGEUSERSBEAN) ManageUsersBean manageUsersBean, ActionRequest actionRequest,
            ActionResponse actionResponse, Model model) {
        log.info("Inside companyAction method>>>> " + companyID);
        transCompanyName = companyID;
        actionResponse.setRenderParameter(REDIRECTED_PAGE, TRANSLATOR_USER);

    }

    @RenderMapping(params = "redirectedPage=companyUser")
    public String displayCustomerUser(@ModelAttribute(USER_MODEL) UserModel userModel, RenderRequest request,
            RenderResponse response, Model model) {
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        UserListModel userListModel = new UserListModel();
        log.info("Inside customer display>>> " + companyName);
        String searchCategory = request.getParameter(SEARCH_CATEGORY);
        String searchTerm = request.getParameter(SEARCH_TERM);
        try {
            userListModel.setUserList(manageUsersDeligate.getAllCustomer(themeDisplay.getLocale(),
                    themeDisplay.getCompanyId(), companyName, searchCategory, searchTerm));
            userListModel
                    .setSearchCriterionList(ManageUserUtil.loadSearchListForCustomer(themeDisplay.getLocale()));
        } catch (STOXXException e) {
            log.error(e.getMessage(), e);
        }
        request.setAttribute(SEARCH_CATEGORY, searchCategory);
        request.setAttribute(SEARCH_TERM, searchTerm);
        model.addAttribute("customerCompanyUserModel", userListModel);
        return SHOW_CUSTOMER_USER;
    }

    @RenderMapping(params = "redirectedPage=translatorUser")
    public String displayTranslatorUser(@ModelAttribute(USER_MODEL) UserModel userModel, RenderRequest request,
            RenderResponse response, Model model) {
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        UserListModel userListModel = new UserListModel();
        log.info("Inside translator display>>> " + companyName);
        try {
            userListModel.setUserList(
                    manageUsersDeligate.getAllTranslator(themeDisplay.getCompanyId(), transCompanyName));
        } catch (STOXXException e) {
            log.error(e.getMessage(), e);
        }
        model.addAttribute("transCompanyUserModel", userListModel);
        return SHOW_TRANSLATOR_USER;
    }

    private void clearCacheFromServer() {
        log.info("Clearing cache after Role Update");
        // Clearing cache from DB.
        try {
            CacheRegistryUtil.clear();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        // Clearing cache from clustered and single VM.
        try {
            WebCachePoolUtil.clear();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        try {
            MultiVMPoolUtil.clear();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    private static Log log = LogFactoryUtil.getLog(ManageUsersController.class);
}