Altered dominance serialization & added tests.

Change-Id: I7b03f804d48230157fa0b6c296ba130b6eb0da41
diff --git a/src/main/java/de/ids_mannheim/korap/query/object/KoralOperation.java b/src/main/java/de/ids_mannheim/korap/query/object/KoralOperation.java
index 675b627..5dd557f 100644
--- a/src/main/java/de/ids_mannheim/korap/query/object/KoralOperation.java
+++ b/src/main/java/de/ids_mannheim/korap/query/object/KoralOperation.java
@@ -1,14 +1,16 @@
 package de.ids_mannheim.korap.query.object;
 
-/** Definition of possible operations within koral:group. 
+/**
+ * Definition of possible operations within koral:group.
+ * 
  * @author margaretha
  * 
  */
 public enum KoralOperation {
-    SEQUENCE, POSITION, DISJUNCTION, REPETITION, CLASS, MERGE, RELATION, FOCUS, EXCLUSION;
+    SEQUENCE, POSITION, DISJUNCTION, REPETITION, CLASS, MERGE, RELATION, FOCUS, EXCLUSION, HIERARCHY;
 
     @Override
-    public String toString() {
+    public String toString () {
         return "operation:" + super.toString().toLowerCase();
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
index a5f269f..5757625 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
@@ -715,6 +715,10 @@
                     group = KoralObjectGenerator.makeGroup(KoralOperation.SEQUENCE);
                     putAllButGroupType(group, operatorGroup);
                 }
+                else if (groupType.equals("hierarchy")) {
+                    group = KoralObjectGenerator.makeGroup(KoralOperation.HIERARCHY);
+                    putAllButGroupType(group, operatorGroup);
+                }
                 else if (groupType.equals("position")) {
                     group = new HashMap<String, Object>();
                     putAllButGroupType(group, operatorGroup);
@@ -851,20 +855,22 @@
         String operator = getNodeCat(operatorNode);
         // DOMINANCE
         if (operator.equals("dominance")) {
-            relation = KoralObjectGenerator.makeRelation();
-            relation.put("groupType", "relation");
-            ParseTree qName = getFirstChildWithCat(operatorNode, "qName");
+//            relation = KoralObjectGenerator.makeRelation();
+            relation = new HashMap<String, Object>();
+            relation.put("groupType", "hierarchy");
+//            ParseTree qName = getFirstChildWithCat(operatorNode, "qName");
             ParseTree edgeSpecNode = getFirstChildWithCat(operatorNode,
                     "edgeSpec");
             ParseTree star = getFirstChildWithCat(operatorNode, "*");
             ParseTree rangeSpec = getFirstChildWithCat(operatorNode,
                     "rangeSpec");
-            Map<String, Object> term = KoralObjectGenerator
-                    .makeTerm();
-            term.put("layer", "c");
-            if (qName != null)
-                term = parseQNameNode(qName);
+            
+//            term.put("layer", "c");
+//            if (qName != null)
+//                term = parseQNameNode(qName);
             if (edgeSpecNode != null) {
+                Map<String, Object> term = KoralObjectGenerator
+                        .makeTerm();
                 Map<String, Object> edgeSpec = parseEdgeSpec(edgeSpecNode);
                 String edgeSpecType = (String) edgeSpec.get("@type");
                 if (edgeSpecType.equals("koral:termGroup")) {
@@ -872,22 +878,23 @@
                     term = edgeSpec;
                 }
                 else {
-                    term = KoralObjectGenerator.makeTermGroup(KoralTermGroupRelation.AND);
-                    ArrayList<Object> termGroupOperands = (ArrayList<Object>) term
-                            .get("operands");
-                    termGroupOperands.add(edgeSpec);
-                    Map<String, Object> constTerm = KoralObjectGenerator
-                            .makeTerm();
-                    constTerm.put("layer", "c");
-                    termGroupOperands.add(constTerm);
+                    term = edgeSpec;
+//                    term = KoralObjectGenerator.makeTermGroup(KoralTermGroupRelation.AND);
+//                    ArrayList<Object> termGroupOperands = (ArrayList<Object>) term
+//                            .get("operands");
+//                    termGroupOperands.add(edgeSpec);
+//                    Map<String, Object> constTerm = KoralObjectGenerator
+//                            .makeTerm();
+//                    constTerm.put("layer", "c");
+//                    termGroupOperands.add(constTerm);
                 }
+                relation.put("label", term);
             }
             if (star != null)
                 relation.put("boundary",
                         KoralObjectGenerator.makeBoundary(0, null));
             if (rangeSpec != null)
                 relation.put("boundary", boundaryFromRangeSpec(rangeSpec));
-            relation.put("wrap", term);
         }
         else if (operator.equals("pointing")) {
             relation = KoralObjectGenerator.makeRelation();
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
index 6949812..0222864 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
@@ -182,8 +182,7 @@
         group.put("@type", KoralType.RELATION.toString());
         return group;
     }
-
-
+    
     public static Map<String, Object> makeBoundary (Integer min,
             Integer max) {
         Map<String, Object> group = new HashMap<String, Object>();