commit bf76f72680e27913aaab39589a1e75bb1f5da130
Author: Pavel FidranskÃ½ <fidransky@outlook.com>
Date:   Sat Nov 10 18:15:18 2018 +0100

    use standard Maven directory structure for resources

diff --git a/config/config_nÃ¡vrh.json b/config/config_nÃ¡vrh.json
deleted file mode 100644
index edd21ac..0000000
--- a/config/config_nÃ¡vrh.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
-  //defaultní filter
-  "defaultFilter": {
-
-    //filter podle archetypù vrcholù
-    "vertexArchetypeFilter": {
-      "archetypes": [ "archetypeName1", "archetypeName2", ... ], //seznam názvù archetypù
-      "matchType": "match_type" //match type: "matching" / "non_matching"
-    },
-
-    //filter podle archetypù hran
-    "edgeArchetypeFilter": {
-      //seznam trojic archetypù (archetyp výchozího vrcholu, archetyp hrany, archetype cílového vrcholu)
-      "archetypes": [
-        {
-          "fromArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ], //seznam názvù archetypù výchozího vrcholu
-          "edgeArchetypes": [ "edgeArchetypeName1", "edgeArchetypeName2", ... ], //seznam názvù archetypù hrany
-          "toArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ] //seznam názvù archetypù cílového vrcholu
-          //filtr je vždy pro každou trojici fromArchetype-edgeArchetpye-toArchetype, která splòuje libovolnou z uvedených kombinací
-        },
-        {
-          "fromArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ], //seznam názvù archetypù výchozího vrcholu
-          "edgeArchetypes": [ "edgeArchetypeName1", "edgeArchetypeName2", ... ], //seznam názvù archetypù hrany
-          "toArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ] //seznam názvù archetypù cílového vrcholu
-        },
-        {
-          "fromArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ], //seznam názvù archetypù výchozího vrcholu
-          "edgeArchetypes": [ "edgeArchetypeName1", "edgeArchetypeName2", ... ], //seznam názvù archetypù hrany
-          "toArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ] //seznam názvù archetypù cílového vrcholu
-        },
-        ...
-      ],
-      "matchType": "matchType" //match type: "matching" / "non_matching"
-    },
-
-    //filter podle atributù vrcholù
-    "vertexAttributeFilters": [
-      //filter pro typ ENUM
-      {
-        "archetype": "archetypeName", //název archetypu, pro který filtr platí
-        "attributeName": "attributeName", //název atributu
-        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
-        "filter": {
-          "values": [ "value1", "value2", ... ], //hodnoty jako string
-          "matchType": "matchType" //match type: "any" / "none" / "exact_match"
-        }
-      },
-      //filter pro typ STRING
-      {
-        "archetype": "archetypeName", //název archetypu, pro který filtr platí
-        "attributeName": "attributeName", //název atributu
-        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
-        "filter": {
-          "value": "value", //hodnota typu string
-          "matchType": "matchType" //match type: "exact_match" / "exact_mismatch" / "containing" / "non_containing" / "regular_expression"
-        }
-      },
-      //filter pro typ NUMBER
-      {
-        "archetype": "archetypeName", //název archetypu, pro který filtr platí
-        "attributeName": "attributeName", //název atributu
-        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
-        "filter": {
-          "min": cislo, //minimální hodnota jako èíslo
-          "max": cislo, //maximání hodnota jako èíslo
-          "minInclusive": inclusive, //info, zda min je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
-          "maxInclusive": inclusive, //info, zda max je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
-          "matchType": "matchType" //match type: "matching" / "non_matching"
-        }
-      },
-      //filter pro typ DATE
-      {
-        "archetype": "archetypeName", //název archetypu, pro který filtr platí
-        "attributeName": "attributeName", //název atributu
-        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
-        "filter": {
-          "min": "datum", //minimální hodnota jako datum reprezentovaná øetìzcem ve formátu ve formátu yyyy-MM-dd HH:mm:ss
-          "max": "datum", //maximání hodnota jako datum reprezentovaná øetìzcem ve formátu ve formátu yyyy-MM-dd HH:mm:ss
-          "minInclusive": inclusive, //info, zda min je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
-          "maxInclusive": inclusive, //info, zda max je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
-          "matchType": "matchType" //match type: "matching" / "non_matching"
-        }
-      },
-      ...
-    ],
-
-    //filter podle atributù hran
-    "edgeAttributeFilters": [
-      //stejné jako u "vertexAttributeFilters"
-    ]
-  },
-  
-  "defaultGroupArchetypes": [ "archetypeName1", "archetypeName2", ... ], //Pole názvù archetypù, které budou pøesunuty do skupin v postranní lištì
-
-  //Definice archetypových ikon
-  "archetypeIcons": {
-    //ikony identifikovány pomocí jmén
-    "archetypeName1": 'archetype 1 svg', //hodnotou v této struktuøe je poté svg kód
-    "archetypeName2": 'archetype 2 svg'
-  }
-}
diff --git a/config/empty_filter.json b/config/empty_filter.json
deleted file mode 100644
index 901c935..0000000
--- a/config/empty_filter.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [
-      
-    ],
-
-    "edgeAttributeFilters": [
-      
-    ]
-  },
-  
-  "defaultGroupArchetypes": [ "File", "Commit", "RepoFile"],
-  
-  "archetypeIcons": [
-    {
-      "name" : "Person",
-      "value" : "<circle r=\"3\" cx=\"6\" cy=\"3\" fill=\"black\" stroke-width=\"0\"\/><path d=\"M 1 10 A 6 4 0 0 1 11 10 L 11 15 L 1 15\" fill=\"black\" stroke-width=\"0\"\/>"
-    },
-    {
-      "name" : "Wiki",
-      "value" : "<text x=\"6\" y=\"7\" font-weight=\"bold\" style=\"font-family: serif !important; text-anchor: middle\">W<\/text>"
-    },
-    {
-      "name" : "Commit",
-      "value" : "<circle r=\"4\" cx=\"6\" cy=\"7.5\" fill-opacity=\"0\" stroke=\"black\" stroke-width=\"2\"\/><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"3.5\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/><line x1=\"6\" y1=\"11.5\" x2=\"6\" y2=\"14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/>"
-    },
-    {
-      "name" : "File",
-      "value" : "<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/>"
-    },
-    {
-      "name" : "RepoFile",
-      "value" :"<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/><ellipse cx=\"5\" cy=\"7\" rx=\"3\" ry=\"1\" stroke=\"black\" fill=\"transparent\" stroke-width=\"0.5\"\/><path d=\"M 2 7 L 2 12 A 3 1 0 0 0 8 12 L 8 7\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 8.66 A 3 1 0 0 0 8 8.66\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 10.33 A 3 1 0 0 0 8 10.33\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/>"
-    },
-    {
-      "name" : "Ticket",
-      "value" : "<path d=\"M 1 0 L 3 0 A 2 1 0 0 0 9 0 L 11 0, 11 15, 9 15 A 2 1 0 0 0 3 15 L 1 15 Z\" stroke=\"black\" fill=\"none\" stroke-linejoin=\"round\"\/><line x1=\"1\" y1=\"6\" x2=\"11\" y2=\"6\" stroke=\"black\" stroke-width=\"0.5\" stroke-dasharray=\"1,1\" stroke-linecap=\"round\"\/>"
-    },
-    {
-      "name" : "Change",
-      "value" : "<polygon points=\"1,4 5,4 3,1\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"3\" y1=\"2\" x2=\"3\" y2=\"13\" stroke=\"black\"\/><polygon points=\"7,11 11,11 9,14\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"13\" stroke=\"black\"\/>"
-    }
-  ]
-}
diff --git a/config/historical_data_config.json b/config/historical_data_config.json
deleted file mode 100644
index 45cd25d..0000000
--- a/config/historical_data_config.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [
-      
-    ],
-
-    "edgeAttributeFilters": [
-      
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": [
-    {
-      "name" : "person",
-      "value" : "<circle r=\"3\" cx=\"6\" cy=\"3\" fill=\"black\" stroke-width=\"0\"\/><path d=\"M 1 10 A 6 4 0 0 1 11 10 L 11 15 L 1 15\" fill=\"black\" stroke-width=\"0\"\/>"
-    },
-    {
-      "name" : "device",
-      "value" : "<g transform=\"scale(0.6,0.6)\"><g transform=\"translate(-2,1)\"><path id=\"gear\" fill=\"black\" stroke=\"black\" style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M20.869,13.476C20.948,12.994,21,12.504,21,12s-0.052-0.994-0.131-1.476l-2.463-0.259c-0.149-0.556-0.367-1.082-0.648-1.57l1.558-1.924c-0.576-0.806-1.281-1.511-2.087-2.087 l-1.924,1.558c-0.488-0.281-1.015-0.499-1.57-0.648l-0.259-2.463C12.994,3.052,12.504,3,12,3s-0.994,0.052-1.476,0.131 l-0.259,2.463C9.71,5.743,9.184,5.961,8.695,6.242L6.771,4.685C5.966,5.261,5.261,5.966,4.685,6.771l1.558,1.924 c-0.281,0.488-0.499,1.015-0.648,1.57l-2.463,0.259C3.052,11.006,3,11.496,3,12s0.052,0.994,0.131,1.476l2.463,0.259 c0.149,0.556,0.367,1.082,0.648,1.57l-1.558,1.924c0.576,0.806,1.281,1.511,2.087,2.087l1.924-1.558 c0.488,0.281,1.015,0.499,1.57,0.648l0.259,2.463C11.006,20.948,11.496,21,12,21s0.994-0.052,1.476-0.131l0.259-2.463 c0.556-0.149,1.082-0.367,1.57-0.648l1.924,1.558c0.806-0.576,1.511-1.281,2.087-2.087l-1.558-1.924 c0.281-0.488,0.499-1.015,0.648-1.57L20.869,13.476z M12,15.998c-2.209,0-3.998-1.789-3.998-3.998S9.791,8.002,12,8.002 S15.998,9.791,15.998,12S14.209,15.998,12,15.998z\"/></g></g>"
-    },
-    {
-      "name" : "theory",
-      "value" : "<g transform=\"scale(0.03,0.03)\"><g transform=\"translate(-35,0)\"><path id=\"gear\" fill=\"black\" stroke=\"black\" d=\"M394.235,151.628c0,82.449-49.695,92.044-59.021,181.956c0,8.382-6.785,15.163-15.168,15.163H165.161 c-8.379,0-15.161-6.781-15.161-15.163h-0.028c-9.299-89.912-58.994-99.507-58.994-181.956C90.978,67.878,158.855,0,242.606,0 S394.235,67.878,394.235,151.628z M318.423,363.906H166.794c-8.384,0-15.166,6.786-15.166,15.168 c0,8.378,6.782,15.163,15.166,15.163h151.628c8.378,0,15.163-6.785,15.163-15.163C333.586,370.692,326.801,363.906,318.423,363.906 z M318.423,409.396H166.794c-8.384,0-15.166,6.786-15.166,15.163c0,8.383,6.782,15.168,15.166,15.168h151.628 c8.378,0,15.163-6.785,15.163-15.168C333.586,416.182,326.801,409.396,318.423,409.396z M212.282,485.212h60.65 c16.76,0,30.322-13.562,30.322-30.326h-121.3C181.955,471.65,195.518,485.212,212.282,485.212z\"/></g></g>"
-    }
-  ]
-}
diff --git a/config/spade_config.json b/config/spade_config.json
deleted file mode 100644
index 514b5d4..0000000
--- a/config/spade_config.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ "Ticket", "Person", "Wiki", "File"],
-      "matchType": "matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Authorship" ],
-          "toArchetypes": [ "Ticket", "File" ]
-        },
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Assignment" ],
-          "toArchetypes": [ "Ticket" ]
-        },
-        {
-          "fromArchetypes": [ "File", "Ticket", "Wiki" ],
-          "edgeArchetypes": [ "ItemRelation" ],
-          "toArchetypes": [ "File", "Ticket", "Wiki" ]
-        },
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Modification" ],
-          "toArchetypes": [ "Wiki" ]
-        }
-      ],
-      "matchType": "matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Ticket",
-        "attributeName": "Status super class",
-        "filter": {
-          "values": [ "OPEN" ],
-          "matchType": "any"
-        }
-      },
-      {
-        "archetype": "Person",
-        "attributeName": "Role super classes",
-        "filter": {
-          "values": [ "TEAMMEMBER" ],
-          "matchType": "any"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      {
-        "archetype": "Modification",
-        "attributeName": "Relation",
-        "filter": {
-          "values": [ "last modified by", "last modified" ],
-          "matchType": "any"
-        }
-      }
-    ]
-  },
-  
-  "defaultGroupArchetypes": [ "File", "Commit", "RepoFile"],
-  
-  "archetypeIcons": [
-    {
-      "name" : "Person",
-      "value" : "<circle r=\"3\" cx=\"6\" cy=\"3\" fill=\"black\" stroke-width=\"0\"\/><path d=\"M 1 10 A 6 4 0 0 1 11 10 L 11 15 L 1 15\" fill=\"black\" stroke-width=\"0\"\/>"
-    },
-    {
-      "name" : "Wiki",
-      "value" : "<text x=\"6\" y=\"7\" font-weight=\"bold\" style=\"font-family: serif !important; text-anchor: middle\">W<\/text>"
-    },
-    {
-      "name" : "Commit",
-      "value" : "<circle r=\"4\" cx=\"6\" cy=\"7.5\" fill-opacity=\"0\" stroke=\"black\" stroke-width=\"2\"\/><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"3.5\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/><line x1=\"6\" y1=\"11.5\" x2=\"6\" y2=\"14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/>"
-    },
-    {
-      "name" : "File",
-      "value" : "<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/>"
-    },
-    {
-      "name" : "RepoFile",
-      "value" :"<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/><ellipse cx=\"5\" cy=\"7\" rx=\"3\" ry=\"1\" stroke=\"black\" fill=\"transparent\" stroke-width=\"0.5\"\/><path d=\"M 2 7 L 2 12 A 3 1 0 0 0 8 12 L 8 7\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 8.66 A 3 1 0 0 0 8 8.66\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 10.33 A 3 1 0 0 0 8 10.33\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/>"
-    },
-    {
-      "name" : "Ticket",
-      "value" : "<path d=\"M 1 0 L 3 0 A 2 1 0 0 0 9 0 L 11 0, 11 15, 9 15 A 2 1 0 0 0 3 15 L 1 15 Z\" stroke=\"black\" fill=\"none\" stroke-linejoin=\"round\"\/><line x1=\"1\" y1=\"6\" x2=\"11\" y2=\"6\" stroke=\"black\" stroke-width=\"0.5\" stroke-dasharray=\"1,1\" stroke-linecap=\"round\"\/>"
-    },
-    {
-      "name" : "Change",
-      "value" : "<polygon points=\"1,4 5,4 3,1\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"3\" y1=\"2\" x2=\"3\" y2=\"13\" stroke=\"black\"\/><polygon points=\"7,11 11,11 9,14\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"13\" stroke=\"black\"\/>"
-    }
-  ]
-}
diff --git a/sources/src/main/java/cz/zcu/kiv/offscreen/configuration/ConfigurationLoader.java b/sources/src/main/java/cz/zcu/kiv/offscreen/configuration/ConfigurationLoader.java
deleted file mode 100644
index bce2495..0000000
--- a/sources/src/main/java/cz/zcu/kiv/offscreen/configuration/ConfigurationLoader.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package cz.zcu.kiv.offscreen.configuration;
-
-import javax.servlet.ServletContext;
-
-/**
- * 
- * @author Jindra PavlÃ­kovÃ¡ <jindra.pav2@seznam.cz>
- */
-public class ConfigurationLoader {
-
-	private static final String PROP_CONFIG_LOCATION = "configLocation";
-
-	/**
-	 * Get configuration location property from web.xml.
-	 *
-	 * @param context App context.
-	 * @return Storage location path.
-	 */
-	public static String getConfigLocation(ServletContext context) {
-		return context.getInitParameter(PROP_CONFIG_LOCATION);
-	}
-}
diff --git a/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/GraphJSONDataLoader.java b/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/GraphJSONDataLoader.java
index 1d0a5c9..90920da 100644
--- a/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/GraphJSONDataLoader.java
+++ b/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/GraphJSONDataLoader.java
@@ -9,7 +9,7 @@ import cz.zcu.kiv.offscreen.graph.Attribute;
 import cz.zcu.kiv.offscreen.api.AttributeDataType;
 import cz.zcu.kiv.offscreen.graph.EdgeArchetypeInfo;
 import cz.zcu.kiv.offscreen.graph.GraphManager;
-import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 
 import java.io.File;
 import java.io.IOException;
@@ -26,7 +26,6 @@ public class GraphJSONDataLoader {
 
     static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
 
-    private File file;
     private String loadedJSON;
     private GraphManager graphManager;
 
@@ -37,22 +36,17 @@ public class GraphJSONDataLoader {
 
 
     public GraphJSONDataLoader(File file) {
-        this.file = file;
-        loadJSON();
-    }
-
-    public GraphJSONDataLoader(String json){
-        loadedJSON = json;
-    }
-
-    private void loadJSON() {
         try {
-            loadedJSON = FileUtils.readFileToString(file, "UTF-8");
+            loadedJSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(file.getPath()), "UTF-8");
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 
+    public GraphJSONDataLoader(String json){
+        loadedJSON = json;
+    }
+
     /**
      * Method load graph from parameters from constructor or null when data are invalid.
      *
diff --git a/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/JSONConfigLoader.java b/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/JSONConfigLoader.java
index 7559731..b74d077 100644
--- a/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/JSONConfigLoader.java
+++ b/sources/src/main/java/cz/zcu/kiv/offscreen/graph/loader/JSONConfigLoader.java
@@ -7,7 +7,7 @@ import cz.zcu.kiv.offscreen.graph.GraphManager;
 import cz.zcu.kiv.offscreen.graph.filter.*;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
-import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 
 import java.io.File;
 import java.io.IOException;
@@ -27,17 +27,15 @@ public class JSONConfigLoader {
 
     private GraphManager graphManager;
     private JSONObject json;
+    private File configFile;
 
-    /**
-     * Path to the directory with configuration file.
-     */
-    private String pathToConfig;
-
-    public static String configFilename = "config.json";
+    public JSONConfigLoader(GraphManager graphManager) {
+        this(graphManager, new File("config.json"));
+    }
 
-    public JSONConfigLoader(GraphManager graphManager, String pathToConfig) {
+    public JSONConfigLoader(GraphManager graphManager, File configFile) {
         this.graphManager = graphManager;
-        this.pathToConfig = pathToConfig;
+        this.configFile = configFile;
     }
 
     /**
@@ -48,8 +46,7 @@ public class JSONConfigLoader {
         GraphFilter filter = new GraphFilter();
 
         try {
-            //String filterJson = FileUtils.readFileToString(new File("D:\\aswi-git\\aswi\\config\\empty_filter.json"), "UTF-8");
-            String filterJson = FileUtils.readFileToString(new File(pathToConfig + File.separator + configFilename), "UTF-8");
+            String filterJson = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(configFile.getPath()), "UTF-8");
 
             json = JSONObject.fromObject(filterJson);
 
diff --git a/sources/src/main/java/cz/zcu/kiv/offscreen/servlets/api/LoadGraphData.java b/sources/src/main/java/cz/zcu/kiv/offscreen/servlets/api/LoadGraphData.java
index 8cf3073..8eeb589 100644
--- a/sources/src/main/java/cz/zcu/kiv/offscreen/servlets/api/LoadGraphData.java
+++ b/sources/src/main/java/cz/zcu/kiv/offscreen/servlets/api/LoadGraphData.java
@@ -6,7 +6,6 @@ import cz.zcu.kiv.offscreen.graph.GraphManager;
 import cz.zcu.kiv.offscreen.graph.loader.DemoDiagramLoader;
 import cz.zcu.kiv.offscreen.graph.loader.GraphJSONDataLoader;
 import cz.zcu.kiv.offscreen.graph.loader.JSONConfigLoader;
-import cz.zcu.kiv.offscreen.configuration.ConfigurationLoader;
 import cz.zcu.kiv.offscreen.servlets.BaseServlet;
 import cz.zcu.kiv.offscreen.user.DB;
 import cz.zcu.kiv.offscreen.user.Diagram;
@@ -58,8 +57,7 @@ public class LoadGraphData extends BaseServlet {
 
             switch (jsonType) {
                 case "spade":
-                    String configLocation = ConfigurationLoader.getConfigLocation(request.getServletContext());
-                    rawJson = convertSpadeToRawJson(jsonToDisplay, configLocation);
+                    rawJson = convertSpadeToRawJson(jsonToDisplay);
                     break;
                 default:
                     rawJson = jsonToDisplay;
@@ -77,10 +75,9 @@ public class LoadGraphData extends BaseServlet {
     /**
      * Convert input spade JSON to frontend backend JSON and return it.
      */
-    private String convertSpadeToRawJson(String spadeJson, String configLocation){
+    private String convertSpadeToRawJson(String spadeJson) {
         GraphManager graphManager = new GraphJSONDataLoader(spadeJson).LoadData();
-
-        JSONConfigLoader configLoader = new JSONConfigLoader(graphManager, configLocation);
+        JSONConfigLoader configLoader = new JSONConfigLoader(graphManager);
 
         Graph graph = graphManager.createGraph(configLoader);
         JSONObject json = JSONObject.fromObject(graph);
diff --git a/sources/src/main/resources/config/config_nÃ¡vrh.json b/sources/src/main/resources/config/config_nÃ¡vrh.json
new file mode 100644
index 0000000..edd21ac
--- /dev/null
+++ b/sources/src/main/resources/config/config_nÃ¡vrh.json
@@ -0,0 +1,101 @@
+{
+  //defaultní filter
+  "defaultFilter": {
+
+    //filter podle archetypù vrcholù
+    "vertexArchetypeFilter": {
+      "archetypes": [ "archetypeName1", "archetypeName2", ... ], //seznam názvù archetypù
+      "matchType": "match_type" //match type: "matching" / "non_matching"
+    },
+
+    //filter podle archetypù hran
+    "edgeArchetypeFilter": {
+      //seznam trojic archetypù (archetyp výchozího vrcholu, archetyp hrany, archetype cílového vrcholu)
+      "archetypes": [
+        {
+          "fromArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ], //seznam názvù archetypù výchozího vrcholu
+          "edgeArchetypes": [ "edgeArchetypeName1", "edgeArchetypeName2", ... ], //seznam názvù archetypù hrany
+          "toArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ] //seznam názvù archetypù cílového vrcholu
+          //filtr je vždy pro každou trojici fromArchetype-edgeArchetpye-toArchetype, která splòuje libovolnou z uvedených kombinací
+        },
+        {
+          "fromArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ], //seznam názvù archetypù výchozího vrcholu
+          "edgeArchetypes": [ "edgeArchetypeName1", "edgeArchetypeName2", ... ], //seznam názvù archetypù hrany
+          "toArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ] //seznam názvù archetypù cílového vrcholu
+        },
+        {
+          "fromArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ], //seznam názvù archetypù výchozího vrcholu
+          "edgeArchetypes": [ "edgeArchetypeName1", "edgeArchetypeName2", ... ], //seznam názvù archetypù hrany
+          "toArchetypes": [ "vertexArchetypeName1", "vertexArchetypeName2", ... ] //seznam názvù archetypù cílového vrcholu
+        },
+        ...
+      ],
+      "matchType": "matchType" //match type: "matching" / "non_matching"
+    },
+
+    //filter podle atributù vrcholù
+    "vertexAttributeFilters": [
+      //filter pro typ ENUM
+      {
+        "archetype": "archetypeName", //název archetypu, pro který filtr platí
+        "attributeName": "attributeName", //název atributu
+        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
+        "filter": {
+          "values": [ "value1", "value2", ... ], //hodnoty jako string
+          "matchType": "matchType" //match type: "any" / "none" / "exact_match"
+        }
+      },
+      //filter pro typ STRING
+      {
+        "archetype": "archetypeName", //název archetypu, pro který filtr platí
+        "attributeName": "attributeName", //název atributu
+        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
+        "filter": {
+          "value": "value", //hodnota typu string
+          "matchType": "matchType" //match type: "exact_match" / "exact_mismatch" / "containing" / "non_containing" / "regular_expression"
+        }
+      },
+      //filter pro typ NUMBER
+      {
+        "archetype": "archetypeName", //název archetypu, pro který filtr platí
+        "attributeName": "attributeName", //název atributu
+        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
+        "filter": {
+          "min": cislo, //minimální hodnota jako èíslo
+          "max": cislo, //maximání hodnota jako èíslo
+          "minInclusive": inclusive, //info, zda min je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
+          "maxInclusive": inclusive, //info, zda max je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
+          "matchType": "matchType" //match type: "matching" / "non_matching"
+        }
+      },
+      //filter pro typ DATE
+      {
+        "archetype": "archetypeName", //název archetypu, pro který filtr platí
+        "attributeName": "attributeName", //název atributu
+        //"filter" obsahuje info o samotném filtru, jeho struktura závisí na datovém typu daného atributu, ten lze zjistit v aplikaci z naèteného grafu v GraphManageru
+        "filter": {
+          "min": "datum", //minimální hodnota jako datum reprezentovaná øetìzcem ve formátu ve formátu yyyy-MM-dd HH:mm:ss
+          "max": "datum", //maximání hodnota jako datum reprezentovaná øetìzcem ve formátu ve formátu yyyy-MM-dd HH:mm:ss
+          "minInclusive": inclusive, //info, zda min je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
+          "maxInclusive": inclusive, //info, zda max je souèást intervalu èi nikoliv, jako hodnota typu bool (true/false)
+          "matchType": "matchType" //match type: "matching" / "non_matching"
+        }
+      },
+      ...
+    ],
+
+    //filter podle atributù hran
+    "edgeAttributeFilters": [
+      //stejné jako u "vertexAttributeFilters"
+    ]
+  },
+  
+  "defaultGroupArchetypes": [ "archetypeName1", "archetypeName2", ... ], //Pole názvù archetypù, které budou pøesunuty do skupin v postranní lištì
+
+  //Definice archetypových ikon
+  "archetypeIcons": {
+    //ikony identifikovány pomocí jmén
+    "archetypeName1": 'archetype 1 svg', //hodnotou v této struktuøe je poté svg kód
+    "archetypeName2": 'archetype 2 svg'
+  }
+}
diff --git a/sources/src/main/resources/config/empty_filter.json b/sources/src/main/resources/config/empty_filter.json
new file mode 100644
index 0000000..901c935
--- /dev/null
+++ b/sources/src/main/resources/config/empty_filter.json
@@ -0,0 +1,56 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [
+      
+    ],
+
+    "edgeAttributeFilters": [
+      
+    ]
+  },
+  
+  "defaultGroupArchetypes": [ "File", "Commit", "RepoFile"],
+  
+  "archetypeIcons": [
+    {
+      "name" : "Person",
+      "value" : "<circle r=\"3\" cx=\"6\" cy=\"3\" fill=\"black\" stroke-width=\"0\"\/><path d=\"M 1 10 A 6 4 0 0 1 11 10 L 11 15 L 1 15\" fill=\"black\" stroke-width=\"0\"\/>"
+    },
+    {
+      "name" : "Wiki",
+      "value" : "<text x=\"6\" y=\"7\" font-weight=\"bold\" style=\"font-family: serif !important; text-anchor: middle\">W<\/text>"
+    },
+    {
+      "name" : "Commit",
+      "value" : "<circle r=\"4\" cx=\"6\" cy=\"7.5\" fill-opacity=\"0\" stroke=\"black\" stroke-width=\"2\"\/><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"3.5\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/><line x1=\"6\" y1=\"11.5\" x2=\"6\" y2=\"14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/>"
+    },
+    {
+      "name" : "File",
+      "value" : "<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/>"
+    },
+    {
+      "name" : "RepoFile",
+      "value" :"<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/><ellipse cx=\"5\" cy=\"7\" rx=\"3\" ry=\"1\" stroke=\"black\" fill=\"transparent\" stroke-width=\"0.5\"\/><path d=\"M 2 7 L 2 12 A 3 1 0 0 0 8 12 L 8 7\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 8.66 A 3 1 0 0 0 8 8.66\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 10.33 A 3 1 0 0 0 8 10.33\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/>"
+    },
+    {
+      "name" : "Ticket",
+      "value" : "<path d=\"M 1 0 L 3 0 A 2 1 0 0 0 9 0 L 11 0, 11 15, 9 15 A 2 1 0 0 0 3 15 L 1 15 Z\" stroke=\"black\" fill=\"none\" stroke-linejoin=\"round\"\/><line x1=\"1\" y1=\"6\" x2=\"11\" y2=\"6\" stroke=\"black\" stroke-width=\"0.5\" stroke-dasharray=\"1,1\" stroke-linecap=\"round\"\/>"
+    },
+    {
+      "name" : "Change",
+      "value" : "<polygon points=\"1,4 5,4 3,1\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"3\" y1=\"2\" x2=\"3\" y2=\"13\" stroke=\"black\"\/><polygon points=\"7,11 11,11 9,14\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"13\" stroke=\"black\"\/>"
+    }
+  ]
+}
diff --git a/sources/src/main/resources/config/historical_data_config.json b/sources/src/main/resources/config/historical_data_config.json
new file mode 100644
index 0000000..45cd25d
--- /dev/null
+++ b/sources/src/main/resources/config/historical_data_config.json
@@ -0,0 +1,40 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [
+      
+    ],
+
+    "edgeAttributeFilters": [
+      
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": [
+    {
+      "name" : "person",
+      "value" : "<circle r=\"3\" cx=\"6\" cy=\"3\" fill=\"black\" stroke-width=\"0\"\/><path d=\"M 1 10 A 6 4 0 0 1 11 10 L 11 15 L 1 15\" fill=\"black\" stroke-width=\"0\"\/>"
+    },
+    {
+      "name" : "device",
+      "value" : "<g transform=\"scale(0.6,0.6)\"><g transform=\"translate(-2,1)\"><path id=\"gear\" fill=\"black\" stroke=\"black\" style=\"fill-rule:evenodd;clip-rule:evenodd;\" d=\"M20.869,13.476C20.948,12.994,21,12.504,21,12s-0.052-0.994-0.131-1.476l-2.463-0.259c-0.149-0.556-0.367-1.082-0.648-1.57l1.558-1.924c-0.576-0.806-1.281-1.511-2.087-2.087 l-1.924,1.558c-0.488-0.281-1.015-0.499-1.57-0.648l-0.259-2.463C12.994,3.052,12.504,3,12,3s-0.994,0.052-1.476,0.131 l-0.259,2.463C9.71,5.743,9.184,5.961,8.695,6.242L6.771,4.685C5.966,5.261,5.261,5.966,4.685,6.771l1.558,1.924 c-0.281,0.488-0.499,1.015-0.648,1.57l-2.463,0.259C3.052,11.006,3,11.496,3,12s0.052,0.994,0.131,1.476l2.463,0.259 c0.149,0.556,0.367,1.082,0.648,1.57l-1.558,1.924c0.576,0.806,1.281,1.511,2.087,2.087l1.924-1.558 c0.488,0.281,1.015,0.499,1.57,0.648l0.259,2.463C11.006,20.948,11.496,21,12,21s0.994-0.052,1.476-0.131l0.259-2.463 c0.556-0.149,1.082-0.367,1.57-0.648l1.924,1.558c0.806-0.576,1.511-1.281,2.087-2.087l-1.558-1.924 c0.281-0.488,0.499-1.015,0.648-1.57L20.869,13.476z M12,15.998c-2.209,0-3.998-1.789-3.998-3.998S9.791,8.002,12,8.002 S15.998,9.791,15.998,12S14.209,15.998,12,15.998z\"/></g></g>"
+    },
+    {
+      "name" : "theory",
+      "value" : "<g transform=\"scale(0.03,0.03)\"><g transform=\"translate(-35,0)\"><path id=\"gear\" fill=\"black\" stroke=\"black\" d=\"M394.235,151.628c0,82.449-49.695,92.044-59.021,181.956c0,8.382-6.785,15.163-15.168,15.163H165.161 c-8.379,0-15.161-6.781-15.161-15.163h-0.028c-9.299-89.912-58.994-99.507-58.994-181.956C90.978,67.878,158.855,0,242.606,0 S394.235,67.878,394.235,151.628z M318.423,363.906H166.794c-8.384,0-15.166,6.786-15.166,15.168 c0,8.378,6.782,15.163,15.166,15.163h151.628c8.378,0,15.163-6.785,15.163-15.163C333.586,370.692,326.801,363.906,318.423,363.906 z M318.423,409.396H166.794c-8.384,0-15.166,6.786-15.166,15.163c0,8.383,6.782,15.168,15.166,15.168h151.628 c8.378,0,15.163-6.785,15.163-15.168C333.586,416.182,326.801,409.396,318.423,409.396z M212.282,485.212h60.65 c16.76,0,30.322-13.562,30.322-30.326h-121.3C181.955,471.65,195.518,485.212,212.282,485.212z\"/></g></g>"
+    }
+  ]
+}
diff --git a/sources/src/main/resources/config/spade_config.json b/sources/src/main/resources/config/spade_config.json
new file mode 100644
index 0000000..514b5d4
--- /dev/null
+++ b/sources/src/main/resources/config/spade_config.json
@@ -0,0 +1,97 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ "Ticket", "Person", "Wiki", "File"],
+      "matchType": "matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Authorship" ],
+          "toArchetypes": [ "Ticket", "File" ]
+        },
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Assignment" ],
+          "toArchetypes": [ "Ticket" ]
+        },
+        {
+          "fromArchetypes": [ "File", "Ticket", "Wiki" ],
+          "edgeArchetypes": [ "ItemRelation" ],
+          "toArchetypes": [ "File", "Ticket", "Wiki" ]
+        },
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Modification" ],
+          "toArchetypes": [ "Wiki" ]
+        }
+      ],
+      "matchType": "matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Ticket",
+        "attributeName": "Status super class",
+        "filter": {
+          "values": [ "OPEN" ],
+          "matchType": "any"
+        }
+      },
+      {
+        "archetype": "Person",
+        "attributeName": "Role super classes",
+        "filter": {
+          "values": [ "TEAMMEMBER" ],
+          "matchType": "any"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      {
+        "archetype": "Modification",
+        "attributeName": "Relation",
+        "filter": {
+          "values": [ "last modified by", "last modified" ],
+          "matchType": "any"
+        }
+      }
+    ]
+  },
+  
+  "defaultGroupArchetypes": [ "File", "Commit", "RepoFile"],
+  
+  "archetypeIcons": [
+    {
+      "name" : "Person",
+      "value" : "<circle r=\"3\" cx=\"6\" cy=\"3\" fill=\"black\" stroke-width=\"0\"\/><path d=\"M 1 10 A 6 4 0 0 1 11 10 L 11 15 L 1 15\" fill=\"black\" stroke-width=\"0\"\/>"
+    },
+    {
+      "name" : "Wiki",
+      "value" : "<text x=\"6\" y=\"7\" font-weight=\"bold\" style=\"font-family: serif !important; text-anchor: middle\">W<\/text>"
+    },
+    {
+      "name" : "Commit",
+      "value" : "<circle r=\"4\" cx=\"6\" cy=\"7.5\" fill-opacity=\"0\" stroke=\"black\" stroke-width=\"2\"\/><line x1=\"6\" y1=\"1\" x2=\"6\" y2=\"3.5\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/><line x1=\"6\" y1=\"11.5\" x2=\"6\" y2=\"14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\"\/>"
+    },
+    {
+      "name" : "File",
+      "value" : "<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/>"
+    },
+    {
+      "name" : "RepoFile",
+      "value" :"<polygon points=\"0.5,0.5 7.5,0.5 11.5,4.5 11.5,14.5 0.5,14.5\" fill=\"white\" stroke=\"black\" stroke-linejoin=\"round\" \/><polygon points=\"7.5,0.5 11.5,4.5 7.5,4.5\" fill=\"gray\" stroke=\"black\" stroke-linejoin=\"round\" \/><ellipse cx=\"5\" cy=\"7\" rx=\"3\" ry=\"1\" stroke=\"black\" fill=\"transparent\" stroke-width=\"0.5\"\/><path d=\"M 2 7 L 2 12 A 3 1 0 0 0 8 12 L 8 7\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 8.66 A 3 1 0 0 0 8 8.66\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/><path d=\"M 2 10.33 A 3 1 0 0 0 8 10.33\" stroke-width=\"0.5\" stroke=\"black\" fill=\"transparent\"\/>"
+    },
+    {
+      "name" : "Ticket",
+      "value" : "<path d=\"M 1 0 L 3 0 A 2 1 0 0 0 9 0 L 11 0, 11 15, 9 15 A 2 1 0 0 0 3 15 L 1 15 Z\" stroke=\"black\" fill=\"none\" stroke-linejoin=\"round\"\/><line x1=\"1\" y1=\"6\" x2=\"11\" y2=\"6\" stroke=\"black\" stroke-width=\"0.5\" stroke-dasharray=\"1,1\" stroke-linecap=\"round\"\/>"
+    },
+    {
+      "name" : "Change",
+      "value" : "<polygon points=\"1,4 5,4 3,1\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"3\" y1=\"2\" x2=\"3\" y2=\"13\" stroke=\"black\"\/><polygon points=\"7,11 11,11 9,14\" fill=\"black\" stroke=\"black\" stroke-linejoin=\"round\" \/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"13\" stroke=\"black\"\/>"
+    }
+  ]
+}
diff --git a/sources/src/test/java/cz/zcu/kiv/imiger/tests/backend/GraphFilterTest.java b/sources/src/test/java/cz/zcu/kiv/imiger/tests/backend/GraphFilterTest.java
index 9d8ba66..4bf2530 100644
--- a/sources/src/test/java/cz/zcu/kiv/imiger/tests/backend/GraphFilterTest.java
+++ b/sources/src/test/java/cz/zcu/kiv/imiger/tests/backend/GraphFilterTest.java
@@ -17,22 +17,16 @@ import java.util.List;
 
 public class GraphFilterTest {
 
-    private static String testDirectory;
-
     private static GraphManager graphManager;
 
     @BeforeAll
     static void initTest() {
-        testDirectory = System.getProperty("user.dir") + "\\..\\test";
-
-        File graphFile = new File(testDirectory + "\\data\\test1.json");
-
-        graphManager = new GraphJSONDataLoader(graphFile).LoadData();
+        graphManager = new GraphJSONDataLoader(new File("data/test1.json")).LoadData();
     }
 
     @Test
     void testFilter1a() {
-        Graph graph = createGraph("test1a.json");
+        Graph graph = createGraph("config/test1a.json");
 
         List<Integer> vertexIds = new ArrayList<>();
         vertexIds.add(32);
@@ -59,7 +53,7 @@ public class GraphFilterTest {
 
     @Test
     void testFilter1b() {
-        Graph graph = createGraph("test1b.json");
+        Graph graph = createGraph("config/test1b.json");
 
         List<Integer> vertexIds = new ArrayList<>();
         vertexIds.add(2);
@@ -81,7 +75,7 @@ public class GraphFilterTest {
 
     @Test
     void testFilter1c() {
-        Graph graph = createGraph("test1c.json");
+        Graph graph = createGraph("config/test1c.json");
 
         List<Integer> vertexIds = new ArrayList<>();
         vertexIds.add(2);
@@ -103,7 +97,7 @@ public class GraphFilterTest {
 
     @Test
     void testFilter1d() {
-        Graph graph = createGraph("test1d.json");
+        Graph graph = createGraph("config/test1d.json");
 
         List<Integer> vertexIds = new ArrayList<>();
         vertexIds.add(1);
@@ -125,7 +119,7 @@ public class GraphFilterTest {
 
     @Test
     void testFilter1e() {
-        Graph graph = createGraph("test1e.json");
+        Graph graph = createGraph("config/test1e.json");
 
         List<Integer> vertexIds = new ArrayList<>();
         vertexIds.add(1);
@@ -147,7 +141,7 @@ public class GraphFilterTest {
 
     @Test
     void testFilter1f() {
-        Graph graph = createGraph("test1f.json");
+        Graph graph = createGraph("config/test1f.json");
 
         List<Integer> vertexIds = new ArrayList<>();
         vertexIds.add(1);
@@ -164,10 +158,7 @@ public class GraphFilterTest {
     }
 
     private Graph createGraph(String configFilename) {
-        String configLocation = testDirectory + "\\config";
-        JSONConfigLoader configLoader = new JSONConfigLoader(graphManager, configLocation);
-        JSONConfigLoader.configFilename = configFilename;
-        return graphManager.createGraph(configLoader);
+        return graphManager.createGraph(new JSONConfigLoader(graphManager, new File(configFilename)));
     }
 
     private SubedgeInfo createTestSubEdge(int id) {
diff --git a/sources/src/test/java/cz/zcu/kiv/imiger/tests/frontend/SeleniumUtil.java b/sources/src/test/java/cz/zcu/kiv/imiger/tests/frontend/SeleniumUtil.java
index 2c24af1..d502806 100644
--- a/sources/src/test/java/cz/zcu/kiv/imiger/tests/frontend/SeleniumUtil.java
+++ b/sources/src/test/java/cz/zcu/kiv/imiger/tests/frontend/SeleniumUtil.java
@@ -14,7 +14,7 @@ import java.nio.file.Paths;
 
 class SeleniumUtil {
 
-    private static final String TEST_DIRECTORY = System.getProperty("user.dir") + "\\..\\test";
+    private static final String TEST_DIRECTORY = System.getProperty("user.dir") + "\\src\\test\\resources";
 
     /**
      * Path to the config location folder
@@ -71,7 +71,7 @@ class SeleniumUtil {
      * Turn on exclude mode for vertex exclude
      */
     static void switchToExcludeMode(){
-        browser.findElement(By.id("remove")).click();
+        browser.findElement(By.id("exclude")).click();
 
         try {
             Thread.sleep(1000);
diff --git a/sources/src/test/resources/config/archetypeIconConfigTest.json b/sources/src/test/resources/config/archetypeIconConfigTest.json
new file mode 100644
index 0000000..cf9de0d
--- /dev/null
+++ b/sources/src/test/resources/config/archetypeIconConfigTest.json
@@ -0,0 +1,28 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [],
+
+    "edgeAttributeFilters": []
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": [
+	{
+		name: "SpecifiedIcon",
+		value: "<rect class=\"testingArchetypeIcon\" width=\"12\" height=\"15\" x=\"0\" y =\"0\" stroke=\"none\" fill=\"green\"/>"
+	}
+  ]
+}
diff --git a/sources/src/test/resources/config/automaticGroupingConfigTest.json b/sources/src/test/resources/config/automaticGroupingConfigTest.json
new file mode 100644
index 0000000..3c2cbd2
--- /dev/null
+++ b/sources/src/test/resources/config/automaticGroupingConfigTest.json
@@ -0,0 +1,23 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [],
+
+    "edgeAttributeFilters": []
+  },
+  
+  "defaultGroupArchetypes": ["FirstGroupArchetype"],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/emptyConfig.json b/sources/src/test/resources/config/emptyConfig.json
new file mode 100644
index 0000000..36cadf9
--- /dev/null
+++ b/sources/src/test/resources/config/emptyConfig.json
@@ -0,0 +1,23 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [],
+
+    "edgeAttributeFilters": []
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/test1a expected result.txt b/sources/src/test/resources/config/test1a expected result.txt
new file mode 100644
index 0000000..2d3d3fe
--- /dev/null
+++ b/sources/src/test/resources/config/test1a expected result.txt	
@@ -0,0 +1,5 @@
+Vertices - ids: 32, 9, 1, 2
+Edges 	- from: 1, to: 32, ids: 117
+	- from: 1, to: 9, ids: 10
+	- from: 2, to: 9, ids: 8
+	
\ No newline at end of file
diff --git a/sources/src/test/resources/config/test1a.json b/sources/src/test/resources/config/test1a.json
new file mode 100644
index 0000000..a0a049f
--- /dev/null
+++ b/sources/src/test/resources/config/test1a.json
@@ -0,0 +1,67 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [  ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        {
+          "fromArchetypes": [ "Ticket" ],
+          "edgeArchetypes": [ "Assignment" ],
+          "toArchetypes": [ "Person" ]
+        }
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Ticket",
+        "attributeName": "Created",
+        "filter": {
+          "min": "2017-04-05 00:00:00",
+          "max": "2017-04-12 12:00:00",
+          "minInclusive": true,
+          "maxInclusive": true,
+          "matchType": "matching"
+        }
+      },
+      {
+        "archetype": "Ticket",
+        "attributeName": "Estimate",
+        "filter": {
+          "min": 1.0,
+          "max": 3.0,
+          "minInclusive": true,
+          "maxInclusive": false,
+          "matchType": "non_matching"
+        }
+      },
+      {
+        "archetype": "Person",
+        "attributeName": "Roles",
+        "filter": {
+          "values": [ "Team leader", "Developer" ],
+          "matchType": "any"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      {
+        "archetype": "Authorship",
+        "attributeName": "Relation",
+        "filter": {
+          "values": [ "created by" ],
+          "matchType": "none"
+        }
+      }
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/test1b expected result.txt b/sources/src/test/resources/config/test1b expected result.txt
new file mode 100644
index 0000000..23a8797
--- /dev/null
+++ b/sources/src/test/resources/config/test1b expected result.txt	
@@ -0,0 +1,4 @@
+Vertices - ids: 2, 9, 18
+Edges 	- from: 9, to: 2, ids: 9
+	- from: 18, to: 2, ids: 86
+	
\ No newline at end of file
diff --git a/sources/src/test/resources/config/test1b.json b/sources/src/test/resources/config/test1b.json
new file mode 100644
index 0000000..d983464
--- /dev/null
+++ b/sources/src/test/resources/config/test1b.json
@@ -0,0 +1,38 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ "Person", "Ticket" ],
+      "matchType": "matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        {
+          "fromArchetypes": [ "Ticket" ],
+          "edgeArchetypes": [ "Authorship", "Modification" ],
+          "toArchetypes": [ "Person" ]
+        }
+      ],
+      "matchType": "matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Person",
+        "attributeName": "Role classes",
+        "filter": {
+          "values": [ "DEVELOPER", "PROJECTMANAGER" ],
+          "matchType": "exact_match"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/test1c expected result.txt b/sources/src/test/resources/config/test1c expected result.txt
new file mode 100644
index 0000000..8705bc4
--- /dev/null
+++ b/sources/src/test/resources/config/test1c expected result.txt	
@@ -0,0 +1,4 @@
+Vertices - ids: 2, 18, 32
+Edges 	- from: 2, to: 18, ids: 79
+	- from: 18, to: 2, ids: 86
+	
\ No newline at end of file
diff --git a/sources/src/test/resources/config/test1c.json b/sources/src/test/resources/config/test1c.json
new file mode 100644
index 0000000..845bc2e
--- /dev/null
+++ b/sources/src/test/resources/config/test1c.json
@@ -0,0 +1,45 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Ticket",
+        "attributeName": "Start",
+        "filter": {
+          "min": "2017-04-12 00:00:00",
+          "max": "2017-04-19 00:00:00",
+          "minInclusive": true,
+          "maxInclusive": false,
+          "matchType": "non_matching"
+        }
+      },
+      {
+        "archetype": "Person",
+        "attributeName": "Name",
+        "filter": {
+          "value": "Petr Mayr",
+          "matchType": "exact_match"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/test1d expected result.txt b/sources/src/test/resources/config/test1d expected result.txt
new file mode 100644
index 0000000..2a2d710
--- /dev/null
+++ b/sources/src/test/resources/config/test1d expected result.txt	
@@ -0,0 +1,4 @@
+Vertices - ids: 1, 9, 32
+Edges 	- from: 1, to: 9, ids: 10
+	- from: 1, to: 32, ids: 117
+	
\ No newline at end of file
diff --git a/sources/src/test/resources/config/test1d.json b/sources/src/test/resources/config/test1d.json
new file mode 100644
index 0000000..9a8aae3
--- /dev/null
+++ b/sources/src/test/resources/config/test1d.json
@@ -0,0 +1,54 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ "Person", "Ticket", "Change" ],
+      "matchType": "matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Authorship" ],
+          "toArchetypes": [ "Change" ]
+        },
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Assignment" ],
+          "toArchetypes": [ "Ticket" ]
+        }
+      ],
+      "matchType": "matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Ticket",
+        "attributeName": "Spent",
+        "filter": {
+          "min": 1.0,
+          "max": 2.0,
+          "minInclusive": false,
+          "maxInclusive": true,
+          "matchType": "matching"
+        }
+      },
+      {
+        "archetype": "Person",
+        "attributeName": "Name",
+        "filter": {
+          "value": "Petr Mayr",
+          "matchType": "exact_mismatch"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/test1e expected result.txt b/sources/src/test/resources/config/test1e expected result.txt
new file mode 100644
index 0000000..4a1ce14
--- /dev/null
+++ b/sources/src/test/resources/config/test1e expected result.txt	
@@ -0,0 +1,4 @@
+Vertices - ids: 1, 32, 9
+Edges 	- from: 9, to: 1, ids: 11
+	- from: 1, to: 32, ids: 117
+	
\ No newline at end of file
diff --git a/sources/src/test/resources/config/test1e.json b/sources/src/test/resources/config/test1e.json
new file mode 100644
index 0000000..4b4da91
--- /dev/null
+++ b/sources/src/test/resources/config/test1e.json
@@ -0,0 +1,49 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ ],
+      "matchType": "non_matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Person",
+        "attributeName": "Name",
+        "filter": {
+          "value": "Jan",
+          "matchType": "containing"
+        }
+      },
+      {
+        "archetype": "Ticket",
+        "attributeName": "Description",
+        "filter": {
+          "value": "css",
+          "matchType": "non_containing"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      {
+        "archetype": "Assignment",
+        "attributeName": "Relation",
+        "filter": {
+          "values": [ "is assigned to" ],
+          "matchType": "any"
+        }
+      }
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/config/test1f expected result.txt b/sources/src/test/resources/config/test1f expected result.txt
new file mode 100644
index 0000000..46b61c5
--- /dev/null
+++ b/sources/src/test/resources/config/test1f expected result.txt	
@@ -0,0 +1,3 @@
+Vertices - ids: 1, 2, 18
+Edges 	- from: 18, to: 2, ids: 86
+	
\ No newline at end of file
diff --git a/sources/src/test/resources/config/test1f.json b/sources/src/test/resources/config/test1f.json
new file mode 100644
index 0000000..2f71156
--- /dev/null
+++ b/sources/src/test/resources/config/test1f.json
@@ -0,0 +1,48 @@
+{
+  "defaultFilter": {
+    "vertexArchetypeFilter": {
+      "archetypes": [ "Person", "Ticket" ],
+      "matchType": "matching"
+    },
+
+    "edgeArchetypeFilter": {
+      "archetypes": [
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Modification" ],
+          "toArchetypes": [ "Ticket" ]
+        },
+        {
+          "fromArchetypes": [ "Person" ],
+          "edgeArchetypes": [ "Modification" ],
+          "toArchetypes": [ "Change" ]
+        },
+        {
+          "fromArchetypes": [ "Change" ],
+          "edgeArchetypes": [ "Modification" ],
+          "toArchetypes": [ "Person" ]
+        }
+      ],
+      "matchType": "non_matching"
+    },
+
+    "vertexAttributeFilters": [
+      {
+        "archetype": "Ticket",
+        "attributeName": "Description",
+        "filter": {
+          "value": ".*css.*",
+          "matchType": "regular_expression"
+        }
+      }
+    ],
+
+    "edgeAttributeFilters": [
+      
+    ]
+  },
+  
+  "defaultGroupArchetypes": [],
+  
+  "archetypeIcons": []
+}
diff --git a/sources/src/test/resources/data/RawArchetypeIconTest.json b/sources/src/test/resources/data/RawArchetypeIconTest.json
new file mode 100644
index 0000000..ef2e7e3
--- /dev/null
+++ b/sources/src/test/resources/data/RawArchetypeIconTest.json
@@ -0,0 +1 @@
+{"attributeTypes":[],"edgeArchetypes":[{"name":"edge","text":""}],"vertexArchetypes":[{"icon":"<rect class=\"testingArchetypeIcon\" width=\"12\" height=\"15\" x=\"0\" y =\"0\" stroke=\"none\" fill=\"green\"/>","name":"SpecifiedIcon","text":""},{"icon":"","name":"UnspecifiedIcon","text":""},{"icon":"","name":"â˜ºSmiley","text":""}],"vertices":[{"archetype":0,"attributes":[],"id":1,"text":"","name":"Vertex with specified icon","position":{"x":640.5,"y":408.25}},{"archetype":1,"attributes":[],"id":2,"text":"","name":"Vertex with unspecified icon","position":{"x":826.25,"y":536.75}},{"archetype":2,"attributes":[],"id":3,"text":"","name":"Vertex with smiley as archetype icon","position":{"x":438,"y":537.75}}],"edges":[{"subedgeInfo":[{"archetype":0,"attributes":[],"id":1}],"from":1,"to":3,"text":"","id":1},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":0}],"from":1,"to":2,"text":"","id":2}],"possibleEnumValues":{},"groups":[],"sideBar":[],"highlightedVertex":"","highlightedEdge":""}
diff --git a/sources/src/test/resources/data/RawAssociatedArchetypeTest.json b/sources/src/test/resources/data/RawAssociatedArchetypeTest.json
new file mode 100644
index 0000000..d011f97
--- /dev/null
+++ b/sources/src/test/resources/data/RawAssociatedArchetypeTest.json
@@ -0,0 +1 @@
+{"attributeTypes":[],"edgeArchetypes":[{"name":"edge","text":""}],"vertexArchetypes":[{"icon":"","name":"1","text":""},{"icon":"","name":"2","text":""},{"icon":"","name":"3","text":""},{"icon":"","name":"4","text":""}],"vertices":[{"archetype":0,"attributes":[],"id":1,"text":"","name":"V1","position":{"x":989.5,"y":684}},{"archetype":1,"attributes":[],"id":2,"text":"","name":"V2","position":{"x":985.75,"y":871.5}},{"archetype":1,"attributes":[],"id":3,"text":"","name":"V3","position":{"x":988,"y":540}},{"archetype":3,"attributes":[],"id":4,"text":"","name":"V4","position":{"x":694,"y":678.25}},{"archetype":2,"attributes":[],"id":5,"text":"","name":"V5","position":{"x":702.75,"y":755}}],"edges":[{"subedgeInfo":[{"archetype":0,"attributes":[],"id":0}],"from":1,"to":2,"text":"","id":1},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":4}],"from":4,"to":5,"text":"","id":2},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":2}],"from":1,"to":4,"text":"","id":3},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":1}],"from":3,"to":1,"text":"","id":4},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":3}],"from":4,"to":1,"text":"","id":5}],"possibleEnumValues":{},"groups":[],"sideBar":[],"highlightedVertex":"","highlightedEdge":""}
\ No newline at end of file
diff --git a/sources/src/test/resources/data/RawDetailTest.json b/sources/src/test/resources/data/RawDetailTest.json
new file mode 100644
index 0000000..cdad714
--- /dev/null
+++ b/sources/src/test/resources/data/RawDetailTest.json
@@ -0,0 +1 @@
+{"attributeTypes":[{"dataType":"STRING","name":"D","text":"0"},{"dataType":"STRING","name":"C","text":"1"},{"dataType":"STRING","name":"B","text":"2"},{"dataType":"STRING","name":"A","text":"3"}],"edgeArchetypes":[{"name":"edgeArchetype1","text":""},{"name":"edgeArchetype2","text":""}],"vertexArchetypes":[{"icon":"","name":"1","text":""},{"icon":"","name":"2","text":""},{"icon":"","name":"3","text":""}],"vertices":[{"archetype":2,"attributes":[["D","E"],["B","W"],["A","Q"]],"id":1,"text":"","name":"V1","position":{"x":753.25,"y":693.75}},{"archetype":1,"attributes":[["D","E"],["C","Q"],["B","W"]],"id":2,"text":"","name":"V2","position":{"x":534.25,"y":897.5}},{"archetype":0,"attributes":[["D","Q"],["C","W"],["A","E"]],"id":3,"text":"","name":"V3","position":{"x":961.25,"y":899.75}}],"edges":[{"subedgeInfo":[{"archetype":0,"attributes":[["D","E"],["C","W"]],"id":3}],"from":1,"to":3,"text":"","id":1},{"subedgeInfo":[{"archetype":0,"attributes":[["D","E"],["B","W"],["A","Q"]],"id":1},{"archetype":1,"attributes":[["D","D"],["B","S"],["A","A"]],"id":2}],"from":1,"to":2,"text":"","id":2},{"subedgeInfo":[{"archetype":1,"attributes":[["C","T"],["B","R"]],"id":4}],"from":3,"to":1,"text":"","id":3}],"possibleEnumValues":{},"groups":[],"sideBar":[],"highlightedVertex":"","highlightedEdge":""}
\ No newline at end of file
diff --git a/sources/src/test/resources/data/automaticGroupingTest.json b/sources/src/test/resources/data/automaticGroupingTest.json
new file mode 100644
index 0000000..fca1da8
--- /dev/null
+++ b/sources/src/test/resources/data/automaticGroupingTest.json
@@ -0,0 +1,108 @@
+{
+ "attributeTypes": [
+
+ ],
+ "vertexArchetypes": [
+  {
+   "name": "FirstGroupArchetype",
+   "text": ""
+  },
+  {
+   "name": "NonGroupArchetype",
+   "text": ""
+  }
+ ],
+ "edgeArchetypes": [
+	{
+		"name": "edge",
+		"text": ""
+	}
+ ],
+ "vertices": [
+  {
+   "archetype": 0,
+   "attributes": {},
+   "id": 1,
+   "text": "",
+   "title": "First vertex from first group"
+  },
+  {
+   "archetype": 1,
+   "attributes": {},
+   "id": 2,
+   "text": "",
+   "title": "Non group vertex"
+  },
+  {
+   "archetype": 0,
+   "attributes": {},
+   "id": 3,
+   "text": "",
+   "title": "Second vertex from first group"
+  },  
+   {
+   "archetype": 1,
+   "attributes": {},
+   "id": 4,
+   "text": "",
+   "title": "Non group vertex"
+  },
+  {
+   "archetype": 1,
+   "attributes": {},
+   "id": 5,
+   "text": "",
+   "title": "Non group vertex"
+  }
+ ],
+ "edges": [
+	{
+	   "archetype": 0,
+	   "from": 1,
+	   "attributes": {},
+	   "id": 0,
+	   "to": 2,
+	   "text": ""
+	},
+	{
+	   "archetype": 0,
+	   "from": 1,
+	   "attributes": {},
+	   "id": 1,
+	   "to": 3,
+	   "text": ""
+	},
+  {
+	   "archetype": 0,
+	   "from": 2,
+	   "attributes": {},
+	   "id": 1,
+	   "to": 5,
+	   "text": ""
+	},
+  {
+	   "archetype": 0,
+	   "from": 2,
+	   "attributes": {},
+	   "id": 1,
+	   "to": 4,
+	   "text": ""
+	},
+  {
+	   "archetype": 0,
+	   "from": 5,
+	   "attributes": {},
+	   "id": 1,
+	   "to": 4,
+	   "text": ""
+	},
+  {
+	   "archetype": 0,
+	   "from": 4,
+	   "attributes": {},
+	   "id": 1,
+	   "to": 2,
+	   "text": ""
+	},
+ ]
+}
\ No newline at end of file
diff --git a/sources/src/test/resources/data/test1.json b/sources/src/test/resources/data/test1.json
new file mode 100644
index 0000000..5839a34
--- /dev/null
+++ b/sources/src/test/resources/data/test1.json
@@ -0,0 +1,483 @@
+{
+ "attributeTypes": [
+  {
+   "dataType": "string",
+   "name": "EID",
+   "text": "External ID"
+  },
+  {
+   "dataType": "string",
+   "name": "Name",
+   "text": ""
+  },
+  {
+   "dataType": "string",
+   "name": "Description",
+   "text": ""
+  },
+  {
+   "dataType": "string",
+   "name": "Comment",
+   "text": ""
+  },
+  {
+   "dataType": "string",
+   "name": "Message",
+   "text": "Commit message"
+  },
+  {
+   "dataType": "string",
+   "name": "Identities",
+   "text": "Logins, aliases, other names"
+  },
+  {
+   "dataType": "string",
+   "name": "Emails",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Roles",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Author",
+   "text": "Author's name"
+  },
+  {
+   "dataType": "date",
+   "name": "Created",
+   "text": "Creation date"
+  },
+  {
+   "dataType": "string",
+   "name": "URL",
+   "text": ""
+  },
+  {
+   "dataType": "number",
+   "name": "Number",
+   "text": "Ticket number in issue tracker"
+  },
+  {
+   "dataType": "enum",
+   "name": "Assignee",
+   "text": "Assignee's name"
+  },
+  {
+   "dataType": "enum",
+   "name": "Type",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Priority",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Severity",
+   "text": ""
+  },
+  {
+   "dataType": "date",
+   "name": "Start",
+   "text": "Start date"
+  },
+  {
+   "dataType": "date",
+   "name": "Due",
+   "text": "Due date"
+  },
+  {
+   "dataType": "enum",
+   "name": "Iteration",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Status",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Resolution",
+   "text": ""
+  },
+  {
+   "dataType": "number",
+   "name": "Estimate",
+   "text": "Estimated time"
+  },
+  {
+   "dataType": "number",
+   "name": "Spent",
+   "text": "Spent time"
+  },
+  {
+   "dataType": "number",
+   "name": "Progress",
+   "text": "% done"
+  },
+  {
+   "dataType": "enum",
+   "name": "Categories",
+   "text": ""
+  },
+  {
+   "dataType": "string",
+   "name": "Identifier",
+   "text": ""
+  },
+  {
+   "dataType": "date",
+   "name": "Committed",
+   "text": "Committed on date"
+  },
+  {
+   "dataType": "string",
+   "name": "Changes",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Branches",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Tags",
+   "text": "VCS tags"
+  },
+  {
+   "dataType": "enum",
+   "name": "MIME",
+   "text": "MIME type"
+  },
+  {
+   "dataType": "number",
+   "name": "Size",
+   "text": "in bytes"
+  },
+  {
+   "dataType": "enum",
+   "name": "Relation",
+   "text": "Relation type"
+  },
+  {
+   "dataType": "enum",
+   "name": "Role classes",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Role super classes",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Type class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Priority class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Priority super class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Severity class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Severity super class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Status class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Status super class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Resolution class",
+   "text": ""
+  },
+  {
+   "dataType": "enum",
+   "name": "Resolution super class",
+   "text": ""
+  }
+ ],
+ "vertexArchetypes": [
+  {
+   "name": "Person",
+   "text": ""
+  },
+  {
+   "name": "Ticket",
+   "text": ""
+  },
+  {
+   "name": "File",
+   "text": ""
+  },
+  {
+   "name": "Wiki",
+   "text": ""
+  },
+  {
+   "name": "Change",
+   "text": ""
+  },
+  {
+   "name": "Commit",
+   "text": ""
+  },
+  {
+   "name": "RepoFile",
+   "text": ""
+  }
+ ],
+ "edgeArchetypes": [
+  {
+   "name": "Authorship",
+   "text": ""
+  },
+  {
+   "name": "Assignment",
+   "text": ""
+  },
+  {
+   "name": "CommitParticipation",
+   "text": ""
+  },
+  {
+   "name": "ItemRelation",
+   "text": ""
+  },
+  {
+   "name": "Affection",
+   "text": ""
+  },
+  {
+   "name": "Commit",
+   "text": ""
+  },
+  {
+   "name": "Modification",
+   "text": ""
+  }
+ ],
+ "vertices": [
+  {
+   "archetype": 0,
+   "attributes": {
+    "33": ["DEVELOPER"],
+    "1": "Jan Albl",
+    "34": ["TEAMMEMBER"],
+    "5": [
+     "Jan Albl",
+     "alblj"
+    ],
+    "6": [
+     "Jan Albl",
+     "alblj@students.zcu.cz"
+    ],
+    "7": ["Developer"]
+   },
+   "id": 1,
+   "text": "",
+   "title": "Jan Albl"
+  },
+  {
+   "archetype": 0,
+   "attributes": {
+    "33": [
+     "DEVELOPER",
+     "PROJECTMANAGER"
+    ],
+    "1": "Petr Mayr",
+    "34": [
+     "TEAMMEMBER",
+     "MANAGEMENT"
+    ],
+    "5": [
+     "Petr Mayr",
+     "pmayr"
+    ],
+    "6": [
+     "Petr Mayr",
+     "pmayr@students.zcu.cz"
+    ],
+    "7": [
+     "Developer",
+     "Team leader"
+    ]
+   },
+   "id": 2,
+   "text": "",
+   "title": "Petr Mayr"
+  },
+  {
+   "archetype": 1,
+   "attributes": {
+    "22": "1.949999988079071",
+    "23": "100",
+    "24": ["implementace"],
+    "10": "https://students.kiv.zcu.cz:3443/issues/5515",
+    "11": "5515",
+    "12": ["Jan Albl"],
+    "13": ["Task"],
+    "35": ["TASK"],
+    "14": ["High"],
+    "36": ["HIGH"],
+    "37": ["HIGH"],
+    "15": ["unassigned"],
+    "38": ["HIGH"],
+    "16": "2017-04-12 00:00:00",
+    "39": ["UNASSIGNED"],
+    "17": "2017-04-19 00:00:00",
+    "18": ["DCI - 4. iterace"],
+    "19": ["Closed"],
+    "0": "5515",
+    "1": "FormÃ¡tovÃ¡nÃ­ porovnÃ¡vanÃ½ch xml",
+    "2": "Xml popisujÃ­cÃ­ definici pÅ™Ã­kazu databÃ¡ze vracÃ­ neformÃ¡tovanÃ© (tj. celÃ© na jednom Å™Ã¡dku) a bylo by tedy vhodnÃ© ho pÅ™ed porovnÃ¡nÃ­m pÅ™eformÃ¡tovat. Lze na to pouÅ¾Ã­t tÅ™Ã­du cz.aimtec.dci.util.XMLFormatter.",
+    "8": ["Petr Mayr"],
+    "9": "2017-04-11 12:42:26",
+    "40": ["DONE"],
+    "41": ["CLOSED"],
+    "20": ["unassigned"],
+    "42": ["UNASSIGNED"],
+    "43": ["UNASSIGNED"],
+    "21": "3.0"
+   },
+   "id": 9,
+   "text": "",
+   "title": "5515"
+  },
+  {
+    "archetype": 1,
+    "attributes": {
+      "22": "1.0",
+      "23": "100",
+      "24": [ "implementace" ],
+      "10": "https://students.kiv.zcu.cz:3443/issues/5658",
+      "11": "5658",
+      "12": [ "Petr Mayr" ],
+      "13": [ "Task" ],
+      "35": [ "TASK" ],
+      "14": [ "High" ],
+      "36": [ "HIGH" ],
+      "37": [ "HIGH" ],
+      "15": [ "unassigned" ],
+      "38": [ "HIGH" ],
+      "16": "2017-04-19 00:00:00",
+      "39": [ "UNASSIGNED" ],
+      "17": "2017-04-26 00:00:00",
+      "18": [ "DCI - 5. iterace" ],
+      "19": [ "Closed" ],
+      "0": "5658",
+      "1": "DCI konvence zdrojovÃ½ch kÃ³dÅ¯",
+      "2": "Jedna z konvencÃ­ v DCI Å™Ã­kÃ¡, Å¾e kaÅ¾dÃ© jsp musÃ­ mÃ­t vlastnÃ­ css. Bude tedy nutnÃ© vytvoÅ™it css pro jsp s porovnÃ¡nÃ­m, obsah bude stejnÃ½ jako css aktuÃ¡lnÄ› pouÅ¾itÃ©ho jsp (transDefCompareXP.css).",
+      "8": [ "Petr Mayr" ],
+      "9": "2017-04-19 17:46:21",
+      "40": [ "DONE" ],
+      "41": [ "CLOSED" ],
+      "20": [ "unassigned" ],
+      "42": [ "UNASSIGNED" ],
+      "43": [ "UNASSIGNED" ],
+      "21": "1.0"
+    },
+    "id": 18,
+    "text": "",
+    "title": "5658"
+  },
+  {
+   "archetype": 4,
+   "attributes": {
+    "0": "7846",
+    "1": "",
+    "3": "UÅ¾ jen pÅ™idÃ¡m commit a hotovo\n\nActivity: Implementation",
+    "26": "2017-04-21 11:09:49",
+    "27": "LOGTIME Titulek okna s porovnÃ¡nÃ­m - spentTime: 0.0 -> 2.0\n",
+    "8": ["Jan Albl"],
+    "9": "2017-04-21 00:00:00",
+    "10": ""
+   },
+   "id": 32,
+   "text": "",
+   "title": "7846"
+  }
+ ],
+ "edges": [
+  {
+   "archetype": 0,
+   "from": 2,
+   "attributes": {"32": "is author of"},
+   "id": 8,
+   "to": 9,
+   "text": ""
+  },
+  {
+   "archetype": 0,
+   "from": 9,
+   "attributes": {"32": "created by"},
+   "id": 9,
+   "to": 2,
+   "text": ""
+  },
+  {
+   "archetype": 1,
+   "from": 1,
+   "attributes": {"32": "is responsible for"},
+   "id": 10,
+   "to": 9,
+   "text": ""
+  },
+  {
+   "archetype": 1,
+   "from": 9,
+   "attributes": {"32": "is assigned to"},
+   "id": 11,
+   "to": 1,
+   "text": ""
+  },
+  {
+   "archetype": 6,
+   "from": 2,
+   "attributes": {"32": "added"},
+   "id": 79,
+   "to": 18,
+   "text": ""
+  },
+  {
+   "archetype": 6,
+   "from": 18,
+   "attributes": {"32": "logtimeed by"},
+   "id": 86,
+   "to": 2,
+   "text": ""
+  },
+  {
+   "archetype": 0,
+   "from": 1,
+   "attributes": {"32": "is author of"},
+   "id": 117,
+   "to": 32,
+   "text": ""
+  }
+ ]
+}
\ No newline at end of file
diff --git a/test/config/archetypeIconConfigTest.json b/test/config/archetypeIconConfigTest.json
deleted file mode 100644
index cf9de0d..0000000
--- a/test/config/archetypeIconConfigTest.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [],
-
-    "edgeAttributeFilters": []
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": [
-	{
-		name: "SpecifiedIcon",
-		value: "<rect class=\"testingArchetypeIcon\" width=\"12\" height=\"15\" x=\"0\" y =\"0\" stroke=\"none\" fill=\"green\"/>"
-	}
-  ]
-}
diff --git a/test/config/automaticGroupingConfigTest.json b/test/config/automaticGroupingConfigTest.json
deleted file mode 100644
index 3c2cbd2..0000000
--- a/test/config/automaticGroupingConfigTest.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [],
-
-    "edgeAttributeFilters": []
-  },
-  
-  "defaultGroupArchetypes": ["FirstGroupArchetype"],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/emptyConfig.json b/test/config/emptyConfig.json
deleted file mode 100644
index 36cadf9..0000000
--- a/test/config/emptyConfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [],
-
-    "edgeAttributeFilters": []
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/test1a expected result.txt b/test/config/test1a expected result.txt
deleted file mode 100644
index 2d3d3fe..0000000
--- a/test/config/test1a expected result.txt	
+++ /dev/null
@@ -1,5 +0,0 @@
-Vertices - ids: 32, 9, 1, 2
-Edges 	- from: 1, to: 32, ids: 117
-	- from: 1, to: 9, ids: 10
-	- from: 2, to: 9, ids: 8
-	
\ No newline at end of file
diff --git a/test/config/test1a.json b/test/config/test1a.json
deleted file mode 100644
index a0a049f..0000000
--- a/test/config/test1a.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [  ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        {
-          "fromArchetypes": [ "Ticket" ],
-          "edgeArchetypes": [ "Assignment" ],
-          "toArchetypes": [ "Person" ]
-        }
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Ticket",
-        "attributeName": "Created",
-        "filter": {
-          "min": "2017-04-05 00:00:00",
-          "max": "2017-04-12 12:00:00",
-          "minInclusive": true,
-          "maxInclusive": true,
-          "matchType": "matching"
-        }
-      },
-      {
-        "archetype": "Ticket",
-        "attributeName": "Estimate",
-        "filter": {
-          "min": 1.0,
-          "max": 3.0,
-          "minInclusive": true,
-          "maxInclusive": false,
-          "matchType": "non_matching"
-        }
-      },
-      {
-        "archetype": "Person",
-        "attributeName": "Roles",
-        "filter": {
-          "values": [ "Team leader", "Developer" ],
-          "matchType": "any"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      {
-        "archetype": "Authorship",
-        "attributeName": "Relation",
-        "filter": {
-          "values": [ "created by" ],
-          "matchType": "none"
-        }
-      }
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/test1b expected result.txt b/test/config/test1b expected result.txt
deleted file mode 100644
index 23a8797..0000000
--- a/test/config/test1b expected result.txt	
+++ /dev/null
@@ -1,4 +0,0 @@
-Vertices - ids: 2, 9, 18
-Edges 	- from: 9, to: 2, ids: 9
-	- from: 18, to: 2, ids: 86
-	
\ No newline at end of file
diff --git a/test/config/test1b.json b/test/config/test1b.json
deleted file mode 100644
index d983464..0000000
--- a/test/config/test1b.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ "Person", "Ticket" ],
-      "matchType": "matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        {
-          "fromArchetypes": [ "Ticket" ],
-          "edgeArchetypes": [ "Authorship", "Modification" ],
-          "toArchetypes": [ "Person" ]
-        }
-      ],
-      "matchType": "matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Person",
-        "attributeName": "Role classes",
-        "filter": {
-          "values": [ "DEVELOPER", "PROJECTMANAGER" ],
-          "matchType": "exact_match"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/test1c expected result.txt b/test/config/test1c expected result.txt
deleted file mode 100644
index 8705bc4..0000000
--- a/test/config/test1c expected result.txt	
+++ /dev/null
@@ -1,4 +0,0 @@
-Vertices - ids: 2, 18, 32
-Edges 	- from: 2, to: 18, ids: 79
-	- from: 18, to: 2, ids: 86
-	
\ No newline at end of file
diff --git a/test/config/test1c.json b/test/config/test1c.json
deleted file mode 100644
index 845bc2e..0000000
--- a/test/config/test1c.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Ticket",
-        "attributeName": "Start",
-        "filter": {
-          "min": "2017-04-12 00:00:00",
-          "max": "2017-04-19 00:00:00",
-          "minInclusive": true,
-          "maxInclusive": false,
-          "matchType": "non_matching"
-        }
-      },
-      {
-        "archetype": "Person",
-        "attributeName": "Name",
-        "filter": {
-          "value": "Petr Mayr",
-          "matchType": "exact_match"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/test1d expected result.txt b/test/config/test1d expected result.txt
deleted file mode 100644
index 2a2d710..0000000
--- a/test/config/test1d expected result.txt	
+++ /dev/null
@@ -1,4 +0,0 @@
-Vertices - ids: 1, 9, 32
-Edges 	- from: 1, to: 9, ids: 10
-	- from: 1, to: 32, ids: 117
-	
\ No newline at end of file
diff --git a/test/config/test1d.json b/test/config/test1d.json
deleted file mode 100644
index 9a8aae3..0000000
--- a/test/config/test1d.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ "Person", "Ticket", "Change" ],
-      "matchType": "matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Authorship" ],
-          "toArchetypes": [ "Change" ]
-        },
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Assignment" ],
-          "toArchetypes": [ "Ticket" ]
-        }
-      ],
-      "matchType": "matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Ticket",
-        "attributeName": "Spent",
-        "filter": {
-          "min": 1.0,
-          "max": 2.0,
-          "minInclusive": false,
-          "maxInclusive": true,
-          "matchType": "matching"
-        }
-      },
-      {
-        "archetype": "Person",
-        "attributeName": "Name",
-        "filter": {
-          "value": "Petr Mayr",
-          "matchType": "exact_mismatch"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/test1e expected result.txt b/test/config/test1e expected result.txt
deleted file mode 100644
index 4a1ce14..0000000
--- a/test/config/test1e expected result.txt	
+++ /dev/null
@@ -1,4 +0,0 @@
-Vertices - ids: 1, 32, 9
-Edges 	- from: 9, to: 1, ids: 11
-	- from: 1, to: 32, ids: 117
-	
\ No newline at end of file
diff --git a/test/config/test1e.json b/test/config/test1e.json
deleted file mode 100644
index 4b4da91..0000000
--- a/test/config/test1e.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ ],
-      "matchType": "non_matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Person",
-        "attributeName": "Name",
-        "filter": {
-          "value": "Jan",
-          "matchType": "containing"
-        }
-      },
-      {
-        "archetype": "Ticket",
-        "attributeName": "Description",
-        "filter": {
-          "value": "css",
-          "matchType": "non_containing"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      {
-        "archetype": "Assignment",
-        "attributeName": "Relation",
-        "filter": {
-          "values": [ "is assigned to" ],
-          "matchType": "any"
-        }
-      }
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/config/test1f expected result.txt b/test/config/test1f expected result.txt
deleted file mode 100644
index 46b61c5..0000000
--- a/test/config/test1f expected result.txt	
+++ /dev/null
@@ -1,3 +0,0 @@
-Vertices - ids: 1, 2, 18
-Edges 	- from: 18, to: 2, ids: 86
-	
\ No newline at end of file
diff --git a/test/config/test1f.json b/test/config/test1f.json
deleted file mode 100644
index 2f71156..0000000
--- a/test/config/test1f.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "defaultFilter": {
-    "vertexArchetypeFilter": {
-      "archetypes": [ "Person", "Ticket" ],
-      "matchType": "matching"
-    },
-
-    "edgeArchetypeFilter": {
-      "archetypes": [
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Modification" ],
-          "toArchetypes": [ "Ticket" ]
-        },
-        {
-          "fromArchetypes": [ "Person" ],
-          "edgeArchetypes": [ "Modification" ],
-          "toArchetypes": [ "Change" ]
-        },
-        {
-          "fromArchetypes": [ "Change" ],
-          "edgeArchetypes": [ "Modification" ],
-          "toArchetypes": [ "Person" ]
-        }
-      ],
-      "matchType": "non_matching"
-    },
-
-    "vertexAttributeFilters": [
-      {
-        "archetype": "Ticket",
-        "attributeName": "Description",
-        "filter": {
-          "value": ".*css.*",
-          "matchType": "regular_expression"
-        }
-      }
-    ],
-
-    "edgeAttributeFilters": [
-      
-    ]
-  },
-  
-  "defaultGroupArchetypes": [],
-  
-  "archetypeIcons": []
-}
diff --git a/test/data/RawArchetypeIconTest.json b/test/data/RawArchetypeIconTest.json
deleted file mode 100644
index ef2e7e3..0000000
--- a/test/data/RawArchetypeIconTest.json
+++ /dev/null
@@ -1 +0,0 @@
-{"attributeTypes":[],"edgeArchetypes":[{"name":"edge","text":""}],"vertexArchetypes":[{"icon":"<rect class=\"testingArchetypeIcon\" width=\"12\" height=\"15\" x=\"0\" y =\"0\" stroke=\"none\" fill=\"green\"/>","name":"SpecifiedIcon","text":""},{"icon":"","name":"UnspecifiedIcon","text":""},{"icon":"","name":"â˜ºSmiley","text":""}],"vertices":[{"archetype":0,"attributes":[],"id":1,"text":"","name":"Vertex with specified icon","position":{"x":640.5,"y":408.25}},{"archetype":1,"attributes":[],"id":2,"text":"","name":"Vertex with unspecified icon","position":{"x":826.25,"y":536.75}},{"archetype":2,"attributes":[],"id":3,"text":"","name":"Vertex with smiley as archetype icon","position":{"x":438,"y":537.75}}],"edges":[{"subedgeInfo":[{"archetype":0,"attributes":[],"id":1}],"from":1,"to":3,"text":"","id":1},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":0}],"from":1,"to":2,"text":"","id":2}],"possibleEnumValues":{},"groups":[],"sideBar":[],"highlightedVertex":"","highlightedEdge":""}
diff --git a/test/data/RawAssociatedArchetypeTest.json b/test/data/RawAssociatedArchetypeTest.json
deleted file mode 100644
index d011f97..0000000
--- a/test/data/RawAssociatedArchetypeTest.json
+++ /dev/null
@@ -1 +0,0 @@
-{"attributeTypes":[],"edgeArchetypes":[{"name":"edge","text":""}],"vertexArchetypes":[{"icon":"","name":"1","text":""},{"icon":"","name":"2","text":""},{"icon":"","name":"3","text":""},{"icon":"","name":"4","text":""}],"vertices":[{"archetype":0,"attributes":[],"id":1,"text":"","name":"V1","position":{"x":989.5,"y":684}},{"archetype":1,"attributes":[],"id":2,"text":"","name":"V2","position":{"x":985.75,"y":871.5}},{"archetype":1,"attributes":[],"id":3,"text":"","name":"V3","position":{"x":988,"y":540}},{"archetype":3,"attributes":[],"id":4,"text":"","name":"V4","position":{"x":694,"y":678.25}},{"archetype":2,"attributes":[],"id":5,"text":"","name":"V5","position":{"x":702.75,"y":755}}],"edges":[{"subedgeInfo":[{"archetype":0,"attributes":[],"id":0}],"from":1,"to":2,"text":"","id":1},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":4}],"from":4,"to":5,"text":"","id":2},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":2}],"from":1,"to":4,"text":"","id":3},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":1}],"from":3,"to":1,"text":"","id":4},{"subedgeInfo":[{"archetype":0,"attributes":[],"id":3}],"from":4,"to":1,"text":"","id":5}],"possibleEnumValues":{},"groups":[],"sideBar":[],"highlightedVertex":"","highlightedEdge":""}
\ No newline at end of file
diff --git a/test/data/RawDetailTest.json b/test/data/RawDetailTest.json
deleted file mode 100644
index cdad714..0000000
--- a/test/data/RawDetailTest.json
+++ /dev/null
@@ -1 +0,0 @@
-{"attributeTypes":[{"dataType":"STRING","name":"D","text":"0"},{"dataType":"STRING","name":"C","text":"1"},{"dataType":"STRING","name":"B","text":"2"},{"dataType":"STRING","name":"A","text":"3"}],"edgeArchetypes":[{"name":"edgeArchetype1","text":""},{"name":"edgeArchetype2","text":""}],"vertexArchetypes":[{"icon":"","name":"1","text":""},{"icon":"","name":"2","text":""},{"icon":"","name":"3","text":""}],"vertices":[{"archetype":2,"attributes":[["D","E"],["B","W"],["A","Q"]],"id":1,"text":"","name":"V1","position":{"x":753.25,"y":693.75}},{"archetype":1,"attributes":[["D","E"],["C","Q"],["B","W"]],"id":2,"text":"","name":"V2","position":{"x":534.25,"y":897.5}},{"archetype":0,"attributes":[["D","Q"],["C","W"],["A","E"]],"id":3,"text":"","name":"V3","position":{"x":961.25,"y":899.75}}],"edges":[{"subedgeInfo":[{"archetype":0,"attributes":[["D","E"],["C","W"]],"id":3}],"from":1,"to":3,"text":"","id":1},{"subedgeInfo":[{"archetype":0,"attributes":[["D","E"],["B","W"],["A","Q"]],"id":1},{"archetype":1,"attributes":[["D","D"],["B","S"],["A","A"]],"id":2}],"from":1,"to":2,"text":"","id":2},{"subedgeInfo":[{"archetype":1,"attributes":[["C","T"],["B","R"]],"id":4}],"from":3,"to":1,"text":"","id":3}],"possibleEnumValues":{},"groups":[],"sideBar":[],"highlightedVertex":"","highlightedEdge":""}
\ No newline at end of file
diff --git a/test/data/automaticGroupingTest.json b/test/data/automaticGroupingTest.json
deleted file mode 100644
index fca1da8..0000000
--- a/test/data/automaticGroupingTest.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "attributeTypes": [
-
- ],
- "vertexArchetypes": [
-  {
-   "name": "FirstGroupArchetype",
-   "text": ""
-  },
-  {
-   "name": "NonGroupArchetype",
-   "text": ""
-  }
- ],
- "edgeArchetypes": [
-	{
-		"name": "edge",
-		"text": ""
-	}
- ],
- "vertices": [
-  {
-   "archetype": 0,
-   "attributes": {},
-   "id": 1,
-   "text": "",
-   "title": "First vertex from first group"
-  },
-  {
-   "archetype": 1,
-   "attributes": {},
-   "id": 2,
-   "text": "",
-   "title": "Non group vertex"
-  },
-  {
-   "archetype": 0,
-   "attributes": {},
-   "id": 3,
-   "text": "",
-   "title": "Second vertex from first group"
-  },  
-   {
-   "archetype": 1,
-   "attributes": {},
-   "id": 4,
-   "text": "",
-   "title": "Non group vertex"
-  },
-  {
-   "archetype": 1,
-   "attributes": {},
-   "id": 5,
-   "text": "",
-   "title": "Non group vertex"
-  }
- ],
- "edges": [
-	{
-	   "archetype": 0,
-	   "from": 1,
-	   "attributes": {},
-	   "id": 0,
-	   "to": 2,
-	   "text": ""
-	},
-	{
-	   "archetype": 0,
-	   "from": 1,
-	   "attributes": {},
-	   "id": 1,
-	   "to": 3,
-	   "text": ""
-	},
-  {
-	   "archetype": 0,
-	   "from": 2,
-	   "attributes": {},
-	   "id": 1,
-	   "to": 5,
-	   "text": ""
-	},
-  {
-	   "archetype": 0,
-	   "from": 2,
-	   "attributes": {},
-	   "id": 1,
-	   "to": 4,
-	   "text": ""
-	},
-  {
-	   "archetype": 0,
-	   "from": 5,
-	   "attributes": {},
-	   "id": 1,
-	   "to": 4,
-	   "text": ""
-	},
-  {
-	   "archetype": 0,
-	   "from": 4,
-	   "attributes": {},
-	   "id": 1,
-	   "to": 2,
-	   "text": ""
-	},
- ]
-}
\ No newline at end of file
diff --git a/test/data/test1.json b/test/data/test1.json
deleted file mode 100644
index 5839a34..0000000
--- a/test/data/test1.json
+++ /dev/null
@@ -1,483 +0,0 @@
-{
- "attributeTypes": [
-  {
-   "dataType": "string",
-   "name": "EID",
-   "text": "External ID"
-  },
-  {
-   "dataType": "string",
-   "name": "Name",
-   "text": ""
-  },
-  {
-   "dataType": "string",
-   "name": "Description",
-   "text": ""
-  },
-  {
-   "dataType": "string",
-   "name": "Comment",
-   "text": ""
-  },
-  {
-   "dataType": "string",
-   "name": "Message",
-   "text": "Commit message"
-  },
-  {
-   "dataType": "string",
-   "name": "Identities",
-   "text": "Logins, aliases, other names"
-  },
-  {
-   "dataType": "string",
-   "name": "Emails",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Roles",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Author",
-   "text": "Author's name"
-  },
-  {
-   "dataType": "date",
-   "name": "Created",
-   "text": "Creation date"
-  },
-  {
-   "dataType": "string",
-   "name": "URL",
-   "text": ""
-  },
-  {
-   "dataType": "number",
-   "name": "Number",
-   "text": "Ticket number in issue tracker"
-  },
-  {
-   "dataType": "enum",
-   "name": "Assignee",
-   "text": "Assignee's name"
-  },
-  {
-   "dataType": "enum",
-   "name": "Type",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Priority",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Severity",
-   "text": ""
-  },
-  {
-   "dataType": "date",
-   "name": "Start",
-   "text": "Start date"
-  },
-  {
-   "dataType": "date",
-   "name": "Due",
-   "text": "Due date"
-  },
-  {
-   "dataType": "enum",
-   "name": "Iteration",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Status",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Resolution",
-   "text": ""
-  },
-  {
-   "dataType": "number",
-   "name": "Estimate",
-   "text": "Estimated time"
-  },
-  {
-   "dataType": "number",
-   "name": "Spent",
-   "text": "Spent time"
-  },
-  {
-   "dataType": "number",
-   "name": "Progress",
-   "text": "% done"
-  },
-  {
-   "dataType": "enum",
-   "name": "Categories",
-   "text": ""
-  },
-  {
-   "dataType": "string",
-   "name": "Identifier",
-   "text": ""
-  },
-  {
-   "dataType": "date",
-   "name": "Committed",
-   "text": "Committed on date"
-  },
-  {
-   "dataType": "string",
-   "name": "Changes",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Branches",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Tags",
-   "text": "VCS tags"
-  },
-  {
-   "dataType": "enum",
-   "name": "MIME",
-   "text": "MIME type"
-  },
-  {
-   "dataType": "number",
-   "name": "Size",
-   "text": "in bytes"
-  },
-  {
-   "dataType": "enum",
-   "name": "Relation",
-   "text": "Relation type"
-  },
-  {
-   "dataType": "enum",
-   "name": "Role classes",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Role super classes",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Type class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Priority class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Priority super class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Severity class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Severity super class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Status class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Status super class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Resolution class",
-   "text": ""
-  },
-  {
-   "dataType": "enum",
-   "name": "Resolution super class",
-   "text": ""
-  }
- ],
- "vertexArchetypes": [
-  {
-   "name": "Person",
-   "text": ""
-  },
-  {
-   "name": "Ticket",
-   "text": ""
-  },
-  {
-   "name": "File",
-   "text": ""
-  },
-  {
-   "name": "Wiki",
-   "text": ""
-  },
-  {
-   "name": "Change",
-   "text": ""
-  },
-  {
-   "name": "Commit",
-   "text": ""
-  },
-  {
-   "name": "RepoFile",
-   "text": ""
-  }
- ],
- "edgeArchetypes": [
-  {
-   "name": "Authorship",
-   "text": ""
-  },
-  {
-   "name": "Assignment",
-   "text": ""
-  },
-  {
-   "name": "CommitParticipation",
-   "text": ""
-  },
-  {
-   "name": "ItemRelation",
-   "text": ""
-  },
-  {
-   "name": "Affection",
-   "text": ""
-  },
-  {
-   "name": "Commit",
-   "text": ""
-  },
-  {
-   "name": "Modification",
-   "text": ""
-  }
- ],
- "vertices": [
-  {
-   "archetype": 0,
-   "attributes": {
-    "33": ["DEVELOPER"],
-    "1": "Jan Albl",
-    "34": ["TEAMMEMBER"],
-    "5": [
-     "Jan Albl",
-     "alblj"
-    ],
-    "6": [
-     "Jan Albl",
-     "alblj@students.zcu.cz"
-    ],
-    "7": ["Developer"]
-   },
-   "id": 1,
-   "text": "",
-   "title": "Jan Albl"
-  },
-  {
-   "archetype": 0,
-   "attributes": {
-    "33": [
-     "DEVELOPER",
-     "PROJECTMANAGER"
-    ],
-    "1": "Petr Mayr",
-    "34": [
-     "TEAMMEMBER",
-     "MANAGEMENT"
-    ],
-    "5": [
-     "Petr Mayr",
-     "pmayr"
-    ],
-    "6": [
-     "Petr Mayr",
-     "pmayr@students.zcu.cz"
-    ],
-    "7": [
-     "Developer",
-     "Team leader"
-    ]
-   },
-   "id": 2,
-   "text": "",
-   "title": "Petr Mayr"
-  },
-  {
-   "archetype": 1,
-   "attributes": {
-    "22": "1.949999988079071",
-    "23": "100",
-    "24": ["implementace"],
-    "10": "https://students.kiv.zcu.cz:3443/issues/5515",
-    "11": "5515",
-    "12": ["Jan Albl"],
-    "13": ["Task"],
-    "35": ["TASK"],
-    "14": ["High"],
-    "36": ["HIGH"],
-    "37": ["HIGH"],
-    "15": ["unassigned"],
-    "38": ["HIGH"],
-    "16": "2017-04-12 00:00:00",
-    "39": ["UNASSIGNED"],
-    "17": "2017-04-19 00:00:00",
-    "18": ["DCI - 4. iterace"],
-    "19": ["Closed"],
-    "0": "5515",
-    "1": "FormÃ¡tovÃ¡nÃ­ porovnÃ¡vanÃ½ch xml",
-    "2": "Xml popisujÃ­cÃ­ definici pÅ™Ã­kazu databÃ¡ze vracÃ­ neformÃ¡tovanÃ© (tj. celÃ© na jednom Å™Ã¡dku) a bylo by tedy vhodnÃ© ho pÅ™ed porovnÃ¡nÃ­m pÅ™eformÃ¡tovat. Lze na to pouÅ¾Ã­t tÅ™Ã­du cz.aimtec.dci.util.XMLFormatter.",
-    "8": ["Petr Mayr"],
-    "9": "2017-04-11 12:42:26",
-    "40": ["DONE"],
-    "41": ["CLOSED"],
-    "20": ["unassigned"],
-    "42": ["UNASSIGNED"],
-    "43": ["UNASSIGNED"],
-    "21": "3.0"
-   },
-   "id": 9,
-   "text": "",
-   "title": "5515"
-  },
-  {
-    "archetype": 1,
-    "attributes": {
-      "22": "1.0",
-      "23": "100",
-      "24": [ "implementace" ],
-      "10": "https://students.kiv.zcu.cz:3443/issues/5658",
-      "11": "5658",
-      "12": [ "Petr Mayr" ],
-      "13": [ "Task" ],
-      "35": [ "TASK" ],
-      "14": [ "High" ],
-      "36": [ "HIGH" ],
-      "37": [ "HIGH" ],
-      "15": [ "unassigned" ],
-      "38": [ "HIGH" ],
-      "16": "2017-04-19 00:00:00",
-      "39": [ "UNASSIGNED" ],
-      "17": "2017-04-26 00:00:00",
-      "18": [ "DCI - 5. iterace" ],
-      "19": [ "Closed" ],
-      "0": "5658",
-      "1": "DCI konvence zdrojovÃ½ch kÃ³dÅ¯",
-      "2": "Jedna z konvencÃ­ v DCI Å™Ã­kÃ¡, Å¾e kaÅ¾dÃ© jsp musÃ­ mÃ­t vlastnÃ­ css. Bude tedy nutnÃ© vytvoÅ™it css pro jsp s porovnÃ¡nÃ­m, obsah bude stejnÃ½ jako css aktuÃ¡lnÄ› pouÅ¾itÃ©ho jsp (transDefCompareXP.css).",
-      "8": [ "Petr Mayr" ],
-      "9": "2017-04-19 17:46:21",
-      "40": [ "DONE" ],
-      "41": [ "CLOSED" ],
-      "20": [ "unassigned" ],
-      "42": [ "UNASSIGNED" ],
-      "43": [ "UNASSIGNED" ],
-      "21": "1.0"
-    },
-    "id": 18,
-    "text": "",
-    "title": "5658"
-  },
-  {
-   "archetype": 4,
-   "attributes": {
-    "0": "7846",
-    "1": "",
-    "3": "UÅ¾ jen pÅ™idÃ¡m commit a hotovo\n\nActivity: Implementation",
-    "26": "2017-04-21 11:09:49",
-    "27": "LOGTIME Titulek okna s porovnÃ¡nÃ­m - spentTime: 0.0 -> 2.0\n",
-    "8": ["Jan Albl"],
-    "9": "2017-04-21 00:00:00",
-    "10": ""
-   },
-   "id": 32,
-   "text": "",
-   "title": "7846"
-  }
- ],
- "edges": [
-  {
-   "archetype": 0,
-   "from": 2,
-   "attributes": {"32": "is author of"},
-   "id": 8,
-   "to": 9,
-   "text": ""
-  },
-  {
-   "archetype": 0,
-   "from": 9,
-   "attributes": {"32": "created by"},
-   "id": 9,
-   "to": 2,
-   "text": ""
-  },
-  {
-   "archetype": 1,
-   "from": 1,
-   "attributes": {"32": "is responsible for"},
-   "id": 10,
-   "to": 9,
-   "text": ""
-  },
-  {
-   "archetype": 1,
-   "from": 9,
-   "attributes": {"32": "is assigned to"},
-   "id": 11,
-   "to": 1,
-   "text": ""
-  },
-  {
-   "archetype": 6,
-   "from": 2,
-   "attributes": {"32": "added"},
-   "id": 79,
-   "to": 18,
-   "text": ""
-  },
-  {
-   "archetype": 6,
-   "from": 18,
-   "attributes": {"32": "logtimeed by"},
-   "id": 86,
-   "to": 2,
-   "text": ""
-  },
-  {
-   "archetype": 0,
-   "from": 1,
-   "attributes": {"32": "is author of"},
-   "id": 117,
-   "to": 32,
-   "text": ""
-  }
- ]
-}
\ No newline at end of file
diff --git a/test/geckodriver.exe b/test/geckodriver.exe
deleted file mode 100644
index 12bd05d..0000000
Binary files a/test/geckodriver.exe and /dev/null differ
