package fi.otavanopisto.muikku.plugins.feed;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import fi.otavanopisto.muikku.plugin.PluginRESTService;
import fi.otavanopisto.muikku.plugins.feed.model.Feed;
import fi.otavanopisto.muikku.plugins.feed.model.FeedItem;
import fi.otavanopisto.security.rest.RESTPermit;
import fi.otavanopisto.security.rest.RESTPermit.Handling;
@Path("/feed")
@RequestScoped
@Stateful
@Produces ("application/json")
public class FeedRESTService extends PluginRESTService {
private static final long serialVersionUID = -10681497398136513L;
@Inject
private FeedDAO feedDAO;
@Inject
private FeedItemDAO feedItemDao;
@GET
@Path("/feeds/{NAMES}")
@RESTPermit(handling = Handling.UNSECURED)
public Response findFeedByNames(
@PathParam("NAMES") String names,
@QueryParam("numItems") @DefaultValue("10") int numItems,
@QueryParam("order") @DefaultValue("DESCENDING") FeedSortOrder order) {
List<String> namesList = Arrays.asList(names.split(","));
if (namesList.size() == 0) {
return Response.status(Status.NOT_FOUND).build();
}
List<Feed> feeds = new ArrayList<>();
for (String name : namesList) {
Feed feed = feedDAO.findByName(name);
if (feed == null) {
return Response
.status(Status.NOT_FOUND)
.entity("Feed not found: " + name)
.build();
}
feeds.add(feedDAO.findByName(name));
}
List<FeedItem> feedItems = feedItemDao.findByFeeds(feeds, numItems, order);
return Response.ok(feedItems).build();
}
}