1 package be
.nikiroo
.fanfix
.data
;
3 import java
.util
.ArrayList
;
6 import org
.json
.JSONArray
;
7 import org
.json
.JSONException
;
8 import org
.json
.JSONObject
;
10 import be
.nikiroo
.fanfix
.data
.Paragraph
.ParagraphType
;
11 import be
.nikiroo
.utils
.Progress
;
14 static public JSONObject
toJson(MetaData meta
) {
19 JSONObject json
= new JSONObject();
21 put(json
, "", MetaData
.class.getName());
22 put(json
, "luid", meta
.getLuid());
23 put(json
, "title", meta
.getTitle());
24 put(json
, "author", meta
.getAuthor());
25 put(json
, "source", meta
.getSource());
26 put(json
, "url", meta
.getUrl());
27 put(json
, "words", meta
.getWords());
28 put(json
, "creation_date", meta
.getCreationDate());
29 put(json
, "date", meta
.getDate());
30 put(json
, "lang", meta
.getLang());
31 put(json
, "publisher", meta
.getPublisher());
32 put(json
, "subject", meta
.getSubject());
33 put(json
, "type", meta
.getType());
34 put(json
, "uuid", meta
.getUuid());
35 put(json
, "fake_cover", meta
.isFakeCover());
36 put(json
, "image_document", meta
.isImageDocument());
38 put(json
, "resume", toJson(meta
.getResume()));
39 put(json
, "tags", new JSONArray(meta
.getTags()));
51 * @throws JSONException
52 * when it cannot be converted
54 static public MetaData
toMetaData(JSONObject json
) {
59 MetaData meta
= new MetaData();
61 meta
.setLuid(getString(json
, "luid"));
62 meta
.setTitle(getString(json
, "title"));
63 meta
.setAuthor(getString(json
, "author"));
64 meta
.setSource(getString(json
, "source"));
65 meta
.setUrl(getString(json
, "url"));
66 meta
.setWords(getLong(json
, "words", 0));
67 meta
.setCreationDate(getString(json
, "creation_date"));
68 meta
.setDate(getString(json
, "date"));
69 meta
.setLang(getString(json
, "lang"));
70 meta
.setPublisher(getString(json
, "publisher"));
71 meta
.setSubject(getString(json
, "subject"));
72 meta
.setType(getString(json
, "type"));
73 meta
.setUuid(getString(json
, "uuid"));
74 meta
.setFakeCover(getBoolean(json
, "fake_cover", false));
75 meta
.setImageDocument(getBoolean(json
, "image_document", false));
77 meta
.setResume(toChapter(getJson(json
, "resume")));
78 meta
.setTags(toListString(getJsonArr(json
, "tags")));
83 static public JSONObject
toJson(Story story
) {
88 JSONObject json
= new JSONObject();
89 put(json
, "", Story
.class.getName());
90 put(json
, "meta", toJson(story
.getMeta()));
92 List
<JSONObject
> chapters
= new ArrayList
<JSONObject
>();
93 for (Chapter chap
: story
) {
94 chapters
.add(toJson(chap
));
96 put(json
, "chapters", new JSONArray(chapters
));
107 * @throws JSONException
108 * when it cannot be converted
110 static public Story
toStory(JSONObject json
) {
115 Story story
= new Story();
116 story
.setMeta(toMetaData(getJson(json
, "meta")));
117 story
.setChapters(toListChapter(getJsonArr(json
, "chapters")));
122 static public JSONObject
toJson(Chapter chap
) {
127 JSONObject json
= new JSONObject();
128 put(json
, "", Chapter
.class.getName());
129 put(json
, "name", chap
.getName());
130 put(json
, "number", chap
.getNumber());
131 put(json
, "words", chap
.getWords());
133 List
<JSONObject
> paragraphs
= new ArrayList
<JSONObject
>();
134 for (Paragraph para
: chap
) {
135 paragraphs
.add(toJson(para
));
137 put(json
, "paragraphs", new JSONArray(paragraphs
));
148 * @throws JSONException
149 * when it cannot be converted
151 static public Chapter
toChapter(JSONObject json
) {
156 Chapter chap
= new Chapter(getInt(json
, "number", 0),
157 getString(json
, "name"));
158 chap
.setWords(getLong(json
, "words", 0));
160 chap
.setParagraphs(toListParagraph(getJsonArr(json
, "paragraphs")));
166 static public JSONObject
toJson(Paragraph para
) {
171 JSONObject json
= new JSONObject();
173 put(json
, "", Paragraph
.class.getName());
174 put(json
, "content", para
.getContent());
175 put(json
, "words", para
.getWords());
177 put(json
, "type", para
.getType().toString());
189 * @throws JSONException
190 * when it cannot be converted
192 static public Paragraph
toParagraph(JSONObject json
) {
197 Paragraph para
= new Paragraph(
198 ParagraphType
.valueOf(getString(json
, "type")),
199 getString(json
, "content"), getLong(json
, "words", 0));
204 // only supported option: a MetaData called "meta"
205 static public JSONObject
toJson(Progress pg
) {
206 return toJson(pg
, null);
209 // only supported option: a MetaData called "meta"
210 static private JSONObject
toJson(Progress pg
, Double weight
) {
215 // Supported keys: meta (only keep the key on the main parent, where
217 MetaData meta
= null;
218 if (weight
== null) {
219 Object ometa
= pg
.get("meta");
220 if (ometa
instanceof MetaData
) {
221 meta
= getMetaLight((MetaData
) ometa
);
226 JSONObject json
= new JSONObject();
228 put(json
, "", Progress
.class.getName());
229 put(json
, "name", pg
.getName());
230 put(json
, "min", pg
.getMin());
231 put(json
, "max", pg
.getMax());
232 put(json
, "progress", pg
.getRelativeProgress());
233 put(json
, "weight", weight
);
234 put(json
, "meta", meta
);
236 List
<JSONObject
> children
= new ArrayList
<JSONObject
>();
237 for (Progress child
: pg
.getChildren()) {
238 children
.add(toJson(child
, pg
.getWeight(child
)));
240 put(json
, "children", new JSONArray(children
));
245 // only supported option: a MetaData called "meta"
246 static public Progress
toProgress(JSONObject json
) {
251 Progress pg
= new Progress( //
252 getString(json
, "name"), //
253 getInt(json
, "min", 0), //
254 getInt(json
, "max", 100) //
257 pg
.setRelativeProgress(getDouble(json
, "progress", 0));
259 Object meta
= getObject(json
, "meta");
261 pg
.put("meta", meta
);
264 JSONArray jchildren
= getJsonArr(json
, "children");
265 for (int i
= 0; i
< jchildren
.length(); i
++) {
267 JSONObject jchild
= jchildren
.getJSONObject(i
);
268 Double weight
= getDouble(jchild
, "weight", 0);
269 pg
.addProgress(toProgress(jchild
), weight
);
270 } catch (Exception e
) {
277 static public List
<String
> toListString(JSONArray array
) {
279 List
<String
> values
= new ArrayList
<String
>();
280 for (int i
= 0; i
< array
.length(); i
++) {
281 values
.add(array
.getString(i
));
289 static public List
<Paragraph
> toListParagraph(JSONArray array
) {
291 List
<Paragraph
> values
= new ArrayList
<Paragraph
>();
292 for (int i
= 0; i
< array
.length(); i
++) {
293 JSONObject value
= array
.getJSONObject(i
);
294 values
.add(toParagraph(value
));
302 static private List
<Chapter
> toListChapter(JSONArray array
) {
304 List
<Chapter
> values
= new ArrayList
<Chapter
>();
305 for (int i
= 0; i
< array
.length(); i
++) {
306 JSONObject value
= array
.getJSONObject(i
);
307 values
.add(toChapter(value
));
315 static private void put(JSONObject json
, String key
, Object o
) {
316 json
.put(key
, o
== null ? JSONObject
.NULL
: o
);
319 static private Object
getObject(JSONObject json
, String key
) {
322 return json
.get(key
);
323 } catch (Exception e
) {
324 // Can fail if content was NULL!
331 static private String
getString(JSONObject json
, String key
) {
332 Object o
= getObject(json
, key
);
333 if (o
instanceof String
)
339 static private long getLong(JSONObject json
, String key
, long def
) {
340 Object o
= getObject(json
, key
);
341 if (o
instanceof Byte
)
343 if (o
instanceof Short
)
345 if (o
instanceof Integer
)
347 if (o
instanceof Long
)
353 static private double getDouble(JSONObject json
, String key
, double def
) {
354 Object o
= getObject(json
, key
);
355 if (o
instanceof Byte
)
357 if (o
instanceof Short
)
359 if (o
instanceof Integer
)
361 if (o
instanceof Long
)
363 if (o
instanceof Float
)
365 if (o
instanceof Double
)
371 static private boolean getBoolean(JSONObject json
, String key
,
373 Object o
= getObject(json
, key
);
374 if (o
instanceof Boolean
) {
381 static private int getInt(JSONObject json
, String key
, int def
) {
382 Object o
= getObject(json
, key
);
383 if (o
instanceof Byte
)
385 if (o
instanceof Short
)
387 if (o
instanceof Integer
)
389 if (o
instanceof Long
) {
391 return (int) (long) ((Long
) o
);
392 } catch (Exception e
) {
399 static private JSONObject
getJson(JSONObject json
, String key
) {
400 Object o
= getObject(json
, key
);
401 if (o
instanceof JSONObject
) {
402 return (JSONObject
) o
;
408 static private JSONArray
getJsonArr(JSONObject json
, String key
) {
409 Object o
= getObject(json
, key
);
410 if (o
instanceof JSONArray
) {
411 return (JSONArray
) o
;
418 static private MetaData
getMetaLight(MetaData meta
) {
419 MetaData light
= null;
421 if (meta
.getCover() == null) {
424 light
= meta
.clone();
425 light
.setCover(null);