package com.sap.pto.services; import java.util.Arrays; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.sap.pto.dao.EditorialDAO; import com.sap.pto.dao.FixtureDAO; import com.sap.pto.dao.GoalDAO; import com.sap.pto.dao.PredictionDAO; import com.sap.pto.dao.entities.Fixture; import com.sap.pto.dao.entities.Prediction; import com.sap.pto.dao.entities.User; import com.sap.pto.dao.entities.Fixture.Result; import com.sap.pto.paul.AveragePaul; import com.sap.pto.util.UserUtil; /** * This class is used for retrieving data about fixtures. * */ @Path("/fixtureservice") public class FixtureService extends BasicService { @GET @Path("/allfixtures") @Produces(MediaType.APPLICATION_JSON) public List<Fixture> getAllFixtures() { List<Fixture> fixtures = new FixtureDAO().getAll(); return addAdditionalData(fixtures); } @GET @Path("/futurefixtures") @Produces(MediaType.APPLICATION_JSON) public List<Fixture> getFutureFixtures() { List<Fixture> fixtures = FixtureDAO.getFuture(); return addAdditionalData(fixtures); } @GET @Path("/pastfixtures") @Produces(MediaType.APPLICATION_JSON) public List<Fixture> getPastFixtures() { List<Fixture> fixtures = FixtureDAO.getPast(); return addAdditionalData(fixtures); } /** * Add predictions if any exist for the fixtures and for the current user and for the special users. */ private List<Fixture> addAdditionalData(List<Fixture> fixtures) { if (fixtures.isEmpty()) { return fixtures; } for (Fixture fixture : fixtures) { fixture.setEditorials(new EditorialDAO().getByFixture(fixture)); fixture.setGoals(new GoalDAO().getByFixture(fixture)); } User user = userUtil.getLoggedInUser(request); List<User> users = Arrays.asList(user, UserUtil.getPaul()); if (!users.isEmpty()) { List<Prediction> predictions = PredictionDAO.getForUsersAndFixtures(users, fixtures); AveragePaul.predictMissingFixtures(fixtures, predictions); for (Fixture fixture : fixtures) { for (Prediction prediction : predictions) { if (prediction.getFixture().getId() == fixture.getId()) { // only add past predictions for other users if (fixture.getResult() != Result.NONE || prediction.getUser().equals(user)) { fixture.getPredictions().add(prediction); } // save user's prediction separately for easier processing if (prediction.getUser().equals(user)) { fixture.setUserPrediction(prediction); } } } } // remove fixture in prediction here to eliminate cycle for (Fixture fixture : fixtures) { for (Prediction prediction : fixture.getPredictions()) { prediction.setFixture(null); } if (fixture.getUserPrediction() != null) { fixture.getUserPrediction().setFixture(null); } } } return fixtures; } }