Untitled
unknown
plain_text
16 days ago
13 kB
4
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