|
|
@ -7,11 +7,14 @@ import ru.ulstu.deadline.model.Deadline;
|
|
|
|
import ru.ulstu.deadline.service.DeadlineService;
|
|
|
|
import ru.ulstu.deadline.service.DeadlineService;
|
|
|
|
import ru.ulstu.file.model.FileDataDto;
|
|
|
|
import ru.ulstu.file.model.FileDataDto;
|
|
|
|
import ru.ulstu.file.service.FileService;
|
|
|
|
import ru.ulstu.file.service.FileService;
|
|
|
|
|
|
|
|
import ru.ulstu.paper.model.AutoCompleteData;
|
|
|
|
import ru.ulstu.paper.model.Paper;
|
|
|
|
import ru.ulstu.paper.model.Paper;
|
|
|
|
import ru.ulstu.paper.model.PaperDto;
|
|
|
|
import ru.ulstu.paper.model.PaperDto;
|
|
|
|
import ru.ulstu.paper.model.PaperListDto;
|
|
|
|
import ru.ulstu.paper.model.PaperListDto;
|
|
|
|
|
|
|
|
import ru.ulstu.paper.model.Reference;
|
|
|
|
import ru.ulstu.paper.model.ReferenceDto;
|
|
|
|
import ru.ulstu.paper.model.ReferenceDto;
|
|
|
|
import ru.ulstu.paper.repository.PaperRepository;
|
|
|
|
import ru.ulstu.paper.repository.PaperRepository;
|
|
|
|
|
|
|
|
import ru.ulstu.paper.repository.ReferenceRepository;
|
|
|
|
import ru.ulstu.timeline.service.EventService;
|
|
|
|
import ru.ulstu.timeline.service.EventService;
|
|
|
|
import ru.ulstu.user.model.User;
|
|
|
|
import ru.ulstu.user.model.User;
|
|
|
|
import ru.ulstu.user.service.UserService;
|
|
|
|
import ru.ulstu.user.service.UserService;
|
|
|
@ -39,6 +42,7 @@ import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.ARTICLE;
|
|
|
|
import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.BOOK;
|
|
|
|
import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.BOOK;
|
|
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
@Service
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
public class PaperService {
|
|
|
|
public class PaperService {
|
|
|
|
private final static int MAX_DISPLAY_SIZE = 40;
|
|
|
|
private final static int MAX_DISPLAY_SIZE = 40;
|
|
|
|
private final static String PAPER_FORMATTED_TEMPLATE = "%s %s";
|
|
|
|
private final static String PAPER_FORMATTED_TEMPLATE = "%s %s";
|
|
|
@ -49,14 +53,17 @@ public class PaperService {
|
|
|
|
private final DeadlineService deadlineService;
|
|
|
|
private final DeadlineService deadlineService;
|
|
|
|
private final FileService fileService;
|
|
|
|
private final FileService fileService;
|
|
|
|
private final EventService eventService;
|
|
|
|
private final EventService eventService;
|
|
|
|
|
|
|
|
private final ReferenceRepository referenceRepository;
|
|
|
|
|
|
|
|
|
|
|
|
public PaperService(PaperRepository paperRepository,
|
|
|
|
public PaperService(PaperRepository paperRepository,
|
|
|
|
|
|
|
|
ReferenceRepository referenceRepository,
|
|
|
|
FileService fileService,
|
|
|
|
FileService fileService,
|
|
|
|
PaperNotificationService paperNotificationService,
|
|
|
|
PaperNotificationService paperNotificationService,
|
|
|
|
UserService userService,
|
|
|
|
UserService userService,
|
|
|
|
DeadlineService deadlineService,
|
|
|
|
DeadlineService deadlineService,
|
|
|
|
EventService eventService) {
|
|
|
|
EventService eventService) {
|
|
|
|
this.paperRepository = paperRepository;
|
|
|
|
this.paperRepository = paperRepository;
|
|
|
|
|
|
|
|
this.referenceRepository = referenceRepository;
|
|
|
|
this.fileService = fileService;
|
|
|
|
this.fileService = fileService;
|
|
|
|
this.paperNotificationService = paperNotificationService;
|
|
|
|
this.paperNotificationService = paperNotificationService;
|
|
|
|
this.userService = userService;
|
|
|
|
this.userService = userService;
|
|
|
@ -117,6 +124,7 @@ public class PaperService {
|
|
|
|
paper.setTitle(paperDto.getTitle());
|
|
|
|
paper.setTitle(paperDto.getTitle());
|
|
|
|
paper.setUpdateDate(new Date());
|
|
|
|
paper.setUpdateDate(new Date());
|
|
|
|
paper.setDeadlines(deadlineService.saveOrCreate(paperDto.getDeadlines()));
|
|
|
|
paper.setDeadlines(deadlineService.saveOrCreate(paperDto.getDeadlines()));
|
|
|
|
|
|
|
|
paper.setReferences(saveOrCreateReferences(paperDto.getReferences()));
|
|
|
|
paper.setFiles(fileService.saveOrCreate(paperDto.getFiles().stream()
|
|
|
|
paper.setFiles(fileService.saveOrCreate(paperDto.getFiles().stream()
|
|
|
|
.filter(f -> !f.isDeleted())
|
|
|
|
.filter(f -> !f.isDeleted())
|
|
|
|
.collect(toList())));
|
|
|
|
.collect(toList())));
|
|
|
@ -127,6 +135,41 @@ public class PaperService {
|
|
|
|
return paper;
|
|
|
|
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());
|
|
|
|
|
|
|
|
copyFromDto(updateReference, referenceDto);
|
|
|
|
|
|
|
|
referenceRepository.save(updateReference);
|
|
|
|
|
|
|
|
return updateReference;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
|
|
|
|
public Reference createReference(ReferenceDto referenceDto) {
|
|
|
|
|
|
|
|
Reference newReference = new Reference();
|
|
|
|
|
|
|
|
copyFromDto(newReference, referenceDto);
|
|
|
|
|
|
|
|
newReference = referenceRepository.save(newReference);
|
|
|
|
|
|
|
|
return newReference;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Reference copyFromDto(Reference reference, ReferenceDto referenceDto) {
|
|
|
|
|
|
|
|
reference.setAuthors(referenceDto.getAuthors());
|
|
|
|
|
|
|
|
reference.setJournalOrCollectionTitle(referenceDto.getJournalOrCollectionTitle());
|
|
|
|
|
|
|
|
reference.setPages(referenceDto.getPages());
|
|
|
|
|
|
|
|
reference.setPublicationTitle(referenceDto.getPublicationTitle());
|
|
|
|
|
|
|
|
reference.setPublicationYear(referenceDto.getPublicationYear());
|
|
|
|
|
|
|
|
reference.setPublisher(referenceDto.getPublisher());
|
|
|
|
|
|
|
|
reference.setReferenceType(referenceDto.getReferenceType());
|
|
|
|
|
|
|
|
return reference;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
|
@Transactional
|
|
|
|
public Integer update(PaperDto paperDto) throws IOException {
|
|
|
|
public Integer update(PaperDto paperDto) throws IOException {
|
|
|
|
Paper paper = paperRepository.findOne(paperDto.getId());
|
|
|
|
Paper paper = paperRepository.findOne(paperDto.getId());
|
|
|
@ -139,6 +182,11 @@ public class PaperService {
|
|
|
|
fileService.delete(file.getId());
|
|
|
|
fileService.delete(file.getId());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
paperRepository.save(copyFromDto(paper, paperDto));
|
|
|
|
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);
|
|
|
|
eventService.updatePaperDeadlines(paper);
|
|
|
|
|
|
|
|
|
|
|
|
paper.getAuthors().forEach(author -> {
|
|
|
|
paper.getAuthors().forEach(author -> {
|
|
|
@ -168,6 +216,14 @@ public class PaperService {
|
|
|
|
return Arrays.asList(Paper.PaperType.values());
|
|
|
|
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
|
|
|
|
@Transactional
|
|
|
|
public Paper create(String title, User user, Date deadlineDate) {
|
|
|
|
public Paper create(String title, User user, Date deadlineDate) {
|
|
|
|
Paper paper = new Paper();
|
|
|
|
Paper paper = new Paper();
|
|
|
@ -287,12 +343,23 @@ public class PaperService {
|
|
|
|
: getSpringerReference(referenceDto);
|
|
|
|
: getSpringerReference(referenceDto);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public String getFormattedReferences(PaperDto paperDto) {
|
|
|
|
|
|
|
|
return String.join("\r\n", paperDto.getReferences()
|
|
|
|
|
|
|
|
.stream()
|
|
|
|
|
|
|
|
.filter(r -> !r.getDeleted())
|
|
|
|
|
|
|
|
.map(r -> {
|
|
|
|
|
|
|
|
r.setFormatStandard(paperDto.getFormatStandard());
|
|
|
|
|
|
|
|
return getFormattedReference(r);
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.collect(Collectors.toList()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public String getGostReference(ReferenceDto referenceDto) {
|
|
|
|
public String getGostReference(ReferenceDto referenceDto) {
|
|
|
|
return MessageFormat.format(referenceDto.getReferenceType() == BOOK ? "{0} {1} - {2}{3}. - {4}с." : "{0} {1}{5} {2}{3}. С. {4}.",
|
|
|
|
return MessageFormat.format(referenceDto.getReferenceType() == BOOK ? "{0} {1} - {2}{3}. - {4}с." : "{0} {1}{5} {2}{3}. С. {4}.",
|
|
|
|
referenceDto.getAuthors(),
|
|
|
|
referenceDto.getAuthors(),
|
|
|
|
referenceDto.getPublicationTitle(),
|
|
|
|
referenceDto.getPublicationTitle(),
|
|
|
|
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
|
|
|
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
|
|
|
referenceDto.getPublicationYear().toString(),
|
|
|
|
referenceDto.getPublicationYear() != null ? referenceDto.getPublicationYear().toString() : "",
|
|
|
|
referenceDto.getPages(),
|
|
|
|
referenceDto.getPages(),
|
|
|
|
StringUtils.isEmpty(referenceDto.getJournalOrCollectionTitle()) ? "." : " // " + referenceDto.getJournalOrCollectionTitle() + ".");
|
|
|
|
StringUtils.isEmpty(referenceDto.getJournalOrCollectionTitle()) ? "." : " // " + referenceDto.getJournalOrCollectionTitle() + ".");
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -300,7 +367,7 @@ public class PaperService {
|
|
|
|
public String getSpringerReference(ReferenceDto referenceDto) {
|
|
|
|
public String getSpringerReference(ReferenceDto referenceDto) {
|
|
|
|
return MessageFormat.format("{0} ({1}) {2}.{3} {4}pp {5}",
|
|
|
|
return MessageFormat.format("{0} ({1}) {2}.{3} {4}pp {5}",
|
|
|
|
referenceDto.getAuthors(),
|
|
|
|
referenceDto.getAuthors(),
|
|
|
|
referenceDto.getPublicationYear().toString(),
|
|
|
|
referenceDto.getPublicationYear() != null ? referenceDto.getPublicationYear().toString() : "",
|
|
|
|
referenceDto.getPublicationTitle(),
|
|
|
|
referenceDto.getPublicationTitle(),
|
|
|
|
referenceDto.getReferenceType() == ARTICLE ? " " + referenceDto.getJournalOrCollectionTitle() + "," : "",
|
|
|
|
referenceDto.getReferenceType() == ARTICLE ? " " + referenceDto.getJournalOrCollectionTitle() + "," : "",
|
|
|
|
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
|
|
|
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
|
|
@ -310,4 +377,13 @@ public class PaperService {
|
|
|
|
public List<Paper> findAllCompletedByType(Paper.PaperType type) {
|
|
|
|
public List<Paper> findAllCompletedByType(Paper.PaperType type) {
|
|
|
|
return paperRepository.findByTypeAndStatus(type, Paper.PaperStatus.COMPLETED);
|
|
|
|
return paperRepository.findByTypeAndStatus(type, Paper.PaperStatus.COMPLETED);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public AutoCompleteData getAutoCompleteData() {
|
|
|
|
|
|
|
|
AutoCompleteData autoCompleteData = new AutoCompleteData();
|
|
|
|
|
|
|
|
autoCompleteData.setAuthors(referenceRepository.findDistinctAuthors());
|
|
|
|
|
|
|
|
autoCompleteData.setJournalOrCollectionTitles(referenceRepository.findDistinctJournalOrCollectionTitles());
|
|
|
|
|
|
|
|
autoCompleteData.setPublicationTitles(referenceRepository.findDistinctPublicationTitles());
|
|
|
|
|
|
|
|
autoCompleteData.setPublishers(referenceRepository.findDistinctPublishers());
|
|
|
|
|
|
|
|
return autoCompleteData;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|