Search in sources :

Example 1 with ModifyProjectDetailRequest

use of com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest in project Qualitis by WeBankFinTech.

the class ProjectBatchServiceImpl method uploadProjectsReal.

private GeneralResponse<?> uploadProjectsReal(InputStream fileInputStream, String fileName, String userName, boolean aomp) throws IOException, UnExpectedRequestException, PermissionDeniedRequestException, RoleNotFoundException {
    String suffixName = fileName.substring(fileName.lastIndexOf('.'));
    if (!suffixName.equals(SUPPORT_EXCEL_SUFFIX_NAME)) {
        throw new UnExpectedRequestException("{&DO_NOT_SUPPORT_SUFFIX_NAME}: [" + suffixName + "]. {&ONLY_SUPPORT} [" + SUPPORT_EXCEL_SUFFIX_NAME + "]", 422);
    }
    if (userName == null) {
        return new GeneralResponse<>("401", "{&PLEASE_LOGIN}", null);
    }
    User user = userDao.findByUsername(userName);
    Long userId = user.getId();
    // Read file and create project
    ExcelProjectListener listener = readExcel(fileInputStream);
    // Check if excel file is empty
    if (listener.getExcelProjectContent().isEmpty() && listener.getExcelRuleContent().isEmpty() && listener.getExcelCustomRuleContent().isEmpty() && listener.getExcelMultiRuleContent().isEmpty() && listener.getTemplateFileExcelContent().isEmpty() && listener.getExcelMetricContent().isEmpty()) {
        throw new UnExpectedRequestException("{&FILE_CAN_NOT_BE_EMPTY_OR_FILE_CAN_NOT_BE_RECOGNIZED}", 422);
    }
    for (ExcelProject excelProject : listener.getExcelProjectContent()) {
        Project project = projectDao.findByNameAndCreateUser(excelProject.getProjectName(), userName);
        if (project != null) {
            if (!aomp) {
                LOGGER.info("hint for user to decide to override or not.");
            }
            // Means update project.
            LOGGER.info("Start to update project[name={}] with upload project file.", project.getName());
            ModifyProjectDetailRequest request = convertExcelProjectToModifyProjectRequest(excelProject, project, userName);
            projectService.modifyProjectDetail(request, false);
        } else {
            // Check excel project arguments is valid or not
            AddProjectRequest request = convertExcelProjectToAddProjectRequest(excelProject);
            projectService.addProject(request, userId);
        }
    }
    for (ExcelRuleMetric excelRuleMetric : listener.getExcelMetricContent()) {
        RuleMetric ruleMetric = ruleMetricDao.findByName(excelRuleMetric.getName());
        if (ruleMetric != null) {
            if (!aomp) {
                LOGGER.info("hint for user to decide to override or not.");
            }
            LOGGER.info("Start to update rule metric[name={}] with upload rule metric file.", ruleMetric.getName());
            modifyRuleMetric(excelRuleMetric, ruleMetric, userName);
        } else {
            addRuleMetric(excelRuleMetric, userName);
        }
    }
    // Create rules according to excel sheet
    Map<String, Map<String, List<ExcelTemplateRuleByProject>>> excelTemplateRulePartitionedByProject = listener.getExcelRuleContent();
    Map<String, Map<String, List<ExcelCustomRuleByProject>>> excelCustomRulePartitionedByProject = listener.getExcelCustomRuleContent();
    Map<String, Map<String, List<ExcelMultiTemplateRuleByProject>>> excelMultiTemplateRulePartitionedByProject = listener.getExcelMultiRuleContent();
    Map<String, Map<String, List<ExcelTemplateFileRuleByProject>>> excelTemplateFileRulePartitionedByProject = listener.getTemplateFileExcelContent();
    Set<String> allProjects = new HashSet<>();
    allProjects.addAll(excelTemplateRulePartitionedByProject.keySet());
    allProjects.addAll(excelCustomRulePartitionedByProject.keySet());
    allProjects.addAll(excelMultiTemplateRulePartitionedByProject.keySet());
    allProjects.addAll(excelTemplateFileRulePartitionedByProject.keySet());
    for (String projectName : allProjects) {
        try {
            Project projectInDb = projectDao.findByNameAndCreateUser(projectName, userName);
            if (projectInDb == null) {
                throw new UnExpectedRequestException("{&PROJECT}: [" + projectName + "] {&DOES_NOT_EXIST}");
            }
            ruleBatchService.getAndSaveRule(excelTemplateRulePartitionedByProject.get(projectName), excelCustomRulePartitionedByProject.get(projectName), excelMultiTemplateRulePartitionedByProject.get(projectName), excelTemplateFileRulePartitionedByProject.get(projectName), projectInDb, userName, aomp);
        } catch (Exception e) {
            throw new UnExpectedRequestException(e.getMessage());
        }
    }
    fileInputStream.close();
    return new GeneralResponse<>("200", "{&SUCCEED_TO_UPLOAD_FILE}", null);
}
Also used : RuleMetric(com.webank.wedatasphere.qualitis.entity.RuleMetric) UnExpectedRequestException(com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException) ExcelMultiTemplateRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelMultiTemplateRuleByProject) RuleMetricDepartmentUser(com.webank.wedatasphere.qualitis.entity.RuleMetricDepartmentUser) User(com.webank.wedatasphere.qualitis.entity.User) AddProjectRequest(com.webank.wedatasphere.qualitis.project.request.AddProjectRequest) ExcelCustomRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelCustomRuleByProject) ModifyProjectDetailRequest(com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest) PermissionDeniedRequestException(com.webank.wedatasphere.qualitis.exception.PermissionDeniedRequestException) ZipException(net.lingala.zip4j.exception.ZipException) RoleNotFoundException(javax.management.relation.RoleNotFoundException) UnExpectedRequestException(com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException) IOException(java.io.IOException) WriteExcelException(com.webank.wedatasphere.qualitis.rule.exception.WriteExcelException) GeneralResponse(com.webank.wedatasphere.qualitis.response.GeneralResponse) ExcelMultiTemplateRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelMultiTemplateRuleByProject) ExcelCustomRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelCustomRuleByProject) ExcelTemplateRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelTemplateRuleByProject) Project(com.webank.wedatasphere.qualitis.project.entity.Project) ExcelProjectListener(com.webank.wedatasphere.qualitis.project.excel.ExcelProjectListener) ExcelTemplateRuleByProject(com.webank.wedatasphere.qualitis.project.excel.ExcelTemplateRuleByProject)

Example 2 with ModifyProjectDetailRequest

use of com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest in project Qualitis by WeBankFinTech.

the class ProjectBatchServiceImpl method convertExcelProjectToModifyProjectRequest.

private ModifyProjectDetailRequest convertExcelProjectToModifyProjectRequest(ExcelProject excelProject, Project project, String userName) {
    // Construct ModifyProjectDetailRequest
    ModifyProjectDetailRequest request = new ModifyProjectDetailRequest();
    request.setUsername(userName);
    request.setProjectId(project.getId());
    request.setCnName(excelProject.getProjectChName());
    request.setProjectName(excelProject.getProjectName());
    String projectLabels = excelProject.getProjectLabels();
    request.setDescription(excelProject.getProjectDescription());
    if (projectLabels != null && projectLabels.length() > 0) {
        String[] labels = projectLabels.split(" ");
        Set<String> labelSet = new HashSet<>();
        for (String label : labels) {
            labelSet.add(label);
        }
        request.setProjectLabelStrs(labelSet);
    }
    return request;
}
Also used : ModifyProjectDetailRequest(com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest)

Example 3 with ModifyProjectDetailRequest

use of com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest in project Qualitis by WeBankFinTech.

the class ProjectServiceImpl method modifyProjectDetail.

@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { RuntimeException.class, UnExpectedRequestException.class })
public GeneralResponse<?> modifyProjectDetail(ModifyProjectDetailRequest request, boolean workflow) throws UnExpectedRequestException, PermissionDeniedRequestException, RoleNotFoundException {
    // Check Arguments
    ModifyProjectDetailRequest.checkRequest(request);
    // Check existence of project
    Project projectInDb = projectDao.findById(request.getProjectId());
    if (projectInDb == null) {
        throw new UnExpectedRequestException("project id {&DOES_NOT_EXIST}");
    }
    LOGGER.info("Succeed to get project. project: {}", projectInDb);
    // Get userId
    Long userId = HttpUtils.getUserId(httpServletRequest);
    User user;
    if (userId == null) {
        user = userDao.findByUsername(request.getUsername());
        if (user == null) {
            throw new UnExpectedRequestException(String.format("{&FAILED_TO_FIND_USER} %s", request.getUsername()));
        }
    } else {
        user = userDao.findById(userId);
        if (user == null) {
            throw new UnExpectedRequestException(String.format("{&FAILED_TO_FIND_USER} %s", userId));
        }
    }
    // Check if user has permission modifying project
    List<Integer> permissions = new ArrayList<>();
    permissions.add(ProjectUserPermissionEnum.BUSSMAN.getCode());
    permissions.add(ProjectUserPermissionEnum.DEVELOPER.getCode());
    checkProjectPermission(projectInDb, user.getUserName(), permissions);
    // Check project name
    Project otherProject = projectDao.findByNameAndCreateUser(request.getProjectName(), user.getUserName());
    if (otherProject != null && !otherProject.getId().equals(projectInDb.getId())) {
        throw new UnExpectedRequestException(String.format("Project name: %s already exist", request.getProjectName()));
    }
    // Save project.
    String oldLabels = "";
    String newLabels = "";
    if (CollectionUtils.isNotEmpty(projectInDb.getProjectLabels())) {
        oldLabels = projectInDb.getProjectLabels().stream().map(ProjectLabel::getLabelName).collect(Collectors.joining());
    }
    if (CollectionUtils.isNotEmpty(request.getProjectLabelStrs())) {
        newLabels = request.getProjectLabelStrs().stream().collect(Collectors.joining());
    }
    if (!oldLabels.equals(newLabels)) {
        projectEventService.recordModifyProject(projectInDb, user.getUserName(), "Project labels", oldLabels, newLabels, EventTypeEnum.MODIFY_PROJECT.getCode());
    }
    if (StringUtils.isNotEmpty(projectInDb.getCnName()) && !projectInDb.getCnName().equals(request.getCnName())) {
        projectEventService.recordModifyProject(projectInDb, user.getUserName(), "Chinese Name", projectInDb.getCnName(), request.getCnName(), EventTypeEnum.MODIFY_PROJECT.getCode());
    }
    if (!projectInDb.getName().equals(request.getProjectName())) {
        projectEventService.recordModifyProject(projectInDb, user.getUserName(), "English Name", projectInDb.getName(), request.getProjectName(), EventTypeEnum.MODIFY_PROJECT.getCode());
    }
    if (!projectInDb.getDescription().equals(request.getDescription())) {
        projectEventService.recordModifyProject(projectInDb, user.getUserName(), "Describe", projectInDb.getDescription(), request.getDescription(), EventTypeEnum.MODIFY_PROJECT.getCode());
    }
    projectInDb.setCnName(request.getCnName());
    projectInDb.setName(request.getProjectName());
    projectInDb.setDescription(request.getDescription());
    // Delete old projectLabel.
    projectLabelDao.deleteByProject(projectInDb);
    LOGGER.info("Succeed to delete all project_label, project_id: {}", request.getProjectId());
    // Create new project labels.
    addProjectLabels(request.getProjectLabelStrs(), projectInDb);
    // Record modify user
    projectInDb.setModifyUser(user.getUserName());
    projectInDb.setModifyTime(ExecutionManagerImpl.PRINT_TIME_FORMAT.format(new Date()));
    Project savedProject = projectDao.saveProject(projectInDb);
    LOGGER.info("Succeed to modify project. project: {}", savedProject);
    if (workflow) {
        // Clear old project user.
        List<ProjectUser> projectUsers = projectUserDao.findByProject(projectInDb);
        Role role = roleDao.findByRoleName(ADMIN);
        List<String> admins = userRoleDao.findByRole(role).stream().map(UserRole::getUser).map(User::getUserName).collect(Collectors.toList());
        projectUsers = projectUsers.stream().filter(projectUser -> !admins.contains(projectUser.getUserName())).filter(projectUser -> !projectUser.getUserName().equals(request.getUsername())).collect(Collectors.toList());
        for (ProjectUser projectUser : projectUsers) {
            projectUserDao.deleteByProjectAndUserName(projectInDb, projectUser.getUserName());
        }
    }
    authorizeUsers(projectInDb, user, request.getAuthorizeProjectUserRequests(), true);
    return new GeneralResponse<>("200", "{&MODIFY_PROJECT_DETAIL_SUCCESSFULLY}", new ProjectDetailResponse(savedProject, null));
}
Also used : Role(com.webank.wedatasphere.qualitis.entity.Role) ProjectEventDao(com.webank.wedatasphere.qualitis.project.dao.ProjectEventDao) ProjectEvent(com.webank.wedatasphere.qualitis.project.entity.ProjectEvent) LoggerFactory(org.slf4j.LoggerFactory) ProjectLabel(com.webank.wedatasphere.qualitis.project.entity.ProjectLabel) Autowired(org.springframework.beans.factory.annotation.Autowired) ProjectUserDao(com.webank.wedatasphere.qualitis.project.dao.ProjectUserDao) StringUtils(org.apache.commons.lang3.StringUtils) PermissionDeniedRequestException(com.webank.wedatasphere.qualitis.exception.PermissionDeniedRequestException) DeleteFileRuleRequest(com.webank.wedatasphere.qualitis.rule.request.DeleteFileRuleRequest) EventTypeEnum(com.webank.wedatasphere.qualitis.project.constant.EventTypeEnum) GeneralResponse(com.webank.wedatasphere.qualitis.response.GeneralResponse) DeleteRuleRequest(com.webank.wedatasphere.qualitis.rule.request.DeleteRuleRequest) HttpUtils(com.webank.wedatasphere.qualitis.util.HttpUtils) AddProjectRequest(com.webank.wedatasphere.qualitis.project.request.AddProjectRequest) GetAllResponse(com.webank.wedatasphere.qualitis.response.GetAllResponse) ProjectService(com.webank.wedatasphere.qualitis.project.service.ProjectService) ProjectEventService(com.webank.wedatasphere.qualitis.project.service.ProjectEventService) ProjectDetailResponse(com.webank.wedatasphere.qualitis.project.response.ProjectDetailResponse) Context(javax.ws.rs.core.Context) ProjectUserPermissionEnum(com.webank.wedatasphere.qualitis.project.constant.ProjectUserPermissionEnum) PageRequest(com.webank.wedatasphere.qualitis.request.PageRequest) CustomRuleService(com.webank.wedatasphere.qualitis.rule.service.CustomRuleService) Collectors(java.util.stream.Collectors) ExecutionManagerImpl(com.webank.wedatasphere.qualitis.submitter.impl.ExecutionManagerImpl) RuleService(com.webank.wedatasphere.qualitis.rule.service.RuleService) RoleNotFoundException(javax.management.relation.RoleNotFoundException) RoleDao(com.webank.wedatasphere.qualitis.dao.RoleDao) UnExpectedRequestException(com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException) ProjectEventResponse(com.webank.wedatasphere.qualitis.project.response.ProjectEventResponse) java.util(java.util) Project(com.webank.wedatasphere.qualitis.project.entity.Project) UserRole(com.webank.wedatasphere.qualitis.entity.UserRole) UserRoleDao(com.webank.wedatasphere.qualitis.dao.UserRoleDao) Rule(com.webank.wedatasphere.qualitis.rule.entity.Rule) ProjectDao(com.webank.wedatasphere.qualitis.project.dao.ProjectDao) HttpServletRequest(javax.servlet.http.HttpServletRequest) User(com.webank.wedatasphere.qualitis.entity.User) CollectionUtils(org.apache.commons.collections.CollectionUtils) Propagation(org.springframework.transaction.annotation.Propagation) Service(org.springframework.stereotype.Service) ProjectLabelDao(com.webank.wedatasphere.qualitis.project.dao.ProjectLabelDao) AuthorizeProjectUserRequest(com.webank.wedatasphere.qualitis.project.request.AuthorizeProjectUserRequest) ModifyProjectDetailRequest(com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest) DeleteProjectRequest(com.webank.wedatasphere.qualitis.project.request.DeleteProjectRequest) Logger(org.slf4j.Logger) ProjectTypeEnum(com.webank.wedatasphere.qualitis.project.constant.ProjectTypeEnum) ProjectUser(com.webank.wedatasphere.qualitis.project.entity.ProjectUser) RuleTypeEnum(com.webank.wedatasphere.qualitis.rule.constant.RuleTypeEnum) FileRuleService(com.webank.wedatasphere.qualitis.rule.service.FileRuleService) ProjectResponse(com.webank.wedatasphere.qualitis.project.response.ProjectResponse) DeleteMultiSourceRequest(com.webank.wedatasphere.qualitis.rule.request.multi.DeleteMultiSourceRequest) MultiSourceRuleService(com.webank.wedatasphere.qualitis.rule.service.MultiSourceRuleService) DeleteCustomRuleRequest(com.webank.wedatasphere.qualitis.rule.request.DeleteCustomRuleRequest) RuleDao(com.webank.wedatasphere.qualitis.rule.dao.RuleDao) ProjectUserService(com.webank.wedatasphere.qualitis.project.service.ProjectUserService) UserDao(com.webank.wedatasphere.qualitis.dao.UserDao) Transactional(org.springframework.transaction.annotation.Transactional) UnExpectedRequestException(com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException) ProjectUser(com.webank.wedatasphere.qualitis.project.entity.ProjectUser) User(com.webank.wedatasphere.qualitis.entity.User) ProjectUser(com.webank.wedatasphere.qualitis.project.entity.ProjectUser) ProjectLabel(com.webank.wedatasphere.qualitis.project.entity.ProjectLabel) Role(com.webank.wedatasphere.qualitis.entity.Role) UserRole(com.webank.wedatasphere.qualitis.entity.UserRole) GeneralResponse(com.webank.wedatasphere.qualitis.response.GeneralResponse) Project(com.webank.wedatasphere.qualitis.project.entity.Project) UserRole(com.webank.wedatasphere.qualitis.entity.UserRole) ProjectDetailResponse(com.webank.wedatasphere.qualitis.project.response.ProjectDetailResponse) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

ModifyProjectDetailRequest (com.webank.wedatasphere.qualitis.project.request.ModifyProjectDetailRequest)3 User (com.webank.wedatasphere.qualitis.entity.User)2 PermissionDeniedRequestException (com.webank.wedatasphere.qualitis.exception.PermissionDeniedRequestException)2 UnExpectedRequestException (com.webank.wedatasphere.qualitis.exception.UnExpectedRequestException)2 Project (com.webank.wedatasphere.qualitis.project.entity.Project)2 AddProjectRequest (com.webank.wedatasphere.qualitis.project.request.AddProjectRequest)2 GeneralResponse (com.webank.wedatasphere.qualitis.response.GeneralResponse)2 RoleDao (com.webank.wedatasphere.qualitis.dao.RoleDao)1 UserDao (com.webank.wedatasphere.qualitis.dao.UserDao)1 UserRoleDao (com.webank.wedatasphere.qualitis.dao.UserRoleDao)1 Role (com.webank.wedatasphere.qualitis.entity.Role)1 RuleMetric (com.webank.wedatasphere.qualitis.entity.RuleMetric)1 RuleMetricDepartmentUser (com.webank.wedatasphere.qualitis.entity.RuleMetricDepartmentUser)1 UserRole (com.webank.wedatasphere.qualitis.entity.UserRole)1 EventTypeEnum (com.webank.wedatasphere.qualitis.project.constant.EventTypeEnum)1 ProjectTypeEnum (com.webank.wedatasphere.qualitis.project.constant.ProjectTypeEnum)1 ProjectUserPermissionEnum (com.webank.wedatasphere.qualitis.project.constant.ProjectUserPermissionEnum)1 ProjectDao (com.webank.wedatasphere.qualitis.project.dao.ProjectDao)1 ProjectEventDao (com.webank.wedatasphere.qualitis.project.dao.ProjectEventDao)1 ProjectLabelDao (com.webank.wedatasphere.qualitis.project.dao.ProjectLabelDao)1