ca.qhrtech.services.implementations.StrawPollServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for ca.qhrtech.services.implementations.StrawPollServiceImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ca.qhrtech.services.implementations;

import ca.qhrtech.entities.Game;
import ca.qhrtech.entities.StrawPoll;
import ca.qhrtech.entities.BGLTable;
import ca.qhrtech.services.interfaces.PollService;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 *
 * @author bryan
 */
@Service("pollService")
public class StrawPollServiceImpl implements PollService {

    private static final String STRAW_POLL_URL = "http://www.strawpoll.me/api/v2/polls";
    private static final String STRAW_POLL_VISIT_URL = "http://www.strawpoll.me/";

    @Override
    public String generatePollUrl(long pollId) {
        return STRAW_POLL_VISIT_URL + pollId;
    }

    @Override
    public long generatePollId(List<Game> games, BGLTable table) {
        StrawPoll poll = generateRequestBodyPoll(games, generatePollName(table));
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<StrawPoll> request = new HttpEntity<>(poll, headers);
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        RestTemplate template = new RestTemplate(factory);
        ResponseEntity<StrawPoll> generatedPoll;
        generatedPoll = template.postForEntity(STRAW_POLL_URL, request, StrawPoll.class);

        return generatedPoll.getBody().getId();
    }

    private String generatePollName(BGLTable table) {
        StringBuilder builder = new StringBuilder();
        builder.append(table.getCreator().getUsername()).append(" ");
        builder.append("wants to know what you want to play at ");
        builder.append(table.getStartDate());
        return builder.toString();
    }

    private StrawPoll generateRequestBodyPoll(List<Game> games, String title) {
        StrawPoll poll = new StrawPoll();
        poll.setCaptcha(false);
        poll.setMulti(false);
        poll.setTitle(title);
        poll.setOptions(games.stream().map(g -> g.getName()).collect(Collectors.toList()));
        return poll;
    }
}