package de.uni_bremen.st.quide.persistence.transformators; import java.time.ZonedDateTime; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.uni_bremen.st.quide.datamodel.transferred_data.IViolation; import de.uni_bremen.st.quide.datamodel.transferred_data.impl.TOIssue; import de.uni_bremen.st.quide.persistence.IPersistence; import de.uni_bremen.st.quide.persistence.data.entities.Filename; import de.uni_bremen.st.quide.persistence.data.entities.Issue; import de.uni_bremen.st.quide.persistence.data.entities.IssueLabel; import de.uni_bremen.st.quide.persistence.data.entities.Version; import de.uni_bremen.st.quide.persistence.data.relationships.FilenameVersion; import de.uni_bremen.st.quide.persistence.exceptions.InvalidIDException; import de.uni_bremen.st.quide.persistence.util.Condition; import de.uni_bremen.st.quide.persistence.util.Condition.Type; @Component public class IssueTransformator { @Autowired private IPersistence persistence; public List<TOIssue> getAllIssues() { return getAll(null); } public List<TOIssue> getIssuesReferencedByVersion(long versionId) throws InvalidIDException { Version version = persistence.checkID(Version.class, versionId); return getAll(Collections.singletonList(new Condition(Type.REVERSE_IN, "versions", version))); } public List<TOIssue> getIssuesModifyingFile(long fileId) throws InvalidIDException { Filename filename = persistence.checkID(Filename.class, fileId); List<Condition> conditions = Collections.singletonList(new Condition("filename", filename)); return persistence.getAll(FilenameVersion.class, conditions).stream() .map(FilenameVersion::getStartVersion) .map(Version::getIssues) .flatMap(Set::stream) .map(this::createIssue) .collect(Collectors.toList()); } public List<IViolation> getViolationsFixedByIssue(long issueId) { return Collections.emptyList(); } public List<IViolation> getViolationsCreatedByIssue(long issueId) { return Collections.emptyList(); } private TOIssue createIssue(Issue issue) { final ZonedDateTime closedAt = issue.getClosedAt(); final Set<String> labels = issue.getLabels().stream() .map(IssueLabel::getName) .collect(Collectors.toSet()); final Set<Long> versions = null; return new TOIssue( issue.getId(), issue.getIdentifier(), issue.getTitle(), issue.getDescription(), issue.getUrl(), "", labels, versions, Date.from(issue.getCreatedAt().toInstant()), closedAt == null ? null : Date.from(issue.getClosedAt().toInstant()), issue.getIssueType().toString()); } private List<TOIssue> getAll(List<Condition> conditions) { return persistence.getAll(Issue.class, conditions).stream() .map(this::createIssue) .collect(Collectors.toList()); } }