package kr.wisestone.owl.service.impl;
|
|
import com.google.common.collect.Lists;
|
import kr.wisestone.owl.constant.MsgConstants;
|
import kr.wisestone.owl.domain.CustomField;
|
import kr.wisestone.owl.domain.CustomFieldValue;
|
import kr.wisestone.owl.domain.enumType.CustomFieldType;
|
import kr.wisestone.owl.exception.OwlRuntimeException;
|
import kr.wisestone.owl.repository.CustomFieldValueRepository;
|
import kr.wisestone.owl.service.CustomFieldValueService;
|
import kr.wisestone.owl.service.IssueCustomFieldValueService;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import java.util.List;
|
|
@Service
|
public class CustomFieldValueServiceImpl extends AbstractServiceImpl<CustomFieldValue, Long, JpaRepository<CustomFieldValue, Long>> implements CustomFieldValueService {
|
|
private static final Logger log = LoggerFactory.getLogger(CustomFieldValueServiceImpl.class);
|
|
@Autowired
|
private CustomFieldValueRepository customFieldValueRepository;
|
|
@Autowired
|
private IssueCustomFieldValueService issueCustomFieldValueService;
|
|
@Override
|
protected JpaRepository<CustomFieldValue, Long> getRepository() {
|
return this.customFieldValueRepository;
|
}
|
|
// 사용자 정의 필드 값을 추가한다.
|
@Override
|
@Transactional
|
public void addCustomFieldValues(CustomField customField, List<String> values, CustomFieldType oldCustomFieldType) {
|
if (oldCustomFieldType != null) {
|
// 텍스트 입력 필드일 때는 이슈에서 사용되고 있는 사용자 정의 필드 값 확인 후 삭제 처리
|
if (customField.getCustomFieldType().equals(CustomFieldType.INPUT)) {
|
// 이전에도 텍스트 필드였다면 사용자 정의 필드 값을 삭제하지 않는다.
|
if (CustomFieldType.INPUT.equals(oldCustomFieldType)) {
|
return;
|
}
|
// 사용자 정의 필드 옵션 값이 변경되었을 때 사용자 정의 필드 값을 사용하는 이슈에서 해당 값이 존재하는지 확인하고 없어졌으면 삭제해준다.
|
this.issueCustomFieldValueService.checkExistIssueCustomFieldValue(customField, values, oldCustomFieldType);
|
return;
|
}
|
|
// 다중선택 필드에서 단일 선택 필드로 변경할 경우 모든 값을 삭제처리한다.
|
if (oldCustomFieldType.equals(CustomFieldType.MULTI_SELECT) && customField.getCustomFieldType().equals(CustomFieldType.SINGLE_SELECT)) {
|
// 이슈에서 저장된 해당 사용자 정의 필드 값을 모두 삭제한다.
|
this.issueCustomFieldValueService.removeIssueCustomFieldValuesByCustomFieldId(customField);
|
}
|
}
|
else {
|
// 텍스트 입력 필드일 때는 바로 종료
|
if (customField.getCustomFieldType().equals(CustomFieldType.INPUT)) {
|
return;
|
}
|
}
|
|
// 사용자 정의 필드 값이 0개 일 경우에는 바로 종료
|
if (values.size() < 1) {
|
throw new OwlRuntimeException(
|
this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_OPTIONS_NOT_VALUE));
|
}
|
|
List<CustomFieldValue> customFieldValues = Lists.newArrayList();
|
List<String> addValues = Lists.newArrayList();
|
List<CustomFieldValue> removeValues = Lists.newArrayList();
|
|
|
// 삭제해야할 대상을 추출한다.
|
for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) {
|
Boolean exist = false;
|
|
for (String value : values) {
|
if (value.equals(customFieldValue.getValue())) {
|
exist = true;
|
break;
|
}
|
}
|
|
// 새로 올라온 값에 기존 값이 없으면 삭제대상
|
if (!exist) {
|
removeValues.add(customFieldValue);
|
}
|
}
|
|
// 추가해야할 값을 추출한다.
|
for (String value : values) {
|
Boolean exist = false;
|
|
for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) {
|
if (customFieldValue.getValue().equals(value)) {
|
exist = true;
|
break;
|
}
|
}
|
|
// 새로 올라온 값이 기존에 없다면 추가 값
|
if (!exist) {
|
addValues.add(value);
|
}
|
}
|
|
// 삭제 대상 삭제
|
if (removeValues.size() > 0) {
|
this.customFieldValueRepository.deleteInBatch(removeValues);
|
}
|
|
// 추가 대상 저장
|
for (String value : addValues) {
|
CustomFieldValue customFieldValue = new CustomFieldValue(customField, value);
|
customFieldValues.add(customFieldValue);
|
}
|
|
this.customFieldValueRepository.saveAll(customFieldValues);
|
// 사용자 정의 필드 옵션 값이 변경되었을 때 사용자 정의 필드 값을 사용하는 이슈에서 해당 값이 존재하는지 확인하고 없어졌으면 삭제해준다.
|
this.issueCustomFieldValueService.checkExistIssueCustomFieldValue(customField, values, oldCustomFieldType);
|
}
|
}
|