1+ package com.developerbreach.developerbreach.repository.network
2+
3+ import com.developerbreach.developerbreach.model.*
4+ import com.developerbreach.developerbreach.utils.*
5+ import com.developerbreach.developerbreach.utils.JsonProperty.Values
6+ import org.json.JSONArray
7+ import org.json.JSONObject
8+ import kotlin.collections.ArrayList
9+
10+
11+ class JsonData {
12+
13+ private val assertEmptyAssertion: String = " "
14+
15+ private fun ifHasString (
16+ jsonObject : JSONObject ,
17+ value : String
18+ ): String {
19+ var resultString = assertEmptyAssertion
20+ if (jsonObject.has(value)) {
21+ resultString = jsonObject.getString(value)
22+ }
23+ return resultString
24+ }
25+
26+ private fun ifHasInt (
27+ jsonObject : JSONObject ,
28+ value : String
29+ ): Int {
30+ var resultString = 0
31+ if (jsonObject.has(value)) {
32+ resultString = jsonObject.getInt(value)
33+ }
34+ return resultString
35+ }
36+
37+ private fun getAuthorAvatarUrl (
38+ jsonObject : JSONObject
39+ ): String {
40+ val avatarsJsonObject = jsonObject.getJSONObject(JsonProperty .Objects .AVATAR_URLS )
41+ return ifHasString(avatarsJsonObject, Values .AUTHOR_AVATAR_HIGH_RES )
42+ }
43+
44+ companion object {
45+
46+ fun fetchAuthorDataById (
47+ response : String
48+ ): Pair <String , String > {
49+
50+ val baseJsonObject = JSONObject (response)
51+ val authorName: String = ifHasString(baseJsonObject, Values .NAME )
52+ val authorAvatarUrl: String = JsonData ().getAuthorAvatarUrl(baseJsonObject)
53+
54+ return Pair (authorName, authorAvatarUrl)
55+ }
56+
57+ fun fetchAuthorsJsonData (
58+ response : String
59+ ): List <Authors > {
60+
61+ val authorsList: MutableList <Authors > = ArrayList ()
62+ val baseJsonArray = JSONArray (response)
63+
64+ for (i: Int in 0 until baseJsonArray.length()) {
65+
66+ val baseJsonObject: JSONObject = baseJsonArray.getJSONObject(i)
67+ val authorId = ifHasInt(baseJsonObject, Values .ID )
68+ val authorName: String = ifHasString(baseJsonObject, Values .NAME )
69+ val authorAvatarUrl: String = JsonData ().getAuthorAvatarUrl(baseJsonObject)
70+
71+ authorsList.add(
72+ Authors (authorId, authorName, authorAvatarUrl)
73+ )
74+ }
75+ return authorsList
76+ }
77+
78+ fun fetchCategoriesJsonData (
79+ response : String
80+ ): List <Categories > {
81+
82+ val categoriesList: MutableList <Categories > = ArrayList ()
83+ val baseJsonArray = JSONArray (response)
84+
85+ for (i: Int in 0 until baseJsonArray.length()) {
86+
87+ val baseJsonObject: JSONObject = baseJsonArray.getJSONObject(i)
88+ val categoryId: Int = ifHasInt(baseJsonObject, Values .ID )
89+ val categoryName: String = ifHasString(baseJsonObject, Values .NAME )
90+
91+ categoriesList.add(
92+ Categories (categoryId, categoryName)
93+ )
94+ }
95+ return categoriesList
96+ }
97+
98+ fun fetchArticleJsonData (
99+ response : String
100+ ): List <Article > {
101+
102+ val articlesNetworkList: MutableList <Article > = ArrayList ()
103+ val baseJsonArray = JSONArray (response)
104+
105+ for (i: Int in 0 until baseJsonArray.length()) {
106+
107+ val baseJsonObject: JSONObject = baseJsonArray.getJSONObject(i)
108+ val jsonObjectTitle = baseJsonObject.getJSONObject(JsonProperty .Objects .TITLE )
109+ val articleId = ifHasInt(baseJsonObject, Values .ID )
110+ val banner: String = ifHasString(baseJsonObject, Values .BANNER )
111+ val title: String = ifHasString(jsonObjectTitle, Values .TITLE )
112+
113+ articlesNetworkList.add(
114+ Article (articleId, title, banner)
115+ )
116+ }
117+ return articlesNetworkList
118+ }
119+
120+
121+ fun fetchArticleJsonDataById (
122+ response : String
123+ ): ArticleDetail {
124+
125+ val baseJsonArray = JSONArray (response)
126+ val baseJsonObject: JSONObject = baseJsonArray.getJSONObject(0 )
127+
128+ val jsonObjectTitle = baseJsonObject.getJSONObject(JsonProperty .Objects .TITLE )
129+ val jsonObjectExcerpt = baseJsonObject.getJSONObject(JsonProperty .Objects .EXCERPT )
130+
131+ val articleId = ifHasInt(baseJsonObject, Values .ID )
132+ val authorId = ifHasInt(baseJsonObject, Values .AUTHOR_ID )
133+ val banner: String = ifHasString(baseJsonObject, Values .BANNER )
134+ val title: String = ifHasString(jsonObjectTitle, Values .TITLE )
135+ val postedDate: String = ifHasString(baseJsonObject, Values .POSTED_DATE )
136+ val urlLink: String = ifHasString(baseJsonObject, Values .URL_LINK )
137+ val excerpt: String = ifHasString(jsonObjectExcerpt, Values .EXCERPT )
138+
139+ return ArticleDetail (
140+ articleId, authorId, title, banner, postedDate, urlLink, excerpt
141+ )
142+ }
143+
144+ fun fetchSearchableArticlesJsonData (
145+ response : String
146+ ): List <Search > {
147+
148+ val articlesNetworkList: MutableList <Search > = ArrayList ()
149+ val baseJsonArray = JSONArray (response)
150+
151+ for (i: Int in 0 until baseJsonArray.length()) {
152+
153+ val baseJsonObject: JSONObject = baseJsonArray.getJSONObject(i)
154+ val articleId = ifHasInt(baseJsonObject, Values .ID )
155+
156+ val jsonObjectTitle = baseJsonObject.getJSONObject(JsonProperty .Objects .TITLE )
157+ val title = ifHasString(jsonObjectTitle, Values .TITLE )
158+
159+ articlesNetworkList.add(
160+ Search (articleId, title)
161+ )
162+ }
163+ return articlesNetworkList
164+ }
165+
166+ private fun ifHasString (
167+ jsonObject : JSONObject ,
168+ value : String
169+ ) = JsonData ().ifHasString(jsonObject, value)
170+
171+ private fun ifHasInt (
172+ jsonObject : JSONObject ,
173+ value : String
174+ ) = JsonData ().ifHasInt(jsonObject, value)
175+ }
176+ }
0 commit comments