Untitled
unknown
plain_text
8 months ago
13 kB
6
Indexable
package sth.nns.clientservice.util;
import sth.json.JSON;
import sth.nns.clientservice.model.*;
import java.util.ArrayList;
import java.util.List;
/**
* Utility class for deserializing JSON responses into model objects.
*/
public class NnsJsonDeserializer {
/**
* Deserializes a JSON response into a RecommendationsResponse object.
*
* @param json The JSON response from the NNS API
* @return A RecommendationsResponse object
*/
public static RecommendationsResponse deserializeRecommendationsResponse(JSON json) {
if (json == null) {
return null;
}
RecommendationsResponse response = new RecommendationsResponse();
// Set basic fields
response.setType(getStringValue(json, "type"));
response.setUiHint(getStringValue(json, "uiHint"));
response.setVodOutOfWindow(getBooleanValue(json, "vodOutOfWindow"));
response.setName(getStringValue(json, "name"));
response.setTwcTvNetworkDisplayMode(getStringValue(json, "twcTvNetworkDisplayMode"));
response.setNum_categories(getIntValue(json, "num_categories"));
response.setTotal_results(getIntValue(json, "total_results"));
response.setStart_index(getIntValue(json, "start_index"));
response.setNum_results(getIntValue(json, "num_results"));
response.setMax_results(getIntValue(json, "max_results"));
response.setDsQueryId(getStringValue(json, "dsQueryId"));
response.setCurationType(getStringValue(json, "curationType"));
response.setSkeletonShelf(getBooleanValue(json, "skeletonShelf"));
// Process dynamic URIs
if (json.hasField("dynamicUris")) {
JSON dynamicUrisJson = json.get("dynamicUris");
List<String> dynamicUris = new ArrayList<>();
for (int i = 0; i < dynamicUrisJson.size(); i++) {
dynamicUris.add(dynamicUrisJson.get(i).toString());
}
response.setDynamicUris(dynamicUris);
}
// Process results
if (json.hasField("results")) {
JSON resultsJson = json.get("results");
List<r> results = new ArrayList<>();
for (int i = 0; i < resultsJson.size(); i++) {
JSON resultJson = resultsJson.get(i);
String type = getStringValue(resultJson, "type");
if ("event".equals(type)) {
results.add(deserializeEvent(resultJson));
} else if ("episode_list".equals(type)) {
results.add(deserializeEpisodeList(resultJson));
}
}
response.setResults(results);
}
return response;
}
/**
* Deserializes a JSON object into an Event object.
*
* @param json The JSON object
* @return An Event object
*/
public static Event deserializeEvent(JSON json) {
if (json == null) {
return null;
}
Event event = new Event();
// Set base fields from Result
populateResultFields(event, json);
// Set event-specific fields
if (json.hasField("tmsProgramIds")) {
event.setTmsProgramIds(deserializeStringList(json.get("tmsProgramIds")));
}
if (json.hasField("providerAssetIds")) {
event.setProviderAssetIds(deserializeStringList(json.get("providerAssetIds")));
}
if (json.hasField("tmsGuideServiceIds")) {
event.setTmsGuideServiceIds(deserializeStringList(json.get("tmsGuideServiceIds")));
}
if (json.hasField("ipTmsGuideServiceIds")) {
event.setIpTmsGuideServiceIds(deserializeStringList(json.get("ipTmsGuideServiceIds")));
}
if (json.hasField("streamList")) {
event.setStreamList(deserializeStringList(json.get("streamList")));
}
// Process details
if (json.hasField("details")) {
event.setDetails(deserializeEventDetails(json.get("details")));
}
return event;
}
/**
* Deserializes a JSON object into an EpisodeList object.
*
* @param json The JSON object
* @return An EpisodeList object
*/
public static EpisodeList deserializeEpisodeList(JSON json) {
if (json == null) {
return null;
}
EpisodeList episodeList = new EpisodeList();
// Set base fields from Result
populateResultFields(episodeList, json);
// Set episode list-specific fields
episodeList.setTmsSeriesId(getStringValue(json, "tmsSeriesId"));
episodeList.setTmsSeriesIdStr(getStringValue(json, "tmsSeriesIdStr"));
if (json.hasField("tmsGuideServiceIds")) {
episodeList.setTmsGuideServiceIds(deserializeStringList(json.get("tmsGuideServiceIds")));
}
if (json.hasField("ipTmsGuideServiceIds")) {
episodeList.setIpTmsGuideServiceIds(deserializeStringList(json.get("ipTmsGuideServiceIds")));
}
// Process details
if (json.hasField("details")) {
episodeList.setDetails(deserializeEpisodeListDetails(json.get("details")));
}
return episodeList;
}
/**
* Deserializes a JSON object into an EventDetails object.
*
* @param json The JSON object
* @return An EventDetails object
*/
private static EventDetails deserializeEventDetails(JSON json) {
if (json == null) {
return null;
}
EventDetails details = new EventDetails();
details.setOriginal_air_date(getStringValue(json, "original_air_date"));
details.setYear(getStringValue(json, "year"));
details.setEntitled(getBooleanValue(json, "entitled"));
details.setTvodEntitled(getBooleanValue(json, "tvodEntitled"));
details.setLinearEntitledIp(getBooleanValue(json, "linearEntitledIp"));
details.setLinearEntitledQam(getBooleanValue(json, "linearEntitledQam"));
// Process genres
if (json.hasField("genres")) {
JSON genresJson = json.get("genres");
List<Genre> genres = new ArrayList<>();
for (int i = 0; i < genresJson.size(); i++) {
JSON genreJson = genresJson.get(i);
Genre genre = new Genre();
genre.setName(getStringValue(genreJson, "name"));
genres.add(genre);
}
details.setGenres(genres);
}
// Process ratings
if (json.hasField("allRatings")) {
details.setAllRatings(deserializeStringList(json.get("allRatings")));
}
// Process VPPs
if (json.hasField("allVPPs")) {
details.setAllVPPs(deserializeStringList(json.get("allVPPs")));
}
// Process IP VPPs
if (json.hasField("allIpVPPs")) {
details.setAllIpVPPs(deserializeStringList(json.get("allIpVPPs")));
}
// Process program metadata (placeholder)
if (json.hasField("programMetadata")) {
details.setProgramMetadata(new ProgramMetadata());
}
return details;
}
/**
* Deserializes a JSON object into an EpisodeListDetails object.
*
* @param json The JSON object
* @return An EpisodeListDetails object
*/
private static EpisodeListDetails deserializeEpisodeListDetails(JSON json) {
if (json == null) {
return null;
}
EpisodeListDetails details = new EpisodeListDetails();
details.setNum_assets(getIntValue(json, "num_assets"));
details.setTotalEpisodes(getIntValue(json, "totalEpisodes"));
details.setEntitled(getBooleanValue(json, "entitled"));
details.setTvodEntitled(getBooleanValue(json, "tvodEntitled"));
details.setLinearEntitledIp(getBooleanValue(json, "linearEntitledIp"));
details.setLinearEntitledQam(getBooleanValue(json, "linearEntitledQam"));
// Process latest episode
if (json.hasField("latest_episode")) {
details.setLatest_episode(deserializeEvent(json.get("latest_episode")));
}
// Process ratings
if (json.hasField("allRatings")) {
details.setAllRatings(deserializeStringList(json.get("allRatings")));
}
// Process VPPs
if (json.hasField("allVPPs")) {
details.setAllVPPs(deserializeStringList(json.get("allVPPs")));
}
// Process IP VPPs
if (json.hasField("allIpVPPs")) {
details.setAllIpVPPs(deserializeStringList(json.get("allIpVPPs")));
}
return details;
}
/**
* Populates the base Result fields from a JSON object.
*
* @param result The Result object to populate
* @param json The JSON object containing the values
*/
private static void populateResultFields(Result result, JSON json) {
result.setType(getStringValue(json, "type"));
result.setAlphaSortOn(getStringValue(json, "alphaSortOn"));
result.setAvailableOutOfHome(getBooleanValue(json, "availableOutOfHome"));
result.setLinearAvailableOutOfHome(getBooleanValue(json, "linearAvailableOutOfHome"));
result.setLinearAvailableInMarket(getBooleanValue(json, "linearAvailableInMarket"));
result.setVodAvailableOutOfHome(getBooleanValue(json, "vodAvailableOutOfHome"));
result.setTvodAvailableOutOfHome(getBooleanValue(json, "tvodAvailableOutOfHome"));
result.setCdvrAvailableOutOfHome(getBooleanValue(json, "cdvrAvailableOutOfHome"));
result.setVodOutOfWindow(getBooleanValue(json, "vodOutOfWindow"));
result.setImage_uri(getStringValue(json, "image_uri"));
result.setNetwork(getStringValue(json, "network"));
result.setTitle(getStringValue(json, "title"));
result.setTitleWithoutArticles(getStringValue(json, "titleWithoutArticles"));
result.setUri(getStringValue(json, "uri"));
result.setSkeletonShelf(getBooleanValue(json, "skeletonShelf"));
}
/**
* Deserializes a JSON array into a list of strings.
*
* @param json The JSON array
* @return A list of strings
*/
private static List<String> deserializeStringList(JSON json) {
List<String> result = new ArrayList<>();
if (json != null && json.isArray()) {
for (int i = 0; i < json.size(); i++) {
result.add(json.get(i).toString());
}
}
return result;
}
/**
* Safely gets a string value from a JSON object.
*
* @param json The JSON object
* @param field The field name
* @return The string value, or null if not present
*/
private static String getStringValue(JSON json, String field) {
if (json == null || !json.hasField(field)) {
return null;
}
Object value = json.get(field);
return value != null ? value.toString() : null;
}
/**
* Safely gets a boolean value from a JSON object.
*
* @param json The JSON object
* @param field The field name
* @return The boolean value, or false if not present
*/
private static boolean getBooleanValue(JSON json, String field) {
if (json == null || !json.hasField(field)) {
return false;
}
Object value = json.get(field);
if (value instanceof Boolean) {
return (Boolean) value;
} else if (value != null) {
return Boolean.parseBoolean(value.toString());
}
return false;
}
/**
* Safely gets an integer value from a JSON object.
*
* @param json The JSON object
* @param field The field name
* @return The integer value, or 0 if not present
*/
private static int getIntValue(JSON json, String field) {
if (json == null || !json.hasField(field)) {
return 0;
}
Object value = json.get(field);
if (value instanceof Number) {
return ((Number) value).intValue();
} else if (value != null) {
try {
return Integer.parseInt(value.toString());
} catch (NumberFormatException e) {
return 0;
}
}
return 0;
}
}Editor is loading...
Leave a Comment