diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..15b8bc28e24d7601b055c06ba364453e07aced03
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/src/server/logs/
+*.class
+/.idea/inspectionProfiles/Project_Default.xml
+/.idea/sqldialects.xml
diff --git a/.idea/KPI_Visualizer.iml b/.idea/KPI_Visualizer.iml
index 5238031a375408b9c6347b8e00d8ac1b0c58938f..86244925c0ada3af6a807f73b866954a657fe418 100644
--- a/.idea/KPI_Visualizer.iml
+++ b/.idea/KPI_Visualizer.iml
@@ -18,6 +18,8 @@
+
+
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dd0cc224050391cd6d1e0f7196d9af2a5c84a945
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ mariadb
+ true
+ org.mariadb.jdbc.Driver
+ jdbc:mariadb://localhost:3306
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java
index 7219e60708915dbb961cbfbb6ae3fbe47ad70e61..cbe12755b276016f23f03e8cb0fdc4d17b0f03c7 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/SetPreset.java
@@ -1,83 +1,47 @@
package de._82grfl1bif.KPI_Visualizer.commands;
-import com.google.gson.Gson;
-import com.google.gson.stream.JsonReader;
import de._82grfl1bif.KPI_Visualizer.data.DataHolder;
+import de._82grfl1bif.KPI_Visualizer.structures.Builder;
import de._82grfl1bif.KPI_Visualizer.structures.Building;
import de._82grfl1bif.KPI_Visualizer.structures.Structure;
import org.bukkit.Bukkit;
import org.bukkit.Location;
-import org.bukkit.Material;
import org.bukkit.Server;
-import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
-import java.io.FileReader;
import java.util.logging.Level;
-public class SetPreset implements CommandExecutor{
+public class SetPreset implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
Server server = sender.getServer();
+ Builder builder = new Builder(server);
Player player = server.getPlayer(sender.getName());
- Location location = player.getLocation();
-
- if(location == null){
- Bukkit.getLogger().log(Level.SEVERE,"Keine Location gefunden.");
- return false;
- } //if no Player is found
-
- if (args.length != 1){
- sender.sendMessage("try with one Number behind the command.");
- return false;
- }else {
- Runnable t = new Runnable() {
- @Override
- public void run() {
+ if (player != null) {
+ Location location = player.getLocation();
+ if (args.length != 1) {
+ sender.sendMessage("try with one Number behind the command.");
+ return false;
+ } else {
+ Runnable t = () -> {
DataHolder.foundation.setLocation(location);
DataHolder.generateSimpleData(Integer.parseInt(args[0]));
- fillPlane(server, location, DataHolder.foundation.getWidth(), DataHolder.foundation.getWidth(), DataHolder.foundation.getMaterial());
+ builder.setFoundation(location, DataHolder.foundation.getWidth().x, DataHolder.foundation.getWidth().y, DataHolder.foundation.getMaterial());
for (Structure structure : DataHolder.foundation.getChildren()) {
Building building = (Building) structure;
sender.sendMessage("bau" + building.toString());
- fillQube(server, building.getLocation(), building.getWidth(), building.getHeight(), building.getWidth(), building.getMaterial());//Not yet ready to print foundations
+ builder.fillQube(building.getLocation(), building.getWidth().x, building.getHeight(), building.getWidth().y, building.getMaterial());//Not yet ready to print foundations
}
- }
- };
- t.run();
- }
- return true;
- }
-
- private void fillPlane(Server server, Location startLocation, int x, int z, Material material){
- for (int cx = 0; cx < x; cx++ ) {
- for ( int cz = 0; cz < z; cz++){
- Block block = server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx,0,cz));
- block.setType(material);
+ };
+ t.run();
}
- }
- }
-
- private void fillQube(Server server,Location startLocation, int x, int y, int z, Material material){
- for(int cy = 0; cy < y; cy++){
- fillPlane(server,startLocation.clone().add(0,cy,0),x,z,material);
- }
- }
-
- private boolean evalJson(String fileName){
- if(!fileName.contains(".json")){
- fileName = fileName + ".json";
- } //Add .json in case user forgets
- try(JsonReader reader = new JsonReader(new FileReader("/Users/flgr/Desktop/PaperServer/LayoutJson"+ fileName))){
- Gson gson = new Gson();
-
- }catch (Exception ex){
- Bukkit.getLogger().log(Level.SEVERE, String.valueOf(ex));
+ } else {
+ Bukkit.getLogger().log(Level.SEVERE, "Kein Spieler gefunden.");
return false;
}
return true;
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java
index 3e8426373dbe86400165a90cad9d318103d09165..492f264787326856c49e6c865fd972803ea8b5b1 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/commands/generateLayout.java
@@ -1,13 +1,15 @@
package de._82grfl1bif.KPI_Visualizer.commands;
import de._82grfl1bif.KPI_Visualizer.data.DataHolder;
-import de._82grfl1bif.KPI_Visualizer.structures.Building;
-import de._82grfl1bif.KPI_Visualizer.structures.Foundation;
-import de._82grfl1bif.KPI_Visualizer.structures.Structure;
+import de._82grfl1bif.KPI_Visualizer.data.JsonParser;
+import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.Rectangle;
+import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.Row;
+import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.SquarifiedTreemapLayout;
+import de._82grfl1bif.KPI_Visualizer.structures.*;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
-import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -15,124 +17,75 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
+import java.awt.*;
+import java.util.Map;
+import java.util.logging.Level;
+
public class generateLayout implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
- sender.sendMessage("generating Layout");
+ if (args.length < 2) {
+ sender.sendMessage("please type or select the needed Arguments with tab.");
+ return false;
+ }
+ sender.sendMessage("generating SimpleSquareLayout");
Server server = sender.getServer();
+ Builder builder = new Builder(server);
Player player = server.getPlayer(sender.getName());
- Location location = player.getLocation();
-
- BukkitRunnable t = new BukkitRunnable() {
- @Override
- public void run() {
- DataHolder.ComplexData();
- DataHolder.foundation.setLocation(location);
- DataHolder.foundation.organizeFoundation();
- DataHolder.foundation.correctAllLocations(location);
- setFoundation(server, DataHolder.foundation.getLocation().clone().add(0, DataHolder.foundation.getDepth(), 0), DataHolder.foundation.getWidth(), DataHolder.foundation.getWidth(), DataHolder.foundation.getMaterial());
- setAllChildren(server, DataHolder.foundation);
- }
- };
- t.run();
- return true;
- }
-
- private void setFoundation(Server server, Location startLocation, int x, int z, Material material) {
- for (int cx = 0; cx < x; cx++) {
- for (int cz = 0; cz < z; cz++) {
- Block block = server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx, 0, cz));
- block.setType(material);
- }
- }
- }
-
- private void buildBuilding(Server server, Location startLocation, int x, int y, Material material) {
- setWalls(server, startLocation.clone().add(0, 1, 0), x, y);
- }
-
- private void setWalls(Server server, Location startLocation, int x, int y) {
- Location save = startLocation.clone();
- Location temp = startLocation.clone();
- for (int cx = 0; cx < x - 1; cx++) {// x+x Wall
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(cx,cy,1)).setType(Material.RED_CONCRETE);
- }
- }
- temp = save.clone();
- for (int cz = 0; cz < x - 1; cz++) {// z+x Wall
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(1, cy, cz)).setType(Material.RED_CONCRETE);
- }
- }
- temp = save.clone().add(0, 0, x - 1);
- for (int cx = 0; cx < x; cx++) {// x+x z+x Wall from x+x
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, -1)).setType(Material.RED_CONCRETE);
- }
- }
- temp = save.clone().add(x - 1, 0, 0);
- for (int cz = 0; cz < x - 1; cz++) {// x+x z+x Wall from x+z
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(-1, cy, cz)).setType(Material.RED_CONCRETE);
- }
- }
-
- temp = save.clone();
- for (int cx = 0; cx < x - 1; cx++) {// x+x Wall
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(Material.GLASS);
- }
- }
- temp = save.clone();
- for (int cz = 0; cz < x - 1; cz++) {// z+x Wall
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(Material.GLASS);
- }
- }
- temp = save.clone().add(0, 0, x - 1);
- for (int cx = 0; cx < x; cx++) {// x+x z+x Wall from x+x
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(Material.GLASS);
- }
- }
- temp = save.clone().add(x - 1, 0, 0);
- for (int cz = 0; cz < x - 1; cz++) {// x+x z+x Wall from x+z
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(Material.GLASS);
- }
+ JsonParser jsonParser = new JsonParser();
+ if (!jsonParser.evalJson(args[0])) {
+ sender.sendMessage("failed to parse Json");
+ return false;
}
+ if (player != null) { //check if Player exists for getting Start coordinates.
+ Location location = player.getLocation();
+ if (args[1].equals("SquarifiedTreemap")) { //check 2. Argument whether to use SquarifiedTreemap or SimpleSquare Layout.
+ BukkitRunnable t = new BukkitRunnable() {
+ @Override
+ public void run() {
+ SquarifiedTreemapLayout squarifiedTreemapLayout = new SquarifiedTreemapLayout();
+ squarifiedTreemapLayout.generateLayout(DataHolder.foundation, new Rectangle(DataHolder.foundation.getArea(), Math.sqrt(DataHolder.foundation.getArea()), new Point(0, 0)));
+ builder.setFoundation(location,(int)Math.round(Math.sqrt(DataHolder.foundation.getArea())),(int)Math.round(Math.sqrt(DataHolder.foundation.getArea())), Material.COBBLESTONE);
+ for (Row row : squarifiedTreemapLayout.getRows()) {
+ for (Map.Entry entry : row.getRectangles().entrySet()) {
+ Rectangle r = entry.getKey();
+ Structure s = entry.getValue();
+ if(s.getClass() == Foundation.class){
+ builder.setFoundation(location.clone().add(r.getOrigin().x,s.getDepth(),r.getOrigin().y),(int)(r.getWidth()),(int)(r.getHeight()),s.getMaterial());
+ }else{
+ builder.fillQube(location.clone().add(r.getOrigin().x,s.getDepth()+100,r.getOrigin().y),(int)(r.getWidth()),((Building)s).getHeight(),(int)(r.getHeight()),s.getMaterial());
+ }
+ if(r.getHeight() >= 5 && r.getWidth() >= 5){
- temp = save.clone();
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE);
- }
- temp = save.clone().add(x - 1, 0, 0);
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE);
- }
- temp = save.clone().add(0, 0, x - 1);
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE);
- }
- temp = save.clone().add(x - 1, 0, x - 1);
- for (int cy = 0; cy < y; cy++) {
- server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(Material.BLACKSTONE);
- }
-
- save.add(0,y,0);//roof
- setFoundation(server,save,x,x,Material.BLACKSTONE);
- }
-
- private void setAllChildren(Server server, Foundation foundation) {
- for (Structure s : foundation.getChildren()) {
- if (s.getClass() == Foundation.class) {
- setFoundation(server, s.getLocation().clone().add(0, s.getDepth(), 0), s.getWidth(), s.getWidth(), s.getMaterial());
- setAllChildren(server, (Foundation) s);
+ }else{
+ Bukkit.getLogger().log(Level.SEVERE,"the rectangle is too small");
+ }
+ }
+ }
+ }
+ };
+ t.run();
+ return true;
} else {
- buildBuilding(server, s.getLocation().clone().add(1, s.getDepth(), 1), s.getWidth() - 2, ((Building) s).getHeight(), s.getMaterial());
+ BukkitRunnable t = new BukkitRunnable() {
+ @Override
+ public void run() {
+ DataHolder.foundation.setLocation(location);
+ DataHolder.foundation.organizeFoundation();
+ DataHolder.foundation.correctAllLocations(location);
+ builder.setFoundation(DataHolder.foundation.getLocation().clone().add(0, DataHolder.foundation.getDepth(), 0), DataHolder.foundation.getWidth().x, DataHolder.foundation.getWidth().x, DataHolder.foundation.getMaterial());
+ builder.setAllChildren(DataHolder.foundation);
+ builder.setLegend(location);
+ }
+ };
+ t.run();
+ return true;
}
+
+ } else {
+ Bukkit.getLogger().log(Level.SEVERE, "Kein Spieler gefunden.");
+ return false;
}
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java
index 83c8afd272a91f93829349ec891ae182c8946a80..de8bdd967b8300253fb58fc03f4b0c49ed506eaa 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/DataHolder.java
@@ -12,63 +12,94 @@ public class DataHolder {
public static Foundation foundation = new Foundation(0, Material.COBBLESTONE);
- public static void generateSimpleData(int buildingCount){
+ @Deprecated
+ public static void generateSimpleData(int buildingCount) {
foundation.removeChildren();
ArrayList buildings = new ArrayList<>();
- for(int c = 0; c < buildingCount; c++){
+ for (int c = 0; c < buildingCount; c++) {
buildings.add(generateBuilding());
}
foundation.addChildren(buildings);
foundation.optimizeLayout();
}
- public static void ComplexData(){
- Foundation foundation3 = new Foundation(3,Material.BLACK_CONCRETE);
- ArrayList buildins3 = new ArrayList<>();
+ @Deprecated
+ public static void ComplexData() {
+ Foundation foundation3 = new Foundation(3, Material.BLACK_CONCRETE);
+ ArrayList buildings3 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
- buildins3.add(generateBuilding());
+ buildings3.add(generateBuilding());
}
- foundation3.addChildren(buildins3);
+ foundation3.addChildren(buildings3);
-
- ArrayList buildins2_1 = new ArrayList<>();
- Foundation foundation2_1 = new Foundation(2,Material.BROWN_CONCRETE);
+ ArrayList buildings2_1 = new ArrayList<>();
+ Foundation foundation2_1 = new Foundation(2, Material.BROWN_CONCRETE);
for (int i = 0; i < 5; i++) {
- buildins2_1.add(generateBuilding());
+ buildings2_1.add(generateBuilding());
}
- buildins2_1.add(foundation3);
- foundation2_1.addChildren(buildins2_1);
+ buildings2_1.add(foundation3);
+ foundation2_1.addChildren(buildings2_1);
- ArrayList buildins2_2 = new ArrayList<>();
- Foundation foundation2_2 = new Foundation(2,Material.LIGHT_GRAY_CONCRETE);
+ ArrayList buildings2_2 = new ArrayList<>();
+ Foundation foundation2_2 = new Foundation(2, Material.LIGHT_GRAY_CONCRETE);
for (int i = 0; i < 5; i++) {
- buildins2_2.add(generateBuilding());
+ buildings2_2.add(generateBuilding());
}
- foundation2_2.addChildren(buildins2_2);
+ foundation2_2.addChildren(buildings2_2);
- ArrayList buildins1 = new ArrayList<>();
- Foundation foundation1 = new Foundation(1,Material.GRAY_CONCRETE);
+ ArrayList buildings1 = new ArrayList<>();
+ Foundation foundation1 = new Foundation(1, Material.GRAY_CONCRETE);
for (int i = 0; i < 5; i++) {
- buildins1.add(generateBuilding());
+ buildings1.add(generateBuilding());
}
- buildins1.add(foundation2_1);
- buildins1.add(foundation2_2);
- foundation1.addChildren(buildins1);
+ buildings1.add(foundation2_1);
+ buildings1.add(foundation2_2);
+ foundation1.addChildren(buildings1);
- ArrayList buildins0 = new ArrayList<>();
+ ArrayList buildings0 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
- buildins1.add(generateBuilding());
+ buildings1.add(generateBuilding());
}
- buildins0.add(foundation1);
- foundation = new Foundation(0,Material.COBBLESTONE);
- foundation.addChildren(buildins0);
+ buildings0.add(foundation1);
+ foundation = new Foundation(0, Material.COBBLESTONE);
+ foundation.addChildren(buildings0);
foundation.setDepth(0);
}
+ public static void generateTreeFromKlassenList(ArrayList klassen) {
+ foundation = new Foundation(0, Material.YELLOW_CONCRETE);
+ ArrayList Pakete = new ArrayList<>();
+ for (Klasse currentKlasse : klassen) {
+ if (currentKlasse.depth >= 0) {
+ String[] strings = currentKlasse.path.split("/");
+ Foundation f = foundation;
+ StringBuilder sb = new StringBuilder();
+ for (int i = 2; i < currentKlasse.depth + 2; i++) {
+ sb.append(strings[i]);
+ if (!(strings[i].contains(".java"))){//is foundation
+ sb.append("/");
+ }
+ if (foundation.getFromTree(sb.toString()) == null) {// checks Tree for Element doesn't find it
+ if (strings[i].contains(".java")) {//is not foundation
+ f.generateChild(false, currentKlasse, sb.toString());
+ f = foundation;
+ } else {
+ f = (Foundation) f.generateChild(true,currentKlasse,sb.toString());
+ }
+ }else{//finds Element in tree
+ if ((foundation.getFromTree(sb.toString()).getClass() == Foundation.class)){
+ f = (Foundation) foundation.getFromTree(sb.toString());
+ }
+ }
+ }
+ }
+ }
+ }
+
private static Building generateBuilding() {
- Building result = new Building(ThreadLocalRandom.current().nextInt(4, 60 + 1),ThreadLocalRandom.current().nextInt(4, 200 + 1),Material.LIME_CONCRETE);
+ Building result = new Building(ThreadLocalRandom.current().nextInt(4, 60 + 1), ThreadLocalRandom.current().nextInt(4, 200 + 1), Material.LIME_CONCRETE);
result.setLocation(foundation.getLocation());
return result;
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/JsonParser.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/JsonParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..31e1318ff6a0454e71b94449fd47fb4eccd3ee80
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/JsonParser.java
@@ -0,0 +1,98 @@
+package de._82grfl1bif.KPI_Visualizer.data;
+
+import org.bukkit.Bukkit;
+import org.jetbrains.annotations.NotNull;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.io.*;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.logging.Level;
+
+public class JsonParser {
+ String standardPath = System.getProperty("user.dir");
+
+ public boolean evalJson(@NotNull String fileName) {
+ if (!fileName.contains(".json")) {
+ fileName = fileName + ".json";
+ } //Add .json in case user forgets
+ if (!(fileName.contains("/"))) {
+ fileName = standardPath + "/" + fileName;
+ }
+ 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 entitiesList = new ArrayList<>();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd kk:mm:ss Z");
+ for (int i=0; i < entities.size(); i++) {
+ JSONObject object = (JSONObject) entities.get(i);
+ JSONArray commits = (JSONArray) ((JSONObject) entities.get(i)).get("commits");
+ ArrayList dates = new ArrayList<>();
+ for (Object o: commits){
+ Object date = ((JSONObject) o).get("date");
+ LocalDateTime time = LocalDateTime.parse(date.toString(),formatter);
+ dates.add(time);
+ }
+ 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(),
+ ((JSONArray) object.get("variables")).size(),
+ Math.round(Float.parseFloat(object.get("complexity").toString())),
+ dates);
+ if(currentKlasse.depth != -1)entitiesList.add(currentKlasse);
+ }
+ entitiesList.sort(new DepthComparator());
+ DataHolder.generateTreeFromKlassenList(entitiesList);
+ } catch (Exception ex) {
+ Bukkit.getLogger().log(Level.SEVERE, String.valueOf(ex));
+ return false;
+ }
+ return true;
+ }
+
+ private static class DepthComparator implements Comparator {
+ @Override
+ public int compare(Klasse o1, Klasse o2) {
+ return Integer.compare(o1.depth,o2.depth);
+ }
+ }
+
+ public List getFileHistory() {
+ String path = System.getProperty("user.dir");
+ String fileName = "/plugins/JsonFileHistory";
+ List 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;
+ }
+}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/Klasse.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/Klasse.java
new file mode 100644
index 0000000000000000000000000000000000000000..d401cd44131f8425de152c1cdf8d528588d74189
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/Klasse.java
@@ -0,0 +1,102 @@
+package de._82grfl1bif.KPI_Visualizer.data;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+
+public class Klasse {
+ public String name;
+ public String path;
+
+ public int qloc;
+ public static int qlocMin = Integer.MAX_VALUE;
+ public static int qlocMax;
+ public int loc;
+ public static int locMin= Integer.MAX_VALUE;
+ public static int locMax;
+ public int commits;
+ public static int commitsMin= Integer.MAX_VALUE;
+ public static int commitsMax;
+ public int depth;
+ public static int depthMax;
+ public int complexity;
+ public static int complexityMax;
+ public static int complexityMin= Integer.MAX_VALUE;
+
+ public final int id;
+
+ public int functions;
+ public static int functionsMin= Integer.MAX_VALUE;
+ public static int functionsMax;
+ public int variables;
+ public static int variablesMin= Integer.MAX_VALUE;
+ public static int variablesMax;
+
+ public Duration bearbeiteteZeit;
+ public static Duration bearbeiteteZeitMin;
+ public static Duration bearbeiteteZeitMax;
+ public Duration zeitSeitLetzterBearbeitung;
+ public static Duration zeitSeitLetzterBearbeitungMin;
+ public static Duration zeitSeitLetzterBearbeitungMax;
+ public Duration zeitSeitErstemCommit;
+ public static Duration zeitSeitErstemCommitMin;
+ public static Duration zeitSeitErstemCommitMax;
+ ArrayList commitTimes;
+
+ public Klasse(int id, String name, String path, int qloc, int loc, int commits, int functions, int variables,int complexity, ArrayList commitTimes){
+ this.id = id;
+ this.commits = commits;
+ commitsMax = Math.max(commitsMax,commits);
+ commitsMin = Math.min(commitsMin,commits);
+ this.depth = getDepthOfPath(path);
+ depthMax = Math.max(depthMax,depth);
+ this.loc = loc;
+ locMax = Math.max(locMax,loc);
+ locMin = Math.min(locMin,loc);
+ this.qloc = qloc;
+ qlocMax = Math.max(qlocMax,qloc);
+ qlocMin = Math.min(qlocMin,qloc);
+ this.functions = functions;
+ functionsMax = Math.max(functionsMax,functions);
+ functionsMin = Math.min(functionsMin,functions);
+ this.variables = variables;
+ variablesMax = Math.max(variablesMax,variables);
+ variablesMin = Math.min(variablesMin,variables);
+ this.complexity = complexity;
+ complexityMax = Math.max(complexityMax,complexity);
+ complexityMin = Math.min(complexityMin,complexity);
+ this.name = name;
+ this.path = path;
+ this.commitTimes = commitTimes;
+ this.bearbeiteteZeit = (commitTimes.isEmpty()) ? null:Duration.between(commitTimes.get(commitTimes.size()-1), commitTimes.get(0));
+ if (bearbeiteteZeit != null) {
+ if(bearbeiteteZeitMax == null)bearbeiteteZeitMax = Duration.ofMillis(Long.MIN_VALUE);
+ if(bearbeiteteZeitMin == null)bearbeiteteZeitMin = Duration.ofMillis((Long.MAX_VALUE));
+ bearbeiteteZeitMax = (bearbeiteteZeitMax.toMillis() >= bearbeiteteZeit.toMillis()) ? bearbeiteteZeitMax:bearbeiteteZeit;
+ bearbeiteteZeitMin = (bearbeiteteZeitMin.toMillis() <= bearbeiteteZeit.toMillis()) ? bearbeiteteZeitMin:bearbeiteteZeit;
+ }
+ this.zeitSeitLetzterBearbeitung = (commitTimes.isEmpty()) ? null:Duration.between(commitTimes.get(0),LocalDateTime.now());
+ if (zeitSeitLetzterBearbeitung != null) {
+ if(zeitSeitLetzterBearbeitungMax == null)zeitSeitLetzterBearbeitungMax = Duration.ofMillis(Long.MIN_VALUE);
+ if(zeitSeitLetzterBearbeitungMin == null)zeitSeitLetzterBearbeitungMin = Duration.ofMillis(Long.MAX_VALUE);
+ zeitSeitLetzterBearbeitungMax = (zeitSeitLetzterBearbeitungMax.toMillis() >= zeitSeitLetzterBearbeitung.toMillis()) ? zeitSeitLetzterBearbeitungMax:zeitSeitLetzterBearbeitung;
+ zeitSeitLetzterBearbeitungMin = (zeitSeitLetzterBearbeitungMin.toMillis() <= zeitSeitLetzterBearbeitung.toMillis()) ? zeitSeitLetzterBearbeitungMin:zeitSeitLetzterBearbeitung;
+ }
+ this.zeitSeitErstemCommit = (commitTimes.isEmpty()) ? null:Duration.between(commitTimes.get(commitTimes.size()-1),LocalDateTime.now());
+ if (zeitSeitErstemCommit != null) {
+ if(zeitSeitErstemCommitMax == null)zeitSeitErstemCommitMax = Duration.ofMillis(Long.MIN_VALUE);
+ if(zeitSeitErstemCommitMin == null)zeitSeitErstemCommitMin = Duration.ofMillis(Long.MAX_VALUE);
+ zeitSeitErstemCommitMax = (zeitSeitErstemCommitMax.toMillis() >= zeitSeitErstemCommit.toMillis()) ? zeitSeitErstemCommitMax:zeitSeitErstemCommit;
+ zeitSeitErstemCommitMin = (zeitSeitErstemCommitMin.toMillis() <= zeitSeitErstemCommit.toMillis()) ? zeitSeitErstemCommitMin:zeitSeitErstemCommit;
+ }
+ }
+
+ private int getDepthOfPath(String path){
+ int result = -1;
+ if(path.contains("tmp")){
+ result = path.split("/").length-2;
+ }
+ return result;
+ }
+
+}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/ResultSetMapper.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/ResultSetMapper.java
deleted file mode 100644
index a1cdf5d8d733cbc3680b1f340674dba2226e6f70..0000000000000000000000000000000000000000
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/data/ResultSetMapper.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package de._82grfl1bif.KPI_Visualizer.data;
-
-import org.apache.commons.beanutils.BeanUtils;
-
-import javax.persistence.Column;
-import javax.swing.text.html.parser.Entity;
-import java.lang.reflect.Field;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ResultSetMapper {
-
- public List mapResultSetToObject(ResultSet rs, Class outputClass) {
- List outputList = null;
- try {
- // make sure resultSet is not null
- if (rs != null) {
- // check if outputClass has 'Entity' annotation
- if (outputClass.isAnnotationPresent(Entity.class)) {
- // get the resultSet metadata
- ResultSetMetaData rsMetaData = rs.getMetaData();
- // get all the attributes of outputClass
- Field[] fields = outputClass.getDeclaredFields();
- while (rs.next()) {
- T bean = (T) outputClass.newInstance();
- for (int _iterator = 0; _iterator < rsMetaData.getColumnCount(); _iterator++) {
- // getting the SQL column name
- String columnName = rsMetaData.getColumnName(_iterator + 1);
- // reading the value of the SQL column
- Object columnValue = rs.getObject(_iterator + 1);
- // iterating over outputClass attributes to check if any attribute has 'Column' annotation with matching 'name' value
- for (Field field : fields) {
- if (field.isAnnotationPresent(Column.class)) {
- Column column = field.getAnnotation(Column.class);
- if (column.name().equalsIgnoreCase(columnName) && columnValue != null) {
- BeanUtils.setProperty(bean, field.getName(), columnValue);
- break;
- }
- }
- }
- }
- if (outputList == null) {
- outputList = new ArrayList<>();
- }
- outputList.add(bean);
- }
- }
- } else {
- return null;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return outputList;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/FileInputTabCompleter.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/FileInputTabCompleter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c40cfb21b34e7d220121e8d038b4bee497b299e
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/FileInputTabCompleter.java
@@ -0,0 +1,28 @@
+package de._82grfl1bif.KPI_Visualizer.helpers;
+
+import de._82grfl1bif.KPI_Visualizer.data.JsonParser;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FileInputTabCompleter implements TabCompleter {
+
+ @Override
+ public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
+ if (args.length == 1) {
+ return new JsonParser().getFileHistory();
+ }
+ if (args.length == 2) {
+ List result = new ArrayList<>();
+ result.add("SquarifiedTreemap");
+ result.add("SimpleCornerOptimizer");
+ return result;
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Quadrat.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Quadrat.java
similarity index 67%
rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Quadrat.java
rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Quadrat.java
index 5c904aa7d65a57d328eb4ed8f34fedf639cb8c63..98bb782b14d742827ef6b04dfe290299f6fd7fb0 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Quadrat.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Quadrat.java
@@ -1,13 +1,11 @@
-package de._82grfl1bif.KPI_Visualizer.helpers;
+package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare;
import de._82grfl1bif.KPI_Visualizer.structures.Structure;
import java.awt.*;
import java.util.ArrayList;
-public class Quadrat extends Shape{
-
-
+public class Quadrat extends Shape {
private Boolean belegt;
@@ -32,7 +30,7 @@ public class Quadrat extends Shape{
this.bottomLeftCorner = bottomLeftCorner;
this.topRightCorner = new Point(bottomLeftCorner.x+xEdgeLength,bottomLeftCorner.y+xEdgeLength);
this.belegt = false;
- if(xEdgeLength < 3){
+ if(xEdgeLength < 3 || topRightCorner.x-bottomLeftCorner.x <3){
throw new IllegalArgumentException("keine Quadrate < 3 erlaubt " + xEdgeLength);
}
}
@@ -41,16 +39,16 @@ public class Quadrat extends Shape{
this.belegt = true;
this.structure = structure;
ArrayList result = new ArrayList<>();
- if(this.xEdgeLength > structure.getWidth()+3){//if you can splitt rest into more quads
- int scrapLength = this.xEdgeLength-structure.getWidth();
- result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth(),this.bottomLeftCorner.y),scrapLength));
- result.add(new Quadrat(new Point(this.bottomLeftCorner.x,this.bottomLeftCorner.y+structure.getWidth()),scrapLength));
- result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth(),this.bottomLeftCorner.y+structure.getWidth()),scrapLength));
+ if(this.xEdgeLength > structure.getWidth().x+3){//if you can split rest into more quads
+ int scrapLength = this.xEdgeLength-structure.getWidth().x;
+ result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y),scrapLength));
+ result.add(new Quadrat(new Point(this.bottomLeftCorner.x,this.bottomLeftCorner.y+structure.getWidth().x),scrapLength));
+ result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y+structure.getWidth().x),scrapLength));
if(this.xEdgeLength%scrapLength != 0){
- Rectangle temp = new Rectangle(scrapLength,this.xEdgeLength-2*scrapLength,new Point(this.bottomLeftCorner.x+scrapLength,this.bottomLeftCorner.y+structure.getWidth()));
- result.addAll(temp.splittToQuads(temp));
- temp = new Rectangle(this.xEdgeLength-2*scrapLength,scrapLength,new Point(this.bottomLeftCorner.x+structure.getWidth(),this.bottomLeftCorner.y+scrapLength));
- result.addAll(temp.splittToQuads(temp));
+ Rectangle temp = new Rectangle(scrapLength,this.xEdgeLength-2*scrapLength,new Point(this.bottomLeftCorner.x+scrapLength,this.bottomLeftCorner.y+structure.getWidth().x));
+ result.addAll(temp.splitToQuads(temp));
+ temp = new Rectangle(this.xEdgeLength-2*scrapLength,scrapLength,new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y+scrapLength));
+ result.addAll(temp.splitToQuads(temp));
}
}
return result;
@@ -60,11 +58,11 @@ public class Quadrat extends Shape{
return belegt;
}
- public int getWidth(){
- return this.xEdgeLength;
+ public Point getWidth(){
+ return new Point(topRightCorner.x-bottomLeftCorner.x,topRightCorner.y-bottomLeftCorner.y);
}
- public void applyCoordinates(){
-
+ public void applyCoordinates(Point coordinates){
+ this.bottomLeftCorner = coordinates;
}
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Rectangle.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Rectangle.java
similarity index 86%
rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Rectangle.java
rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Rectangle.java
index 580e2db5f80939ad7f684097e6a25a0e796c0a0b..0ce01ffa8b10fc721cdd0970e65f021289648742 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Rectangle.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Rectangle.java
@@ -1,11 +1,11 @@
-package de._82grfl1bif.KPI_Visualizer.helpers;
+package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare;
import java.awt.*;
import java.util.ArrayList;
public class Rectangle extends Shape {
- private int zEdgeLength;
+ private final int zEdgeLength;
public Rectangle(int zEdgeLength, int xEdgeLength, Point bottomLeftCorner) {
this.zEdgeLength = zEdgeLength;
@@ -14,7 +14,7 @@ public class Rectangle extends Shape {
this.topRightCorner = new Point(bottomLeftCorner.x + xEdgeLength, bottomLeftCorner.y + zEdgeLength);
}
- public ArrayList splittToQuads(Rectangle r) {
+ public ArrayList splitToQuads(Rectangle r) {
ArrayList result = new ArrayList<>();
if (r.xEdgeLength >= 3 && r.zEdgeLength >= 3) {
if ((r.xEdgeLength - r.zEdgeLength) < 0) {//standing Rectangle
@@ -32,7 +32,7 @@ public class Rectangle extends Shape {
scrapPoint.y = (r.bottomLeftCorner.y + (r.xEdgeLength * (c + 1)));
}
if (scrapLength >= 3 && r.xEdgeLength >= 3) {
- result.addAll(splittToQuads(new Rectangle(scrapLength, r.xEdgeLength, scrapPoint)));
+ result.addAll(splitToQuads(new Rectangle(scrapLength, r.xEdgeLength, scrapPoint)));
}
}
} else {//laying Rectangles
@@ -49,8 +49,8 @@ public class Rectangle extends Shape {
scrapPoint.x = (r.bottomLeftCorner.x + (r.zEdgeLength * (c + 1)));
scrapPoint.y = r.bottomLeftCorner.y;
}
- if (r.zEdgeLength >= 3 && scrapLength >= 3) {
- result.addAll(splittToQuads(new Rectangle(r.zEdgeLength, scrapLength, scrapPoint)));
+ if (scrapLength >= 3) {
+ result.addAll(splitToQuads(new Rectangle(r.zEdgeLength, scrapLength, scrapPoint)));
}
}
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Shape.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Shape.java
similarity index 74%
rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Shape.java
rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Shape.java
index f4a49c37c269c7bc07d2c40bdfddea93947cd17d..fcfb34eb45e9c2c4f1c47a21dbe0cb3d9de0a759 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Shape.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/Shape.java
@@ -1,4 +1,4 @@
-package de._82grfl1bif.KPI_Visualizer.helpers;
+package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare;
import java.awt.Point;
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Layout.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/SimpleSquareLayout.java
similarity index 67%
rename from src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Layout.java
rename to src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/SimpleSquareLayout.java
index 30afe0ca87c7543e72a52280c0d714c364c8b1fd..b20a8daf2ae727f6bfcae0f74af4b52d59d9835d 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/helpers/Layout.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/SimpleSquare/SimpleSquareLayout.java
@@ -1,5 +1,7 @@
-package de._82grfl1bif.KPI_Visualizer.helpers;
+package de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare;
+import de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Quadrat;
+import de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle;
import de._82grfl1bif.KPI_Visualizer.structures.Structure;
import javax.management.AttributeNotFoundException;
@@ -7,8 +9,7 @@ import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
-@SuppressWarnings("ALL")
-public class Layout {
+public class SimpleSquareLayout {
private final ArrayList structures;
private final ArrayList layout = new ArrayList<>();
@@ -19,7 +20,7 @@ public class Layout {
private int size = 0;
- public Layout(ArrayList structures){
+ public SimpleSquareLayout(ArrayList structures){
this.structures = structures;//ordered biggest first.
}
@@ -27,7 +28,7 @@ public class Layout {
@Override
public int compare(Quadrat o1, Quadrat o2) {
- return Integer.compare(o1.getWidth(), o2.getWidth());
+ return Integer.compare(o1.getWidth().x, o2.getWidth().x);
}
}
private static class CoordinateXComparator implements Comparator{
@@ -48,8 +49,8 @@ public class Layout {
for (Structure s:structures) {
if(first){
first = false;
- this.size = s.getWidth();
- layout.add(new Quadrat(new Point(0,0),s.getWidth()));
+ this.size = s.getWidth().x;
+ layout.add(new Quadrat(new Point(0,0),s.getWidth().x));
layout.addAll(layout.get(0).setBelegt(s));
}else{
layout.sort(new CoordinateYComparator());
@@ -57,7 +58,7 @@ public class Layout {
layout.sort(new WidthComparator());
boolean noneFoundFlag = true;
for (int i = 0;i < layout.size();i++) {
- if((s.getWidth() <= layout.get(i).getWidth())&&(!layout.get(i).getBelegt())&&(noneFoundFlag)){
+ if((s.getWidth().x <= layout.get(i).getWidth().x)&&(!layout.get(i).getBelegt())&&(noneFoundFlag)){
noneFoundFlag = false;
layout.addAll(layout.get(i).setBelegt(s));
}
@@ -70,17 +71,17 @@ public class Layout {
}
private void appendQuad(Structure structure){
- Quadrat q = new Quadrat(new Point(this.size,0),structure.getWidth());
+ Quadrat q = new Quadrat(new Point(this.size,0),structure.getWidth().x);
q.setBelegt(structure);
- this.size += structure.getWidth();
+ this.size += structure.getWidth().x;
layout.add(q);
layout.add(new Quadrat(new Point(q.bottomLeftCorner.y,q.bottomLeftCorner.x),new Point(q.topRightCorner.y,q.topRightCorner.x))); // gespiegeltes Quadrat
- layout.add(new Quadrat(new Point(q.bottomLeftCorner.x,q.bottomLeftCorner.x),structure.getWidth())); // Oberes rechtes Quadrat
- if((this.size-(2*structure.getWidth())) > 0){ //falls Abstand zwischen den Quadraten ist.
- Rectangle rTop = new Rectangle(structure.getWidth(),(this.size-2*structure.getWidth()),new Point(q .topRightCorner.y,q.bottomLeftCorner.x));
- layout.addAll(rTop.splittToQuads(rTop));
- Rectangle rRight = new Rectangle((this.size-2*structure.getWidth()),structure.getWidth(),new Point(q.bottomLeftCorner.x,q.topRightCorner.y));
- layout.addAll(rRight.splittToQuads(rRight));
+ layout.add(new Quadrat(new Point(q.bottomLeftCorner.x,q.bottomLeftCorner.x),structure.getWidth().x)); // Oberes rechtes Quadrat
+ if((this.size-(2*structure.getWidth().x)) > 0){ //falls Abstand zwischen den Quadraten ist.
+ de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle rTop = new de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle(structure.getWidth().x,(this.size-2*structure.getWidth().x),new Point(q .topRightCorner.y,q.bottomLeftCorner.x));
+ layout.addAll(rTop.splitToQuads(rTop));
+ de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.Rectangle rRight = new Rectangle((this.size-2*structure.getWidth().x),structure.getWidth().x,new Point(q.bottomLeftCorner.x,q.topRightCorner.y));
+ layout.addAll(rRight.splitToQuads(rRight));
}
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Rectangle.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Rectangle.java
new file mode 100644
index 0000000000000000000000000000000000000000..59aecbcba55ae291d51b921d2924ffdecaf0068f
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Rectangle.java
@@ -0,0 +1,61 @@
+package de._82grfl1bif.KPI_Visualizer.layouts.TreeMap;
+
+import de._82grfl1bif.KPI_Visualizer.structures.Structure;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class Rectangle{
+
+ private double area;
+ private double width;
+ private double height;
+ private Point origin;
+
+ public void setHeight(double height) {
+ this.height = height;
+ this.width = area/height;
+ }
+
+ public void setWidth(double width) {
+ this.width = width;
+ this.height = area/width;
+ }
+
+ public double getArea() {
+ return area;
+ }
+
+ public double getWidth() {
+ return width;
+ }
+
+ public double getHeight() {
+ return height;
+ }
+
+ public Point getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(Point origin) {
+ this.origin = origin;
+ }
+
+ public Rectangle(double area,double width,Point origin){
+ this.area = area;
+ this.origin = origin;
+ setWidth(width);
+ }
+
+ public double getSideRelation(){
+ return Math.max(width/height,height/width);
+ }
+
+ public boolean checkSideRelation(double side){
+ return !(getSideRelation() < Math.max((area/side)/side,side/(area/side)));// false if the Relation gets worse.
+ }
+
+
+}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Row.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Row.java
new file mode 100644
index 0000000000000000000000000000000000000000..6660426b30b565b4dc9c957fb9e81eee4b05d8a6
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/Row.java
@@ -0,0 +1,118 @@
+package de._82grfl1bif.KPI_Visualizer.layouts.TreeMap;
+
+import de._82grfl1bif.KPI_Visualizer.structures.Structure;
+
+import java.awt.*;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Row {
+
+ double broad;
+ boolean horizontal;
+
+ public HashMap getRectangles() {
+ return rectangles;
+ }
+
+ HashMap rectangles;
+ Rectangle space;
+
+ public Row(Rectangle space) {
+ this.space = space;
+ this.rectangles = new HashMap<>();
+ this.broad = 0;
+ this.horizontal = (space.getWidth() >= space.getHeight());
+ }
+
+ private double getSideRelation() {
+ double currentMax = 0;
+ for (Map.Entry entry : rectangles.entrySet()) {
+ Rectangle r = entry.getKey();
+ currentMax = Math.max(r.getSideRelation(), currentMax);
+ }
+ return currentMax;
+ }
+
+ public void addRectangle(double area, Structure structure) {
+ double currentArea = getCurrentArea() + area;
+ if (horizontal) {
+ this.broad = currentArea / space.getHeight(); //calculating the new broad
+ int currentHeight = this.space.getOrigin().y; //new temp for height of origins
+ for (Map.Entry entry : rectangles.entrySet()) {
+ Rectangle r = entry.getKey();
+ r.setWidth(this.broad);//setting new width&Height for all existing rectangles
+ r.setOrigin(new Point(this.space.getOrigin().x, currentHeight));//setting new origins for all existing rectangles
+ currentHeight += (int) Math.round(r.getHeight());//for next origin
+ }
+ rectangles.put((new Rectangle(area, this.broad, new Point(this.space.getOrigin().x, currentHeight))), structure);//add new Rectangle
+ } else {
+ this.broad = currentArea / space.getWidth(); //calculating the new broad
+ int currentWidth = this.space.getOrigin().x; //new temp for width of origins
+ for (Map.Entry entry : rectangles.entrySet()) {
+ Rectangle r = entry.getKey();
+ r.setHeight(this.broad);//setting new width&Height for all existing rectangles
+ r.setOrigin(new Point(currentWidth, space.getOrigin().y));//setting new origins for all existing rectangles
+ currentWidth += (int) Math.round(r.getHeight());//for next origin
+ }
+ rectangles.put(new Rectangle(area, area / this.broad, new Point(currentWidth, space.getOrigin().y)), structure);
+ }
+ }
+
+ private double getCurrentArea() {
+ double currentArea = 0;
+ for (Map.Entry entry : rectangles.entrySet()) {
+ Rectangle r = entry.getKey();
+ currentArea += r.getArea();
+ }
+ return currentArea;
+ }
+
+ public boolean checkInsert(double area) {
+ if (!rectangles.isEmpty()) {
+ double currentArea = getCurrentArea() + area;
+ double broadTemp = horizontal ? currentArea / space.getHeight() : currentArea / space.getWidth();
+ for (Map.Entry entry : rectangles.entrySet()) {
+ Rectangle r = entry.getKey();
+ if (!r.checkSideRelation(broadTemp))
+ return false;//returns false if one of the existing rectangles gets worse
+ }
+ return !(new Rectangle(area, broad, new Point(0, 0)).getSideRelation() > getSideRelation()); //returns false if the inserted rectangle is worse, than any other before
+ }else {
+ return true;
+ }
+ }
+
+ public Rectangle getLeftover() {
+ Point origin;
+ double width;
+ if (horizontal) {
+ origin = new Point(space.getOrigin().x + (int)(broad), space.getOrigin().y);
+ width = space.getWidth() - getWidth();
+ } else {
+ origin = new Point(space.getOrigin().x, space.getOrigin().y + (int)(broad));
+ width = getWidth();
+ }
+ return new Rectangle(this.space.getArea() - getCurrentArea(), width, origin);
+ }
+
+ public double getWidth() {
+ if (horizontal) {
+ return this.broad;
+ } else {
+ return this.space.getWidth();
+ }
+ }
+
+ public double getHeight() {
+ if (horizontal) {
+ return this.space.getHeight();
+ } else {
+ return this.broad;
+ }
+ }
+
+ public boolean isFull(){
+ return (Math.round(this.space.getArea()) <= Math.round(this.getCurrentArea()));
+ }
+}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/SquarifiedTreemapLayout.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/SquarifiedTreemapLayout.java
new file mode 100644
index 0000000000000000000000000000000000000000..19338e118f69e6b0aa430e0301de1dd221d0d712
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/layouts/TreeMap/SquarifiedTreemapLayout.java
@@ -0,0 +1,58 @@
+package de._82grfl1bif.KPI_Visualizer.layouts.TreeMap;
+
+import de._82grfl1bif.KPI_Visualizer.structures.Foundation;
+import de._82grfl1bif.KPI_Visualizer.structures.Structure;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class SquarifiedTreemapLayout {
+
+ private ArrayList rows = new ArrayList<>();
+
+ public ArrayList getRows() {
+ return rows;
+ }
+
+ public SquarifiedTreemapLayout() {
+ this.rows = new ArrayList<>();
+ }
+
+ public void generateLayout(Foundation foundation, Rectangle bounds) {
+ rows.addAll(generateSubLayout(foundation, bounds));
+ ArrayList foundations = new ArrayList<>();
+ foundations.add(foundation);
+ do {
+ ArrayList tempRows = new ArrayList<>();
+ rows.stream().filter(r -> r.rectangles.containsValue(foundations.get(foundations.size()-1))).forEach(row ->
+ tempRows.addAll(generateSubLayout(foundations.get(foundations.size()-1), new Rectangle(foundations.get(foundations.size()-1).getArea(), row.getWidth(), row.space.getOrigin()))));
+ rows.addAll(tempRows);//letztes element bearbeitet und ein subLayout dafür angelegt.
+
+ ArrayList tempFoundations = new ArrayList<>();
+ for (Structure s : foundations.get(foundations.size() - 1).getChildren()) {
+ if (s.getClass() == Foundation.class) {
+ tempFoundations.add((Foundation) s);
+ }
+ }
+ foundations.remove(foundations.size()-1);
+ foundations.addAll(tempFoundations);//alle Kinder(nur Foundations) des letzten Elements in die Liste geschrieben und das Element entfernt.
+
+ } while (!foundations.isEmpty());
+ }
+
+ private ArrayList generateSubLayout(Foundation foundation, Rectangle rectangle) {
+ ArrayList result = new ArrayList<>();
+ result.add(new Row(rectangle));
+ for (Structure s : foundation.getChildren()) {
+ if (!result.get(result.size() - 1).checkInsert(s.getArea())) {//wenn einfügen in die bestehende Reihe das Seitenverhältnis verschlechtern würde.
+ Row tempRow = new Row(result.get(result.size() - 1).getLeftover());//erzeige neue Reihe mit dem Rest des alten spaces als space.
+ result.add(tempRow);//füge die neue Reihe ans Ende der Sammlung ein.
+ }
+ result.get(result.size() - 1).addRectangle(s.getArea(), s);//füge das Kind in die letzte Reihe ein, die in der Liste ist.
+ }
+ return result;
+ }
+}
+
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java
index 1ce0ec5dae37ed7306aa35fe7e370e905cff097f..722936b872ec3fe90ec0ca378e9cb44bbd04afbb 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/main.java
@@ -2,6 +2,7 @@ package de._82grfl1bif.KPI_Visualizer;
import de._82grfl1bif.KPI_Visualizer.commands.SetPreset;
import de._82grfl1bif.KPI_Visualizer.commands.generateLayout;
+import de._82grfl1bif.KPI_Visualizer.helpers.FileInputTabCompleter;
import org.bukkit.plugin.java.JavaPlugin;
public final class main extends JavaPlugin {
@@ -11,6 +12,7 @@ public final class main extends JavaPlugin {
// Plugin startup logic
getCommand("setPreset").setExecutor(new SetPreset());
getCommand("generateLayout").setExecutor(new generateLayout());
+ getCommand("generateLayout").setTabCompleter(new FileInputTabCompleter());
}
@Override
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Builder.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Builder.java
new file mode 100644
index 0000000000000000000000000000000000000000..717a2edcbd8238e38c3c695bf47bd3cd7e8fe729
--- /dev/null
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Builder.java
@@ -0,0 +1,357 @@
+package de._82grfl1bif.KPI_Visualizer.structures;
+
+import de._82grfl1bif.KPI_Visualizer.data.Klasse;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.Server;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.Sign;
+
+import java.util.Random;
+import java.util.logging.Level;
+
+public class Builder {
+
+ Server server;
+
+ public Builder(Server server) {
+ this.server = server;
+ }
+
+ public void setFoundation(Location startLocation, int x, int z, Material material) {
+ for (int cx = 0; cx < x; cx++) {
+ for (int cz = 0; cz < z; cz++) {
+ Block block = server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx, 0, cz));
+ block.setType(material);
+ }
+ }
+ }
+
+ public void fillQube(Location startLocation, int x, int y, int z, Material material) {
+ for (int cy = 0; cy < y; cy++) {
+ setFoundation(startLocation.clone().add(0, cy, 0), x, z, material);
+ }
+ }
+
+ private void setWalls(Location startLocation, int x, int y, int z, Material innerMaterial, Material glassMaterial) {
+ Location temp = startLocation.clone().add(0, 0, 1);
+ for (int cz = 0; cz < z - 2; cz++) {//00-0Z
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(1, cy, cz)).setType(innerMaterial);
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(glassMaterial);
+ }
+ }
+ temp = startLocation.clone().add(1, 0, 0);
+ for (int cx = 0; cx < x - 2; cx++) {//00-0X
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 1)).setType(innerMaterial);
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(glassMaterial);
+ }
+ }
+ temp = startLocation.clone().add(1, 0, z - 1);
+ for (int cx = 0; cx < x - 2; cx++) {//0Z-ZX
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, -1)).setType(innerMaterial);
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(cx, cy, 0)).setType(glassMaterial);
+
+ }
+ }
+ temp = startLocation.clone().add(x - 1, 0, 1);
+ for (int cz = 0; cz < z - 2; cz++) {//0X-XZ
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(-1, cy, cz)).setType(innerMaterial);
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, cz)).setType(glassMaterial);
+
+ }
+ }
+ }
+
+ private void setCorners(Location startLocation, int x, int y, int z, Material facade) {
+ Location temp = startLocation.clone();
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade);
+ }
+ temp = startLocation.clone().add(x - 1, 0, 0);
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade);
+ }
+ temp = startLocation.clone().add(0, 0, z - 1);
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade);
+ }
+ temp = startLocation.clone().add(x - 1, 0, z - 1);
+ for (int cy = 0; cy < y; cy++) {
+ server.getWorlds().get(0).getBlockAt(temp.clone().add(0, cy, 0)).setType(facade);
+ }
+ }
+
+ public void buildBuilding(Location startLocation, int x, int y,int craneHeight,int antennaHeight, int z, Material facadeMaterial, Material glassMaterial, Material innerMaterial) {
+ setWalls(startLocation, x, y, z, innerMaterial, glassMaterial);
+ setCorners(startLocation, x, y, z, facadeMaterial);
+ setFoundation(startLocation.clone().add(0, y, 0), x, z, facadeMaterial);//roof
+ fillQube(startLocation.clone().add(Math.round(x/2),y+1,Math.round(x/2)),1,antennaHeight,1,Material.COBBLESTONE_WALL);
+ Random rm = new Random();
+ switch (rm.nextInt(3)+1){
+ case 1: setCrane(startLocation,x,y,z,craneHeight,BlockFace.NORTH);
+ break;
+ case 2: setCrane(startLocation,x,y,z,craneHeight,BlockFace.WEST);
+ break;
+ case 3: setCrane(startLocation,x,y,z,craneHeight,BlockFace.EAST);
+ break;
+ case 4: setCrane(startLocation,x,y,z,craneHeight,BlockFace.SOUTH);
+ break;
+ }
+ }
+
+ public void setAllChildren(Foundation foundation) {
+ for (Structure s : foundation.getChildren()) {
+ if (s.getClass() == Foundation.class) {//TODO must be revisited to draw rectangular Foundations
+ this.setFoundation(s.getLocation().clone().add(0, s.getDepth(), 0), s.getWidth().x, s.getWidth().x, s.getMaterial());
+ addDescription(s.getLocation().clone().add(0, s.getDepth(), 0), s);
+ setAllChildren((Foundation) s);
+ } else {//TODO must be revisited to draw rectangular Buildings
+ this.buildBuilding(s.getLocation().clone().add(1, s.getDepth() + 1,1),
+ s.getWidth().x - 2,
+ ((Building) s).getHeight(),
+ ((Building)s).klasse.commits,
+ Math.round(((Building)s).klasse.complexity/10000),
+ s.getWidth().x - 2,
+ ((((((Building) s).klasse.zeitSeitErstemCommit.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) / (Klasse.zeitSeitErstemCommitMax.toDays() - Klasse.zeitSeitErstemCommitMin.toDays())) > 0.25)? Material.WAXED_OXIDIZED_COPPER:
+ ((((Building) s).klasse.zeitSeitErstemCommit.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) / (Klasse.zeitSeitErstemCommitMax.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) > 0.50)?Material.WAXED_WEATHERED_COPPER:
+ ((((Building) s).klasse.zeitSeitErstemCommit.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) / (Klasse.zeitSeitErstemCommitMax.toDays() - Klasse.zeitSeitErstemCommitMin.toDays()) > 0.75)?Material.WAXED_EXPOSED_COPPER:Material.WAXED_COPPER_BLOCK),
+ (((((Building) s).klasse.zeitSeitLetzterBearbeitung.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) / (Klasse.zeitSeitLetzterBearbeitungMax.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) > 0.25)?Material.IRON_BARS:
+ ((((Building) s).klasse.zeitSeitLetzterBearbeitung.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) / (Klasse.zeitSeitLetzterBearbeitungMax.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) > 0.50)?Material.BLUE_STAINED_GLASS:
+ ((((Building) s).klasse.zeitSeitLetzterBearbeitung.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) / (Klasse.zeitSeitLetzterBearbeitungMax.toDays() - Klasse.zeitSeitLetzterBearbeitungMin.toDays()) > 0.75)?Material.GLASS:Material.WHITE_STAINED_GLASS)
+ ,s.getMaterial());
+ addDescription(s.getLocation().clone().add(1, s.getDepth() + 1, 1), s);
+ }
+ }
+ }
+
+ public void setCrane(Location startLocation ,int x ,int y ,int z ,int height ,BlockFace orientation){
+ switch (orientation) {
+ case NORTH:
+ for(int cy = y+1; cy < (height+y+2); cy++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,cy,z-2)).setType(Material.YELLOW_CONCRETE);
+ }
+ for(int cz = 0; cz < z; cz++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,y+height,cz)).setType(Material.YELLOW_CONCRETE);
+ }
+ break;
+ case WEST:
+ for(int cy = y+1; cy < (height+y+2); cy++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(x-2,cy,0)).setType(Material.YELLOW_CONCRETE);
+ }
+ for(int cx = 0; cx < z; cx++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx,y+height,0)).setType(Material.YELLOW_CONCRETE);
+ }
+ break;
+ case EAST:
+ for(int cy = y+1; cy < (height+y+2); cy++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(2,cy,z-1)).setType(Material.YELLOW_CONCRETE);
+ }
+ for(int cx = 0; cx < z; cx++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(cx,y+height,z-1)).setType(Material.YELLOW_CONCRETE);
+ }
+ break;
+ case SOUTH:
+ for(int cy = y+1; cy < (height+y+2); cy++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(x-1,cy,2)).setType(Material.YELLOW_CONCRETE);
+ }
+ for(int cz = 0; cz < z; cz++){
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(x-1,y+height,cz)).setType(Material.YELLOW_CONCRETE);
+ }
+ break;
+ default:
+ Bukkit.getLogger().log(Level.SEVERE, "fehlerhafte Orientierung");
+ break;
+ }
+ }
+
+ private void addDescription(Location startLocation, Structure structure) {
+ if (structure.getClass() == Foundation.class) {
+ //if (!((Foundation) structure).getChildren().stream().anyMatch(s -> s.getClass() == Foundation.class)) {//no foundation in Children
+ setFoundationSing(startLocation,(Foundation) structure);
+ //}
+ } else {
+ setWallSing(startLocation, (Building) structure, BlockFace.NORTH);
+ setWallSing(startLocation, (Building) structure, BlockFace.EAST);
+ setWallSing(startLocation, (Building) structure, BlockFace.WEST);
+ setWallSing(startLocation, (Building) structure, BlockFace.SOUTH);
+ }
+ }
+
+ private void setWallSing(Location startLocation, Building building, BlockFace orientation) {
+ org.bukkit.block.Sign sign1 = null;
+ org.bukkit.block.Sign sign2 = null;
+ org.bukkit.block.Sign sign1o = null;
+ org.bukkit.block.Sign sign2o = null;
+ org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_WALL_SIGN);
+ switch (orientation) {
+ case NORTH:
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, -1)).setType(Material.OAK_WALL_SIGN);
+ sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, -1)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, -1)).setType(Material.OAK_WALL_SIGN);
+ sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, -1)).getState();
+ matSign.setFacingDirection(BlockFace.NORTH);
+ if (building.name.length() > 60) {
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, -1)).setType(Material.OAK_WALL_SIGN);
+ sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, -1)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, -1)).setType(Material.OAK_WALL_SIGN);
+ sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, -1)).getState();
+ }
+ break;
+ case EAST:
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, 0)).setType(Material.OAK_WALL_SIGN);
+ sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, 0)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, building.width.y - 3)).setType(Material.OAK_WALL_SIGN);
+ sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 1, building.width.y - 3)).getState();
+ matSign.setFacingDirection(BlockFace.WEST_NORTH_WEST);//Don't have a clue why this works but getting it made me go mad
+ if (building.name.length() > 60) {
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, 0)).setType(Material.OAK_WALL_SIGN);
+ sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, 0)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, building.width.y - 3)).setType(Material.OAK_WALL_SIGN);
+ sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 2, 2, building.width.y - 3)).getState();
+ }
+ break;
+ case SOUTH:
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, building.width.y - 2)).setType(Material.OAK_WALL_SIGN);
+ sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 1, building.width.y - 2)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, building.width.y - 2)).setType(Material.OAK_WALL_SIGN);
+ sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 1, building.width.y - 2)).getState();
+ matSign.setFacingDirection(BlockFace.WEST_SOUTH_WEST);//Same here ;(
+ if (building.name.length() > 60) {
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, building.width.y - 2)).setType(Material.OAK_WALL_SIGN);
+ sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 2, building.width.y - 2)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, building.width.y - 2)).setType(Material.OAK_WALL_SIGN);
+ sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(building.width.x - 3, 2, building.width.y - 2)).getState();
+ }
+ break;
+ case WEST:
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, 0)).setType(Material.OAK_WALL_SIGN);
+ sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, 0)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, building.width.y - 3)).setType(Material.OAK_WALL_SIGN);
+ sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 1, building.width.y - 3)).getState();
+ matSign.setFacingDirection(BlockFace.WEST);
+ if (building.name.length() > 60) {
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, 0)).setType(Material.OAK_WALL_SIGN);
+ sign1o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, 0)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, building.width.y - 3)).setType(Material.OAK_WALL_SIGN);
+ sign2o = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(-1, 2, building.width.y - 3)).getState();
+ }
+ break;
+ default:
+ Bukkit.getLogger().log(Level.SEVERE, "falsche Orientierung übergeben!");
+ }
+ sign1.setData(matSign);
+ sign2.setData(matSign);
+ sign1o.setData(matSign);
+ sign2o.setData(matSign);
+ sign1.setGlowingText(true);
+ sign2.setGlowingText(true);
+ sign1o.setGlowingText(true);
+ sign2o.setGlowingText(true);
+ if (building.name.length() > 60) {
+ setTextToSign(sign1, sign1o, building.name);
+ setTextToSign(sign2, sign2o, building.name);
+ }else{
+ setTextToSign(sign1, building.name);
+ setTextToSign(sign2, building.name);
+ }
+ }
+
+ private void setTextToSign(Sign sign, String text) {
+ int i = (text.length() > 15) ? text.length() - 15 : 0;
+ sign.setLine(3, text.substring(i));
+ int i1 = (text.length() > 30) ? text.length() - 30 : 0;
+ sign.setLine(2, text.substring(i1, i));
+ int i2 = (text.length() > 45) ? text.length() - 45 : 0;
+ sign.setLine(1, text.substring(i2, i1));
+ sign.setLine(0, text.substring(Math.max(text.length() - 60 , 0), i2));
+ sign.update();
+ }
+
+ private void setTextToSign(Sign sign, Sign oSign, String text) {
+ setTextToSign(sign, text);
+ int i = Math.max(text.length() - 75 , 0);
+ oSign.setLine(3, text.substring(i, Math.max(text.length() - 60 , 0)));
+ int i1 = Math.max(text.length() - 90 , 0);
+ oSign.setLine(2, text.substring(i1, i));
+ int i2 = Math.max(text.length() - 105 , 0);
+ oSign.setLine(1, text.substring(i2, i1));
+ oSign.setLine(0, text.substring(Math.max(text.length() - 120 , 0), i2));
+ oSign.update();
+
+ }
+
+ private void setFoundationSing(Location startLocation, Foundation foundation) {
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, 0)).setType(Material.OAK_SIGN);
+ org.bukkit.block.Sign sign = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, 0)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.width.x-1, 0, 0)).setType(Material.OAK_SIGN);
+ org.bukkit.block.Sign sign1 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.width.x-1, 0, 0)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).setType(Material.OAK_SIGN);
+ org.bukkit.block.Sign sign2 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).getState();
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.getWidth().x-1, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).setType(Material.OAK_SIGN);
+ org.bukkit.block.Sign sign3 = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation.clone().add(foundation.getWidth().x-1, 0, (foundation.getWidth().y==0)?foundation.getWidth().x-1:foundation.getWidth().y-1)).getState();
+ org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_SIGN);
+ matSign.setFacingDirection(BlockFace.NORTH_WEST);
+ sign.setData(matSign);
+ matSign.setFacingDirection(BlockFace.NORTH_EAST);
+ sign1.setData(matSign);
+ matSign.setFacingDirection(BlockFace.SOUTH_WEST);
+ sign2.setData(matSign);
+ matSign.setFacingDirection(BlockFace.SOUTH_EAST);
+ sign3.setData(matSign);
+ sign.setGlowingText(true);
+ sign1.setGlowingText(true);
+ sign2.setGlowingText(true);
+ sign3.setGlowingText(true);
+ setTextToSign(sign,foundation.name.split("/")[foundation.name.split("/").length-1]);
+ setTextToSign(sign1,foundation.name.split("/")[foundation.name.split("/").length-1]);
+ setTextToSign(sign2,foundation.name.split("/")[foundation.name.split("/").length-1]);
+ setTextToSign(sign3,foundation.name.split("/")[foundation.name.split("/").length-1]);
+ }
+
+ public void setLegend(Location startLocation){
+ org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_WALL_SIGN);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,0,-6)).setType(Material.WAXED_COPPER_BLOCK);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,1,-6)).setType(Material.WAXED_EXPOSED_COPPER);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,2,-6)).setType(Material.WAXED_WEATHERED_COPPER);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,3,-6)).setType(Material.WAXED_OXIDIZED_COPPER);
+ setLegendBlock(startLocation.clone().add(-1,0,-6),"1. Quartal","Zeit seit dem","Erstem Commit");
+ setLegendBlock(startLocation.clone().add(-1,1,-6),"2. Quartal","Zeit seit dem","Erstem Commit");
+ setLegendBlock(startLocation.clone().add(-1,2,-6),"3. Quartal","Zeit seit dem","Erstem Commit");
+ setLegendBlock(startLocation.clone().add(-1,3,-6),"4. Quartal","Zeit seit dem","Erstem Commit");
+
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,0,-5)).setType(Material.WHITE_STAINED_GLASS);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,1,-5)).setType(Material.GLASS);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,2,-5)).setType(Material.BLUE_STAINED_GLASS);
+ server.getWorlds().get(0).getBlockAt(startLocation.clone().add(0,3,-5)).setType(Material.IRON_BARS);
+ setLegendBlock(startLocation.clone().add(-1,0,-5),"1. Quartal","Zeit seit dem","Letzten Commit");
+ setLegendBlock(startLocation.clone().add(-1,1,-5),"2. Quartal","Zeit seit dem","Letzten Commit");
+ setLegendBlock(startLocation.clone().add(-1,2,-5),"3. Quartal","Zeit seit dem","Letzten Commit");
+ setLegendBlock(startLocation.clone().add(-1,3,-5),"4. Quartal","Zeit seit dem","Letzten Commit");
+
+ setLegendBlock(startLocation.clone().add(-1,0,-4),"Breite der","Gebäude = ","#Variablen-3");
+ setLegendBlock(startLocation.clone().add(-1,1,-4),"Höhe der ","Gebäude =","#Methoden");
+ setLegendBlock(startLocation.clone().add(-1,2,-4),"Höhe der ","Antenne ≈","Komplexität");
+ setLegendBlock(startLocation.clone().add(-1,3,-4),"Höhe der ","Kräne =","#Commits");
+ }
+
+ private void setLegendBlock(Location startLocation,String s1,String s2,String s3){
+ org.bukkit.material.Sign matSign = new org.bukkit.material.Sign(Material.OAK_WALL_SIGN);
+ org.bukkit.block.Sign sign = null;
+ server.getWorlds().get(0).getBlockAt(startLocation).setType(Material.OAK_WALL_SIGN);
+ sign = (org.bukkit.block.Sign) server.getWorlds().get(0).getBlockAt(startLocation).getState();
+ sign.setGlowingText(true);
+ sign.setGlowingText(true);
+ sign.setLine(1,s1);
+ sign.setLine(2,s2);
+ sign.setLine(3,s3);
+ matSign.setFacingDirection(BlockFace.WEST);
+ sign.setData(matSign);
+ sign.update();
+ }
+}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java
index eb9c81be2413d71bd03eedcb9b88e0b10b1dffae..15999c672814a10d25bfeac691ffb9a28e82ff19 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Building.java
@@ -1,23 +1,53 @@
package de._82grfl1bif.KPI_Visualizer.structures;
+import de._82grfl1bif.KPI_Visualizer.data.Klasse;
import org.bukkit.Material;
-import javax.persistence.Column;
+import java.awt.Point;
public class Building extends Structure{
- @Column(name = "height")
private final int height;
+ public Klasse klasse = null;
+ @Deprecated
public Building(int width, int height, Material material){ //Buildings are Square -> no depth
+ this.width.x = width;
+ this.width.y = width;
+ this.height = height;
+ this.material = material;
+ if(this.width.x < 5){
+ throw new IllegalArgumentException("keine Gebäude kleiner 5 wegen 2 Gehweg");
+ }
+ }
+
+ public Building(Point width/*and depth for complex algorithms*/, int height, Material material){
this.width = width;
this.height = height;
this.material = material;
- if(this.width < 3){
- throw new IllegalArgumentException("keine Gebäude kleiner 3 wegen 2 gehweg");
+ if(this.width.x < 5 || this.width.y < 5){
+ throw new IllegalArgumentException("keine Gebäude kleiner 5 wegen 2 Gehweg");
+ }
+ }
+
+ public Building(Material material, Klasse klasse, String name){ //Buildings are Square -> no depth
+ this.klasse = klasse;
+ this.material = material;
+ this.width = new Point((int)Math.round((klasse.variables+5)),(int)Math.round((klasse.variables+5))); //TODO: make this work with treemap and square
+ this.area = klasse.variables*25;
+ this.name = name;
+ this.height = klasse.functions;
+ if(this.width.x < 5 || this.width.y < 5){
+ throw new IllegalArgumentException("keine Gebäude kleiner 5 wegen 2 Gehweg");
}
}
public int getHeight() {
return this.height;
}
+
+ @Override
+ public Structure getFromTree(String checkName) {
+ if(this.name.equals(checkName))return this;
+ return null;
+ }
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java
index a5114379a4db083dcc0f626a9e775cb67381b010..582d2a1d03bec86d1cd9da09d815eb29b8c8cbd1 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Foundation.java
@@ -1,23 +1,32 @@
package de._82grfl1bif.KPI_Visualizer.structures;
-import de._82grfl1bif.KPI_Visualizer.helpers.Layout;
+import de._82grfl1bif.KPI_Visualizer.data.Klasse;
+import de._82grfl1bif.KPI_Visualizer.layouts.SimpleSquare.SimpleSquareLayout;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.util.Vector;
import javax.management.AttributeNotFoundException;
-import java.awt.Point;
+import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Random;
-public class Foundation extends Structure{
+public class Foundation extends Structure {
private ArrayList children = new ArrayList<>();
- private Layout layout;
+ private SimpleSquareLayout simpleSquareLayout;
- public Foundation(int depth, Material material){ //Foundations are uniform Height
- this.width = 0;
+ public Foundation(int depth, Material material) { //Foundations are uniform Height
+ this.width.x = 0;
+ this.depth = depth;
+ this.material = material;
+ }
+
+ public Foundation(int depth, Material material, String name) { //Foundations are uniform Height
+ this.width.x = 0;
+ this.name = name;
this.depth = depth;
this.material = material;
}
@@ -27,70 +36,210 @@ public class Foundation extends Structure{
}
public void addChildren(ArrayList children) {
- for (Structure s:children) {
+ for (Structure s : children) {
s.setDepth(this.depth);
}
this.children.addAll(children);
}
- public void removeChildren(){
+ public Structure generateChild(boolean isFoundation, Klasse klasse, String name) {
+ Structure result;
+ if (isFoundation) {
+ result = new Foundation(this.depth + 1, nextSediment(), name);
+ } else {
+ result = new Building(nextColorConcrete(), klasse, name);
+ }
+ this.children.add(result);
+ return result;
+ }
+
+ public Material nextColorConcrete() {
+ Material result = null;
+ Random rand = new Random();
+ while ((result == this.material) || (result == null)) {
+ int r = rand.nextInt(15); //there are 16 kins of concrete
+ switch (r) {
+ case 0:
+ result = Material.BLACK_CONCRETE;
+ break;
+ case 1:
+ result = Material.BROWN_CONCRETE;
+ break;
+ case 2:
+ result = Material.GRAY_CONCRETE;
+ break;
+ case 3:
+ result = Material.LIME_CONCRETE;
+ break;
+ case 4:
+ result = Material.YELLOW_CONCRETE;
+ break;
+ case 5:
+ result = Material.LIGHT_GRAY_CONCRETE;
+ break;
+ case 6:
+ result = Material.RED_CONCRETE;
+ break;
+ case 7:
+ result = Material.BLUE_CONCRETE;
+ break;
+ case 8:
+ result = Material.CYAN_CONCRETE;
+ break;
+ case 9:
+ result = Material.GREEN_CONCRETE;
+ break;
+ case 10:
+ result = Material.LIGHT_BLUE_CONCRETE;
+ break;
+ case 11:
+ result = Material.MAGENTA_CONCRETE;
+ break;
+ case 12:
+ result = Material.ORANGE_CONCRETE;
+ break;
+ case 13:
+ result = Material.PINK_CONCRETE;
+ break;
+ case 14:
+ result = Material.PURPLE_CONCRETE;
+ break;
+ case 15:
+ result = Material.WHITE_CONCRETE;
+ break;
+ }
+ }
+ return result;
+ }
+
+ public Material nextSediment(){
+ Material result = null;
+ Random rand = new Random();
+ while ((result == this.material) || (result == null)) {
+ int r = rand.nextInt(12); //there are 16 kins of concrete
+ switch (r) {
+ case 0:
+ result = Material.STONE;
+ break;
+ case 1:
+ result = Material.GRASS_BLOCK;
+ break;
+ case 2:
+ result = Material.ROOTED_DIRT;
+ break;
+ case 3:
+ result = Material.GRANITE;
+ break;
+ case 4:
+ result = Material.DIORITE;
+ break;
+ case 5:
+ result = Material.ANDESITE;
+ break;
+ case 6:
+ result = Material.DEEPSLATE;
+ break;
+ case 7:
+ result = Material.TUFF;
+ break;
+ case 8:
+ result = Material.GRAVEL;
+ break;
+ case 9:
+ result = Material.SAND;
+ break;
+ case 10:
+ result = Material.SANDSTONE;
+ break;
+ case 11:
+ result = Material.COARSE_DIRT;
+ break;
+ }
+ }
+ return result;
+ }
+
+ public void removeChildren() {
this.children = new ArrayList<>();
}
- public void optimizeLayout(){
- //TODO: find cool Algorithms to do this scientifically and optimal.
+ public void optimizeLayout() {
int cWith = 0;
for (Structure s : children) {
- s.setLocation(location.clone().add(new Vector(1,depth,((cWith)+1))));
- cWith += (s.getWidth() + 2);
+ s.setLocation(location.clone().add(new Vector(1, depth, ((cWith) + 1))));
+ cWith += (s.getWidth().x + 2);
}
- this.width = cWith;
+ this.width.x = cWith;
}
- private static class DepthComparator implements Comparator{
+ @Override
+ public Structure getFromTree(String checkName) {
+ if (this.name != null) {
+ if (this.name.equals(checkName)) {
+ return this;
+ } else {
+ for (Structure s : this.children) {
+ if (s.getFromTree(checkName) != null) return s.getFromTree(checkName);
+ }
+ }
+ } else {
+ for (Structure s : this.children) {
+ if (s.getFromTree(checkName) != null) return s.getFromTree(checkName);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public double getArea(){
+ if(area == 0)setAllAreas();
+ return area;
+ }
+
+ private static class DepthComparator implements Comparator {
@Override
public int compare(Foundation o1, Foundation o2) {
return Integer.compare(o1.getDepth(), o2.getDepth());
}
}
- private static class WidthComparator implements Comparator{
+ private static class WidthComparator implements Comparator {
@Override
public int compare(Structure o1, Structure o2) {
- return Integer.compare(o1.getWidth(), o2.getWidth());
+ return Integer.compare(o1.getWidth().x, o2.getWidth().x);
}
}
private boolean baseFoundation = true;
- public void organizeFoundation(){
- if(this.depth == 0 && baseFoundation){ //rootElement prepwork and recursion call
+ public void organizeFoundation() {
+ if (this.depth == 0 && baseFoundation) { //rootElement prepwork and recursion call
ArrayList allFoundations = collectAllFoundations();
baseFoundation = false;
allFoundations.sort(new DepthComparator());
Collections.reverse(allFoundations); //higher Depths first
- for (Foundation f:allFoundations) {
+ for (Foundation f : allFoundations) {
//if(!this.equals(f))
f.organizeFoundation();
}
- }else{ //normal Call and recursion
+ } else { //normal Call and recursion
this.children.sort(new WidthComparator());
Collections.reverse(this.children); //Widest Building or Foundation first
- this.layout = new Layout(this.children);
- this.layout.createLayout();
- this.width = layout.getSize();
+ this.simpleSquareLayout = new SimpleSquareLayout(this.children);
+ this.simpleSquareLayout.createLayout();
+ this.width.x = simpleSquareLayout.getSize();
}
}
- private ArrayList collectAllFoundations(){ //called on the base Foundation
+ public ArrayList collectAllFoundations() { //called on the base Foundation
ArrayList fCollection = new ArrayList<>();
fCollection.add(this);
int currentDepth = this.depth;
int lastDepthAdded = -1;
- while (lastDepthAdded != 0){ //while there are new nextDepths in this Depth.
- for (int i = 0; i < fCollection.size();i++) {
- if (!(fCollection.get(i).getDepth() < currentDepth)){ //if f is not part of a historical depth
+ while (lastDepthAdded != 0) { //while there are new nextDepths in this Depth.
+ for (int i = 0; i < fCollection.size(); i++) {
+ if (!(fCollection.get(i).getDepth() < currentDepth)) { //if f is not part of a historical depth
fCollection.addAll(fCollection.get(i).getNextDepth());
lastDepthAdded = fCollection.get(i).getNextDepth().size();
}
@@ -100,28 +249,40 @@ public class Foundation extends Structure{
return fCollection;
}
- private ArrayList getNextDepth(){
- ArrayList result = new ArrayList<>();
- for (Structure s:this.children) {
+ public ArrayList collectAllBuildings() { //called on the base Foundation
+ ArrayList buildings = new ArrayList<>();
+ for (Structure s: children) {
if (s.getClass() == Foundation.class){
+ buildings.addAll(((Foundation) s).collectAllBuildings());
+ }else{
+ buildings.add((Building) s);
+ }
+ }
+ return buildings;
+ }
+
+ private ArrayList getNextDepth() {
+ ArrayList result = new ArrayList<>();
+ for (Structure s : this.children) {
+ if (s.getClass() == Foundation.class) {
result.add((Foundation) s);
- }else {
+ } else {
s.setDepth(this.depth);
}
}
- for (Foundation f:result) {
- f.setDepth((this.depth)+1);
+ for (Foundation f : result) {
+ f.setDepth((this.depth) + 1);
}
return result;
}
- public void correctAllLocations(Location location){
- for (Structure s:this.children) {
+ public void correctAllLocations(Location location) {
+ for (Structure s : this.children) {
try {
- Point temp = this.layout.getCoordinateOf(s);
- s.setLocation(location.clone().add(temp.x,0,temp.y));
- if (s.getClass() == Foundation.class){
- Foundation f = (Foundation)s;
+ Point temp = this.simpleSquareLayout.getCoordinateOf(s);
+ s.setLocation(location.clone().add(temp.x, 0, temp.y));
+ if (s.getClass() == Foundation.class) {
+ Foundation f = (Foundation) s;
f.correctAllLocations(f.getLocation());
}
} catch (AttributeNotFoundException e) {
@@ -129,4 +290,17 @@ public class Foundation extends Structure{
}
}
}
+
+ private double setAllAreas(){
+ double myArea = 0;
+ for (Structure s: children) {
+ if(s.getClass() == Foundation.class){
+ myArea += ((Foundation) s).setAllAreas();
+ }else{
+ myArea += s.getArea();
+ }
+ }
+ this.area = myArea;
+ return myArea;
+ }
}
diff --git a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java
index 6b63b86b4ccd002d8ccf81712a9e81d2a90c2e37..5efa1abb86780304feda90f4010d2ff1ff924f99 100644
--- a/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java
+++ b/src/main/java/de/_82grfl1bif/KPI_Visualizer/structures/Structure.java
@@ -6,16 +6,20 @@ import org.bukkit.util.Vector;
import javax.persistence.Column;
import javax.persistence.Entity;
+import java.awt.*;
-@Entity
-public class Structure{
+public abstract class Structure{
- @Column(name ="width")
- protected int width;
- @Column(name ="material")
+ protected Point width = new Point(0,0);
protected Material material;
protected Location location;
protected int depth;
+ protected String name;
+ protected double area;
+
+ public double getArea() {
+ return area;
+ }
public Material getMaterial() {
return material;
@@ -33,7 +37,7 @@ public class Structure{
this.location.add(vector);
}
- public int getWidth() {
+ public Point getWidth() {
return width;
}
@@ -44,4 +48,6 @@ public class Structure{
public int getDepth() {
return depth;
}
+
+ public abstract Structure getFromTree(String checkName);
}
diff --git a/src/server/banned-ips.json b/src/server/banned-ips.json
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/src/server/banned-ips.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/src/server/banned-players.json b/src/server/banned-players.json
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/src/server/banned-players.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/src/server/bukkit.yml b/src/server/bukkit.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ddf2b3b3908972e35db44f336982b93180147ea4
--- /dev/null
+++ b/src/server/bukkit.yml
@@ -0,0 +1,43 @@
+# This is the main configuration file for Bukkit.
+# As you can see, there's actually not that much to configure without any plugins.
+# For a reference for any variable inside this file, check out the Bukkit Wiki at
+# https://www.spigotmc.org/go/bukkit-yml
+#
+# If you need help on this file, feel free to join us on irc or leave a message
+# on the forums asking for advice.
+#
+# IRC: #spigot @ irc.spi.gt
+# (If this means nothing to you, just go to https://www.spigotmc.org/go/irc )
+# Forums: https://www.spigotmc.org/
+# Bug tracker: https://www.spigotmc.org/go/bugs
+
+
+settings:
+ allow-end: true
+ warn-on-overload: true
+ permissions-file: permissions.yml
+ update-folder: update
+ plugin-profiling: false
+ connection-throttle: 4000
+ query-plugins: true
+ deprecated-verbose: default
+ shutdown-message: Server closed
+ minimum-api: none
+spawn-limits:
+ water-underground-creature: 5
+ monsters: 70
+ animals: 10
+ water-animals: 5
+ water-ambient: 20
+ ambient: 15
+chunk-gc:
+ period-in-ticks: 600
+ticks-per:
+ water-underground-creature-spawns: 1
+ animal-spawns: 400
+ monster-spawns: 1
+ water-spawns: 1
+ water-ambient-spawns: 1
+ ambient-spawns: 1
+ autosave: 6000
+aliases: now-in-commands.yml
diff --git a/src/server/cache/mojang_1.17.1.jar b/src/server/cache/mojang_1.17.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..8ca35bb7944d8664750b0a71b06647f3a958336c
Binary files /dev/null and b/src/server/cache/mojang_1.17.1.jar differ
diff --git a/src/server/cache/patched_1.17.1.jar b/src/server/cache/patched_1.17.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0b2c697de221711ef972d59db56f11d7e499b906
Binary files /dev/null and b/src/server/cache/patched_1.17.1.jar differ
diff --git a/src/server/commands.yml b/src/server/commands.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b065deef20a9625a681afad60ac0d47fa7ff9c6
--- /dev/null
+++ b/src/server/commands.yml
@@ -0,0 +1,17 @@
+# This is the commands configuration file for Bukkit.
+# For documentation on how to make use of this file, check out the Bukkit Wiki at
+# https://www.spigotmc.org/go/commands-yml
+#
+# If you need help on this file, feel free to join us on irc or leave a message
+# on the forums asking for advice.
+#
+# IRC: #spigot @ irc.spi.gt
+# (If this means nothing to you, just go to https://www.spigotmc.org/go/irc )
+# Forums: https://www.spigotmc.org/
+# Bug tracker: https://www.spigotmc.org/go/bugs
+
+command-block-overrides: []
+ignore-vanilla-permissions: false
+aliases:
+ icanhasbukkit:
+ - version $1-
diff --git a/src/server/cwa-verify_2021-11-09_16-08-07.json b/src/server/cwa-verify_2021-11-09_16-08-07.json
new file mode 100644
index 0000000000000000000000000000000000000000..dadf7912d57f22a5a53df4c152975341f1aa3f23
--- /dev/null
+++ b/src/server/cwa-verify_2021-11-09_16-08-07.json
@@ -0,0 +1 @@
+{"py/object": "extractor.extractor.ProjectExtractionResult", "name": "cwa-verification-server", "entities": [{"py/object": "extractor.model.DataEntity", "entity_id": 4625, "name": "VerificationApplicationExternalTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/VerificationApplicationExternalTest.java", "base_class": null, "variables": ["TOKEN_PADDING", "mockMvc", "testResultServerService", "tanService", "appSessionrepository", "verificationApplicationConfig", "cachedRequestSize"], "functions": ["setUp", "tearDown", "callGenerateTanWithFake", "callGenerateTan", "callGenerateTanForQuickTest", "callGenerateTanByUnknownToken", "callGenerateTanByInvalidToken", "callGenerateTanWithNegativeCovidResultFaked", "callGenerateTanWithNegativeCovidResultWithoutFakeHeader", "callGenerateTanWithNegativeCovidResult", "callGenerateTanWithTanCounterMaximum", "callGenerateTanWithTeleTanAppSession", "callGenerateTanWithUnknownSourceOfTrust", "callGetRegistrationTokenByGuid", "callGetRegistrationTokenByGuidAndDobHash", "callGetRegistrationTokenByGuidAndDobHashAndWithoutDobHashAfterwards", "callGetRegistrationTokenByGuidAndDobHashAndWithAnotherDobHashAfterwards", "callGetRegistrationTokenByGuidAndDobHashAndUseDobHashAgainAfterwards", "callGetRegistrationTokenByDobHash", "callGetRegistrationTokenByGuidWithFake", "callGetRegistrationTokenWithNullKeyType", "callGetRegistrationTokenWithNullKey", "callGetRegistrationTokenByTeleTan", "callGetRegistrationTokenByUnknownTeleTan", "callGetRegistrationTokenByInvalidHashedGUID", "callGetRegistrationTokenByAlreadyExistForGUID", "callGetRegistrationTokenByAlreadyExistForTeleTan", "callGetTestState", "callGetTestStateWithDobRegistrationToken", "callGetTestStateWithDobRegistrationTokenAndTrsRespondsWithDifferentResults", "callGetTestStateWithFake", "callGetTestStateByAppSessionIsEmpty", "testVerifyEndpointShouldNotBeReachable", "testTeleTanEndpointShouldNotBeReachable", "callGetRegistrationTokenByLargeRequest"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "438631ac28e8dc98d043440edf2081732ee5cd37", "date": "2021-05-21 10:49:23 +0200", "committer": "GitHub", "comment": "Fix/Sample Collection naming (#228)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "818bfcc83b67d4e504eb238d2a47678272441031", "date": "2020-08-07 13:18:57 +0200", "committer": "GitHub", "comment": "Feat add-ssl and http (#206)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["VerificationApplicationExternalTest", "Store", "max", "request", "size", "config", "property", "to", "allow", "tests", "to", "modify", "it", "Reset", "max", "request", "size", "to", "cached", "value", "clean", "the", "repo", "Set", "the", "maxSizeLimit", "to", "10", "for", "testing", "This", "is", "the", "test", "class", "for", "the", "verification", "application", "Test", "generateTAN", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTANForQuickTest", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "unknown", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "invalid", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "fake", "test", "result", "from", "the", "lab-server", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "negative", "test", "result", "from", "the", "lab-server", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "negative", "test", "result", "from", "the", "lab-server", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "registration", "token", "where", "the", "tancounter", "maximum", "is", "reached", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "registration", "token", "connected", "to", "an", "appsession", "based", "on", "tele", "Tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "generateTAN", "with", "an", "unknown", "source", "of", "trust", "in", "the", "appsession", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "with", "fake", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "keytype", "which", "is", "null", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "key", "which", "is", "null", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "tele", "tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "unknown", "Tele-Tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "invalid", "Guid", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "for", "guid", "but", "the", "guid", "already", "has", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "for", "teletan", "but", "the", "teletan", "already", "has", "registration", "token", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "fake", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "with", "empty", "Entity", "of", "VerificationAppSession", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "verifying", "tans", "is", "not", "reachable", "when", "external", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "creating", "new", "TeleTans", "is", "not", "reachable", "when", "external", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "get", "registration", "token", "by", "guid", "with", "size", "larger", "than", "the", "maxSizeLimit", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "setup", "teardown", "callgeneratetanwithfake", "callgeneratetan", "callgeneratetanforquicktest", "callgeneratetanbyunknowntoken", "callgeneratetanbyinvalidtoken", "callgeneratetanwithnegativecovidresultfaked", "callgeneratetanwithnegativecovidresultwithoutfakeheader", "callgeneratetanwithnegativecovidresult", "callgeneratetanwithtancountermaximum", "callgeneratetanwithteletanappsession", "callgeneratetanwithunknownsourceoftrust", "callgetregistrationtokenbyguid", "callgetregistrationtokenbyguidanddobhash", "callgetregistrationtokenbyguidanddobhashandwithoutdobhashafterwards", "callgetregistrationtokenbyguidanddobhashandwithanotherdobhashafterwards", "callgetregistrationtokenbyguidanddobhashandusedobhashagainafterwards", "callgetregistrationtokenbydobhash", "callgetregistrationtokenbyguidwithfake", "callgetregistrationtokenwithnullkeytype", "callgetregistrationtokenwithnullkey", "callgetregistrationtokenbyteletan", "callgetregistrationtokenbyunknownteletan", "callgetregistrationtokenbyinvalidhashedguid", "callgetregistrationtokenbyalreadyexistforguid", "callgetregistrationtokenbyalreadyexistforteletan", "callgetteststate", "callgetteststatewithdobregistrationtoken", "callgetteststatewithdobregistrationtokenandtrsrespondswithdifferentresults", "callgetteststatewithfake", "callgetteststatebyappsessionisempty", "testverifyendpointshouldnotbereachable", "testteletanendpointshouldnotbereachable", "callgetregistrationtokenbylargerequest"], "complexity": 108922.0, "loc": 828, "qloc": 565, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4626, "name": "TestResultServerService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/TestResultServerService.java", "base_class": null, "variables": ["testResultServerClient"], "functions": ["result"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerService", "This", "class", "represents", "the", "lab", "server", "service", "This", "method", "gives", "an", "TestResult", "for", "guid", "param", "guid", "hashed", "GUID", "return", "Testresult", "for", "GUID", "result"], "complexity": 1865.0, "loc": 52, "qloc": 17, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4627, "name": "TanService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/TanService.java", "base_class": null, "variables": ["verificationApplicationConfig", "tanRepository", "hashingService", "teleTanPattern", "teleTanLength"], "functions": ["saveTan", "deleteTan", "syntaxTeleTanVerification", "verifyTeleTan", "generateValidTan", "persistTan", "createTeleTan", "isTeleTanValid", "createTanFromUuid", "checkTanNotExist", "generateVerificationTeleTan", "generateVerificationTan", "generateVerificationTan", "getEntityByTan", "isTeleTanRateLimitNotExceeded"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "c12f29a400627657ab9642c2962d8dad53c3535f", "date": "2021-01-27 09:12:31 +0100", "committer": "GitHub", "comment": "make sure TeleTANs are unique in the database (#110)"}, {"hash": "71f3b3a4dc80034e4a5479e764d9f8078679698e", "date": "2021-01-26 14:53:46 +0100", "committer": "GitHub", "comment": "Improve generations of tele-tans (#128)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "3088d6523201f50dd41a42bf157be96914656dd4", "date": "2020-06-04 11:29:18 +0200", "committer": "GitHub", "comment": "fix: Teletan will be verified if it is expired (#127)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "3a55add805d33e6d99f41dd09dcb7f8300bb20a1", "date": "2020-06-01 22:16:14 +0200", "committer": "GitHub", "comment": "fix:teleTan (#119)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}, {"hash": "e002f056482113d0a839a6eaaac05392c00d042e", "date": "2020-05-27 11:04:46 +0200", "committer": "GitHub", "comment": "fix: documentation (#73)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "39885d752825cbb0ea6b417d75cbfbe1481fe89b", "date": "2020-05-26 11:59:11 +0200", "committer": "GitHub", "comment": "fix: tan_tan_pattern to include regex meta characters (#65)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "5cf0576529bbe39e4050a0872075ecabcb706a45", "date": "2020-05-24 10:43:12 +0200", "committer": "GitHub", "comment": "Teletan matched string with [characters]{7} and thus also matched 8 char strings. It also used a strange character definition syntax with M-N-P-Z form, which would allow - char as well. (#44)"}], "semantic_data": ["TanService", "UUID", "is", "128", "bit", "value", "This", "class", "represents", "the", "TanService", "service", "The", "link", "VerificationTanRepository", "The", "link", "HashingService", "Constructor", "for", "the", "TanService", "that", "also", "builds", "the", "pattern", "for", "tele", "tan", "verification", "param", "verificationApplicationConfig", "the", "link", "VerificationApplicationConfig", "with", "needed", "tan", "configurations", "param", "tanRepository", "the", "link", "VerificationTanRepository", "where", "tans", "are", "queried", "and", "inserted", "param", "hashingService", "the", "link", "HashingService", "implementation", "Saves", "link", "VerificationTan", "into", "the", "database", "param", "tan", "link", "VerificationTan", "return", "link", "VerificationTan", "Deletes", "link", "VerificationTan", "from", "the", "database", "param", "tan", "the", "tan", "which", "will", "be", "deleted", "Check", "teleTAN", "syntax", "constraints", "param", "teleTan", "the", "teleTAN", "return", "teleTAN", "verification", "flag", "Verifies", "the", "tele", "transaction", "number", "teleTAN", "param", "teleTan", "the", "teleTAN", "to", "verify", "return", "is", "teleTAN", "verified", "Generates", "new", "valid", "TAN", "String", "TAN", "is", "considered", "as", "valid", "if", "it", "is", "not", "yet", "stored", "in", "the", "database", "param", "tanCreator", "supplier", "which", "creates", "new", "TAN", "return", "Valid", "TAN", "String", "This", "method", "generates", "link", "VerificationTan", "entity", "and", "saves", "it", "param", "tan", "the", "TAN", "param", "tanType", "the", "TAN", "type", "param", "teleTanType", "type", "of", "the", "teleTan", "return", "the", "persisted", "TAN", "Creates", "new", "TeleTan", "String", "return", "new", "teleTAN", "Returns", "the", "if", "teleTAN", "matches", "the", "Pattern", "requirements", "param", "teleTan", "the", "teleTAN", "to", "check", "return", "The", "validity", "of", "the", "teleTAN", "Created", "new", "TAN", "String", "return", "new", "TAN", "Check", "for", "existing", "TAN", "in", "the", "link", "VerificationTanRepository", "param", "tan", "the", "TAN", "return", "flag", "for", "existing", "TAN", "Returns", "generated", "valid", "teleTAN", "and", "persists", "it", "return", "valid", "teleTAN", "This", "Method", "generates", "valid", "TAN", "and", "persists", "it", "Returns", "the", "generated", "TAN", "param", "sourceOfTrust", "sets", "the", "source", "of", "Trust", "for", "the", "Tan", "param", "teleTanType", "type", "of", "the", "teleTan", "return", "valid", "tan", "with", "given", "source", "of", "Trust", "This", "method", "generates", "valid", "TAN", "Object", "but", "doesn", "persist", "it", "param", "tan", "alphanumeric", "tan", "param", "tanType", "type", "of", "the", "tan", "param", "sourceOfTrust", "source", "of", "trust", "of", "the", "tan", "return", "Tan", "object", "Get", "existing", "VerificationTan", "by", "TAN", "from", "link", "VerificationTanRepository", "param", "tan", "the", "TAN", "return", "Optional", "VerificationTan", "Checks", "whether", "the", "rate", "limit", "for", "new", "TeleTans", "is", "not", "exceeded", "return", "true", "if", "new", "TeleTans", "can", "be", "created", "false", "if", "not", "savetan", "deletetan", "syntaxteletanverification", "verifyteletan", "generatevalidtan", "persisttan", "createteletan", "isteletanvalid", "createtanfromuuid", "checktannotexist", "generateverificationteletan", "generateverificationtan", "generateverificationtan", "getentitybytan", "isteletanratelimitnotexceeded"], "complexity": 14546.5, "loc": 330, "qloc": 165, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4628, "name": "HashedGuid", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/HashedGuid.java", "base_class": null, "variables": ["id"], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["HashedGuid", "This", "class", "represents", "the", "hashed", "Guid", "Hash", "SHA256", "aka", "QR-Code", "GUID", "encoded", "as", "hex", "string", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-testresult-server", "blob", "master", "docs", "architecture-overview", "md", "core-entities", "Core", "Entities"], "complexity": 1157.0, "loc": 44, "qloc": 14, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4629, "name": "RegistrationToken", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/RegistrationToken.java", "base_class": null, "variables": ["registrationToken", "responsePadding"], "functions": [], "commits": [{"hash": "2f2c67db47b67a27916fa3c453fba50c3f607651", "date": "2020-07-31 13:31:24 +0200", "committer": "GitHub", "comment": "fix: added json ignore if null (#198)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "e53e47cd35f1be301a0ecc444502c80a5bf752b4", "date": "2020-05-31 15:26:58 +0200", "committer": "GitHub", "comment": "fix: api changes for testing (#113)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}], "semantic_data": ["RegistrationToken", "This", "class", "represents", "the", "registration", "Token"], "complexity": 2650.0, "loc": 57, "qloc": 27, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4630, "name": "VerificationAppSession", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationAppSession.java", "base_class": null, "variables": ["serialVersionUID", "id", "version", "createdAt", "updatedAt", "hashedGuid", "hashedGuidDob", "registrationTokenHash", "teleTanHash", "tanCounter", "sourceOfTrust", "teleTanType"], "functions": ["incrementTanCounter"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}], "semantic_data": ["VerificationAppSession", "This", "class", "represents", "the", "AppSession-entity", "This", "method", "increments", "the", "tan", "counter", "incrementtancounter"], "complexity": 8225.0, "loc": 103, "qloc": 59, "package": "app.coronawarn.verification.domain"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4631, "name": "MvcResult", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4632, "name": "MockMvc", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4633, "name": "VerificationAppSessionRepository", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/repository/VerificationAppSessionRepository.java", "base_class": null, "variables": [], "functions": ["findByRegistrationTokenHash", "findByHashedGuidOrHashedGuidDob", "findByTeleTanHash", "deleteByCreatedAtBefore"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "66b2fab6dbc688d7a6114f6e746f1a4b6130b6f5", "date": "2020-06-07 09:18:06 +0200", "committer": "GitHub", "comment": "fix: find the expected entity (#145)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}], "semantic_data": ["VerificationAppSessionRepository", "This", "class", "represents", "the", "AppSession", "repository", "This", "method", "looks", "in", "the", "Database", "for", "an", "Appsession", "with", "the", "given", "registrationTokenHash", "param", "registrationTokenHash", "hash", "to", "search", "for", "return", "Optional", "VerificationAppSession", "the", "optional", "Appsession", "This", "method", "looks", "in", "the", "Database", "for", "an", "Appsession", "with", "the", "given", "hashedGuid", "param", "hashedGuid", "hash", "to", "search", "for", "param", "hashedGuidDob", "hash", "to", "search", "for", "return", "Optional", "VerificationAppSession", "the", "optional", "Appsession", "This", "method", "looks", "in", "the", "Database", "for", "an", "Appsession", "with", "the", "given", "teleTanHash", "param", "teleTanHash", "hash", "to", "search", "for", "return", "Optional", "VerificationAppSession", "the", "optional", "Appsession", "This", "method", "looks", "in", "the", "Database", "for", "Appsessions", "that", "are", "older", "than", "the", "before", "value", "and", "deletes", "them", "param", "before", "the", "Date", "to", "delete", "by", "findbyregistrationtokenhash", "findbyhashedguidorhashedguiddob", "findbyteletanhash", "deletebycreatedatbefore"], "complexity": 2474.0, "loc": 66, "qloc": 11, "package": "app.coronawarn.verification.repository"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4634, "name": "RegistrationTokenRequest", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/RegistrationTokenRequest.java", "base_class": null, "variables": ["key", "keyDob", "keyType"], "functions": [], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "ec85348ce5492445d701ea1b14658250de6b7eaa", "date": "2020-05-29 14:58:29 +0200", "committer": "GitHub", "comment": "Fixed a comment that incorrectly lists available enum values. (#98)"}, {"hash": "e0f62bbb5562d9dac08e1d7ccd2ea27cda730df9", "date": "2020-05-27 07:54:23 +0200", "committer": "GitHub", "comment": "fix: gitattributes (#81)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}], "semantic_data": ["RegistrationTokenRequest", "This", "class", "represents", "registration", "token", "request", "parameter", "with", "hashed", "guid", "or", "teleTAN", "The", "key", "which", "can", "be", "teletan", "or", "hashed", "guid", "The", "hashed", "GUID", "built", "with", "date", "of", "birth", "The", "type", "of", "key", "which", "can", "be", "GUID", "or", "TELETAN"], "complexity": 2399.0, "loc": 62, "qloc": 23, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4635, "name": "VerificationApplicationConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["initialFakeDelayMilliseconds", "fakeDelayMovingAverageSamples", "tan", "appsession", "entities", "jwt", "request", "disableDobHashCheckForExternalTestResult"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["VerificationApplicationConfig", "This", "class", "and", "its", "nested", "subclasses", "are", "used", "to", "read", "in", "values", "from", "configuration", "file", "application", "yml", "which", "is", "loaded", "via", "the", "EnableConfigurationProperties", "annotation", "from", "SpringBootApplication", "main", "class", "Configure", "the", "Tan", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Tele", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "TeleValid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "rate", "limiting", "for", "creating", "new", "teletans", "Configure", "the", "Valid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "AppSession", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Entities", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Cleanup", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "Jwt", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "requests", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4636, "name": "TestUtils", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/TestUtils.java", "base_class": null, "variables": ["TEST_GUI_HASH", "TEST_GUI_HASH2", "TEST_GUI_HASH_DOB", "TEST_GUI_HASH_DOB2", "RESULT_PADDING", "LAB_ID", "TEST_INVALID_GUI_HASH", "TEST_TELE_TAN", "TEST_TELE_TAN_HASH", "TEST_INVALID_REG_TOK", "TEST_REG_TOK", "TEST_REG_TOK_HASH", "TEST_LAB_POSITIVE_RESULT", "QUICK_TEST_POSITIVE_RESULT", "TEST_LAB_NEGATIVE_RESULT", "TEST_TAN", "TEST_INVALID_TAN", "TEST_SOT", "TEST_HASHED_TAN", "TEST_TAN_TYPE", "TAN_VALID_UNTIL_IN_DAYS", "PREFIX_API_VERSION", "REGISTRATION_TOKEN_URI", "TAN_VERIFICATION_URI", "objectMapper"], "functions": ["prepareAppSessionTestData", "prepareAppSessionTestDataDob", "prepareAppSessionTestDataSotTeleTan", "getAppSessionTestData", "getAppSessionTestData", "getTeleTanTestData", "getVerificationTANTestData", "getAsJsonFormat", "getJwtTestData"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["TestUtils", "prepareappsessiontestdata", "prepareappsessiontestdatadob", "prepareappsessiontestdatasotteletan", "getappsessiontestdata", "getappsessiontestdata", "getteletantestdata", "getverificationtantestdata", "getasjsonformat", "getjwttestdata"], "complexity": 28388.0, "loc": 159, "qloc": 141, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4637, "name": "Matchers", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.hamcrest"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4638, "name": "Assertions", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4639, "name": "ArgumentMatchers", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4640, "name": "BDDMockito", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4641, "name": "Mockito", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4642, "name": "MockMvcRequestBuilders", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet.request"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4643, "name": "MockMvcResultMatchers", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.web.servlet.result"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4644, "name": "AppSessionSourceOfTrust", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/AppSessionSourceOfTrust.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": ["AppSessionSourceOfTrust", "This", "class", "represents", "the", "possible", "sources", "of", "trust", "for", "an", "appsession", "entity", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "entity-appsession", "Entity", "AppSession", "sourceOfTrust"], "complexity": 281.0, "loc": 33, "qloc": 5, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4645, "name": "RegistrationTokenKeyType", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/RegistrationTokenKeyType.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["RegistrationTokenKeyType", "This", "class", "represent", "the", "different", "key", "types", "with", "whom", "you", "can", "generate", "registration", "token", "The", "key", "type", "GUID", "Hash", "The", "key", "type", "TeleTaN", "which", "can", "be", "generated", "by", "the", "hotline", "or", "health", "authority"], "complexity": 275.0, "loc": 39, "qloc": 5, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4646, "name": "TeleTanType", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TeleTanType.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}], "semantic_data": ["TeleTanType"], "complexity": 959.0, "loc": 37, "qloc": 11, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4647, "name": "Slf4j", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok.extern.slf4j"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4648, "name": "AfterEach", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4649, "name": "BeforeEach", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4650, "name": "Test", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4651, "name": "ExtendWith", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.junit.jupiter.api.extension"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4652, "name": "Autowired", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.beans.factory.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4653, "name": "AutoConfigureMockMvc", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.test.autoconfigure.web.servlet"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4654, "name": "SpringBootTest", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.test.context"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4655, "name": "MockBean", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.test.mock.mockito"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4656, "name": "MediaType", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4657, "name": "ActiveProfiles", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4658, "name": "ContextConfiguration", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4659, "name": "SpringExtension", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context.junit.jupiter"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4660, "name": "VerificationApplicationExternalTestWorkaround", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/VerificationApplicationExternalTestWorkaround.java", "base_class": null, "variables": ["TOKEN_PADDING", "mockMvc", "testResultServerService", "appSessionrepository"], "functions": ["callGetTestStateWithDobRegistrationTokenAndTrsRespondsWithDifferentResults"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}], "semantic_data": ["VerificationApplicationExternalTestWorkaround", "This", "is", "the", "test", "class", "for", "the", "verification", "application", "callgetteststatewithdobregistrationtokenandtrsrespondswithdifferentresults"], "complexity": 7303.0, "loc": 78, "qloc": 45, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4661, "name": "ObjectMapper", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "com.fasterxml.jackson.databind"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4662, "name": "VerificationTan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationTan.java", "base_class": null, "variables": ["SERIAL_VERSION_UID", "id", "version", "createdAt", "updatedAt", "tanHash", "validFrom", "validUntil", "sourceOfTrust", "redeemed", "type", "teleTanType"], "functions": ["canBeRedeemed"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": ["VerificationTan", "This", "class", "represents", "the", "TAN", "entity", "Check", "if", "the", "tan", "can", "be", "redeemed", "by", "date", "param", "reference", "the", "date", "to", "check", "if", "it", "is", "in", "between", "from", "and", "until", "range", "return", "true", "or", "false", "if", "it", "can", "be", "redeemed", "canberedeemed"], "complexity": 8778.0, "loc": 110, "qloc": 63, "package": "app.coronawarn.verification.domain"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4663, "name": "AuthorizationRole", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/AuthorizationRole.java", "base_class": null, "variables": ["roleName"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["AuthorizationRole", "The", "different", "possible", "roles", "which", "are", "authorizated", "to", "create", "tele", "tan", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "use-case-create-teletan", "Use", "Case", "Create", "TeleTan"], "complexity": 1390.0, "loc": 45, "qloc": 12, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4664, "name": "TestResult", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TestResult.java", "base_class": null, "variables": ["testResult", "sc", "labId", "responsePadding"], "functions": [], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "438631ac28e8dc98d043440edf2081732ee5cd37", "date": "2021-05-21 10:49:23 +0200", "committer": "GitHub", "comment": "Fix/Sample Collection naming (#228)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "2f2c67db47b67a27916fa3c453fba50c3f607651", "date": "2020-07-31 13:31:24 +0200", "committer": "GitHub", "comment": "fix: added json ignore if null (#198)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["TestResult", "This", "class", "represents", "the", "TestResult", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-testresult-server", "blob", "master", "docs", "architecture-overview", "md", "core-entities", "Core", "Entities"], "complexity": 2510.0, "loc": 58, "qloc": 23, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4665, "name": "TanSourceOfTrust", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TanSourceOfTrust.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": ["TanSourceOfTrust", "This", "class", "represents", "the", "possible", "sources", "of", "trust", "for", "TAN", "entity", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "entity-tan", "Entity", "TAN", "sourceOfTrust"], "complexity": 276.0, "loc": 33, "qloc": 5, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4666, "name": "TanType", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TanType.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}], "semantic_data": ["TanType", "This", "class", "represents", "the", "different", "types", "of", "tans", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-verification-server", "blob", "master", "docs", "architecture-overview", "md", "entity-tan", "Entity", "TAN", "Type", "The", "general", "tan", "The", "TeleTAN", "which", "was", "created", "by", "the", "hotline"], "complexity": 422.0, "loc": 43, "qloc": 7, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4667, "name": "JsonProcessingException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "com.fasterxml.jackson.core"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4668, "name": "Jwts", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4669, "name": "SignatureAlgorithm", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4670, "name": "Component", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.stereotype"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4671, "name": "VerificationApplicationInternalTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/VerificationApplicationInternalTest.java", "base_class": null, "variables": ["TAN_PADDING", "mockMvc", "tanService", "jwtService", "appSessionRepository", "testResultServerServiceMock"], "functions": ["callGenerateTeleTAN", "callGenerateTeleTanUnauthorized", "callVerifyTAN", "callVerifyTANByVerificationTANIsEmpty", "callVerifyTANByTanWithInvalidSyntax", "callVerifyTANByExpiredTimeFrom", "callVerifyTANByExpiredTimeUntil", "callVerifyTANByIsRedeemed", "callGenerateTan", "callGetRegistrationTokenByGuid", "shouldReturn429StatusCodeIfRateLimitIsExceeded", "callGetTestState", "callGetTestStateOfTeleTanTokenShouldFail", "callGetTestStateOfInvalidTokenShouldFail", "callGetTestStateWithDobRegistrationToken", "callGetTestStateWithDobRegistrationTokenAndTrsRespondsWithDifferentResults"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "99d5c0cec343e7007def4f9c7e93ee8a0117f407", "date": "2021-05-31 12:03:56 +0200", "committer": "GitHub", "comment": "fix/Missing testId in InternalTestResult (#235)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "818bfcc83b67d4e504eb238d2a47678272441031", "date": "2020-08-07 13:18:57 +0200", "committer": "GitHub", "comment": "Feat add-ssl and http (#206)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["VerificationApplicationInternalTest", "without", "mock", "tanService", "getEntityByTan", "so", "this", "method", "will", "return", "empty", "entity", "setValidFrom", "later", "days", "then", "now", "setValidUntil", "earlier", "days", "then", "now", "tan", "is", "redeemed", "This", "is", "the", "test", "class", "for", "the", "verification", "application", "Test", "the", "generation", "of", "tele", "Tan", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "the", "generation", "of", "tele", "Tan", "when", "the", "jwt", "is", "not", "authorized", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "with", "empty", "Entity", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "with", "syntax", "problems", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "expired", "from", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "expired", "until", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "verifyTAN", "is", "redeemed", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "generating", "tans", "is", "not", "reachable", "when", "internal", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "that", "the", "endpoint", "for", "registration", "tokens", "is", "not", "reachable", "when", "internal", "profile", "is", "activated", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "Test", "getTestState", "throws", "Exception", "if", "the", "test", "cannot", "be", "performed", "callgenerateteletan", "callgenerateteletanunauthorized", "callverifytan", "callverifytanbyverificationtanisempty", "callverifytanbytanwithinvalidsyntax", "callverifytanbyexpiredtimefrom", "callverifytanbyexpiredtimeuntil", "callverifytanbyisredeemed", "callgeneratetan", "callgetregistrationtokenbyguid", "shouldreturn429statuscodeifratelimitisexceeded", "callgetteststate", "callgetteststateofteletantokenshouldfail", "callgetteststateofinvalidtokenshouldfail", "callgetteststatewithdobregistrationtoken", "callgetteststatewithdobregistrationtokenandtrsrespondswithdifferentresults"], "complexity": 45002.0, "loc": 358, "qloc": 221, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4672, "name": "JwtService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/JwtService.java", "base_class": null, "variables": ["TOKEN_PREFIX", "BEGIN_CERT", "END_CERT", "HEADER_NAME_AUTHORIZATION", "ROLES", "REALM_ACCESS", "iamClient", "verificationApplicationConfig"], "functions": ["isAuthorized", "validateToken", "getSubject", "getRoles", "getRealmFromToken", "getClaimFromToken", "getAllClaimsFromToken", "getPublicKey"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["JwtService", "check", "if", "the", "JWT", "is", "enabled", "Return", "false", "if", "one", "of", "the", "mandatory", "roles", "are", "not", "present", "Return", "true", "if", "at", "least", "one", "of", "the", "authorization", "roles", "are", "present", "This", "class", "represents", "the", "JWT", "service", "for", "token", "authorization", "and", "validation", "The", "bearer", "prefix", "for", "the", "json", "web", "token", "The", "certificate", "begin", "prefix", "The", "certificate", "end", "suffix", "The", "http", "request", "header", "name", "for", "JWT", "Authorization", "Validates", "the", "given", "token", "is", "given", "the", "token", "starts", "with", "the", "needed", "prefix", "the", "signing", "key", "is", "not", "null", "and", "the", "token", "is", "valid", "param", "authorizationToken", "The", "authorization", "token", "to", "validate", "param", "mandatoryRoles", "list", "of", "roles", "which", "are", "required", "to", "pass", "return", "code", "true", "code", "if", "the", "token", "is", "valid", "otherwise", "code", "false", "code", "Validates", "the", "given", "token", "If", "one", "of", "the", "given", "roles", "link", "AuthorizationRole", "exists", "and", "verified", "by", "public", "key", "param", "token", "The", "authorization", "token", "to", "validate", "param", "publicKey", "the", "key", "from", "the", "IAM", "server", "param", "mandatoryRoles", "List", "of", "roles", "which", "are", "required", "to", "pass", "return", "code", "true", "code", "if", "the", "token", "is", "valid", "otherwise", "code", "false", "code", "Get", "the", "certificate", "from", "IAM", "client", "As", "long", "as", "Keycloak", "can", "rotate", "it\u2019s", "keys", "we", "decided", "to", "reload", "the", "key", "on", "every", "validateToken", "call", "especially", "the", "method", "call", "is", "fortunately", "limited", "in", "time", "and", "number", "too", "return", "the", "calculated", "Public", "key", "from", "the", "certificate", "isauthorized", "validatetoken", "getsubject", "getroles", "getrealmfromtoken", "getclaimfromtoken", "getallclaimsfromtoken", "getpublickey"], "complexity": 20955.0, "loc": 194, "qloc": 114, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4673, "name": "Tan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/Tan.java", "base_class": null, "variables": ["tan", "responsePadding"], "functions": [], "commits": [{"hash": "2f2c67db47b67a27916fa3c453fba50c3f607651", "date": "2020-07-31 13:31:24 +0200", "committer": "GitHub", "comment": "fix: added json ignore if null (#198)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "e53e47cd35f1be301a0ecc444502c80a5bf752b4", "date": "2020-05-31 15:26:58 +0200", "committer": "GitHub", "comment": "fix: api changes for testing (#113)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}], "semantic_data": ["Tan", "This", "class", "represents", "the", "transaction", "number"], "complexity": 2622.0, "loc": 57, "qloc": 27, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4674, "name": "InternalTanController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/InternalTanController.java", "base_class": null, "variables": ["TAN_VERIFY_ROUTE", "TELE_TAN_ROUTE", "TELE_TAN_TYPE_HEADER", "tanService", "jwtService"], "functions": ["verifyTan", "createTeleTan"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["InternalTanController", "This", "class", "represents", "the", "rest", "controller", "for", "internally", "needed", "tan", "operations", "The", "route", "to", "the", "tan", "verification", "endpoint", "The", "route", "to", "the", "teleTAN", "generation", "endpoint", "This", "provided", "REST", "method", "verifies", "the", "transaction", "number", "TAN", "param", "tan", "the", "transaction", "number", "which", "needs", "to", "be", "verified", "link", "Tan", "return", "HTTP", "200", "if", "the", "verification", "was", "successful", "Otherwise", "HTTP", "404", "This", "method", "generates", "valid", "teleTAN", "param", "authorization", "auth", "return", "created", "teletan", "verifytan", "createteletan"], "complexity": 15765.0, "loc": 167, "qloc": 110, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4675, "name": "JwtServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/JwtServiceTest.java", "base_class": null, "variables": ["TOKEN_PREFIX", "BEGIN_PEM", "END_PEM", "RSA", "publicKey", "privateKey", "cert", "config", "jwtService"], "functions": ["setUp", "validateToken", "validateTokenByPublicKeyIsNull", "tokenIsAuthorized", "validateExpiredToken", "getJwtTestData", "generateTestCertificate", "createIamClientMock"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["JwtServiceTest", "KeyPairGenerator", "kpGen", "KeyPairGenerator", "getInstance", "RSA", "BC", "KeyPair", "pair", "kpGen", "generateKeyPair", "Test", "to", "validate", "an", "valid", "Token", "with", "the", "link", "JwtService", "validateToken", "String", "PublicKey", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "Test", "the", "negative", "case", "by", "not", "given", "public", "key", "with", "the", "link", "JwtService", "validateToken", "String", "PublicKey", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "Test", "is", "Token", "authorized", "with", "the", "link", "JwtService", "isAuthorized", "String", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "Test", "to", "validate", "an", "expired", "Token", "with", "the", "link", "JwtService", "validateToken", "String", "PublicKey", "List", "method", "throws", "java", "io", "UnsupportedEncodingException", "if", "the", "test", "cannot", "be", "performed", "throws", "java", "security", "NoSuchAlgorithmException", "if", "the", "test", "cannot", "be", "performed", "setup", "validatetoken", "validatetokenbypublickeyisnull", "tokenisauthorized", "validateexpiredtoken", "getjwttestdata", "generatetestcertificate", "createiamclientmock"], "complexity": 15430.5, "loc": 236, "qloc": 166, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4676, "name": "IamClientMock", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/JwtServiceTest.java", "base_class": null, "variables": ["pem"], "functions": ["certs"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["IamClientMock", "certs"], "complexity": 15430.5, "loc": 236, "qloc": 166, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4677, "name": "X509CertificateHolder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.cert"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4678, "name": "X500Name", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.asn1.x500"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4679, "name": "PemWriter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.util.io.pem"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4680, "name": "X509v3CertificateBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.cert"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4681, "name": "JcaContentSignerBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.operator.jcajce"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4682, "name": "PemObject", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.util.io.pem"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4683, "name": "ContentSigner", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.operator"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4684, "name": "IamClient", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/client/IamClient.java", "base_class": null, "variables": [], "functions": ["certs"], "commits": [{"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["IamClient", "This", "class", "represents", "the", "IAM", "feign", "client", "This", "method", "gets", "the", "cert", "information", "from", "the", "IAM", "Server", "return", "Testresult", "from", "server", "certs"], "complexity": 1416.0, "loc": 43, "qloc": 12, "package": "app.coronawarn.verification.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4685, "name": "Key", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/Key.java", "base_class": null, "variables": ["SIG", "RS256", "kid", "kty", "alg", "use", "nn", "ee", "x5c", "x5t", "x5tS256", "additionalProperties"], "functions": ["isCertValid"], "commits": [{"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["Key", "Check", "if", "the", "cert", "is", "valid", "for", "use", "return", "code", "true", "code", "if", "the", "cert", "has", "the", "right", "use", "and", "alg", "keys", "otherwise", "code", "false", "code", "iscertvalid"], "complexity": 4762.0, "loc": 57, "qloc": 27, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4686, "name": "Certs", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/Certs.java", "base_class": null, "variables": ["keys", "additionalProperties"], "functions": [], "commits": [{"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["Certs"], "complexity": 1684.0, "loc": 39, "qloc": 14, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4687, "name": "Setter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4688, "name": "SubjectPublicKeyInfo", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.bouncycastle.asn1.x509"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4689, "name": "TestResultServerServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/TestResultServerServiceTest.java", "base_class": null, "variables": ["TEST_GUI_HASH_1", "TEST_GUI_HASH_2", "TEST_RESULT_PADDING", "TEST_LAB_POSITIVE_RESULT", "TEST_LAB_REDEEMED_RESULT", "testResultServerService"], "functions": ["setUp", "resultPositive", "resultRedeemed"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerServiceTest", "Test", "result", "method", "by", "positive", "status", "Test", "result", "method", "by", "redeemed", "status", "setup", "resultpositive", "resultredeemed"], "complexity": 3955.5, "loc": 76, "qloc": 40, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4690, "name": "TestResultServerClientMock", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/TestResultServerServiceTest.java", "base_class": null, "variables": [], "functions": ["result"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerClientMock", "result"], "complexity": 3955.5, "loc": 76, "qloc": 40, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4691, "name": "TestResultServerClient", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/client/TestResultServerClient.java", "base_class": null, "variables": [], "functions": ["result"], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "36440ccb4d7a6f277d76eb697958272049761d45", "date": "2020-06-06 17:04:20 +0200", "committer": "Torsten Egenolf", "comment": "fix: feign"}, {"hash": "dd1b1816d37f5033bee4bd466b05a533aa064726", "date": "2020-06-05 20:24:27 +0200", "committer": "GitHub", "comment": "Fix/mtls feature flag (#141)"}, {"hash": "ab98366ea1b23c64d8749fb1295ebb81a29d385e", "date": "2020-06-05 18:10:24 +0200", "committer": "Julien", "comment": "fix: ssl server config client"}, {"hash": "37fdb6e19d4cb4d3d7bcb8efc81457009667dfb9", "date": "2020-06-05 18:02:21 +0200", "committer": "Julien", "comment": "fix: ssl server config"}, {"hash": "b1c1e847131fdb43c0cb605cf5f99077f4568ce5", "date": "2020-06-05 13:09:17 +0200", "committer": "GitHub", "comment": "feature: add mTLS configuration for verification-server to testresult-server connection (#136)"}], "semantic_data": ["TestResultServerClient", "This", "class", "represents", "the", "Labor", "Server", "service", "feign", "client", "This", "method", "gets", "testResult", "from", "the", "LabServer", "param", "guid", "for", "TestResult", "return", "TestResult", "from", "server", "result"], "complexity": 1933.0, "loc": 51, "qloc": 17, "package": "app.coronawarn.verification.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4692, "name": "Assertions", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.assertj.core.api"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4693, "name": "TanServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/TanServiceTest.java", "base_class": null, "variables": ["TEST_TAN", "TEST_TAN_HASH", "TEST_GUI_HASH", "TEST_TAN_TYPE", "TEST_TELE_TAN", "TEST_TELE_TAN_HASH", "TELE_TAN_REGEX", "TAN_REGEX", "TEST_TELE_TAN_SOURCE_OF_TRUST", "TEST_TAN_SOURCE_OF_TRUST", "TELE_TAN_PATTERN", "TAN_PATTERN", "FORMATTER", "TAN_VALID_UNTIL_IN_DAYS", "TELE_TAN_VALID_UNTIL_IN_HOURS", "TELE_TAN_RATE_LIMIT_COUNT", "TELE_TAN_RATE_LIMIT_SECONDS", "TELE_TAN_RATE_LIMIT_THRESHOLD", "tanService", "tanRepository", "config"], "functions": ["setUp", "deleteTan", "saveTan", "getEntityByTan", "checkTanAlreadyExist", "generateVerificationTan", "generateValidTan", "createTeleTan", "verifyTeletan", "verifyAlreadyRedeemedTeleTan", "verifyUnknownTeleTan", "verifyExpiredTeleTan", "verifyExpiredEventTeleTan", "testTeleTANFormat", "testRateLimitCheckForTeleTan", "testRateLimitShouldNotCountNonTeleTan", "testRateLimitShouldNotCountTeleTansOlderThanDefinedTimeWindow", "syntaxTanVerification"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "c12f29a400627657ab9642c2962d8dad53c3535f", "date": "2021-01-27 09:12:31 +0100", "committer": "GitHub", "comment": "make sure TeleTANs are unique in the database (#110)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "3088d6523201f50dd41a42bf157be96914656dd4", "date": "2020-06-04 11:29:18 +0200", "committer": "GitHub", "comment": "fix: Teletan will be verified if it is expired (#127)"}, {"hash": "3a55add805d33e6d99f41dd09dcb7f8300bb20a1", "date": "2020-06-01 22:16:14 +0200", "committer": "GitHub", "comment": "fix:teleTan (#119)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "39885d752825cbb0ea6b417d75cbfbe1481fe89b", "date": "2020-05-26 11:59:11 +0200", "committer": "GitHub", "comment": "fix: tan_tan_pattern to include regex meta characters (#65)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "5cf0576529bbe39e4050a0872075ecabcb706a45", "date": "2020-05-24 10:43:12 +0200", "committer": "GitHub", "comment": "Teletan matched string with [characters]{7} and thus also matched 8 char strings. It also used a strange character definition syntax with M-N-P-Z form, which would allow - char as well. (#44)"}, {"hash": "8b97d904a88e9e856572bc1002c6db68dc442a14", "date": "2020-05-23 15:39:24 +0200", "committer": "GitHub", "comment": "fix: bugfix ExampleMatcher (#36)"}], "semantic_data": ["TanServiceTest", "note", "the", "length", "of", "teleTAN", "is", "made", "up", "of", "the", "teletan", "length", "and", "the", "check", "digit", "Test", "delete", "Tan", "Test", "saveTan", "Check", "Tele-TAN", "syntax", "constraints", "param", "teleTan", "the", "Tele", "TAN", "return", "Tele", "TAN", "verification", "flag", "setup", "deletetan", "savetan", "getentitybytan", "checktanalreadyexist", "generateverificationtan", "generatevalidtan", "createteletan", "verifyteletan", "verifyalreadyredeemedteletan", "verifyunknownteletan", "verifyexpiredteletan", "verifyexpiredeventteletan", "testteletanformat", "testratelimitcheckforteletan", "testratelimitshouldnotcountnonteletan", "testratelimitshouldnotcountteletansolderthandefinedtimewindow", "syntaxtanverification"], "complexity": 50289.0, "loc": 325, "qloc": 244, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4694, "name": "VerificationTanRepository", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/repository/VerificationTanRepository.java", "base_class": null, "variables": [], "functions": ["existsByTanHash", "findByTanHash", "deleteByCreatedAtBefore", "countByCreatedAtIsAfterAndTypeIs"], "commits": [{"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}], "semantic_data": ["VerificationTanRepository", "This", "class", "represents", "the", "Tan", "repository", "This", "method", "looks", "in", "the", "Database", "for", "an", "if", "VerificationTan", "exists", "for", "the", "tan", "hash", "param", "tanHash", "hash", "to", "search", "for", "return", "Boolean", "if", "there", "is", "an", "Entity", "for", "the", "tanHash", "This", "method", "looks", "in", "the", "Database", "for", "an", "if", "VerificationTan", "exists", "for", "the", "tan", "hash", "param", "tanHash", "hash", "to", "search", "for", "return", "Optional", "VerificationTan", "This", "method", "purges", "Entities", "from", "the", "database", "that", "are", "older", "than", "before", "value", "param", "before", "LocalDateTime", "to", "delete", "older", "entities", "This", "method", "counts", "entities", "which", "are", "newer", "then", "after", "value", "param", "after", "LocalDateTime", "to", "count", "entities", "param", "tanType", "TanType", "of", "the", "tans", "that", "should", "be", "counted", "return", "number", "of", "relevant", "entities", "existsbytanhash", "findbytanhash", "deletebycreatedatbefore", "countbycreatedatisafterandtypeis"], "complexity": 2301.0, "loc": 68, "qloc": 12, "package": "app.coronawarn.verification.repository"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4695, "name": "VerificationApplication", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/VerificationApplication.java", "base_class": null, "variables": [], "functions": ["main"], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "46055abd829a6a16e86bd41540d568368b78afcd", "date": "2020-06-03 07:59:50 +0200", "committer": "GitHub", "comment": "feat: spring security integration and logging (#123)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}], "semantic_data": ["VerificationApplication", "The", "Application", "class", "The", "main", "Method", "param", "args", "the", "args", "for", "the", "main", "method", "main"], "complexity": 2215.0, "loc": 51, "qloc": 18, "package": "app.coronawarn.verification"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4696, "name": "EntitiesCleanupServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/EntitiesCleanupServiceTest.java", "base_class": null, "variables": ["TEST_GUI_HASH", "TEST_REG_TOK_HASH", "TEST_HASHED_TAN", "appSessionRepository", "tanRepository"], "functions": ["before", "cleanupDatabase", "getAppSessionTestData", "getVerificationTANTestData"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}], "semantic_data": ["EntitiesCleanupServiceTest", "create", "repo", "create", "repo", "find", "in", "repos", "wait", "find", "and", "check", "both", "repos", "clean", "up", "before", "cleanupdatabase", "getappsessiontestdata", "getverificationtantestdata"], "complexity": 16443.0, "loc": 129, "qloc": 91, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4697, "name": "SpringRunner", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.test.context.junit4"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4698, "name": "Single", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "rx"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4699, "name": "HashingServiceTest", "type": "class", "path": "./tmp/cwa-verify/src/test/java/app/coronawarn/verification/service/HashingServiceTest.java", "base_class": null, "variables": ["hashingService"], "functions": ["validSha256Hash", "invalidSha256Hash", "getCheckDigit"], "commits": [{"hash": "7c47437d13db2dc6603cf2b33211aa324bb398e7", "date": "2021-01-26 14:41:03 +0100", "committer": "GitHub", "comment": "Migrate from JUnit 4 to JUnit 5 (#94)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "6ade86d3b47f3b0428fda1b475d61a76597aecfd", "date": "2020-06-24 10:50:09 +0200", "committer": "GitHub", "comment": "fix: change find() to matches() in key validation (#163)"}, {"hash": "6d00cf3ba46913fa647659afb9e72886b321debf", "date": "2020-06-24 10:23:10 +0200", "committer": "GitHub", "comment": "Speed up unit tests (#167)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "fa7747b2b090951be6a62cfcc13a75fdddcd4f40", "date": "2020-05-25 05:20:47 +0200", "committer": "GitHub", "comment": "fix: hash regex missing start and end metacharacter (#50)"}], "semantic_data": ["HashingServiceTest", "special", "cases", "validsha256hash", "invalidsha256hash", "getcheckdigit"], "complexity": 7654.0, "loc": 65, "qloc": 35, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4700, "name": "SpringApplication", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4701, "name": "SpringBootApplication", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.autoconfigure"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4702, "name": "EnableConfigurationProperties", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.context.properties"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4703, "name": "EnableFeignClients", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.cloud.openfeign"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4704, "name": "EnableScheduling", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.scheduling.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4705, "name": "EnableWebSecurity", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.config.annotation.web.configuration"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4706, "name": "JpaRepository", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.data.jpa.repository"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4707, "name": "RegistrationTokenKeyConstraint", "type": "interface", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/validator/RegistrationTokenKeyConstraint.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}], "semantic_data": ["RegistrationTokenKeyConstraint", "The", "validation-annotation", "for", "registration", "token", "request", "The", "default", "key", "for", "creating", "error", "messages", "in", "case", "the", "constraint", "is", "violated", "Allows", "the", "specification", "of", "validation", "groups", "to", "which", "this", "constraint", "belongs", "Assigns", "custom", "payload", "objects", "to", "constraint"], "complexity": 2371.0, "loc": 58, "qloc": 17, "package": "app.coronawarn.verification.validator"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4708, "name": "RegistrationTokenRequestValidator", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/validator/RegistrationTokenRequestValidator.java", "base_class": null, "variables": ["hashingService", "tanService"], "functions": ["isValid"], "commits": [{"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}], "semantic_data": ["RegistrationTokenRequestValidator", "The", "registration", "token", "request", "validator", "The", "link", "HashingService", "The", "link", "TanService", "isvalid"], "complexity": 4436.0, "loc": 73, "qloc": 37, "package": "app.coronawarn.verification.validator"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4709, "name": "HashingService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/HashingService.java", "base_class": null, "variables": ["GUID_HASH_PATTERN", "PATTERN"], "functions": ["hash", "getCheckDigit", "isHashValid"], "commits": [{"hash": "281759cbc6394361e75e798a9a077f1009f5a9f6", "date": "2020-07-02 08:06:46 +0200", "committer": "GitHub", "comment": "fix: improve logs for cdc and increase spring version (#178)"}, {"hash": "6ade86d3b47f3b0428fda1b475d61a76597aecfd", "date": "2020-06-24 10:50:09 +0200", "committer": "GitHub", "comment": "fix: change find() to matches() in key validation (#163)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "46055abd829a6a16e86bd41540d568368b78afcd", "date": "2020-06-03 07:59:50 +0200", "committer": "GitHub", "comment": "feat: spring security integration and logging (#123)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "fa7747b2b090951be6a62cfcc13a75fdddcd4f40", "date": "2020-05-25 05:20:47 +0200", "committer": "GitHub", "comment": "fix: hash regex missing start and end metacharacter (#50)"}], "semantic_data": ["HashingService", "This", "class", "represents", "the", "hashing", "service", "for", "providing", "and", "check", "hash", "string", "Calculates", "the", "SHA-256", "digest", "and", "returns", "the", "value", "as", "hex", "string", "param", "toHash", "that", "will", "be", "Hashed", "return", "the", "hash", "of", "the", "supplied", "string", "Calculates", "the", "SHA-256", "digest", "and", "returns", "an", "check", "digit", "param", "toHash", "that", "will", "be", "Hashed", "return", "the", "check", "digit", "Returns", "true", "if", "the", "String", "is", "resembles", "SHA256", "Pattern", "param", "toValidate", "String", "that", "will", "be", "checked", "to", "match", "the", "pattern", "of", "SHA256", "Hash", "return", "Boolean", "if", "the", "String", "Matches", "the", "Pattern", "hash", "getcheckdigit", "ishashvalid"], "complexity": 4741.0, "loc": 77, "qloc": 28, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4710, "name": "NonNull", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4711, "name": "RequiredArgsConstructor", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4712, "name": "SecurityConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/SecurityConfig.java", "base_class": null, "variables": [], "functions": ["strictFirewall", "configure"], "commits": [{"hash": "818bfcc83b67d4e504eb238d2a47678272441031", "date": "2020-08-07 13:18:57 +0200", "committer": "GitHub", "comment": "Feat add-ssl and http (#206)"}, {"hash": "abf290d3756140a3f265a1cb6a395ccd73536dc1", "date": "2020-06-05 14:20:19 +0200", "committer": "GitHub", "comment": "fix: spring head (#137)"}, {"hash": "c0244362a30947c6ed2347b095d888b4b2b1162e", "date": "2020-06-03 10:16:41 +0200", "committer": "GitHub", "comment": "feat: monitoring security (#125)"}, {"hash": "46055abd829a6a16e86bd41540d568368b78afcd", "date": "2020-06-03 07:59:50 +0200", "committer": "GitHub", "comment": "feat: spring security integration and logging (#123)"}], "semantic_data": ["SecurityConfig", "strictfirewall", "configure"], "complexity": 4128.0, "loc": 63, "qloc": 35, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4713, "name": "WebSecurityConfigurerAdapter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.config.annotation.web.configuration"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4714, "name": "HttpFirewall", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.web.firewall"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4715, "name": "StrictHttpFirewall", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.web.firewall"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4716, "name": "HttpSecurity", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.security.config.annotation.web.builders"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4717, "name": "Bean", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.context.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4718, "name": "Configuration", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.context.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4719, "name": "HttpMethod", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4720, "name": "OpenApiConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/OpenApiConfig.java", "base_class": null, "variables": ["buildProperties"], "functions": ["openApi"], "commits": [{"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "163ad80e8b7b93ce5adde9ff98ecd0f830d31dae", "date": "2020-05-22 14:54:57 +0200", "committer": "telekom", "comment": "pre: 0.3.2-SNAPSHOT"}, {"hash": "151503a7d16dae5a4b79bec3d5e97f92a177a524", "date": "2020-05-22 14:50:18 +0200", "committer": "telekom", "comment": "release: 0.3.1-alpha"}], "semantic_data": ["OpenApiConfig", "This", "class", "represents", "the", "open", "api", "config", "Configure", "the", "open", "api", "bean", "with", "build", "property", "values", "return", "the", "configured", "open", "api", "config", "openapi"], "complexity": 2516.0, "loc": 57, "qloc": 23, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4721, "name": "Info", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.models.info"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4722, "name": "License", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.models.info"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4723, "name": "OpenAPI", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.models"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4724, "name": "BuildProperties", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.info"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4725, "name": "Tan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["tele", "valid"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Tan", "Configure", "the", "Tele", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "TeleValid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "rate", "limiting", "for", "creating", "new", "teletans", "Configure", "the", "Valid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4726, "name": "Tele", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["valid", "rateLimiting"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Tele", "Number", "of", "hours", "that", "teleTAN", "remains", "valid", "Configure", "the", "TeleValid", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters", "Configure", "the", "rate", "limiting", "for", "creating", "new", "teletans"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4727, "name": "Valid", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["chars", "length", "hours", "eventDays", "days"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Valid", "Valid", "Number", "of", "days", "that", "TAN", "remains", "valid"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4728, "name": "RateLimiting", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["seconds", "count", "thresholdInPercent"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["RateLimiting", "Number", "of", "seconds", "for", "the", "rate", "limiting", "time", "window", "Number", "of", "teletans", "that", "are", "allowed", "to", "create", "within", "time", "window", "Threshold", "in", "percent", "for", "warning", "in", "log", "stream"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4729, "name": "AppSession", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["tancountermax"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["AppSession", "Maximum", "number", "of", "tans", "in", "session", "at", "one", "time"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4730, "name": "Entities", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["cleanup"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Entities", "Configure", "the", "Cleanup", "with", "build", "property", "values", "and", "return", "the", "configured", "parameters"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4731, "name": "Cleanup", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["days"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Cleanup"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4732, "name": "Jwt", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["server", "enabled"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Jwt"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4733, "name": "Request", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/VerificationApplicationConfig.java", "base_class": null, "variables": ["sizelimit"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "7d430a1e011b571759b6480c55d3969fde11f46d", "date": "2021-01-26 10:55:31 +0100", "committer": "GitHub", "comment": "fix: unnecessary annotations in VerificationApplicationConfig (#217)"}, {"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "9ff0794ed647469b865f1736e6bc217c8604a2bf", "date": "2020-06-24 10:46:29 +0200", "committer": "GitHub", "comment": "Replace wrong copyright holder in header (#161)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "63f0a63f5534a915a85db97c348d42c7c6798824", "date": "2020-06-07 11:25:20 +0200", "committer": "GitHub", "comment": "feat: add parameter (#147)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}, {"hash": "ba171db6c4a42cb65eb85eeef969159547fc849a", "date": "2020-06-05 08:52:57 +0200", "committer": "GitHub", "comment": "Creating default values for all configuration class values to prevent null pointer exception when a property is not set. (#131)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}], "semantic_data": ["Request"], "complexity": 1077.1818181818182, "loc": 163, "qloc": 75, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4734, "name": "Getter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4735, "name": "ConfigurationProperties", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.boot.context.properties"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4736, "name": "RequestSizeLimitFilter", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/config/RequestSizeLimitFilter.java", "base_class": null, "variables": ["verificationApplicationConfig"], "functions": ["doFilterInternal", "isChunkedRequest"], "commits": [{"hash": "9faea012f56478ae54e7fd31427fca16ee1653a1", "date": "2020-07-22 19:14:58 +0200", "committer": "GitHub", "comment": "feat: added filter for post request size and disabled chunked requests"}], "semantic_data": ["RequestSizeLimitFilter", "filter", "to", "avoid", "requests", "with", "large", "content", "and", "chunked", "requests", "dofilterinternal", "ischunkedrequest"], "complexity": 4979.0, "loc": 69, "qloc": 37, "package": "app.coronawarn.verification.config"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4737, "name": "OncePerRequestFilter", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.filter"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4738, "name": "StringUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "liquibase.util"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4739, "name": "HttpHeaders", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4740, "name": "HttpStatus", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4741, "name": "VerificationExceptionHandler", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/VerificationExceptionHandler.java", "base_class": null, "variables": [], "functions": ["unknownException", "bindingExceptions", "handleValidationExceptions", "handleVerificationServerExceptions", "methodNotAllowedException", "contentTypeNotAllowedException"], "commits": [{"hash": "79d3e337b7e9e13175d00212d3bae0c44730bd2f", "date": "2021-01-26 15:19:36 +0100", "committer": "GitHub", "comment": "fix: handle unsupported content type and HTTP method (#164)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}], "semantic_data": ["VerificationExceptionHandler", "This", "class", "represents", "the", "Exception", "Handler", "This", "method", "handles", "unknown", "Exceptions", "and", "Server", "Errors", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "This", "method", "handles", "Bad", "Requests", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "This", "method", "handles", "Validation", "Exceptions", "return", "ResponseEntity", "returns", "Bad", "Request", "This", "method", "handles", "Validation", "Exceptions", "param", "exception", "the", "thrown", "exception", "return", "ResponseEntity", "returns", "HTTP", "Status", "This", "method", "handles", "invalid", "HTTP", "methods", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "This", "method", "handles", "unsupported", "content", "types", "param", "ex", "the", "thrown", "exception", "param", "wr", "the", "WebRequest", "unknownexception", "bindingexceptions", "handlevalidationexceptions", "handleverificationserverexceptions", "methodnotallowedexception", "contenttypenotallowedexception"], "complexity": 8567.0, "loc": 122, "qloc": 54, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4742, "name": "WebRequest", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.context.request"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4743, "name": "ResponseEntity", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4744, "name": "HttpMediaTypeNotSupportedException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4745, "name": "HttpRequestMethodNotSupportedException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4746, "name": "ServletRequestBindingException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4747, "name": "HttpMessageNotReadableException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.http.converter"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4748, "name": "MethodArgumentNotValidException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4749, "name": "VerificationServerException", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/exception/VerificationServerException.java", "base_class": null, "variables": ["httpStatus"], "functions": [], "commits": [{"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}], "semantic_data": ["VerificationServerException", "This", "class", "represents", "the", "Verification", "Server", "Exception", "The", "Constructor", "for", "the", "Exception", "class", "param", "httpStatus", "the", "state", "of", "the", "server", "param", "message", "the", "message"], "complexity": 1419.0, "loc": 47, "qloc": 11, "package": "app.coronawarn.verification.exception"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4750, "name": "ExceptionHandler", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4751, "name": "ResponseStatus", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4752, "name": "RestControllerAdvice", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4753, "name": "AuthorizationToken", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/AuthorizationToken.java", "base_class": null, "variables": ["token"], "functions": [], "commits": [{"hash": "7b084dc0857a3bf1f779521f0bf25c5ff96dd796", "date": "2020-06-25 11:08:59 +0200", "committer": "GitHub", "comment": "fix: integration-JWT (#157)"}, {"hash": "6d04df76d86005fb22f1cd4c19c7355cb7a88581", "date": "2020-06-07 10:01:13 +0200", "committer": "GitHub", "comment": "Feat: JWT implementation for the teleTAN request (#134)"}], "semantic_data": ["AuthorizationToken", "This", "class", "represents", "the", "authorization", "bearer", "token", "JWT", "which", "is", "used", "for", "the", "creation", "of", "teleTan"], "complexity": 1337.0, "loc": 45, "qloc": 16, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4754, "name": "TeleTan", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/TeleTan.java", "base_class": null, "variables": ["value"], "functions": [], "commits": [{"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "b478d42b931861d2debaffa188e2f2f4a0629e2c", "date": "2020-05-31 16:01:52 +0200", "committer": "GitHub", "comment": "fix: revert api change (#114)"}, {"hash": "e53e47cd35f1be301a0ecc444502c80a5bf752b4", "date": "2020-05-31 15:26:58 +0200", "committer": "GitHub", "comment": "fix: api changes for testing (#113)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}], "semantic_data": ["TeleTan", "This", "class", "represents", "the", "tele", "transaction", "number", "teleTAN"], "complexity": 1145.0, "loc": 41, "qloc": 14, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4755, "name": "Operation", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4756, "name": "Header", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.headers"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4757, "name": "ApiResponse", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.responses"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4758, "name": "ApiResponses", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.responses"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4759, "name": "Profile", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.context.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4760, "name": "Validated", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.validation.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4761, "name": "PostMapping", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4762, "name": "RequestBody", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4763, "name": "RequestHeader", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4764, "name": "RequestMapping", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4765, "name": "RestController", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4766, "name": "InternalTestStateController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/InternalTestStateController.java", "base_class": null, "variables": ["TESTRESULT_ROUTE", "appSessionService", "testResultServerService"], "functions": ["getTestState"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}], "semantic_data": ["InternalTestStateController", "Check", "DOB", "Hash", "if", "present", "TRS", "will", "always", "respond", "with", "TestResult", "so", "we", "have", "to", "check", "if", "both", "results", "are", "equal", "given", "DOB", "Hash", "is", "invalid", "This", "class", "represents", "the", "rest", "controller", "for", "requests", "regarding", "test", "states", "The", "route", "to", "the", "test", "status", "of", "the", "COVID-19", "test", "endpoint", "Returns", "the", "test", "status", "of", "the", "COVID-19", "test", "param", "registrationToken", "generated", "by", "hashed", "guid", "link", "RegistrationToken", "return", "result", "of", "the", "test", "which", "can", "be", "POSITIVE", "NEGATIVE", "INVALID", "PENDING", "FAILED", "quick-test-POSITIVE", "quick-test-NEGATIVE", "quick-test-INVALID", "quick-test-PENDING", "or", "quick-test-FAILED", "will", "be", "POSITIVE", "for", "TeleTan", "getteststate"], "complexity": 12946.0, "loc": 123, "qloc": 91, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4767, "name": "AppSessionService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/AppSessionService.java", "base_class": null, "variables": ["TOKEN_PADDING_LENGTH", "appSessionRepository", "hashingService"], "functions": ["generateAppSession", "generateRegistrationToken", "generateRegistrationTokenByGuid", "generateRegistrationTokenByTeleTan", "saveAppSession", "getAppSessionByToken", "checkRegistrationTokenAlreadyExistsForGuid", "checkRegistrationTokenAlreadyExistForTeleTan", "getBackwardCompatibleRegistrationToken"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "29145c5554ac9d834c8a59f4d7e9ff90b204158c", "date": "2020-08-13 07:59:54 +0200", "committer": "m.schulte", "comment": "removed debug log"}, {"hash": "7e9ee9fab39d6c2a8829700c1bd933e08dcdd1ea", "date": "2020-08-11 17:33:50 +0200", "committer": "GitHub", "comment": "fix: wrong logging information (#208)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "da3284dbf5f1f438967673059bfac4ced7c1dd5a", "date": "2020-07-01 16:24:39 +0200", "committer": "GitHub", "comment": "feat: improvement-logs-cdc"}, {"hash": "a6d3ee56d23025f7c997ed247bd718c58e1e99f4", "date": "2020-06-24 10:31:49 +0200", "committer": "GitHub", "comment": "fix: Custom validator for Registration Token Request (#169)"}, {"hash": "66b2fab6dbc688d7a6114f6e746f1a4b6130b6f5", "date": "2020-06-07 09:18:06 +0200", "committer": "GitHub", "comment": "fix: find the expected entity (#145)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "fbd34e0ecd7763e20e3e6b8968f0a14bab5f8960", "date": "2020-05-28 08:45:39 +0200", "committer": "GitHub", "comment": "fix: remove author tags. Closes #62 (#90)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}, {"hash": "8b97d904a88e9e856572bc1002c6db68dc442a14", "date": "2020-05-23 15:39:24 +0200", "committer": "GitHub", "comment": "fix: bugfix ExampleMatcher (#36)"}], "semantic_data": ["AppSessionService", "This", "class", "represents", "the", "VerificationAppSession", "service", "The", "link", "VerificationAppSessionRepository", "The", "link", "HashingService", "Creates", "an", "AppSession-Entity", "param", "registrationToken", "Token", "for", "registration", "return", "appSession", "for", "registrationToken", "This", "method", "generates", "registration", "Token", "by", "guid", "param", "hashedGuid", "the", "hashed", "guid", "return", "an", "link", "ResponseEntity", "This", "method", "generates", "registration", "Token", "by", "TeleTAN", "param", "teleTan", "the", "TeleTan", "return", "an", "link", "ResponseEntity", "Persists", "the", "specified", "entity", "of", "link", "VerificationAppSession", "instances", "param", "appSession", "the", "verification", "app", "session", "entity", "Get", "existing", "VerificationAppSession", "for", "Reg", "Token", "from", "link", "VerificationAppSessionRepository", "param", "registrationToken", "the", "registrationToken", "return", "Optional", "VerificationAppSession", "Check", "for", "existing", "hashed", "GUID", "Token", "in", "the", "link", "VerificationAppSessionRepository", "param", "hashedGuid", "the", "hashed", "guid", "return", "flag", "for", "existing", "guid", "Check", "for", "existing", "hashed", "TeleTAN", "in", "the", "link", "VerificationAppSessionRepository", "param", "teleTan", "the", "teleTAN", "return", "flag", "for", "existing", "teleTAN", "generateappsession", "generateregistrationtoken", "generateregistrationtokenbyguid", "generateregistrationtokenbyteletan", "saveappsession", "getappsessionbytoken", "checkregistrationtokenalreadyexistsforguid", "checkregistrationtokenalreadyexistforteletan", "getbackwardcompatibleregistrationtoken"], "complexity": 16677.0, "loc": 189, "qloc": 98, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4768, "name": "InternalTestResult", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/InternalTestResult.java", "base_class": null, "variables": ["testId"], "functions": [], "commits": [{"hash": "99d5c0cec343e7007def4f9c7e93ee8a0117f407", "date": "2021-05-31 12:03:56 +0200", "committer": "GitHub", "comment": "fix/Missing testId in InternalTestResult (#235)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}], "semantic_data": ["InternalTestResult", "This", "class", "represents", "the", "TestResult", "see", "href", "https", "github", "com", "corona-warn-app", "cwa-testresult-server", "blob", "master", "docs", "architecture-overview", "md", "core-entities", "Core", "Entities"], "complexity": 2227.0, "loc": 50, "qloc": 18, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4769, "name": "RandomStringUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.commons.lang3"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4770, "name": "DeferredResult", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.context.request.async"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4771, "name": "ExternalTokenController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/ExternalTokenController.java", "base_class": null, "variables": ["REGISTRATION_TOKEN_ROUTE", "scheduledExecutor", "fakeRequestController", "appSessionService", "tanService", "fakeDelayService"], "functions": ["generateRegistrationToken"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "7e9ee9fab39d6c2a8829700c1bd933e08dcdd1ea", "date": "2020-08-11 17:33:50 +0200", "committer": "GitHub", "comment": "fix: wrong logging information (#208)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["ExternalTokenController", "This", "class", "represents", "the", "rest", "controller", "for", "externally", "reachable", "TAN", "interactions", "The", "route", "to", "the", "token", "registration", "endpoint", "This", "method", "generates", "registrationToken", "by", "hashed", "guid", "or", "teleTAN", "param", "request", "link", "RegistrationTokenRequest", "param", "fake", "flag", "for", "fake", "request", "return", "RegistrationToken", "the", "created", "registration", "token", "link", "RegistrationToken", "generateregistrationtoken"], "complexity": 15788.0, "loc": 128, "qloc": 101, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4772, "name": "FakeRequestService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/FakeRequestService.java", "base_class": null, "variables": ["fakeDelayService", "scheduledExecutor", "TEST_RESPONSE_PADDING_LENGTH", "TESTRESULT_RESULT_PADDING", "TAN_RESPONSE_PADDING_LENGTH"], "functions": ["generateTan", "generateRegistrationToken", "getTestState"], "commits": [{"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "d9cd408dc90bd3b2181b7683288f0c3b6b0c038e", "date": "2021-05-27 13:32:18 +0200", "committer": "GitHub", "comment": "fix/fixed fake to return seconds (#231)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "45fc20792c90ae0bf59f9ea49d3681d9afc653b1", "date": "2020-08-05 10:24:49 +0200", "committer": "GitHub", "comment": "fix: use corret fake delay (#200)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}], "semantic_data": ["FakeRequestService", "This", "Service", "generates", "the", "fake", "responses", "for", "the", "Endpoints", "This", "method", "generates", "fake", "transaction", "number", "by", "Registration", "Token", "if", "the", "state", "of", "the", "COVID-19", "lab-test", "is", "positive", "param", "registrationToken", "generated", "by", "hashed", "guid", "or", "teleTAN", "link", "RegistrationToken", "return", "generated", "transaction", "number", "link", "Tan", "This", "method", "generates", "fake", "registrationToken", "by", "hashed", "guid", "or", "teleTAN", "param", "request", "link", "RegistrationTokenRequest", "return", "RegistrationToken", "the", "created", "registration", "token", "link", "RegistrationToken", "Returns", "the", "fake", "test", "status", "of", "the", "COVID-19", "test", "param", "registrationToken", "generated", "by", "hashed", "guid", "link", "RegistrationToken", "return", "the", "test", "result", "status", "of", "the", "COVID-19", "test", "which", "can", "be", "POSITIVE", "NEGATIVE", "INVALID", "PENDING", "or", "FAILED", "and", "will", "always", "be", "POSITIVE", "for", "TeleTan", "generatetan", "generateregistrationtoken", "getteststate"], "complexity": 11992.0, "loc": 119, "qloc": 60, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4773, "name": "FakeDelayService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/FakeDelayService.java", "base_class": null, "variables": ["movingAverageSampleSize", "fakeDelayTest", "fakeDelayTan", "fakeDelayToken"], "functions": ["getJitteredFakeTanDelay", "getJitteredFakeTestDelay", "getJitteredFakeTokenDelay", "updateFakeTanRequestDelay", "updateFakeTestRequestDelay", "updateFakeTokenRequestDelay", "getFakeTanDelayInSeconds", "getFakeTestDelayInSeconds", "getFakeTokenDelayInSeconds", "getLongestJitter", "realDelayTan", "realDelayToken", "realDelayTest"], "commits": [{"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}], "semantic_data": ["FakeDelayService", "link", "FakeDelayService", "instances", "manage", "the", "response", "delay", "in", "the", "processing", "of", "fake", "or", "dummy", "requests", "Constructor", "for", "the", "FakeDelayService", "Returns", "the", "current", "fake", "delay", "after", "applying", "random", "jitter", "Returns", "the", "current", "fake", "delay", "after", "applying", "random", "jitter", "Returns", "the", "current", "fake", "delay", "after", "applying", "random", "jitter", "Updates", "the", "moving", "average", "for", "the", "request", "duration", "for", "the", "Tan", "Endpoint", "with", "the", "specified", "value", "Updates", "the", "moving", "average", "for", "the", "request", "duration", "for", "the", "Tan", "Endpoint", "with", "the", "specified", "value", "Updates", "the", "moving", "average", "for", "the", "request", "duration", "for", "the", "Tan", "Endpoint", "with", "the", "specified", "value", "Returns", "the", "current", "fake", "delay", "in", "seconds", "Used", "for", "monitoring", "Returns", "the", "current", "fake", "delay", "in", "seconds", "Used", "for", "monitoring", "Returns", "the", "current", "fake", "delay", "in", "seconds", "Used", "for", "monitoring", "Returns", "the", "longest", "fake", "delay", "jittered", "in", "milliseconds", "return", "longest", "jittered", "Returns", "the", "longest", "fake", "delay", "minus", "average", "time", "for", "Tan", "in", "milliseconds", "return", "delay", "for", "TAN", "Returns", "the", "longest", "fake", "delay", "minus", "average", "time", "for", "RegistrationToken", "in", "milliseconds", "return", "delay", "for", "RegistrationToken", "Returns", "the", "longest", "fake", "delay", "minus", "average", "time", "for", "TestResult", "in", "milliseconds", "return", "delay", "for", "TestResult", "getjitteredfaketandelay", "getjitteredfaketestdelay", "getjitteredfaketokendelay", "updatefaketanrequestdelay", "updatefaketestrequestdelay", "updatefaketokenrequestdelay", "getfaketandelayinseconds", "getfaketestdelayinseconds", "getfaketokendelayinseconds", "getlongestjitter", "realdelaytan", "realdelaytoken", "realdelaytest"], "complexity": 10237.0, "loc": 155, "qloc": 65, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4774, "name": "StopWatch", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.util"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4775, "name": "ExternalTanController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/ExternalTanController.java", "base_class": null, "variables": ["TAN_ROUTE", "RESPONSE_PADDING_LENGTH", "scheduledExecutor", "appSessionService", "fakeDelayService", "verificationApplicationConfig", "testResultServerService", "tanService", "fakeRequestService"], "functions": ["generateTan", "generateReturnTan"], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "3f7e537521a3db67220501690e792e87e000db60", "date": "2021-01-26 10:39:33 +0100", "committer": "GitHub", "comment": "Fix naming in ExternalTanController (#216)"}, {"hash": "7ebf88d11bef07e1e6c75c4c5fcaeae159b159eb", "date": "2020-09-30 17:37:45 +0200", "committer": "GitHub", "comment": "feat: update database updated_at when a Tan is generated for a Registration Token (#214)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["ExternalTanController", "This", "class", "represents", "the", "rest", "controller", "for", "external", "tan", "interactions", "The", "route", "to", "the", "tan", "generation", "endpoint", "This", "method", "generates", "transaction", "number", "by", "Registration", "Token", "if", "the", "state", "of", "the", "COVID-19", "lab-test", "is", "positive", "param", "registrationToken", "generated", "by", "hashed", "guid", "or", "teleTAN", "link", "RegistrationToken", "param", "fake", "flag", "for", "fake", "request", "return", "generated", "transaction", "number", "link", "Tan", "generatetan", "generatereturntan"], "complexity": 20735.0, "loc": 166, "qloc": 136, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4776, "name": "LabTestResult", "type": "enum", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/model/LabTestResult.java", "base_class": null, "variables": ["testResult"], "functions": [], "commits": [{"hash": "118d6a5e588d6b8a4ac2d2137e888f5cbe306c99", "date": "2021-04-07 17:51:21 +0200", "committer": "GitHub", "comment": "Feat add vault (#223)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}], "semantic_data": ["LabTestResult", "The", "possible", "result", "results", "of", "the", "COVID-19", "lab-test", "Pending", "The", "test", "result", "does", "not", "exist", "yet", "Negative", "No", "indication", "for", "COVID-19", "Positive", "The", "test", "result", "indicates", "infection", "with", "COVID-19", "Invalid", "The", "test", "result", "is", "invalid", "due", "to", "unknown", "reason", "Redeemed", "The", "test", "result", "is", "redeemed", "by", "time", "The", "identifier", "for", "the", "test", "result", "from", "the", "lab-server", "The", "constructor", "param", "stateValue", "the", "lab", "test", "state"], "complexity": 2446.0, "loc": 67, "qloc": 23, "package": "app.coronawarn.verification.model"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4777, "name": "ExternalTestStateController", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/controller/ExternalTestStateController.java", "base_class": null, "variables": ["TESTRESULT_ROUTE", "RESPONSE_PADDING_LENGTH", "scheduledExecutor", "fakeRequestService", "appSessionService", "testResultServerService", "fakeDelayService", "config"], "functions": ["getTestState", "generateReturnTestResult"], "commits": [{"hash": "d7f7f1d68006426020f9eb07f40182eb743bf90c", "date": "2021-06-11 09:19:49 +0200", "committer": "GitHub", "comment": "Add Workaround to disable DOB Hash Check in External Test Result Controller (#236)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "a6c704c09ec82986081544e3f89e4877636da2e3", "date": "2021-05-27 15:14:03 +0200", "committer": "GitHub", "comment": "fix/Update ExternalTestStateController.java (#232)"}, {"hash": "d9cd408dc90bd3b2181b7683288f0c3b6b0c038e", "date": "2021-05-27 13:32:18 +0200", "committer": "GitHub", "comment": "fix/fixed fake to return seconds (#231)"}, {"hash": "438631ac28e8dc98d043440edf2081732ee5cd37", "date": "2021-05-21 10:49:23 +0200", "committer": "GitHub", "comment": "Fix/Sample Collection naming (#228)"}, {"hash": "462eff91c4bf0612fe384746a8d780d594f303f5", "date": "2021-05-19 09:32:28 +0200", "committer": "GitHub", "comment": "feat(#226)/Added Collection Sample (cs) timestamp (#227)"}, {"hash": "1ddebcb0933e46a0aef7a2429793b7be378bb545", "date": "2021-01-26 11:17:47 +0100", "committer": "Michael Schulte", "comment": "rename variable to reflect it's type"}, {"hash": "3fd40256067831192fc62a30ec087fe1a937f490", "date": "2021-01-26 10:47:29 +0100", "committer": "GitHub", "comment": "Fix a typo in log message (#219)"}, {"hash": "4d5259a23121a41866ed6d801caaa592896d70aa", "date": "2020-08-05 14:31:33 +0200", "committer": "GitHub", "comment": "added delay for all endpoints (#201)"}, {"hash": "7122d4b7da87a55852714158deb3000d84f17d3c", "date": "2020-07-28 13:18:34 +0200", "committer": "GitHub", "comment": "feat: Changed Responsepadding to only apply if fake header exists (#197)"}, {"hash": "ffaec536c0a2a92246c64667656b760c06791edb", "date": "2020-07-24 15:40:00 +0200", "committer": "GitHub", "comment": "fix: temporary remove response padding (#194)"}, {"hash": "1545165b4440b8a0190f6e1188ff6a1117e93029", "date": "2020-07-22 16:29:29 +0200", "committer": "GitHub", "comment": "feat: feature plausible deniability (aka fake header) (#188)"}, {"hash": "559f5c19fd7485d070b8df92e8ade6036dd49ebb", "date": "2020-07-10 15:08:24 +0200", "committer": "GitHub", "comment": "feat: split internal and external endpoints (#184)"}], "semantic_data": ["ExternalTestStateController", "Check", "DOB", "Hash", "if", "present", "TRS", "will", "always", "respond", "with", "TestResult", "so", "we", "have", "to", "check", "if", "both", "results", "are", "equal", "given", "DOB", "Hash", "is", "invalid", "This", "class", "represents", "the", "rest", "controller", "for", "requests", "regarding", "test", "states", "The", "route", "to", "the", "test", "status", "of", "the", "COVID-19", "test", "endpoint", "Returns", "the", "test", "status", "of", "the", "COVID-19", "test", "with", "cwa-fake", "header", "param", "registrationToken", "generated", "by", "hashed", "guid", "link", "RegistrationToken", "param", "fake", "flag", "for", "fake", "request", "return", "result", "of", "the", "test", "which", "can", "be", "POSITIVE", "NEGATIVE", "INVALID", "PENDING", "FAILED", "quick-test-POSITIVE", "quick-test-NEGATIVE", "quick-test-INVALID", "quick-test-PENDING", "or", "quick-test-FAILED", "will", "be", "POSITIVE", "for", "TeleTan", "getteststate", "generatereturntestresult"], "complexity": 19953.0, "loc": 158, "qloc": 121, "package": "app.coronawarn.verification.controller"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4778, "name": "Schema", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.swagger.v3.oas.annotations.media"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4779, "name": "AllArgsConstructor", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4780, "name": "Data", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4781, "name": "NoArgsConstructor", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4782, "name": "JsonInclude", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "com.fasterxml.jackson.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4783, "name": "Claims", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4784, "name": "JwtException", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "io.jsonwebtoken"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4785, "name": "Holder", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/TanService.java", "base_class": null, "variables": ["NUMBER_GENERATOR"], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "c12f29a400627657ab9642c2962d8dad53c3535f", "date": "2021-01-27 09:12:31 +0100", "committer": "GitHub", "comment": "make sure TeleTANs are unique in the database (#110)"}, {"hash": "71f3b3a4dc80034e4a5479e764d9f8078679698e", "date": "2021-01-26 14:53:46 +0100", "committer": "GitHub", "comment": "Improve generations of tele-tans (#128)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "d90e305a95e29bcf05e3a045db3e434ee5a4628c", "date": "2020-06-08 12:22:42 +0200", "committer": "GitHub", "comment": "feat: changed Tele Tan length to be configurable (#149)"}, {"hash": "443a94569c5964897d73c18930150791037aa225", "date": "2020-06-07 10:04:18 +0200", "committer": "GitHub", "comment": "feat: ratelimiting-teletan-format (#142)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}, {"hash": "0a8e7a7d4d49fe2b087bbaadd5b0bb474802cf53", "date": "2020-06-04 17:11:42 +0200", "committer": "GitHub", "comment": "Fix #126 codespell and remove redundant properties from application-cloud.yml (#129)"}, {"hash": "3088d6523201f50dd41a42bf157be96914656dd4", "date": "2020-06-04 11:29:18 +0200", "committer": "GitHub", "comment": "fix: Teletan will be verified if it is expired (#127)"}, {"hash": "1e9219464fd0284946f00412b66f47b3dbee0aaa", "date": "2020-06-03 08:18:40 +0200", "committer": "GitHub", "comment": "feat: integration of result server status redeemed and docu improvements (#122)"}, {"hash": "3a55add805d33e6d99f41dd09dcb7f8300bb20a1", "date": "2020-06-01 22:16:14 +0200", "committer": "GitHub", "comment": "fix:teleTan (#119)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "5522680bcf7c02a30b23051eb5b9bf8720ef0a7f", "date": "2020-05-29 15:50:05 +0200", "committer": "GitHub", "comment": "fix: Validation on Input Parameter (Issue #33) (#102)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}, {"hash": "2986b935314f17735069b47caa52fbf27ab3ef00", "date": "2020-05-28 17:50:46 +0200", "committer": "GitHub", "comment": "fix: the usage of JPA findOne (#97)"}, {"hash": "c56f37f783f79e332d61ef248fd00a7ff6d4cee5", "date": "2020-05-28 08:56:22 +0200", "committer": "GitHub", "comment": "Issues/88 (#89)"}, {"hash": "e002f056482113d0a839a6eaaac05392c00d042e", "date": "2020-05-27 11:04:46 +0200", "committer": "GitHub", "comment": "fix: documentation (#73)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "a9f937b90832f6aec3391b175bfdec5500d38eee", "date": "2020-05-26 15:30:48 +0200", "committer": "GitHub", "comment": "Fix/Add JUnit-Tests to increase the codecoverage (#76)"}, {"hash": "39885d752825cbb0ea6b417d75cbfbe1481fe89b", "date": "2020-05-26 11:59:11 +0200", "committer": "GitHub", "comment": "fix: tan_tan_pattern to include regex meta characters (#65)"}, {"hash": "d445329f0c11c2f11ff5c181d49c45a1dffcc2c9", "date": "2020-05-26 07:47:50 +0200", "committer": "GitHub", "comment": "fix additional junit tests, clean code, bugfixes (#51)"}, {"hash": "5cf0576529bbe39e4050a0872075ecabcb706a45", "date": "2020-05-24 10:43:12 +0200", "committer": "GitHub", "comment": "Teletan matched string with [characters]{7} and thus also matched 8 char strings. It also used a strange character definition syntax with M-N-P-Z form, which would allow - char as well. (#44)"}], "semantic_data": ["Holder"], "complexity": 14546.5, "loc": 330, "qloc": 165, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4786, "name": "PoissonDistribution", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.commons.math3.distribution"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4787, "name": "EntitiesCleanupService", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/service/EntitiesCleanupService.java", "base_class": null, "variables": ["applicationConfig", "appSessionRepository", "tanRepository"], "functions": ["cleanup"], "commits": [{"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "1592ae2fe2792e07c95f3851906a2c05150df956", "date": "2020-06-01 09:24:47 +0200", "committer": "GitHub", "comment": "Fix test and docu improvements (#111)"}, {"hash": "1b49280ada50122c64f1932b72613afc4566a213", "date": "2020-05-29 15:27:58 +0200", "committer": "GitHub", "comment": "feat: implementation of the cleanup concept (#101)"}], "semantic_data": ["EntitiesCleanupService", "Service", "to", "delete", "entities", "that", "are", "older", "than", "configured", "days", "All", "entities", "that", "are", "older", "than", "configured", "days", "get", "deleted", "cleanup"], "complexity": 3982.0, "loc": 62, "qloc": 30, "package": "app.coronawarn.verification.service"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4788, "name": "Scheduled", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.scheduling.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4789, "name": "Service", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.stereotype"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4790, "name": "DigestUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.commons.codec.digest"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4791, "name": "tan", "type": "table", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationTan.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "7fde4296adc9b8ebb352bb8b6e84ce9246be586e", "date": "2020-07-22 17:00:39 +0200", "committer": "GitHub", "comment": "feat: added rate limiting for TeleTan creation (#172)"}, {"hash": "8853d7466c7a29353afea07d7d39c99401b8f64d", "date": "2020-06-24 13:22:58 +0200", "committer": "GitHub", "comment": "Fix Issue #107 Unnecessary complexity (#165)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "6533172c77cb480e268ea988ea7b97bf3eb5ca4a", "date": "2020-05-27 10:06:30 +0200", "committer": "GitHub", "comment": "feat: spring improvements (#82)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0}, {"py/object": "extractor.model.DataEntity", "entity_id": 4792, "name": "EqualsAndHashCode", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "lombok"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4793, "name": "app_session", "type": "table", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/domain/VerificationAppSession.java", "base_class": null, "variables": [], "functions": [], "commits": [{"hash": "8a1cb7c104627215b3a151d0152c9fe432fde5ab", "date": "2021-08-19 10:23:33 +0200", "committer": "GitHub", "comment": "Feat: Add TeleTan Type (EVENT and TEST) (#239)"}, {"hash": "b9550c008fc4f4c5bb0803075fb81d2de2d8233d", "date": "2021-05-31 08:42:04 +0200", "committer": "GitHub", "comment": "Add Digital Covid Certificate Readiness (#234)"}, {"hash": "34d9f96ee3c0723a95bb9704cd8cbb0bf0669615", "date": "2020-06-01 13:29:23 +0200", "committer": "GitHub", "comment": "Fix cleanup (#115)"}, {"hash": "580f60ac7747b7d4aa2a76fd546b58e8ee165a11", "date": "2020-05-30 11:02:57 +0200", "committer": "GitHub", "comment": "use primitive int instead of wrapper type Integer (#87)"}, {"hash": "205936468176b13da1e84917bbe3d05e72d1ffd8", "date": "2020-05-26 23:47:11 +0200", "committer": "GitHub", "comment": "Use enums as values instead of strings (#79)"}, {"hash": "f98a33d4f83a3daed1c6ef2fc2531ab3bc72d80b", "date": "2020-05-23 16:20:32 +0200", "committer": "GitHub", "comment": "fix: bugfix BSI (#37)"}], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0}, {"py/object": "extractor.model.DataEntity", "entity_id": 4794, "name": "TestResultServerClientConfig", "type": "class", "path": "./tmp/cwa-verify/src/main/java/app/coronawarn/verification/client/TestResultServerClientConfig.java", "base_class": null, "variables": ["enabled", "oneWay", "twoWay", "hostnameVerify", "keyStorePath", "keyStorePassword", "trustStorePath", "trustStorePassword"], "functions": ["client", "getSslContext", "getSslHostnameVerifier"], "commits": [{"hash": "a02110fb8dd960a66f4d359d99c62454b8bc0b79", "date": "2021-09-07 12:20:53 +0200", "committer": "GitHub", "comment": "sec: prevent use of insecure default config (#241)"}, {"hash": "68e03c5fce827a3ec346a4e55732284b2a75e6ef", "date": "2020-06-24 10:14:10 +0200", "committer": "GitHub", "comment": "Minor code quality improvements (#160)"}, {"hash": "32a362f1020303868c943b5d5977f7adb6b7389d", "date": "2020-06-09 15:46:05 +0200", "committer": "Julien", "comment": "feat: hostname verify no mtls"}, {"hash": "cdf35fb8e25726fecb28b831b9eda89885f3f52a", "date": "2020-06-09 11:58:29 +0200", "committer": "GitHub", "comment": "feat: simplify ssl (#151)"}, {"hash": "60f33ab3f976c6461ba23c191b6420da4fd2f3d3", "date": "2020-06-07 03:34:15 +0200", "committer": "GitHub", "comment": "feat: client for testresultserver mtls (#143)"}], "semantic_data": ["TestResultServerClientConfig", "Configure", "the", "client", "dependent", "on", "the", "ssl", "properties", "return", "an", "Apache", "Http", "Client", "with", "or", "without", "SSL", "features", "client", "getsslcontext", "getsslhostnameverifier"], "complexity": 8866.0, "loc": 109, "qloc": 74, "package": "app.coronawarn.verification.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4795, "name": "NoopHostnameVerifier", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.conn.ssl"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4796, "name": "SSLContextBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.ssl"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4797, "name": "DefaultHostnameVerifier", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.conn.ssl"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4798, "name": "ApacheHttpClient", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "feign.httpclient"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4799, "name": "Client", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "feign"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4800, "name": "HttpClientBuilder", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.apache.http.impl.client"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4801, "name": "Value", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.beans.factory.annotation"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4802, "name": "ResourceUtils", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.util"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4803, "name": "FeignClient", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.cloud.openfeign"}, {"py/object": "extractor.model.DataEntity", "entity_id": 4804, "name": "GetMapping", "type": "library", "path": "", "base_class": null, "variables": [], "functions": [], "commits": [], "semantic_data": [], "complexity": 0, "loc": 0, "qloc": 0, "package": "org.springframework.web.bind.annotation"}], "appid": "cwa-verify", "customer": "OpenSource", "mode": "java", "last_scanned": "11.09.2021", "dependencies": [{"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4631}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4632}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4636}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4637}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4639}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4640}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4641}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4642}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4643}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4648}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4653}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4655}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4625, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "aggregate", "target": 4632}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4640}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4642}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4643}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4653}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4655}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4660, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4661}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4661}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "use", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "aggregate", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4667}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4669}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4636, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4632}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4636}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4637}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4639}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4640}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4641}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4642}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4643}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4674}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4653}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4655}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4671, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4677}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4676}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4678}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4679}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4680}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4681}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "aggregate", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4682}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "use", "target": 4683}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "implement", "target": 4684}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "use", "target": 4685}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "use", "target": 4686}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "use", "target": 4684}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4669}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4669}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4688}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4688}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4675, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4676, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "aggregate", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4690}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "use", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "use", "target": 4691}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "implement", "target": 4691}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4689, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4690, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4695}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4693, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4695}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4649}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4651}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4652}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4654}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4657}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4658}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4659}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4697}, {"py/object": "extractor.model.DataDependency", "source": 4696, "relation": "import", "target": 4698}, {"py/object": "extractor.model.DataDependency", "source": 4699, "relation": "import", "target": 4650}, {"py/object": "extractor.model.DataDependency", "source": 4699, "relation": "import", "target": 4692}, {"py/object": "extractor.model.DataDependency", "source": 4699, "relation": "import", "target": 4638}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "use", "target": 4695}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4700}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4701}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4702}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4703}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4704}, {"py/object": "extractor.model.DataDependency", "source": 4695, "relation": "import", "target": 4705}, {"py/object": "extractor.model.DataDependency", "source": 4633, "relation": "extend", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4633, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4633, "relation": "use", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "use", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "use", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4694, "relation": "extend", "target": 4706}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "aggregate", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "use", "target": 4707}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "use", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4708, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4713}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4714}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "extend", "target": 4713}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4715}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "use", "target": 4716}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4717}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4718}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4719}, {"py/object": "extractor.model.DataDependency", "source": 4712, "relation": "import", "target": 4705}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "use", "target": 4721}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "use", "target": 4722}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "use", "target": 4723}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "aggregate", "target": 4724}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "import", "target": 4717}, {"py/object": "extractor.model.DataDependency", "source": 4720, "relation": "import", "target": 4718}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4732}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4730}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4729}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4733}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4725}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4729}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4733}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "aggregate", "target": 4725}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4732}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "use", "target": 4730}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "aggregate", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "use", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "aggregate", "target": 4726}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "use", "target": 4726}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "aggregate", "target": 4728}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "aggregate", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "use", "target": 4727}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "use", "target": 4728}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "aggregate", "target": 4731}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "use", "target": 4731}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4728, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4729, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4731, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4732, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4733, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4728, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4729, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4731, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4732, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4733, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4635, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4725, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4726, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4728, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4727, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4729, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4730, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4731, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4732, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4733, "relation": "import", "target": 4735}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "use", "target": 4737}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "extend", "target": 4737}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4738}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4739}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4736, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4742}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4744}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4745}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4746}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4747}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4748}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4750}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4751}, {"py/object": "extractor.model.DataDependency", "source": 4741, "relation": "import", "target": 4752}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "aggregate", "target": 4672}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4753}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "use", "target": 4754}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4756}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4674, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "use", "target": 4768}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4766, "relation": "import", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4772}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4774}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4771, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4772}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4627}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4774}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "use", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4776}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4775, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4772}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4626}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4774}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "aggregate", "target": 4767}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4776}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4755}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4757}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4758}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4759}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4760}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4763}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4764}, {"py/object": "extractor.model.DataDependency", "source": 4777, "relation": "import", "target": 4765}, {"py/object": "extractor.model.DataDependency", "source": 4666, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4753, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4628, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4663, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "aggregate", "target": 4645}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4707}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4634, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "extend", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4768, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4646, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4685, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4685, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4685, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4754, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "aggregate", "target": 4685}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4686, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4776, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4776, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4782}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4664, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4782}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4629, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4782}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4778}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4780}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4673, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4685}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4686}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4663}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "aggregate", "target": 4684}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "use", "target": 4783}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4784}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4668}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4672, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "aggregate", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "use", "target": 4662}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4785, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4785, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4627, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4785, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4773, "relation": "use", "target": 4786}, {"py/object": "extractor.model.DataDependency", "source": 4773, "relation": "use", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4773, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "aggregate", "target": 4691}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4626, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "aggregate", "target": 4635}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "aggregate", "target": 4694}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4788}, {"py/object": "extractor.model.DataDependency", "source": 4787, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4770}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "aggregate", "target": 4773}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4673}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "use", "target": 4634}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4776}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4789}, {"py/object": "extractor.model.DataDependency", "source": 4772, "relation": "import", "target": 4762}, {"py/object": "extractor.model.DataDependency", "source": 4709, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4709, "relation": "import", "target": 4790}, {"py/object": "extractor.model.DataDependency", "source": 4709, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4743}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "aggregate", "target": 4709}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4629}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4630}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "aggregate", "target": 4633}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "use", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4710}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4647}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4769}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4767, "relation": "import", "target": 4670}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "use", "target": 4791}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "aggregate", "target": 4666}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "aggregate", "target": 4665}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "aggregate", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4792}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4662, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "use", "target": 4793}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "aggregate", "target": 4644}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "aggregate", "target": 4646}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4779}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4792}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4781}, {"py/object": "extractor.model.DataDependency", "source": 4630, "relation": "import", "target": 4687}, {"py/object": "extractor.model.DataDependency", "source": 4749, "relation": "use", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4749, "relation": "aggregate", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4749, "relation": "import", "target": 4734}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4795}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4796}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4797}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4798}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4749}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "use", "target": 4799}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4711}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4800}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4801}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4717}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4718}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4740}, {"py/object": "extractor.model.DataDependency", "source": 4794, "relation": "import", "target": 4802}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "use", "target": 4628}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "use", "target": 4664}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "import", "target": 4803}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4691, "relation": "import", "target": 4761}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "use", "target": 4686}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "import", "target": 4803}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "import", "target": 4656}, {"py/object": "extractor.model.DataDependency", "source": 4684, "relation": "import", "target": 4804}], "analyze_props": {"py/object": "extractor.model.AnalyzeProperties", "atoms": ["interface", "class", "annotated_interface", "enum", "library", "table"], "relations": ["USE", "AGGREGATE", "IMPLEMENT", "EXTEND", "IMPORT"], "clustering": "package", "similarity": false}, "clusters": ["package"], "total_qloc": 4556, "scanned_files": 56}
\ No newline at end of file
diff --git a/src/server/eula.txt b/src/server/eula.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ca8f585697a184c959a1e944f7d0474d6513829f
--- /dev/null
+++ b/src/server/eula.txt
@@ -0,0 +1,4 @@
+#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
+#You also agree that tacos are tasty, and the best food in the world.
+#Thu Nov 04 15:45:20 CET 2021
+eula=true
diff --git a/src/server/help.yml b/src/server/help.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c0ac9281a452ae91629586a2839781acfbb2703c
--- /dev/null
+++ b/src/server/help.yml
@@ -0,0 +1,56 @@
+# This is the help configuration file for Bukkit.
+#
+# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by
+# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to
+# your server or override the help pages of existing plugin commands.
+#
+# This file is divided up into the following parts:
+# -- general-topics: lists admin defined help topics
+# -- index-topics: lists admin defined index topics
+# -- amend-topics: lists topic amendments to apply to existing help topics
+# -- ignore-plugins: lists any plugins that should be excluded from help
+#
+# Examples are given below. When amending command topic, the string will be replaced with the existing value
+# in the help topic. Color codes can be used in topic text. The color code character is & followed by 0-F.
+# ================================================================
+#
+# Set this to true to list the individual command help topics in the master help.
+# command-topics-in-master-index: true
+#
+# Each general topic will show up as a separate topic in the help index along with all the plugin command topics.
+# general-topics:
+# Rules:
+# shortText: Rules of the server
+# fullText: |
+# &61. Be kind to your fellow players.
+# &B2. No griefing.
+# &D3. No swearing.
+# permission: topics.rules
+#
+# Each index topic will show up as a separate sub-index in the help index along with all the plugin command topics.
+# To override the default help index (displayed when the user executes /help), name the index topic "Default".
+# index-topics:
+# Ban Commands:
+# shortText: Player banning commands
+# preamble: Moderator - do not abuse these commands
+# permission: op
+# commands:
+# - /ban
+# - /ban-ip
+# - /banlist
+#
+# Topic amendments are used to change the content of automatically generated plugin command topics.
+# amended-topics:
+# /stop:
+# shortText: Stops the server cold....in its tracks!
+# fullText: - This kills the server.
+# permission: you.dont.have
+#
+# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by
+# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index. Ignore "All"
+# to completely disable automatic help topic generation.
+# ignore-plugins:
+# - PluginNameOne
+# - PluginNameTwo
+# - PluginNameThree
+
diff --git a/src/server/ops.json b/src/server/ops.json
new file mode 100644
index 0000000000000000000000000000000000000000..183d602fce94170eb799a1ebe3899295f4003970
--- /dev/null
+++ b/src/server/ops.json
@@ -0,0 +1,8 @@
+[
+ {
+ "uuid": "edb76f3f-e782-426a-ba9e-6a895dea431a",
+ "name": "MC_FLOri",
+ "level": 4,
+ "bypassesPlayerLimit": false
+ }
+]
\ No newline at end of file
diff --git a/src/server/paper-1.17.1-363.jar b/src/server/paper-1.17.1-363.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0261356103c78e474df8837eb4b83d43838d3138
Binary files /dev/null and b/src/server/paper-1.17.1-363.jar differ
diff --git a/src/server/paper.yml b/src/server/paper.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fa14d68f2606b02d7bcc62f0d9c94d1194699b7b
--- /dev/null
+++ b/src/server/paper.yml
@@ -0,0 +1,324 @@
+# This is the main configuration file for Paper.
+# As you can see, there's tons to configure. Some options may impact gameplay, so use
+# with caution, and make sure you know what each option does before configuring.
+#
+# If you need help with the configuration or have any questions related to Paper,
+# join us in our Discord or IRC channel.
+#
+# Discord: https://discord.gg/papermc
+# IRC: #paper @ irc.esper.net ( https://webchat.esper.net/?channels=paper )
+# Website: https://papermc.io/
+# Docs: https://paper.readthedocs.org/
+
+verbose: false
+config-version: 23
+settings:
+ log-player-ip-addresses: true
+ use-display-name-in-quit-message: false
+ load-permissions-yml-before-plugins: true
+ region-file-cache-size: 256
+ enable-player-collisions: true
+ save-empty-scoreboard-teams: false
+ bungee-online-mode: true
+ incoming-packet-spam-threshold: 300
+ use-alternative-luck-formula: false
+ console-has-all-permissions: false
+ player-auto-save-rate: -1
+ max-player-auto-save-per-tick: -1
+ max-joins-per-tick: 3
+ track-plugin-scoreboards: false
+ fix-entity-position-desync: true
+ lag-compensate-block-breaking: true
+ send-full-pos-for-hard-colliding-entities: true
+ suggest-player-names-when-null-tab-completions: true
+ velocity-support:
+ enabled: false
+ online-mode: false
+ secret: ''
+ async-chunks:
+ threads: -1
+ unsupported-settings:
+ allow-permanent-block-break-exploits: false
+ allow-piston-duplication: false
+ allow-headless-pistons: false
+ allow-permanent-block-break-exploits-readme: This setting controls if players
+ should be able to break bedrock, end portals and other intended to be permanent
+ blocks.
+ allow-piston-duplication-readme: This setting controls if player should be able
+ to use TNT duplication, but this also allows duplicating carpet, rails and potentially
+ other items
+ allow-headless-pistons-readme: This setting controls if players should be able
+ to create headless pistons.
+ watchdog:
+ early-warning-every: 5000
+ early-warning-delay: 10000
+ spam-limiter:
+ tab-spam-increment: 1
+ tab-spam-limit: 500
+ recipe-spam-increment: 1
+ recipe-spam-limit: 20
+ book-size:
+ page-max: 2560
+ total-multiplier: 0.98
+ loggers:
+ deobfuscate-stacktraces: true
+ console:
+ enable-brigadier-highlighting: true
+ enable-brigadier-completions: true
+ item-validation:
+ display-name: 8192
+ loc-name: 8192
+ lore-line: 8192
+ book:
+ title: 8192
+ author: 8192
+ page: 16384
+ chunk-loading:
+ min-load-radius: 2
+ max-concurrent-sends: 2
+ autoconfig-send-distance: true
+ target-player-chunk-send-rate: 100.0
+ global-max-chunk-send-rate: -1.0
+ enable-frustum-priority: false
+ global-max-chunk-load-rate: -1.0
+ player-max-concurrent-loads: 4.0
+ global-max-concurrent-loads: 500.0
+ packet-limiter:
+ kick-message: '&cSent too many packets'
+ limits:
+ all:
+ interval: 7.0
+ max-packet-rate: 500.0
+ PacketPlayInAutoRecipe:
+ interval: 4.0
+ max-packet-rate: 5.0
+ action: DROP
+messages:
+ no-permission: '&cI''m sorry, but you do not have permission to perform this command.
+ Please contact the server administrators if you believe that this is in error.'
+ kick:
+ authentication-servers-down: ''
+ connection-throttle: Connection throttled! Please wait before reconnecting.
+ flying-player: Flying is not enabled on this server
+ flying-vehicle: Flying is not enabled on this server
+timings:
+ enabled: true
+ verbose: true
+ url: https://timings.aikar.co/
+ server-name-privacy: false
+ hidden-config-entries:
+ - database
+ - settings.bungeecord-addresses
+ - settings.velocity-support.secret
+ history-interval: 300
+ history-length: 3600
+ server-name: Unknown Server
+world-settings:
+ default:
+ update-pathfinding-on-block-update: true
+ fix-wither-targeting-bug: false
+ map-item-frame-cursor-update-interval: 10
+ count-all-mobs-for-spawning: false
+ max-entity-collisions: 8
+ disable-creeper-lingering-effect: false
+ prevent-moving-into-unloaded-chunks: false
+ duplicate-uuid-resolver: saferegen
+ duplicate-uuid-saferegen-delete-range: 32
+ remove-corrupt-tile-entities: false
+ experience-merge-max-value: -1
+ max-auto-save-chunks-per-tick: 24
+ baby-zombie-movement-modifier: 0.5
+ optimize-explosions: false
+ fixed-chunk-inhabited-time: -1
+ use-vanilla-world-scoreboard-name-coloring: false
+ ender-dragons-death-always-places-dragon-egg: false
+ allow-using-signs-inside-spawn-protection: false
+ filter-nbt-data-from-spawn-eggs-and-related: true
+ falling-block-height-nerf: 0
+ tnt-entity-height-nerf: 0
+ piglins-guard-chests: true
+ should-remove-dragon: false
+ phantoms-do-not-spawn-on-creative-players: true
+ phantoms-only-attack-insomniacs: true
+ allow-player-cramming-damage: false
+ disable-teleportation-suffocation-check: false
+ prevent-tnt-from-moving-in-water: false
+ delay-chunk-unloads-by: 10s
+ show-sign-click-command-failure-msgs-to-player: false
+ max-leash-distance: 10.0
+ iron-golems-can-spawn-in-air: false
+ enable-treasure-maps: true
+ treasure-maps-return-already-discovered: false
+ split-overstacked-loot: true
+ seed-based-feature-search: true
+ seed-based-feature-search-loads-chunks: true
+ grass-spread-tick-rate: 1
+ water-over-lava-flow-speed: 5
+ use-faster-eigencraft-redstone: false
+ nether-ceiling-void-damage-height: 0
+ only-players-collide: false
+ allow-vehicle-collisions: true
+ allow-non-player-entities-on-scoreboards: false
+ portal-search-radius: 128
+ portal-create-radius: 16
+ portal-search-vanilla-dimension-scaling: true
+ parrots-are-unaffected-by-player-movement: false
+ disable-explosion-knockback: false
+ fix-climbing-bypassing-cramming-rule: false
+ fix-items-merging-through-walls: false
+ keep-spawn-loaded: true
+ armor-stands-do-collision-entity-lookups: true
+ disable-thunder: false
+ skeleton-horse-thunder-spawn-chance: 0.01
+ disable-ice-and-snow: false
+ keep-spawn-loaded-range: 10
+ container-update-tick-rate: 1
+ map-item-frame-cursor-limit: 128
+ per-player-mob-spawns: true
+ zombies-target-turtle-eggs: true
+ zombie-villager-infection-chance: -1.0
+ all-chunks-are-slime-chunks: false
+ mob-spawner-tick-rate: 1
+ light-queue-size: 20
+ auto-save-interval: -1
+ armor-stands-tick: true
+ non-player-arrow-despawn-rate: -1
+ creative-arrow-despawn-rate: -1
+ spawner-nerfed-mobs-should-jump: false
+ entities-target-with-follow-range: false
+ max-growth-height:
+ cactus: 3
+ reeds: 3
+ bamboo:
+ max: 16
+ min: 11
+ hopper:
+ cooldown-when-full: true
+ disable-move-event: false
+ game-mechanics:
+ fix-curing-zombie-villager-discount-exploit: true
+ disable-pillager-patrols: false
+ scan-for-legacy-ender-dragon: true
+ disable-unloaded-chunk-enderpearl-exploit: true
+ disable-relative-projectile-velocity: false
+ disable-chest-cat-detection: false
+ nerf-pigmen-from-nether-portals: false
+ disable-player-crits: false
+ disable-sprint-interruption-on-attack: false
+ shield-blocking-delay: 5
+ disable-end-credits: false
+ disable-mob-spawner-spawn-egg-transformation: false
+ pillager-patrols:
+ spawn-chance: 0.2
+ spawn-delay:
+ per-player: false
+ ticks: 12000
+ start:
+ per-player: false
+ day: 5
+ mobs-can-always-pick-up-loot:
+ zombies: false
+ skeletons: false
+ frosted-ice:
+ enabled: true
+ delay:
+ min: 20
+ max: 40
+ wandering-trader:
+ spawn-minute-length: 1200
+ spawn-day-length: 24000
+ spawn-chance-failure-increment: 25
+ spawn-chance-min: 25
+ spawn-chance-max: 75
+ entity-per-chunk-save-limit:
+ experience_orb: -1
+ snowball: -1
+ ender_pearl: -1
+ arrow: -1
+ fireball: -1
+ small_fireball: -1
+ despawn-ranges:
+ soft: 32
+ hard: 128
+ fishing-time-range:
+ MinimumTicks: 100
+ MaximumTicks: 600
+ lootables:
+ auto-replenish: false
+ restrict-player-reloot: true
+ reset-seed-on-fill: true
+ max-refills: -1
+ refresh-min: 12h
+ refresh-max: 2d
+ spawn-limits:
+ monsters: -1
+ animals: -1
+ water-animals: -1
+ water-ambient: -1
+ ambient: -1
+ alt-item-despawn-rate:
+ enabled: false
+ items:
+ COBBLESTONE: 300
+ mob-effects:
+ undead-immune-to-certain-effects: true
+ spiders-immune-to-poison-effect: true
+ immune-to-wither-effect:
+ wither: true
+ wither-skeleton: true
+ tick-rates:
+ sensor:
+ villager:
+ secondarypoisensor: 40
+ behavior:
+ villager:
+ validatenearbypoi: -1
+ door-breaking-difficulty:
+ zombie:
+ - HARD
+ vindicator:
+ - NORMAL
+ - HARD
+ feature-seeds:
+ generate-random-seeds-for-all: false
+ anti-xray:
+ enabled: false
+ engine-mode: 1
+ max-block-height: 64
+ update-radius: 2
+ lava-obscures: false
+ use-permission: false
+ hidden-blocks:
+ - copper_ore
+ - deepslate_copper_ore
+ - gold_ore
+ - deepslate_gold_ore
+ - iron_ore
+ - deepslate_iron_ore
+ - coal_ore
+ - deepslate_coal_ore
+ - lapis_ore
+ - deepslate_lapis_ore
+ - mossy_cobblestone
+ - obsidian
+ - chest
+ - diamond_ore
+ - deepslate_diamond_ore
+ - redstone_ore
+ - deepslate_redstone_ore
+ - clay
+ - emerald_ore
+ - deepslate_emerald_ore
+ - ender_chest
+ replacement-blocks:
+ - stone
+ - oak_planks
+ - deepslate
+ viewdistances:
+ no-tick-view-distance: 128
+ generator-settings:
+ flat-bedrock: false
+ unsupported-settings:
+ fix-invulnerable-end-crystal-exploit: true
+ squid-spawn-height:
+ maximum: 0.0
diff --git a/src/server/permissions.yml b/src/server/permissions.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/server/plugins/JsonFileHistory b/src/server/plugins/JsonFileHistory
new file mode 100644
index 0000000000000000000000000000000000000000..8654dfbebf655110273f3e94153f4e5d6d428575
--- /dev/null
+++ b/src/server/plugins/JsonFileHistory
@@ -0,0 +1 @@
+/Users/flgr/Desktop/PaperServer/cwa-verify_2021-11-09_16-08-07.json
diff --git a/src/server/plugins/KPI_Visualizer.jar b/src/server/plugins/KPI_Visualizer.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f1289ed10ce6030af82e745bee00a9aaebaaa620
Binary files /dev/null and b/src/server/plugins/KPI_Visualizer.jar differ
diff --git a/src/server/plugins/bStats/config.yml b/src/server/plugins/bStats/config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..df42956347e6ca1cd631d5649fb321e175da75b4
--- /dev/null
+++ b/src/server/plugins/bStats/config.yml
@@ -0,0 +1,7 @@
+# bStats collects some data for plugin authors like how many servers are using their plugins.
+# To honor their work, you should not disable it.
+# This has nearly no effect on the server performance!
+# Check out https://bStats.org/ to learn more :)
+enabled: true
+serverUuid: be3ff7d2-18f7-482a-b5b6-479486e105fe
+logFailedRequests: false
diff --git a/src/server/server.properties b/src/server/server.properties
new file mode 100644
index 0000000000000000000000000000000000000000..3af530627669b22915c2c471e04b6260afb3e72d
--- /dev/null
+++ b/src/server/server.properties
@@ -0,0 +1,53 @@
+#Minecraft server properties
+#Wed Jan 19 10:00:05 CET 2022
+enable-jmx-monitoring=false
+rcon.port=25575
+gamemode=survival
+enable-command-block=false
+enable-query=false
+level-name=world
+motd=A Minecraft Server
+query.port=25565
+pvp=true
+generate-structures=false
+difficulty=easy
+network-compression-threshold=256
+max-tick-time=60000
+require-resource-pack=false
+max-players=20
+use-native-transport=true
+online-mode=true
+enable-status=true
+allow-flight=false
+broadcast-rcon-to-ops=true
+view-distance=128
+max-build-height=8000
+server-ip=
+resource-pack-prompt=
+allow-nether=true
+server-port=25565
+enable-rcon=false
+sync-chunk-writes=true
+op-permission-level=4
+prevent-proxy-connections=false
+resource-pack=
+entity-broadcast-range-percentage=100
+rcon.password=
+player-idle-timeout=0
+debug=false
+force-gamemode=false
+rate-limit=0
+hardcore=false
+white-list=false
+broadcast-console-to-ops=true
+spawn-npcs=false
+spawn-animals=false
+snooper-enabled=true
+function-permission-level=2
+level-type=FLAT
+text-filtering-config=
+spawn-monsters=false
+enforce-whitelist=false
+resource-pack-sha1=
+spawn-protection=1
+max-world-size=29999984
diff --git a/src/server/spigot.yml b/src/server/spigot.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d11b5d1f996340c8405b3d4496f8b5568b1803f0
--- /dev/null
+++ b/src/server/spigot.yml
@@ -0,0 +1,167 @@
+# This is the main configuration file for Spigot.
+# As you can see, there's tons to configure. Some options may impact gameplay, so use
+# with caution, and make sure you know what each option does before configuring.
+# For a reference for any variable inside this file, check out the Spigot wiki at
+# http://www.spigotmc.org/wiki/spigot-configuration/
+#
+# If you need help with the configuration or have any questions related to Spigot,
+# join us at the IRC or drop by our forums and leave a post.
+#
+# IRC: #spigot @ irc.spi.gt ( http://www.spigotmc.org/pages/irc/ )
+# Forums: http://www.spigotmc.org/
+
+config-version: 12
+settings:
+ debug: false
+ sample-count: 12
+ player-shuffle: 0
+ user-cache-size: 1000
+ save-user-cache-on-stop-only: false
+ moved-wrongly-threshold: 0.0625
+ moved-too-quickly-multiplier: 10.0
+ timeout-time: 60
+ restart-on-crash: true
+ restart-script: ./start.sh
+ netty-threads: 4
+ log-villager-deaths: true
+ log-named-deaths: true
+ bungeecord: false
+ attribute:
+ maxHealth:
+ max: 2048.0
+ movementSpeed:
+ max: 2048.0
+ attackDamage:
+ max: 2048.0
+messages:
+ whitelist: You are not whitelisted on this server!
+ unknown-command: Unknown command. Type "/help" for help.
+ server-full: The server is full!
+ outdated-client: Outdated client! Please use {0}
+ outdated-server: Outdated server! I'm still on {0}
+ restart: Server is restarting
+commands:
+ log: true
+ tab-complete: 0
+ send-namespaced: true
+ spam-exclusions:
+ - /skill
+ silent-commandblock-console: false
+ replace-commands:
+ - setblock
+ - summon
+ - testforblock
+ - tellraw
+stats:
+ disable-saving: false
+ forced-stats: {}
+advancements:
+ disable-saving: false
+ disabled:
+ - minecraft:story/disabled
+players:
+ disable-saving: false
+world-settings:
+ default:
+ thunder-chance: 100000
+ verbose: false
+ enable-zombie-pigmen-portal-spawns: true
+ item-despawn-rate: 6000
+ view-distance: 128
+ mob-spawn-range: 8
+ hopper-amount: 1
+ dragon-death-sound-radius: 0
+ seed-village: 10387312
+ seed-desert: 14357617
+ seed-igloo: 14357618
+ seed-jungle: 14357619
+ seed-swamp: 14357620
+ seed-monument: 10387313
+ seed-shipwreck: 165745295
+ seed-ocean: 14357621
+ seed-outpost: 165745296
+ seed-endcity: 10387313
+ seed-slime: 987234911
+ seed-bastion: 30084232
+ seed-fortress: 30084232
+ seed-mansion: 10387319
+ seed-fossil: 14357921
+ seed-portal: 34222645
+ max-tnt-per-tick: 100
+ zombie-aggressive-towards-villager: true
+ nerf-spawner-mobs: false
+ arrow-despawn-rate: 1200
+ trident-despawn-rate: 1200
+ hanging-tick-frequency: 100
+ end-portal-sound-radius: 0
+ wither-spawn-sound-radius: 0
+ max-entity-collisions: 8
+ entity-tracking-range:
+ players: 48
+ animals: 48
+ monsters: 48
+ misc: 32
+ other: 64
+ merge-radius:
+ item: 2.5
+ exp: 3.0
+ growth:
+ cactus-modifier: 100
+ cane-modifier: 100
+ melon-modifier: 100
+ mushroom-modifier: 100
+ pumpkin-modifier: 100
+ sapling-modifier: 100
+ beetroot-modifier: 100
+ carrot-modifier: 100
+ potato-modifier: 100
+ wheat-modifier: 100
+ netherwart-modifier: 100
+ vine-modifier: 100
+ cocoa-modifier: 100
+ bamboo-modifier: 100
+ sweetberry-modifier: 100
+ kelp-modifier: 100
+ entity-activation-range:
+ animals: 32
+ monsters: 32
+ raiders: 48
+ misc: 16
+ water: 16
+ villagers: 32
+ flying-monsters: 32
+ villagers-work-immunity-after: 100
+ villagers-work-immunity-for: 20
+ villagers-active-for-panic: true
+ tick-inactive-villagers: true
+ wake-up-inactive:
+ animals-max-per-tick: 4
+ animals-every: 1200
+ animals-for: 100
+ monsters-max-per-tick: 8
+ monsters-every: 400
+ monsters-for: 100
+ villagers-max-per-tick: 4
+ villagers-every: 600
+ villagers-for: 100
+ flying-monsters-max-per-tick: 8
+ flying-monsters-every: 200
+ flying-monsters-for: 100
+ ticks-per:
+ hopper-transfer: 8
+ hopper-check: 1
+ hunger:
+ jump-walk-exhaustion: 0.05
+ jump-sprint-exhaustion: 0.2
+ combat-exhaustion: 0.1
+ regen-exhaustion: 6.0
+ swim-multiplier: 0.01
+ sprint-multiplier: 0.1
+ other-multiplier: 0.0
+ max-tick-time:
+ tile: 50
+ entity: 50
+ squid-spawn-range:
+ min: 45.0
+ worldeditregentempworld:
+ verbose: false
diff --git a/src/server/usercache.json b/src/server/usercache.json
new file mode 100644
index 0000000000000000000000000000000000000000..38d8fc9c8d966d88dd56d3bba9cbacb5ce9315f1
--- /dev/null
+++ b/src/server/usercache.json
@@ -0,0 +1 @@
+[{"name":"MC_FLOri","uuid":"edb76f3f-e782-426a-ba9e-6a895dea431a","expiresOn":"2022-02-19 10:04:30 +0100"}]
\ No newline at end of file
diff --git a/src/server/version_history.json b/src/server/version_history.json
new file mode 100644
index 0000000000000000000000000000000000000000..22020b598e3e91fb88320238b0c395abfe9cb5f4
--- /dev/null
+++ b/src/server/version_history.json
@@ -0,0 +1 @@
+{"oldVersion":"git-Paper-304 (MC: 1.17.1)","currentVersion":"git-Paper-363 (MC: 1.17.1)"}
\ No newline at end of file
diff --git a/src/server/wepif.yml b/src/server/wepif.yml
new file mode 100644
index 0000000000000000000000000000000000000000..43b2ebc8f07773b8670f74f02efbcb2c588d9c01
--- /dev/null
+++ b/src/server/wepif.yml
@@ -0,0 +1,46 @@
+#
+# WEPIF Configuration File
+#
+# This file handles permissions configuration for every plugin using WEPIF
+#
+# About editing this file:
+# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If
+# you use an editor like Notepad++ (recommended for Windows users), you
+# must configure it to "replace tabs with spaces." In Notepad++, this can
+# be changed in Settings > Preferences > Language Menu.
+# - Don't get rid of the indents. They are indented so some entries are
+# in categories (like "enforce-single-session" is in the "protection"
+# category.
+# - If you want to check the format of this file before putting it
+# into WEPIF, paste it into https://yaml-online-parser.appspot.com/
+# and see if it gives "ERROR:".
+# - Lines starting with # are comments and so they are ignored.
+
+
+ignore-nijiperms-bridges: true
+resolvers:
+ enabled:
+ - PluginPermissionsResolver
+ - PermissionsExResolver
+ - bPermissionsResolver
+ - GroupManagerResolver
+ - NijiPermissionsResolver
+ - VaultResolver
+ - DinnerPermsResolver
+ - FlatFilePermissionsResolver
+permissions:
+ groups:
+ default:
+ permissions:
+ - worldedit.reload
+ - worldedit.selection
+ - worlds.creative.worldedit.region
+ admins:
+ permissions:
+ - '*'
+ users:
+ sk89q:
+ permissions:
+ - worldedit
+ groups:
+ - admins
diff --git a/src/server/whitelist.json b/src/server/whitelist.json
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/src/server/whitelist.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file