OWL ITS + 탐지시스템(인터넷 진흥원)
src/main/java/kr/wisestone/owl/service/impl/IssueCustomFieldValueServiceImpl.java
@@ -1,9 +1,11 @@
package kr.wisestone.owl.service.impl;
import com.google.common.collect.Lists;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.*;
import kr.wisestone.owl.domain.enumType.CustomFieldType;
import kr.wisestone.owl.domain.enumType.IssueHistoryType;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.mapper.IssueCustomFieldValueMapper;
import kr.wisestone.owl.repository.IssueCustomFieldValueRepository;
import kr.wisestone.owl.service.*;
@@ -61,15 +63,17 @@
        for (Map<String, Object> map : issueCustomFields) {
            Map<String, Object> result = new HashMap<>();
            //  customFieldVo 에서 사용자 정의 필드와 이슈 유형에 연결된 사용자 정의 필드 정보를 가져온다.
            this.getCustomFieldAndIssueTypeCustomField(map, issue, result);
            List<String> useValues = MapUtil.getStrings(map, "useValues");
            boolean useCustomField = this.getCustomFieldAndIssueTypeCustomField(map, issue, result);
            if (useCustomField) {
                List<String> useValues = MapUtil.getStrings(map, "useValues");
            if (useValues != null) {
                for (String useValue : useValues) {
                    if (!StringUtils.isEmpty(useValue)) {
                        //  Xss 공격 방어를 위해 script 공백으로 치환
                        IssueCustomFieldValue issueCustomFieldValue = new IssueCustomFieldValue(issue, (CustomField)result.get("customField"), (IssueTypeCustomField)result.get("issueTypeCustomField"), useValue);
                        issueCustomFieldValues.add(issueCustomFieldValue);
                if (useValues != null) {
                    for (String useValue : useValues) {
                        if (!StringUtils.isEmpty(useValue)) {
                            //  Xss 공격 방어를 위해 script 공백으로 치환
                            IssueCustomFieldValue issueCustomFieldValue = new IssueCustomFieldValue(issue, (CustomField) result.get("customField"), (IssueTypeCustomField) result.get("issueTypeCustomField"), useValue);
                            issueCustomFieldValues.add(issueCustomFieldValue);
                        }
                    }
                }
            }
@@ -82,13 +86,19 @@
    //  customFieldVo 에서 사용자 정의 필드와 이슈 유형에 연결된 사용자 정의 필드 정보를 가져온다.
    @Override
    public void getCustomFieldAndIssueTypeCustomField(Map<String, Object> map, Issue issue, Map<String, Object> result) {
    public boolean getCustomFieldAndIssueTypeCustomField(Map<String, Object> map, Issue issue, Map<String, Object> result) {
        Map<String, Object> customFieldMap = (Map<String, Object>) MapUtil.getObject(map, "customFieldVo");
        CustomField customField = this.customFieldService.getCustomField(MapUtil.getLong(customFieldMap, "id"));
        IssueTypeCustomField issueTypeCustomField = this.issueTypeCustomFieldService.findByProjectIdAndIssueTypeIdAndCustomFieldId(issue.getProject().getId(), issue.getIssueType().getId(), customField.getId());
        if (issueTypeCustomField == null) {
            // 설정된 사용자 정의 필드가 없을때
            return false;
        }
        result.put("customField", customField);
        result.put("issueTypeCustomField", issueTypeCustomField);
        return true;
    }
    //  이슈에 연결된 사용자 정의 필드 값을 조회한다.
@@ -333,6 +343,29 @@
        return customFieldSearch;
    }
    @Override
    public Map<String, Object> find(IssueCustomFieldValueCondition issueCustomFieldValueCondition) {
        if (issueCustomFieldValueCondition.getUseValues().size() > 0 || !StringUtils.isEmpty(issueCustomFieldValueCondition.getUseValue())) {
            issueCustomFieldValueCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
            //  사용자 정의 필드 값 검색 시작
            Map<String, Object> result = new HashMap<>();
            switch (CustomFieldType.valueOf(issueCustomFieldValueCondition.getCustomFieldType())) {
                case INPUT:
                    result = this.issueCustomFieldValueMapper.findLikeUseValue(issueCustomFieldValueCondition);
                    break;
                case MULTI_SELECT:
                case SINGLE_SELECT:
                    result = this.issueCustomFieldValueMapper.findByUseValue(issueCustomFieldValueCondition);
                    break;
            }
            return result;
        }
        return null;
    }
    //  이슈에서 저장한 사용자 정의 필드 값을 조회한다.
    @Override
    @Transactional(readOnly = true)