Skip to content

Commit eb49327

Browse files
committed
Deserialize JSON and parse Ships
1 parent 78bd494 commit eb49327

File tree

12 files changed

+651
-86
lines changed

12 files changed

+651
-86
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# Kongou
2-
(WIP) A Kotlin wrapper for Azur Lane JSON
2+
A Kotlin wrapper for Azur Lane JSON

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
`build-scan`
3-
kotlin("jvm") version "1.3.60"
3+
kotlin("jvm") version "1.3.61"
44
}
55

66
group = "com.github.sylux6.kongou"
@@ -16,6 +16,7 @@ dependencies {
1616
testImplementation("org.junit.jupiter:junit-jupiter:5.5.2")
1717
implementation("com.github.kittinunf.fuel:fuel:2.2.1")
1818
implementation("com.github.kittinunf.fuel:fuel-json:2.2.1")
19+
implementation("org.json", "json", "20190722")
1920
}
2021

2122
tasks.test {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.sylux6.kongou.database
2+
3+
import com.github.kittinunf.fuel.httpGet
4+
import com.github.kittinunf.fuel.json.responseJson
5+
import com.github.sylux6.kongou.internal.entities.Ship
6+
import com.github.sylux6.kongou.internal.exceptions.DatabaseException
7+
import com.github.sylux6.kongou.utils.ShipParser
8+
import org.json.JSONObject
9+
10+
/**
11+
* JSON deserializer object
12+
*/
13+
object Haruna {
14+
15+
private lateinit var database: JSONObject
16+
var shipsById = HashMap<String, Ship>()
17+
var shipsByName = HashMap<String, Ship>()
18+
19+
init {
20+
reloadDatabase()
21+
}
22+
23+
fun loadJSON(): JSONObject {
24+
val (_, response, result) = HarunaInfo.JSON_SOURCE
25+
.httpGet()
26+
.responseJson()
27+
return if (response.statusCode == 200) {
28+
result.get().obj()
29+
} else {
30+
throw DatabaseException("Could not load database: (error ${response.statusCode})")
31+
}
32+
}
33+
34+
fun reloadDatabase() {
35+
try {
36+
database = loadJSON()
37+
for (shipId in database.keySet()) {
38+
val ship = ShipParser.jsonToShip(database.getJSONObject(shipId), shipId)
39+
shipsById[ship.id] = ship
40+
shipsByName[ship.names.en] = ship
41+
}
42+
} catch (e: Exception) {
43+
throw DatabaseException("Could not reload database: (${e.message})")
44+
}
45+
}
46+
}

src/main/kotlin/com/github/sylux6/kongou/json/HarunaInfo.kt renamed to src/main/kotlin/com/github/sylux6/kongou/database/HarunaInfo.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.sylux6.kongou.json
1+
package com.github.sylux6.kongou.database
22

33
/**
44
* JSON deserializer info
Lines changed: 122 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,162 @@
11
package com.github.sylux6.kongou.internal.entities
22

3+
/**
4+
* Stars of a ship
5+
* @param stars
6+
* @param value
7+
*/
38
data class Stars (
49
val stars: String,
510
val value: Int
611
)
712

13+
/**
14+
* Details about a skin of a ship
15+
* @param enClient
16+
* @param cnClient
17+
* @param jpClient
18+
* @param obtainedFrom
19+
* @param cost
20+
* @param isLive2D
21+
*/
822
data class SkinInfo (
23+
val enClient: String,
24+
val cnClient: String,
25+
val jpClient: String,
926
val obtainedFrom: String,
10-
val live2D: Boolean
27+
val cost: Int,
28+
val isLive2D: Boolean
1129
)
1230

31+
/**
32+
* Skin of a ship
33+
* @param image
34+
* @param background
35+
* @param name
36+
* @param chibi
37+
* @param info
38+
*/
1339
data class Skin (
1440
val image: String,
15-
val background: String,
41+
val background: String?,
1642
val name: String,
17-
val chibi: String,
18-
val info: SkinInfo
43+
val chibi: String?,
44+
val info: SkinInfo?
1945
)
2046

47+
/**
48+
* Names of a ship in different language
49+
* @param jp japanese name
50+
* @param kr korean name
51+
* @param en english name
52+
* @param cn chinese name
53+
*/
2154
data class Name (
22-
val jp: String,
23-
val kr: String,
55+
val jp: String?,
56+
val kr: String?,
2457
val en: String,
25-
val cn: String
58+
val cn: String?
2659
)
2760

61+
/**
62+
* Stats details
63+
* @param speed
64+
* @param aviation
65+
* @param health
66+
* @param torpedo
67+
* @param evasion
68+
* @param luck
69+
* @param armor
70+
* @param reload
71+
* @param antiAir
72+
* @param oil
73+
* @param accuracy
74+
* @param antiSub
75+
* @param firepower
76+
*/
2877
data class StatsDetails (
29-
val speed: String,
30-
val aviation: String,
31-
val health: String,
32-
val torpedo: String,
33-
val evasion: String,
34-
val luck: String,
78+
val speed: Int,
79+
val aviation: Int,
80+
val health: Int,
81+
val torpedo: Int,
82+
val evasion: Int,
83+
val luck: Int,
3584
val armor: String,
36-
val reload: String,
37-
val antiAir: String,
38-
val oil: String,
39-
val accuracy: String,
40-
val antiSub: String,
41-
val firepower: String
85+
val reload: Int,
86+
val antiAir: Int,
87+
val oil: Int,
88+
val accuracy: Int,
89+
val antiSub: Int,
90+
val firepower: Int
4291
)
4392

93+
/**
94+
* Base stats and stats of a ship at level 120, 100
95+
* @param level120
96+
* @param level100
97+
* @param base
98+
*/
4499
data class Stats (
45100
val level120: StatsDetails,
46101
val level100: StatsDetails,
47102
val base: StatsDetails
48103
)
49104

105+
/**
106+
* Url
107+
* @param name
108+
* @param url
109+
*/
110+
data class Url (
111+
val name: String,
112+
val url: String
113+
)
114+
115+
/**
116+
* Miscellaneous info of a ship
117+
* @param voice
118+
* @param twitter
119+
* @param artist
120+
* @param web
121+
* @param pixiv
122+
*/
50123
data class Miscellaneous (
51-
val voice: String,
52-
val twitter: String,
53-
val artist: String,
54-
val web: String,
55-
val pixiv: String
124+
val voice: String?,
125+
val twitter: Url?,
126+
val artist: String?,
127+
val web: Url?,
128+
val pixiv: Url?
56129
)
57130

131+
/**
132+
* Class representation of a ship
133+
* @param thumbnail
134+
* @param buildTime
135+
* @param stars
136+
* @param skins
137+
* @param names
138+
* @param nationality
139+
* @param rarity
140+
* @param stats
141+
* @param wikiUrl
142+
* @param id
143+
* @param shipClass
144+
* @param hullType
145+
* @param misc
146+
*/
58147
data class Ship (
59-
val thumbnail: String,
60-
val buildTime: String,
61-
val stars: Stars,
62-
val skins: List<Skin>,
63-
val names: Name,
64-
val nationality: String,
65-
val stats: Stats,
66148
val wikiUrl: String,
67149
val id: String,
150+
val names: Name,
68151
val shipClass: String,
152+
val nationality: String,
69153
val hullType: String,
70-
val misc: Miscellaneous
154+
val thumbnail: String,
155+
val skins: List<Skin>,
156+
val buildTime: String,
157+
val rarity: String,
158+
val stars: Stars?,
159+
val stats: Stats?,
160+
val misc: Miscellaneous?
71161
)
72162

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package com.github.sylux6.kongou.internal.exceptions
22

3-
class ApiException {
3+
class ApiException(s: String = "") : Exception(s) {
44
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.github.sylux6.kongou.internal.exceptions
2+
3+
import java.lang.Exception
4+
5+
class DatabaseException(s: String = "") : Exception(s) {
6+
}

src/main/kotlin/com/github/sylux6/kongou/json/Haruna.kt

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)