|
|
|
@ -10,8 +10,10 @@ import ru.ulstu.file.service.FileService;
|
|
|
|
|
import ru.ulstu.paper.model.Paper;
|
|
|
|
|
import ru.ulstu.paper.model.PaperDto;
|
|
|
|
|
import ru.ulstu.paper.model.PaperListDto;
|
|
|
|
|
import ru.ulstu.paper.model.Reference;
|
|
|
|
|
import ru.ulstu.paper.model.ReferenceDto;
|
|
|
|
|
import ru.ulstu.paper.repository.PaperRepository;
|
|
|
|
|
import ru.ulstu.paper.repository.ReferenceRepository;
|
|
|
|
|
import ru.ulstu.timeline.service.EventService;
|
|
|
|
|
import ru.ulstu.user.model.User;
|
|
|
|
|
import ru.ulstu.user.service.UserService;
|
|
|
|
@ -39,6 +41,7 @@ import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.ARTICLE;
|
|
|
|
|
import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.BOOK;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Transactional
|
|
|
|
|
public class PaperService {
|
|
|
|
|
private final static int MAX_DISPLAY_SIZE = 40;
|
|
|
|
|
private final static String PAPER_FORMATTED_TEMPLATE = "%s %s";
|
|
|
|
@ -49,14 +52,17 @@ public class PaperService {
|
|
|
|
|
private final DeadlineService deadlineService;
|
|
|
|
|
private final FileService fileService;
|
|
|
|
|
private final EventService eventService;
|
|
|
|
|
private final ReferenceRepository referenceRepository;
|
|
|
|
|
|
|
|
|
|
public PaperService(PaperRepository paperRepository,
|
|
|
|
|
ReferenceRepository referenceRepository,
|
|
|
|
|
FileService fileService,
|
|
|
|
|
PaperNotificationService paperNotificationService,
|
|
|
|
|
UserService userService,
|
|
|
|
|
DeadlineService deadlineService,
|
|
|
|
|
EventService eventService) {
|
|
|
|
|
this.paperRepository = paperRepository;
|
|
|
|
|
this.referenceRepository = referenceRepository;
|
|
|
|
|
this.fileService = fileService;
|
|
|
|
|
this.paperNotificationService = paperNotificationService;
|
|
|
|
|
this.userService = userService;
|
|
|
|
@ -117,6 +123,7 @@ public class PaperService {
|
|
|
|
|
paper.setTitle(paperDto.getTitle());
|
|
|
|
|
paper.setUpdateDate(new Date());
|
|
|
|
|
paper.setDeadlines(deadlineService.saveOrCreate(paperDto.getDeadlines()));
|
|
|
|
|
paper.setReferences(saveOrCreateReferences(paperDto.getReferences()));
|
|
|
|
|
paper.setFiles(fileService.saveOrCreate(paperDto.getFiles().stream()
|
|
|
|
|
.filter(f -> !f.isDeleted())
|
|
|
|
|
.collect(toList())));
|
|
|
|
@ -127,6 +134,43 @@ public class PaperService {
|
|
|
|
|
return paper;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<Reference> saveOrCreateReferences(List<ReferenceDto> references) {
|
|
|
|
|
return references
|
|
|
|
|
.stream()
|
|
|
|
|
.filter(reference -> !reference.getDeleted())
|
|
|
|
|
.map(reference -> reference.getId() != null ? updateReference(reference) : createReference(reference))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public Reference updateReference(ReferenceDto referenceDto) {
|
|
|
|
|
Reference updateReference = referenceRepository.findOne(referenceDto.getId());
|
|
|
|
|
updateReference.setAuthors(referenceDto.getAuthors());
|
|
|
|
|
updateReference.setJournalOrCollectionTitle(referenceDto.getJournalOrCollectionTitle());
|
|
|
|
|
updateReference.setPages(referenceDto.getPages());
|
|
|
|
|
updateReference.setPublicationTitle(referenceDto.getPublicationTitle());
|
|
|
|
|
updateReference.setPublicationYear(referenceDto.getPublicationYear());
|
|
|
|
|
updateReference.setPublisher(referenceDto.getPublisher());
|
|
|
|
|
updateReference.setReferenceType(referenceDto.getReferenceType());
|
|
|
|
|
referenceRepository.save(updateReference);
|
|
|
|
|
return updateReference;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public Reference createReference(ReferenceDto referenceDto) {
|
|
|
|
|
Reference newReference = new Reference();
|
|
|
|
|
newReference.setAuthors(referenceDto.getAuthors());
|
|
|
|
|
newReference.setJournalOrCollectionTitle(referenceDto.getJournalOrCollectionTitle());
|
|
|
|
|
newReference.setPages(referenceDto.getPages());
|
|
|
|
|
newReference.setPublicationTitle(referenceDto.getPublicationTitle());
|
|
|
|
|
newReference.setPublicationYear(referenceDto.getPublicationYear());
|
|
|
|
|
newReference.setPublisher(referenceDto.getPublisher());
|
|
|
|
|
newReference.setReferenceType(referenceDto.getReferenceType());
|
|
|
|
|
newReference = referenceRepository.save(newReference);
|
|
|
|
|
return newReference;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public Integer update(PaperDto paperDto) throws IOException {
|
|
|
|
|
Paper paper = paperRepository.findOne(paperDto.getId());
|
|
|
|
@ -139,6 +183,11 @@ public class PaperService {
|
|
|
|
|
fileService.delete(file.getId());
|
|
|
|
|
}
|
|
|
|
|
paperRepository.save(copyFromDto(paper, paperDto));
|
|
|
|
|
for (ReferenceDto referenceDto : paperDto.getReferences().stream()
|
|
|
|
|
.filter(f -> f.getDeleted() && f.getId() != null)
|
|
|
|
|
.collect(toList())) {
|
|
|
|
|
referenceRepository.deleteById(referenceDto.getId());
|
|
|
|
|
}
|
|
|
|
|
eventService.updatePaperDeadlines(paper);
|
|
|
|
|
|
|
|
|
|
paper.getAuthors().forEach(author -> {
|
|
|
|
@ -168,6 +217,14 @@ public class PaperService {
|
|
|
|
|
return Arrays.asList(Paper.PaperType.values());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<ReferenceDto.FormatStandard> getFormatStandards() {
|
|
|
|
|
return Arrays.asList(ReferenceDto.FormatStandard.values());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<ReferenceDto.ReferenceType> getReferenceTypes() {
|
|
|
|
|
return Arrays.asList(ReferenceDto.ReferenceType.values());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
public Paper create(String title, User user, Date deadlineDate) {
|
|
|
|
|
Paper paper = new Paper();
|
|
|
|
|