JsonParser.java 4.2 KB
Newer Older
1
2
3
package de._82grfl1bif.KPI_Visualizer.data;

import org.bukkit.Bukkit;
4
5
6
7
8
9
import org.jetbrains.annotations.NotNull;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import java.io.*;
Florian Grabowski's avatar
Florian Grabowski committed
10
11
12
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
13
14
15
import java.util.logging.Level;

public class JsonParser {
16
    String standardPath = System.getProperty("user.dir");
17

18
    public boolean evalJson(@NotNull String fileName) {
19
20
21
        if (!fileName.contains(".json")) {
            fileName = fileName + ".json";
        } //Add .json in case user forgets
22
23
        if (!(fileName.contains("/"))) {
            fileName = standardPath + "/" + fileName;
24
        }
25
26
27
28
29
30
31
32
33
34
35
36
37
        try (FileReader jsonFileReader = new FileReader(fileName)) {
            JSONParser parser = new JSONParser();
            JSONObject jsonObject = (JSONObject) parser.parse(jsonFileReader);
            if (!(getFileHistory().contains(fileName))) { //if file isn't in history add it.
                try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(standardPath + "/plugins/JsonFileHistory",true))){
                    bufferedWriter.newLine();
                    bufferedWriter.write(fileName);
                } catch (Exception e) {
                    Bukkit.getLogger().log(Level.SEVERE, String.valueOf(e));
                }
            }
            JSONArray entities = (JSONArray) jsonObject.get("entities");
            ArrayList<Klasse> entitiesList = new ArrayList<>();
Florian Grabowski's avatar
Florian Grabowski committed
38
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd kk:mm:ss Z");
39
40
            for (int i=0; i < entities.size(); i++) {
                JSONObject object = (JSONObject) entities.get(i);
Florian Grabowski's avatar
Florian Grabowski committed
41
42
43
44
45
46
47
                JSONArray commits = (JSONArray) ((JSONObject) entities.get(i)).get("commits");
                ArrayList<LocalDateTime> dates = new ArrayList<>();
                for (Object o: commits){
                    Object date = ((JSONObject) o).get("date");
                    LocalDateTime time = LocalDateTime.parse(date.toString(),formatter);
                    dates.add(time);
                }
48
49
50
51
52
53
54
55
                Klasse currentKlasse = new Klasse(
                        Integer.parseInt(object.get("entity_id").toString()),
                        object.get("name").toString(),
                        object.get("path").toString(),
                        Integer.parseInt(object.get("qloc").toString()),
                        Integer.parseInt(object.get("loc").toString()),
                        ((JSONArray) object.get("commits")).size(),
                        ((JSONArray) object.get("functions")).size(),
Florian Grabowski's avatar
Florian Grabowski committed
56
57
58
59
                        ((JSONArray) object.get("variables")).size(),
                        Math.round(Float.parseFloat(object.get("complexity").toString())),
                        dates);
                if(currentKlasse.depth != -1)entitiesList.add(currentKlasse);
60
61
62
            }
            entitiesList.sort(new DepthComparator());
            DataHolder.generateTreeFromKlassenList(entitiesList);
63
64
65
66
67
68
69
        } catch (Exception ex) {
            Bukkit.getLogger().log(Level.SEVERE, String.valueOf(ex));
            return false;
        }
        return true;
    }

70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
    private static class DepthComparator implements Comparator<Klasse> {
        @Override
        public int compare(Klasse o1, Klasse o2) {
            return Integer.compare(o1.depth,o2.depth);
        }
    }

    public List<String> getFileHistory() {
        String path = System.getProperty("user.dir");
        String fileName = "/plugins/JsonFileHistory";
        List<String> filesInHistory = new ArrayList<>();
        try {
            File file = new File(path + fileName);
            if (file.createNewFile()) {//Create file
                return null;
            } //File exists
            BufferedReader br = new BufferedReader(new FileReader(path + fileName));
            String line;
            while ((line = br.readLine()) != null) {
                filesInHistory.add(line);
            }
            br.close();
        } catch (Exception e) {
            Bukkit.getLogger().log(Level.SEVERE, String.valueOf(e));
            return null;
        }
        return filesInHistory;
    }
98
}