package ru.ulstu.students.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.tags.model.Tag; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class TaskDto { private final static int MAX_TAGS_LENGTH = 50; private Integer id; @NotEmpty private String title; private String description; private Task.TaskStatus status; private List<Deadline> deadlines = new ArrayList<>(); private Date createDate; private Date updateDate; private Set<Integer> tagIds; private List<Tag> tags; public TaskDto() { deadlines.add(new Deadline()); } @JsonCreator public TaskDto(@JsonProperty("id") Integer id, @JsonProperty("title") String title, @JsonProperty("description") String description, @JsonProperty("createDate") Date createDate, @JsonProperty("updateDate") Date updateDate, @JsonProperty("status") Task.TaskStatus status, @JsonProperty("deadlines") List<Deadline> deadlines, @JsonProperty("tagIds") Set<Integer> tagIds, @JsonProperty("tags") List<Tag> tags) { this.id = id; this.title = title; this.status = status; this.deadlines = deadlines; this.createDate = createDate; this.updateDate = updateDate; this.description = description; this.tags = tags; } public TaskDto(Task task) { this.id = task.getId(); this.title = task.getTitle(); this.status = task.getStatus(); this.deadlines = task.getDeadlines(); this.createDate = task.getCreateDate(); this.updateDate = task.getUpdateDate(); this.description = task.getDescription(); this.tags = task.getTags(); } 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 String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Task.TaskStatus getStatus() { return status; } public void setStatus(Task.TaskStatus status) { this.status = status; } public List<Deadline> getDeadlines() { return deadlines; } public void setDeadlines(List<Deadline> deadlines) { this.deadlines = deadlines; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public Set<Integer> getTagIds() { return tagIds; } public void setTagIds(Set<Integer> tagIds) { this.tagIds = tagIds; } public List<Tag> getTags() { return tags; } public void setTags(List<Tag> tags) { this.tags = tags; } public String getTagsString() { return StringUtils.abbreviate(tags .stream() .map(tag -> tag.getTagName()) .collect(Collectors.joining(", ")), MAX_TAGS_LENGTH); } }