package pl.touk.sputnik.connector.github; import com.beust.jcommander.internal.Lists; import com.google.common.base.Optional; import com.jcabi.github.Pull; import com.jcabi.github.Repo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import pl.touk.sputnik.configuration.Configuration; import pl.touk.sputnik.configuration.GeneralOptionNotSupportedException; import pl.touk.sputnik.connector.ConnectorFacade; import pl.touk.sputnik.connector.Connectors; import pl.touk.sputnik.connector.Patchset; import pl.touk.sputnik.review.Review; import pl.touk.sputnik.review.ReviewFile; import javax.json.JsonObject; import java.io.IOException; import java.util.List; @Slf4j @RequiredArgsConstructor public class GithubFacade implements ConnectorFacade { private final Repo repo; private final Patchset patchset; @Override public Connectors name() { return Connectors.GITHUB; } @NotNull @Override public List<ReviewFile> listFiles() { Pull pull = getPull(); List<ReviewFile> files = Lists.newArrayList(); try { for (JsonObject o : pull.files()) { files.add(new ReviewFile(o.getString("filename"))); } } catch (IOException ex) { log.error("Error fetching files for pull request", ex); } return files; } @Override public void validate(Configuration configuration) throws GeneralOptionNotSupportedException { // all features are supported } @Override public void setReview(@NotNull Review review) { publish(review); } @Override public void publish(Review review) { ReviewStatus reviewStatus = new ReviewStatus(review); Optional<Integer> issueId = new Notification(repo.issues(), new ContentRenderer()) .upsertComment(reviewStatus); new Status(getPull(), review, issueId).update(); } private Pull getPull() { return repo.pulls().get(patchset.getPullRequestId()); } }