summaryrefslogtreecommitdiff
path: root/src/main/java/com/mavlushechka/a1qa/utils/JSONParser.java
blob: b98fcec5460d7744d5d14d3aad9bba28b3f61c3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.mavlushechka.a1qa.utils;

import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;

import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.Optional;
import java.util.TreeMap;

public class JSONParser {

    private final static org.json.simple.parser.JSONParser jsonParser = new org.json.simple.parser.JSONParser();
    private final static TreeMap<String, String> parsedData = new TreeMap<>();


    public static String parse(String filename, String key) {
        Map.Entry<String, String> ceilingEntry = parsedData.ceilingEntry(filename + ".");
        String requiredData;

        if (ceilingEntry == null || !ceilingEntry.getKey().startsWith(filename + ".")) {
            parseFile(filename);
        }
        requiredData = parsedData.get(filename + "." + key);

        return Optional.ofNullable(requiredData).orElseThrow(() -> new IllegalArgumentException("Cannot find required data."));
    }

    private static void parseFile(String filename) {
        JSONObject jsonObject;

        try (FileReader fileReader = new FileReader("src/main/resources/" + filename + ".json")) {
            jsonObject = (JSONObject) jsonParser.parse(fileReader);
        } catch (ParseException | IOException e) {
            throw new IllegalArgumentException("Cannot find required file.");
        }
        putToParsedData(jsonObject, filename);
    }

    private static void putToParsedData(JSONObject jsonObject, String filename) {
        for (int i = 0; i < jsonObject.keySet().size(); i++) {
            String[] keyValues = jsonObject.values().toArray()[i].toString().replaceAll("[{}\"\\\\]", "").split(",");

            for (String keyValue : keyValues) {
                String[] splitKeyValue = keyValue.split(":", 2);

                parsedData.put(filename + "." + jsonObject.keySet().toArray()[i] + "." + splitKeyValue[0], splitKeyValue[1]);
            }
        }
    }

}