package com.ese.service;
import com.ese.beans.Document;
import com.ese.model.dao.MenuObjectDAO;
import com.ese.model.dao.RoleAccessDAO;
import com.ese.model.dao.SystemRoleDAO;
import com.ese.model.db.MenuObjectModel;
import com.ese.model.db.RoleAccessModel;
import com.ese.model.db.SystemRoleModel;
import com.ese.model.view.SystemRoleView;
import com.ese.model.view.report.RoleAccessViewReport;
import com.ese.service.security.UserDetail;
import com.ese.transform.RoleAccessTransform;
import com.ese.transform.SystemRoleTransform;
import com.ese.utils.FacesUtil;
import com.ese.utils.Utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
@Component
@Transactional
public class RoleAccessService extends Service{
private static final long serialVersionUID = 4112578634029874480L;
@Resource SystemRoleDAO systemRoleDAO;
@Resource RoleAccessDAO roleAccessDAO;
@Resource SystemRoleTransform systemRoleTransform;
@Resource MenuObjectDAO menuObjectDAO;
@Resource RoleAccessTransform roleAccessTransform;
@Resource private ReportService reportService;
@Value("#{config['report.roleaccess']}")
private String pathPrintRoleAccess;
@Value("#{config['report.logo']}")
private String path;
public List<SystemRoleModel> getSystemRoleByIsValid(){
return systemRoleDAO.findByIsValid();
}
public List<SystemRoleModel> getSystemRoleByKey(String key){
return systemRoleDAO.findByKey(key);
}
public List<RoleAccessModel> getRoleAccessBySystemRoleId(int systemRoleId){
return roleAccessDAO.findBySystemRoleId(systemRoleId);
}
public SystemRoleView getModelToView(SystemRoleModel systemRoleModel){
return systemRoleTransform.transformToView(systemRoleModel);
}
public void saveSystemRole(SystemRoleView view){
SystemRoleModel roleModel = systemRoleTransform.transformToModel(view);
log.debug("roleModel {}", roleModel.toString());
if (!Utils.isZero(view.getId())){
try {
systemRoleDAO.update(roleModel);
} catch (Exception e) {
log.debug("Exception error UpdateSysRole : ", e);
}
} else {
try {
systemRoleDAO.persist(roleModel);
} catch (Exception e) {
log.debug("Exception error SaveSystemRole : ", e);
}
}
}
public void deleteRole(SystemRoleModel model){
model.setIsValid(0);
try {
systemRoleDAO.update(model);
} catch (Exception e) {
log.debug("Exception error deleteRole : ", e);
}
}
public List<MenuObjectModel> getMenuObjectByObjCategory(){
return menuObjectDAO.findByObjCategory();
}
public List<RoleAccessModel> getRoleAccessByMenuObjectIdAndSystemRoleId(int menuObjId, int systemRoleId, String key){
return roleAccessDAO.findByMenuObjectIdAndSystemRoleId(menuObjId, systemRoleId, key);
}
public void deleteRoleAccess(List<Document> modelsList){
for (Document document : modelsList){
try {
roleAccessDAO.delete(roleAccessDAO.findByID(document.getId()));
} catch (Exception e) {
log.debug("Exception error deleteRoleAccess :", e);
}
}
}
public List<MenuObjectModel> getMenuObjAll(){
List<MenuObjectModel> menuObjectModelList = Utils.getEmptyList();
try {
menuObjectModelList = menuObjectDAO.findAll();
} catch (Exception e) {
log.debug("Exception error getMenuAll : ", e);
}
return menuObjectModelList;
}
public List<MenuObjectModel> getMenuObjByIdAndKey(int objId, String key){
return menuObjectDAO.findByObjectId(objId, key);
}
public void saveMenuObjectInRoleAccess(List<Document> modelsList, SystemRoleModel systemRoleModel){
RoleAccessModel roleAccessModel;
List<RoleAccessModel> roleAccessModelList;
for (Document model : modelsList){
try {
roleAccessModel = roleAccessTransform.transformToModel(menuObjectDAO.findByID(model.getId()), systemRoleModel);
roleAccessDAO.persist(roleAccessModel);
roleAccessModelList = roleAccessDAO.findBySystemRoleId(systemRoleModel.getId());
Map<Integer, RoleAccessModel> hashMap = new HashMap();
for(RoleAccessModel roleModel : roleAccessModelList){
int key = roleModel.getMenuObjectModel().getId();
if (!hashMap.containsKey(key)){
hashMap.put(key, roleModel);
} else {
log.debug("Delete : {}", roleModel.getId());
roleAccessDAO.delete(roleModel);
}
}
} catch (Exception e) {
log.debug("Exception error saveMenuObjectInRoleAccess : ", e);
}
}
}
public void onPrintRoleAccess(UserDetail userDetail){
String printTagReportname = Utils.genReportName("_UserAndRoleReport");
HashMap map = new HashMap<String, Object>();
List<RoleAccessViewReport> reportViews;
map.put("userPrint", userDetail.getUserName());
map.put("printDate", Utils.convertCurrentDateToStringDDMMYYYY());
map.put("path", FacesUtil.getFacesContext().getExternalContext().getRealPath(path));
reportViews = roleAccessDAO.genSQLReportUserAndRole();
try {
reportService.exportPDF(pathPrintRoleAccess, map, printTagReportname, reportViews);
} catch (Exception e) {
log.debug("Exception Report : ", e);
}
}
}