Added Android code
[wl-app.git] / Android / r2-streamer / r2-server / src / main / java / org / readium / r2_streamer / server / handler / MediaOverlayHandler.java
1 package org.readium.r2_streamer.server.handler;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import org.readium.r2_streamer.fetcher.EpubFetcher;
6 import org.readium.r2_streamer.model.publication.SMIL.MediaOverlayNode;
7 import org.readium.r2_streamer.model.publication.SMIL.MediaOverlays;
8 import org.readium.r2_streamer.model.publication.link.Link;
9 import org.readium.r2_streamer.server.ResponseStatus;
10
11 import java.util.List;
12 import java.util.Map;
13
14 import fi.iki.elonen.NanoHTTPD;
15 import fi.iki.elonen.router.RouterNanoHTTPD;
16
17 /**
18  * Created by gautam chibde on 25/5/17.
19  */
20
21 public class MediaOverlayHandler extends RouterNanoHTTPD.DefaultHandler {
22     public static final String TAG = MediaOverlayNode.class.getSimpleName();
23
24     @Override
25     public String getText() {
26         return ResponseStatus.FAILURE_RESPONSE;
27     }
28
29     @Override
30     public String getMimeType() {
31         return "application/webpub+json";
32     }
33
34     @Override
35     public NanoHTTPD.Response.IStatus getStatus() {
36         return NanoHTTPD.Response.Status.OK;
37     }
38
39     @Override
40     public NanoHTTPD.Response get(RouterNanoHTTPD.UriResource uriResource, Map<String, String> urlParams, NanoHTTPD.IHTTPSession session) {
41         EpubFetcher fetcher = uriResource.initParameter(EpubFetcher.class);
42
43         if (session.getParameters().containsKey("resource")) {
44             String searchQueryPath = session.getParameters().get("resource").get(0);
45             List<Link> spines = fetcher.publication.spines;
46             ObjectMapper objectMapper = new ObjectMapper();
47             try {
48                 String json = objectMapper.writeValueAsString(getMediaOverlay(spines, searchQueryPath));
49                 return NanoHTTPD.newFixedLengthResponse(getStatus(), getMimeType(), json);
50             } catch (JsonProcessingException e) {
51                 return NanoHTTPD.newFixedLengthResponse(getStatus(), getMimeType(), ResponseStatus.FAILURE_RESPONSE);
52             }
53         } else {
54             return NanoHTTPD.newFixedLengthResponse(getStatus(), getMimeType(), ResponseStatus.FAILURE_RESPONSE);
55         }
56     }
57
58     private MediaOverlays getMediaOverlay(List<Link> spines, String searchQueryPath) {
59         for (Link link : spines) {
60             if (link.href.contains(searchQueryPath)) {
61                 return link.mediaOverlay;
62             }
63         }
64         return new MediaOverlays();
65     }
66 }