RED-3246: As an admin I want to clone a dossier template
This commit is contained in:
parent
ba37f0eed1
commit
99bfa5510b
@ -0,0 +1,237 @@
|
|||||||
|
package com.iqser.red.service.persistence.management.v1.processor.service;
|
||||||
|
|
||||||
|
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
|
||||||
|
import com.iqser.red.storage.commons.service.StorageService;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class DossierTemplateCloneService {
|
||||||
|
|
||||||
|
private final DossierTemplateRepository dossierTemplateRepository;
|
||||||
|
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
||||||
|
private final RulesPersistenceService rulesPersistenceService;
|
||||||
|
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||||
|
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
|
||||||
|
private final DictionaryPersistenceService dictionaryPersistenceService;
|
||||||
|
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
|
||||||
|
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
|
||||||
|
private final WatermarkService watermarkService;
|
||||||
|
private final ColorsService colorsService;
|
||||||
|
private final StorageService storageService;
|
||||||
|
|
||||||
|
|
||||||
|
public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
|
||||||
|
|
||||||
|
dossierTemplatePersistenceService.validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate);
|
||||||
|
|
||||||
|
DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity();
|
||||||
|
|
||||||
|
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
|
||||||
|
|
||||||
|
OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
|
||||||
|
clonedDossierTemplate.setId(UUID.randomUUID().toString());
|
||||||
|
clonedDossierTemplate.setName(nameOfClonedDossierTemplate);
|
||||||
|
clonedDossierTemplate.setDescription(dossierTemplate.getDescription());
|
||||||
|
clonedDossierTemplate.setDateAdded(now);
|
||||||
|
clonedDossierTemplate.setDateModified(now);
|
||||||
|
clonedDossierTemplate.setCreatedBy(cloningUserId);
|
||||||
|
clonedDossierTemplate.setModifiedBy(cloningUserId);
|
||||||
|
clonedDossierTemplate.setValidFrom(dossierTemplate.getValidFrom());
|
||||||
|
clonedDossierTemplate.setValidTo(dossierTemplate.getValidTo());
|
||||||
|
clonedDossierTemplate.setSoftDeleteTime(dossierTemplate.getSoftDeleteTime());
|
||||||
|
clonedDossierTemplate.setDownloadFileTypes(dossierTemplate.getDownloadFileTypes());
|
||||||
|
|
||||||
|
//set rules
|
||||||
|
cloneRules(dossierTemplate.getId(), clonedDossierTemplate.getId());
|
||||||
|
//set legal basis
|
||||||
|
cloneLegalBasisMapping(dossierTemplate.getId(), clonedDossierTemplate.getId());
|
||||||
|
|
||||||
|
clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(clonedDossierTemplate)
|
||||||
|
.name()));
|
||||||
|
dossierTemplateRepository.save(clonedDossierTemplate);
|
||||||
|
|
||||||
|
//set dictionaries
|
||||||
|
clonedDossierTemplate.setDossierTypes(cloneDictionaries(dossierTemplate.getId(), clonedDossierTemplate.getId()));
|
||||||
|
|
||||||
|
//set dossier attributes
|
||||||
|
cloneDossierAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId());
|
||||||
|
|
||||||
|
//set file attributes
|
||||||
|
cloneFileAttributesGeneralConfig(dossierTemplate.getId(), clonedDossierTemplate.getId());
|
||||||
|
|
||||||
|
clonedDossierTemplate.setFileAttributeConfigs(cloneFileAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId()));
|
||||||
|
|
||||||
|
//set report templates
|
||||||
|
clonedDossierTemplate.setReportTemplates(cloneReportTemplates(dossierTemplate, clonedDossierTemplate.getId()));
|
||||||
|
|
||||||
|
//set watermarks
|
||||||
|
cloneWatermark(dossierTemplate.getId(), clonedDossierTemplate.getId());
|
||||||
|
|
||||||
|
//set colors
|
||||||
|
cloneColors(dossierTemplate.getId(), clonedDossierTemplate.getId());
|
||||||
|
|
||||||
|
dossierTemplateRepository.save(clonedDossierTemplate);
|
||||||
|
|
||||||
|
}, () -> {
|
||||||
|
throw new NotFoundException(String.format(dossierTemplatePersistenceService.DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId));
|
||||||
|
});
|
||||||
|
return clonedDossierTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId).getValue(), clonedDossierTemplateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void cloneLegalBasisMapping(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
legalBasisMappingPersistenceService.setLegalBasisMapping(clonedDossierTemplateId, convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId), LegalBasis.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<TypeEntity> cloneDictionaries(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
List<TypeEntity> clonedTypes = new ArrayList<>();
|
||||||
|
var types = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId);
|
||||||
|
for (TypeEntity t : types) {
|
||||||
|
TypeEntity te = dictionaryPersistenceService.addType(t.getType(), clonedDossierTemplateId, t.getHexColor(), t.getRecommendationHexColor(), t.getRank(), t.isHint(), t.isCaseInsensitive(), t.isRecommendation(), t.getDescription(), t.isAddToDictionaryAction(), t.getLabel(), null);
|
||||||
|
te.setDossierTemplateId(clonedDossierTemplateId);
|
||||||
|
clonedTypes.add(te);
|
||||||
|
}
|
||||||
|
return clonedTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void cloneDossierAttributesConfig(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
List<DossierAttributeConfigEntity> dacList = new ArrayList<>();
|
||||||
|
var dossierAttributesConfig = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId);
|
||||||
|
dossierAttributesConfig.forEach(dossierAttributeConfigEntity -> {
|
||||||
|
var dac = DossierAttributeConfigEntity.builder()
|
||||||
|
.label(dossierAttributeConfigEntity.getLabel())
|
||||||
|
.editable(dossierAttributeConfigEntity.isEditable())
|
||||||
|
.placeholder(dossierAttributeConfigEntity.getPlaceholder())
|
||||||
|
.type(dossierAttributeConfigEntity.getType())
|
||||||
|
.build();
|
||||||
|
dacList.add(dac);
|
||||||
|
});
|
||||||
|
dossierAttributeConfigPersistenceService.setDossierAttributesConfig(clonedDossierTemplateId, dacList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void cloneFileAttributesGeneralConfig(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
var fileAttributesGeneralConfig = fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplateId);
|
||||||
|
var fagc = FileAttributesGeneralConfigurationEntity.builder()
|
||||||
|
.dossierTemplateId(clonedDossierTemplateId)
|
||||||
|
.delimiter(fileAttributesGeneralConfig.getDelimiter())
|
||||||
|
.filenameMappingColumnHeaderName(fileAttributesGeneralConfig.getFilenameMappingColumnHeaderName())
|
||||||
|
.build();
|
||||||
|
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(clonedDossierTemplateId, fagc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<FileAttributeConfigEntity> cloneFileAttributesConfig(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
List<FileAttributeConfigEntity> facList = new ArrayList<>();
|
||||||
|
var fileAttributesConfig = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId);
|
||||||
|
fileAttributesConfig.forEach(fileAttributeConfigEntity -> {
|
||||||
|
var fac = FileAttributeConfigEntity.builder()
|
||||||
|
.csvColumnHeader(fileAttributeConfigEntity.getCsvColumnHeader())
|
||||||
|
.label(fileAttributeConfigEntity.getLabel())
|
||||||
|
.primaryAttribute(fileAttributeConfigEntity.isPrimaryAttribute())
|
||||||
|
.editable(fileAttributeConfigEntity.isEditable())
|
||||||
|
.filterable(fileAttributeConfigEntity.isFilterable())
|
||||||
|
.displayedInFileList(fileAttributeConfigEntity.isDisplayedInFileList())
|
||||||
|
.placeholder(fileAttributeConfigEntity.getPlaceholder())
|
||||||
|
.type(fileAttributeConfigEntity.getType())
|
||||||
|
.build();
|
||||||
|
facList.add(fac);
|
||||||
|
});
|
||||||
|
fileAttributeConfigPersistenceService.setFileAttributesConfig(clonedDossierTemplateId, facList);
|
||||||
|
|
||||||
|
return fileAttributeConfigPersistenceService.getFileAttributes(clonedDossierTemplateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<ReportTemplateEntity> cloneReportTemplates(DossierTemplateEntity dossierTemplate, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
var reportTemplates = dossierTemplate.getReportTemplates();
|
||||||
|
for (ReportTemplateEntity rte : reportTemplates) {
|
||||||
|
var storedReportTemplate = storageService.getObject(rte.getStorageId());
|
||||||
|
String storageId = clonedDossierTemplateId + "/" + rte.getFileName();
|
||||||
|
String templateId = UUID.randomUUID().toString();
|
||||||
|
try {
|
||||||
|
storageService.storeObject(storageId, storedReportTemplate.getInputStream());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ConflictException("Could not clone report templates of dossier template.");
|
||||||
|
}
|
||||||
|
reportTemplatePersistenceService.insert(clonedDossierTemplateId, templateId, storageId, rte.getFileName(), rte.isActiveByDefault(), rte.isMultiFileReport());
|
||||||
|
}
|
||||||
|
return reportTemplatePersistenceService.findByDossierTemplateId(clonedDossierTemplateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void cloneWatermark(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
var watermark = watermarkService.getWatermark(dossierTemplateId);
|
||||||
|
WatermarkEntity we = WatermarkEntity.builder()
|
||||||
|
.dossierTemplateId(clonedDossierTemplateId)
|
||||||
|
.text(watermark.getText())
|
||||||
|
.hexColor(watermark.getHexColor())
|
||||||
|
.opacity(watermark.getOpacity())
|
||||||
|
.fontType(watermark.getFontType())
|
||||||
|
.fontSize(watermark.getFontSize())
|
||||||
|
.orientation(watermark.getOrientation())
|
||||||
|
.build();
|
||||||
|
watermarkService.saveWatermark(clonedDossierTemplateId, we);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void cloneColors(String dossierTemplateId, String clonedDossierTemplateId) {
|
||||||
|
|
||||||
|
var colors = colorsService.getColors(dossierTemplateId);
|
||||||
|
var clonedColors = new ColorsEntity();
|
||||||
|
BeanUtils.copyProperties(colors, clonedColors);
|
||||||
|
clonedColors.setDossierTemplateId(clonedDossierTemplateId);
|
||||||
|
colorsService.saveColors(clonedColors);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,11 +1,7 @@
|
|||||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||||
|
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -15,25 +11,13 @@ import javax.transaction.Transactional;
|
|||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource;
|
|
||||||
import com.iqser.red.storage.commons.service.StorageService;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
@ -46,13 +30,6 @@ public class DossierTemplatePersistenceService {
|
|||||||
private final DossierTemplateRepository dossierTemplateRepository;
|
private final DossierTemplateRepository dossierTemplateRepository;
|
||||||
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
||||||
private final RulesPersistenceService rulesPersistenceService;
|
private final RulesPersistenceService rulesPersistenceService;
|
||||||
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
|
|
||||||
private final DictionaryPersistenceService dictionaryPersistenceService;
|
|
||||||
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
|
|
||||||
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
|
|
||||||
private final WatermarkService watermarkService;
|
|
||||||
private final ColorsService colorsService;
|
|
||||||
private final StorageService storageService;
|
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@ -93,7 +70,7 @@ public class DossierTemplatePersistenceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) {
|
public DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) {
|
||||||
|
|
||||||
var legalBasis = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplate.getId());
|
var legalBasis = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplate.getId());
|
||||||
if (legalBasis == null || legalBasis.isEmpty()) {
|
if (legalBasis == null || legalBasis.isEmpty()) {
|
||||||
@ -164,128 +141,4 @@ public class DossierTemplatePersistenceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
|
|
||||||
|
|
||||||
validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate);
|
|
||||||
|
|
||||||
DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity();
|
|
||||||
|
|
||||||
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
|
|
||||||
|
|
||||||
OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
|
|
||||||
clonedDossierTemplate.setId(UUID.randomUUID().toString());
|
|
||||||
clonedDossierTemplate.setName(nameOfClonedDossierTemplate);
|
|
||||||
clonedDossierTemplate.setDescription(dossierTemplate.getDescription());
|
|
||||||
clonedDossierTemplate.setDateAdded(now);
|
|
||||||
clonedDossierTemplate.setDateModified(now);
|
|
||||||
clonedDossierTemplate.setCreatedBy(cloningUserId);
|
|
||||||
clonedDossierTemplate.setModifiedBy(cloningUserId);
|
|
||||||
clonedDossierTemplate.setValidFrom(dossierTemplate.getValidFrom());
|
|
||||||
clonedDossierTemplate.setValidTo(dossierTemplate.getValidTo());
|
|
||||||
clonedDossierTemplate.setSoftDeleteTime(dossierTemplate.getSoftDeleteTime());
|
|
||||||
clonedDossierTemplate.setDownloadFileTypes(dossierTemplate.getDownloadFileTypes());
|
|
||||||
|
|
||||||
//set rules
|
|
||||||
rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplate.getId()).getValue(), clonedDossierTemplate.getId());
|
|
||||||
//set legal basis
|
|
||||||
legalBasisMappingPersistenceService.setLegalBasisMapping(clonedDossierTemplate.getId(), convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplate.getId()), LegalBasis.class));
|
|
||||||
|
|
||||||
clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(computeDossierTemplateStatus(clonedDossierTemplate).name()));
|
|
||||||
|
|
||||||
dossierTemplateRepository.save(clonedDossierTemplate);
|
|
||||||
|
|
||||||
//set dictionaries
|
|
||||||
List<TypeEntity> clonedTypes = new ArrayList<>();
|
|
||||||
var types = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplate.getId());
|
|
||||||
for (TypeEntity t : types) {
|
|
||||||
TypeEntity te = dictionaryPersistenceService.addType(t.getType(), clonedDossierTemplate.getId(), t.getHexColor(), t.getRecommendationHexColor(), t.getRank(), t.isHint(), t.isCaseInsensitive(), t.isRecommendation(), t.getDescription(), t.isAddToDictionaryAction(), t.getLabel(), null);
|
|
||||||
te.setDossierTemplateId(clonedDossierTemplate.getId());
|
|
||||||
clonedTypes.add(te);
|
|
||||||
}
|
|
||||||
clonedDossierTemplate.setDossierTypes(clonedTypes);
|
|
||||||
|
|
||||||
//set dossier attributes
|
|
||||||
var dossierAttributesConfig = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplate.getId());
|
|
||||||
List<DossierAttributeConfigEntity> dacList = new ArrayList<>();
|
|
||||||
dossierAttributesConfig.forEach(dossierAttributeConfigEntity -> {
|
|
||||||
var dac = DossierAttributeConfigEntity.builder()
|
|
||||||
.label(dossierAttributeConfigEntity.getLabel())
|
|
||||||
.editable(dossierAttributeConfigEntity.isEditable())
|
|
||||||
.placeholder(dossierAttributeConfigEntity.getPlaceholder())
|
|
||||||
.type(dossierAttributeConfigEntity.getType())
|
|
||||||
.build();
|
|
||||||
dacList.add(dac);
|
|
||||||
});
|
|
||||||
dossierAttributeConfigPersistenceService.setDossierAttributesConfig(clonedDossierTemplate.getId(), dacList);
|
|
||||||
|
|
||||||
//set file attributes
|
|
||||||
var fileAttributesGeneralConfig = fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplate.getId());
|
|
||||||
var fagc = FileAttributesGeneralConfigurationEntity.builder()
|
|
||||||
.dossierTemplateId(clonedDossierTemplate.getId())
|
|
||||||
.delimiter(fileAttributesGeneralConfig.getDelimiter())
|
|
||||||
.filenameMappingColumnHeaderName(fileAttributesGeneralConfig.getFilenameMappingColumnHeaderName())
|
|
||||||
.build();
|
|
||||||
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(clonedDossierTemplate.getId(), fagc);
|
|
||||||
|
|
||||||
var fileAttributesConfig = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplate.getId());
|
|
||||||
List<FileAttributeConfigEntity> facList = new ArrayList<>();
|
|
||||||
fileAttributesConfig.forEach(fileAttributeConfigEntity -> {
|
|
||||||
var fac = FileAttributeConfigEntity.builder()
|
|
||||||
.csvColumnHeader(fileAttributeConfigEntity.getCsvColumnHeader())
|
|
||||||
.label(fileAttributeConfigEntity.getLabel())
|
|
||||||
.primaryAttribute(fileAttributeConfigEntity.isPrimaryAttribute())
|
|
||||||
.editable(fileAttributeConfigEntity.isEditable())
|
|
||||||
.filterable(fileAttributeConfigEntity.isFilterable())
|
|
||||||
.displayedInFileList(fileAttributeConfigEntity.isDisplayedInFileList())
|
|
||||||
.placeholder(fileAttributeConfigEntity.getPlaceholder())
|
|
||||||
.type(fileAttributeConfigEntity.getType())
|
|
||||||
.build();
|
|
||||||
facList.add(fac);
|
|
||||||
});
|
|
||||||
fileAttributeConfigPersistenceService.setFileAttributesConfig(clonedDossierTemplate.getId(), facList);
|
|
||||||
clonedDossierTemplate.setFileAttributeConfigs(fileAttributeConfigPersistenceService.getFileAttributes(clonedDossierTemplate.getId()));
|
|
||||||
|
|
||||||
//set report templates
|
|
||||||
var reportTemplates = dossierTemplate.getReportTemplates();
|
|
||||||
for (ReportTemplateEntity rte : reportTemplates) {
|
|
||||||
var storedReportTemplate = storageService.getObject(rte.getStorageId());
|
|
||||||
String storageId = clonedDossierTemplate.getId() + "/" + rte.getFileName();
|
|
||||||
String templateId = UUID.randomUUID().toString();
|
|
||||||
try {
|
|
||||||
storageService.storeObject(storageId, storedReportTemplate.getInputStream());
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new ConflictException("Could not clone dossier template.");
|
|
||||||
}
|
|
||||||
reportTemplatePersistenceService.insert(clonedDossierTemplate.getId(), templateId, storageId, rte.getFileName(), rte.isActiveByDefault(), rte.isMultiFileReport());
|
|
||||||
}
|
|
||||||
clonedDossierTemplate.setReportTemplates(reportTemplatePersistenceService.findByDossierTemplateId(clonedDossierTemplate.getId()));
|
|
||||||
|
|
||||||
//set watermarks
|
|
||||||
var watermark = watermarkService.getWatermark(dossierTemplate.getId());
|
|
||||||
WatermarkEntity we = WatermarkEntity.builder()
|
|
||||||
.dossierTemplateId(clonedDossierTemplate.getId())
|
|
||||||
.text(watermark.getText())
|
|
||||||
.hexColor(watermark.getHexColor())
|
|
||||||
.opacity(watermark.getOpacity())
|
|
||||||
.fontType(watermark.getFontType())
|
|
||||||
.fontSize(watermark.getFontSize())
|
|
||||||
.orientation(watermark.getOrientation())
|
|
||||||
.build();
|
|
||||||
watermarkService.saveWatermark(clonedDossierTemplate.getId(), we);
|
|
||||||
|
|
||||||
//set colors
|
|
||||||
var colors = colorsService.getColors(dossierTemplate.getId());
|
|
||||||
var clonedColors = new ColorsEntity();
|
|
||||||
BeanUtils.copyProperties(colors, clonedColors);
|
|
||||||
clonedColors.setDossierTemplateId(clonedDossierTemplate.getId());
|
|
||||||
colorsService.saveColors(clonedColors);
|
|
||||||
|
|
||||||
dossierTemplateRepository.save(clonedDossierTemplate);
|
|
||||||
|
|
||||||
}, () -> {
|
|
||||||
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId));
|
|
||||||
});
|
|
||||||
return clonedDossierTemplate;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.iqser.red.service.peristence.v1.server.controller;
|
package com.iqser.red.service.peristence.v1.server.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
|
||||||
@ -22,6 +23,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma
|
|||||||
public class DossierTemplateController implements DossierTemplateResource {
|
public class DossierTemplateController implements DossierTemplateResource {
|
||||||
|
|
||||||
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||||
|
private final DossierTemplateCloneService dossierTemplateCloneService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DossierTemplate createOrUpdateDossierTemplate(@RequestBody CreateOrUpdateDossierTemplateRequest dossierTemplate) {
|
public DossierTemplate createOrUpdateDossierTemplate(@RequestBody CreateOrUpdateDossierTemplateRequest dossierTemplate) {
|
||||||
@ -45,6 +47,6 @@ public class DossierTemplateController implements DossierTemplateResource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
|
public DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
|
||||||
return convert(dossierTemplatePersistenceService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class);
|
return convert(dossierTemplateCloneService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user