package ru.ulstu.grant.model; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.commons.lang3.StringUtils; import org.hibernate.validator.constraints.NotEmpty; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.paper.model.PaperDto; import ru.ulstu.project.model.ProjectDto; import ru.ulstu.user.model.UserDto; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import static ru.ulstu.core.util.StreamApiUtils.convert; public class GrantDto { private final static int MAX_AUTHORS_LENGTH = 60; private Integer id; @NotEmpty private String title; private Grant.GrantStatus status; private List deadlines = new ArrayList<>(); private String comment; private String applicationFileName; private ProjectDto project; private Set authorIds; private Set authors; private Integer leaderId; private boolean wasLeader; private boolean hasAge; private boolean hasDegree; private List paperIds = new ArrayList<>(); private List papers = new ArrayList<>(); public GrantDto() { deadlines.add(new Deadline()); } @JsonCreator public GrantDto(@JsonProperty("id") Integer id, @JsonProperty("title") String title, @JsonProperty("status") Grant.GrantStatus status, @JsonProperty("deadlines") List deadlines, @JsonProperty("comment") String comment, @JsonProperty("project") ProjectDto project, @JsonProperty("authorIds") Set authorIds, @JsonProperty("authors") Set authors, @JsonProperty("leader") Integer leaderId, @JsonProperty("wasLeader") boolean wasLeader, @JsonProperty("hasAge") boolean hasAge, @JsonProperty("hasDegree") boolean hasDegree, @JsonProperty("paperIds") List paperIds, @JsonProperty("papers") List papers) { this.id = id; this.title = title; this.status = status; this.deadlines = deadlines; this.comment = comment; this.applicationFileName = null; this.project = project; this.authors = authors; this.leaderId = leaderId; this.wasLeader = wasLeader; this.hasAge = hasAge; this.hasDegree = hasDegree; this.paperIds = paperIds; this.papers = papers; } public GrantDto(Grant grant) { this.id = grant.getId(); this.title = grant.getTitle(); this.status = grant.getStatus(); this.deadlines = grant.getDeadlines(); this.comment = grant.getComment(); this.project = grant.getProject() == null ? null : new ProjectDto(grant.getProject()); this.applicationFileName = grant.getApplication() == null ? null : grant.getApplication().getName(); this.authorIds = convert(grant.getAuthors(), user -> user.getId()); this.authors = convert(grant.getAuthors(), UserDto::new); this.leaderId = grant.getLeader().getId(); this.wasLeader = false; this.hasAge = false; this.hasDegree = false; this.paperIds = convert(grant.getPapers(), paper -> paper.getId()); this.papers = convert(grant.getPapers(), PaperDto::new); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Grant.GrantStatus getStatus() { return status; } public void setStatus(Grant.GrantStatus status) { this.status = status; } public List getDeadlines() { return deadlines; } public void setDeadlines(List deadlines) { this.deadlines = deadlines; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } public ProjectDto getProject() { return project; } public void setProject(ProjectDto project) { this.project = project; } public String getApplicationFileName() { return applicationFileName; } public void setApplicationFileName(String applicationFileName) { this.applicationFileName = applicationFileName; } public Set getAuthorIds() { return authorIds; } public void setAuthorIds(Set authorIds) { this.authorIds = authorIds; } public Set getAuthors() { return authors; } public void setAuthors(Set authors) { this.authors = authors; } public String getAuthorsString() { return StringUtils.abbreviate(authors .stream() .map(author -> author.getLastName()) .collect(Collectors.joining(", ")), MAX_AUTHORS_LENGTH); } public Integer getLeaderId() { return leaderId; } public void setLeaderId(Integer leaderId) { this.leaderId = leaderId; } public boolean isWasLeader() { return wasLeader; } public void setWasLeader(boolean wasLeader) { this.wasLeader = wasLeader; } public boolean isHasAge() { return hasAge; } public void setHasAge(boolean hasAge) { this.hasAge = hasAge; } public boolean isHasDegree() { return hasDegree; } public void setHasDegree(boolean hasDegree) { this.hasDegree = hasDegree; } public List getPaperIds() { return paperIds; } public void setPaperIds(List paperIds) { this.paperIds = paperIds; } public List getPapers() { return papers; } public void setPapers(List papers) { this.papers = papers; } }