package pl.touk.sputnik.connector.saas; import com.google.gson.Gson; import lombok.AllArgsConstructor; 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.http.HttpException; import pl.touk.sputnik.connector.saas.json.FileViolation; import pl.touk.sputnik.connector.saas.json.Violation; import pl.touk.sputnik.review.Comment; import pl.touk.sputnik.review.Review; import pl.touk.sputnik.review.ReviewFile; import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; @AllArgsConstructor public class SaasFacade implements ConnectorFacade { private SaasConnector saasConnector; private Gson gson; @Override public Connectors name() { return Connectors.SAAS; } @NotNull @Override public List<ReviewFile> listFiles() { try { String response = saasConnector.listFiles(); String[] files = gson.fromJson(response, String[].class); List<ReviewFile> reviewFiles = new ArrayList<>(); for (String filename : files) { reviewFiles.add(new ReviewFile(filename)); } return reviewFiles; } catch (HttpException ex) { throw new SaasException("Error when listing files, check your api key", ex); } catch (URISyntaxException | IOException ex) { throw new SaasException("Error when listing files", ex); } } @Override public void publish(Review review) { List<FileViolation> fileViolations = new ArrayList<>(); for (ReviewFile reviewFile : review.getFiles()) { List<Violation> violations = new ArrayList<>(); for (Comment comment : reviewFile.getComments()) { violations.add(new Violation(comment.getLine(), comment.getMessage())); } fileViolations.add(new FileViolation(reviewFile.getReviewFilename(), violations)); } String request = gson.toJson(fileViolations); try { saasConnector.sendReview(request); } catch (HttpException ex) { throw new SaasException("Error when listing files, check your api key", ex); } catch (URISyntaxException | IOException ex) { throw new SaasException("Error while publishing review", ex); } } @Override public void validate(Configuration configuration) throws GeneralOptionNotSupportedException { } @Override public void setReview(@NotNull Review review) { publish(review); } }