Rename SpanQuantifierQuery to SpanRepetitionQuery,
update SpanDistanceQuery to use DistanceConstraint
diff --git a/src/main/java/de/ids_mannheim/korap/query/DistanceConstraint.java b/src/main/java/de/ids_mannheim/korap/query/DistanceConstraint.java
index 29e191a..9a92307 100644
--- a/src/main/java/de/ids_mannheim/korap/query/DistanceConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/query/DistanceConstraint.java
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.query;
 
-/**	Create a distance constraint for multiple distance query.
+/**	Specify constraints of distance in SpanDistanceQueries or 
+ * 	SpanMultipleDistanceQueries
  * 	 
  * 	@author margaretha
  * */
@@ -10,23 +11,43 @@
 	private String unit;
 	private SpanElementQuery elementQuery;
 	private boolean exclusion;
+	private boolean isOrdered;
 	
-	public DistanceConstraint(int min, int max, boolean exclusion) {
+	public DistanceConstraint(int min, int max, boolean isOrdered, boolean exclusion) {
 		this.unit = "w";
 		this.minDistance = min;
 		this.maxDistance = max;
-		this.exclusion = exclusion;
+		this.isOrdered = isOrdered;
+		this.exclusion = exclusion;		
 	}
 	
-	public DistanceConstraint(SpanElementQuery elementQuery, int min, int max, 
-			boolean exclusion) {
+	public DistanceConstraint(SpanElementQuery elementQuery, int min, int max, boolean 
+			isOrdered, boolean exclusion) {
 		this.unit = elementQuery.getElementStr();
 		this.minDistance = min;
 		this.maxDistance = max;
-		this.exclusion = exclusion;		
-		this.elementQuery = elementQuery;		
+		this.isOrdered = isOrdered;
+		this.exclusion = exclusion;
+		this.elementQuery = elementQuery;
 	}
 	
+	
+//	public DistanceConstraint(int min, int max, boolean exclusion) {
+//		this.unit = "w";
+//		this.minDistance = min;
+//		this.maxDistance = max;
+//		this.exclusion = exclusion;
+//	}
+//	
+//	public DistanceConstraint(SpanElementQuery elementQuery, int min, int max, 
+//			boolean exclusion) {
+//		this.unit = elementQuery.getElementStr();
+//		this.minDistance = min;
+//		this.maxDistance = max;
+//		this.exclusion = exclusion;		
+//		this.elementQuery = elementQuery;		
+//	}
+	
 	public int getMinDistance() {
 		return minDistance;
 	}
@@ -59,4 +80,12 @@
 	public void setExclusion(boolean exclusion) {
 		this.exclusion = exclusion;
 	}
+
+	public boolean isOrdered() {
+		return isOrdered;
+	}
+
+	public void setOrdered(boolean isOrdered) {
+		this.isOrdered = isOrdered;
+	}
 }
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanDistanceQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanDistanceQuery.java
index 7ce869a..6b01fdb 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanDistanceQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanDistanceQuery.java
@@ -34,32 +34,50 @@
 	private SpanElementQuery elementQuery; // element distance unit
 	private String distanceUnit;
 	private String spanName;
+	private DistanceConstraint constraint;
 
 	public SpanDistanceQuery(SpanQuery firstClause, SpanQuery secondClause, 
-			int minDistance, int maxDistance, boolean isOrdered, 
-			boolean collectPayloads) {		
-		super(firstClause, secondClause, collectPayloads); 
-		init(minDistance, maxDistance, isOrdered);
-		distanceUnit = "w";
-		spanName = "spanDistance";
-	}
-	
-	public SpanDistanceQuery(SpanElementQuery elementQuery, SpanQuery firstClause, 
-			SpanQuery secondClause, int minDistance, int maxDistance, 
-			boolean isOrdered, boolean collectPayloads) {
+			DistanceConstraint constraint, boolean collectPayloads) {
 		super(firstClause, secondClause, collectPayloads);
-    	init(minDistance, maxDistance, isOrdered);
-		this.elementQuery = elementQuery;
-		distanceUnit = elementQuery.getElementStr();
-		spanName = "spanElementDistance";
+		this.constraint = constraint;
+		this.minDistance = constraint.getMinDistance();
+		this.maxDistance = constraint.getMaxDistance();
+		this.isOrdered = constraint.isOrdered();
+		this.exclusion = constraint.isExclusion();
+		this.distanceUnit = constraint.getUnit();
+		
+		if (constraint.getElementQuery() != null){
+			spanName = "spanElementDistance";
+			this.elementQuery = constraint.getElementQuery();
+		}
+		else { spanName = "spanDistance"; }
 	}
 	
-	private void init(int minDistance, int maxDistance,boolean isOrdered){
-		this.minDistance = minDistance;
-		this.maxDistance = maxDistance;
-		this.isOrdered = isOrdered;
-		this.exclusion = false;
-	}
+//	public SpanDistanceQuery(SpanQuery firstClause, SpanQuery secondClause, 
+//			int minDistance, int maxDistance, boolean isOrdered, 
+//			boolean collectPayloads) {		
+//		super(firstClause, secondClause, collectPayloads); 
+//		init(minDistance, maxDistance, isOrdered);
+//		distanceUnit = "w";
+//		spanName = "spanDistance";
+//	}
+//	
+//	public SpanDistanceQuery(SpanElementQuery elementQuery, SpanQuery firstClause, 
+//			SpanQuery secondClause, int minDistance, int maxDistance, 
+//			boolean isOrdered, boolean collectPayloads) {
+//		super(firstClause, secondClause, collectPayloads);
+//    	init(minDistance, maxDistance, isOrdered);
+//		this.elementQuery = elementQuery;
+//		distanceUnit = elementQuery.getElementStr();
+//		spanName = "spanElementDistance";
+//	}
+//	
+//	private void init(int minDistance, int maxDistance,boolean isOrdered){
+//		this.minDistance = minDistance;
+//		this.maxDistance = maxDistance;
+//		this.isOrdered = isOrdered;
+//		this.exclusion = false;
+//	}
 	
 	@Override
 	public String toString(String field) {
@@ -84,20 +102,17 @@
     }
 	
 	@Override
-	public SpanDistanceQuery clone() {
+	public SpanDistanceQuery clone() {		
 		SpanDistanceQuery spanDistanceQuery = new SpanDistanceQuery(
 		    (SpanQuery) firstClause.clone(),
 		    (SpanQuery) secondClause.clone(),
-		    this.minDistance,
-		    this.maxDistance,
-		    this.isOrdered,
+		    this.constraint,
 		    this.collectPayloads
         );
 				
 		if (this.elementQuery != null) {
 			spanDistanceQuery.setElementQuery(this.elementQuery);
 		}
-		spanDistanceQuery.setExclusion(this.exclusion);
 		spanDistanceQuery.setBoost(getBoost());
 		return spanDistanceQuery;	
 	}
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanMultipleDistanceQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanMultipleDistanceQuery.java
index 473e9c6..43cff3f 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanMultipleDistanceQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanMultipleDistanceQuery.java
@@ -72,7 +72,7 @@
 			sb.append(":");
 			sb.append(c.getMaxDistance());
 			sb.append("], ");		
-			sb.append(isOrdered ? "ordered, " : "notOrdered, ");
+			sb.append(c.isOrdered() ? "ordered, " : "notOrdered, ");
 			sb.append(c.isExclusion() ? "excluded)]" : "notExcluded)");			
 			if (i < size-1) sb.append(", ");
 		}		
@@ -89,18 +89,17 @@
 	public Spans getSpans(AtomicReaderContext context, Bits acceptDocs,
 			Map<Term, TermContext> termContexts) throws IOException {			
 		
-		DistanceConstraint c;		
 		SpanDistanceQuery sdq,sdq2;		
 		Spans ds,ds2;
 		MultipleDistanceSpans mds = null;
 		boolean exclusion;
-		
-		c = constraints.get(0);
-		sdq = createSpanDistanceQuery(c);
+				
+		sdq = new SpanDistanceQuery(firstClause, secondClause, constraints.get(0), collectPayloads);
 		ds = sdq.getSpans(context, acceptDocs, termContexts);
 				
 		for (int i=1; i< constraints.size(); i++){
-			sdq2 = createSpanDistanceQuery(constraints.get(i));
+			sdq2 = new SpanDistanceQuery(firstClause, secondClause, constraints.get(i), 
+					collectPayloads);
 			ds2 = sdq2.getSpans(context, acceptDocs, termContexts);			
 			
 			exclusion = sdq.isExclusion() && sdq2.isExclusion();
@@ -110,26 +109,7 @@
 		}
 		
 		return mds;
-	}
-	
-	/** Create a SpanDistanceQuery based on the given constraint.
-	 * 	@return a SpanDistanceQuery 
-	 * */
-	private SpanDistanceQuery createSpanDistanceQuery(DistanceConstraint c) {		
-		SpanDistanceQuery sdq;		
-		if (c.getUnit().equals("w")){
-			sdq = new SpanDistanceQuery(firstClause, secondClause,
-					c.getMinDistance(), c.getMaxDistance(),isOrdered, 
-					collectPayloads);		
-		}
-		else {
-			sdq = new SpanDistanceQuery(c.getElementQuery(), firstClause, 
-					secondClause, c.getMinDistance(), c.getMaxDistance(),
-					isOrdered, collectPayloads);
-		}
-		sdq.setExclusion(c.isExclusion());
-		return sdq;
-	}
+	}	
 
 	public List<DistanceConstraint> getConstraints() {
 		return constraints;
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanQuantifierQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanRepetitionQuery.java
similarity index 82%
rename from src/main/java/de/ids_mannheim/korap/query/SpanQuantifierQuery.java
rename to src/main/java/de/ids_mannheim/korap/query/SpanRepetitionQuery.java
index 85b881b..e25e5fe 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanQuantifierQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanRepetitionQuery.java
@@ -11,13 +11,13 @@
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.ToStringUtils;
 
-import de.ids_mannheim.korap.query.spans.QuantifierSpans;
+import de.ids_mannheim.korap.query.spans.RepetitionSpans;
 
-public class SpanQuantifierQuery extends SimpleSpanQuery{
+public class SpanRepetitionQuery extends SimpleSpanQuery{
 	
 	private int min, max;
 	
-	public SpanQuantifierQuery(SpanQuery sq, int min, int max,
+	public SpanRepetitionQuery(SpanQuery sq, int min, int max,
 			boolean collectPayloads) {
 		super(sq, collectPayloads);
 		this.min = min;
@@ -26,7 +26,7 @@
 
 	@Override
 	public SimpleSpanQuery clone() {
-		SpanQuantifierQuery sq = new SpanQuantifierQuery(
+		SpanRepetitionQuery sq = new SpanRepetitionQuery(
 				(SpanQuery) this.firstClause.clone(), 
 				this.min, 
 				this.max, 
@@ -38,7 +38,7 @@
 	@Override
 	public Spans getSpans(AtomicReaderContext context, Bits acceptDocs,
 			Map<Term, TermContext> termContexts) throws IOException {
-		return new QuantifierSpans(this, context, acceptDocs, termContexts);
+		return new RepetitionSpans(this, context, acceptDocs, termContexts);
 	}
 
 	@Override
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/QuantifierSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java
similarity index 92%
rename from src/main/java/de/ids_mannheim/korap/query/spans/QuantifierSpans.java
rename to src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java
index 8c99ac0..923debc 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/QuantifierSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java
@@ -13,16 +13,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import de.ids_mannheim.korap.query.SpanQuantifierQuery;
+import de.ids_mannheim.korap.query.SpanRepetitionQuery;
 
-public class QuantifierSpans extends SimpleSpans{
+public class RepetitionSpans extends SimpleSpans{
 	
 	private int min,max;
 	private long matchCost;
 	private List<CandidateSpan> matchList;
-	private Logger log = LoggerFactory.getLogger(QuantifierSpans.class);
+	private Logger log = LoggerFactory.getLogger(RepetitionSpans.class);
 	
-	public QuantifierSpans(SpanQuantifierQuery query,
+	public RepetitionSpans(SpanRepetitionQuery query,
 			AtomicReaderContext context, Bits acceptDocs,
 			Map<Term, TermContext> termContexts) 
 			throws IOException {
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java
index b9ed42c..a0c4474 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java
@@ -197,7 +197,7 @@
 			}
 			 
 			if (minDistance <= actualDistance && actualDistance <= maxDistance)
-				matches.add(createMatchCandidate(target, cs, false));			
+				matches.add(createMatchCandidate(target, cs, false));
 		}		
 		return matches;
 	}
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
index abf2ae4..5e1c91e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
@@ -96,7 +96,7 @@
     public SpanSequenceQueryWrapper withConstraint (int min, int max, boolean exclusion) {
 	if (this.constraints == null)
 	    this.constraints = new ArrayList<DistanceConstraint>(1);
-	this.constraints.add(new DistanceConstraint(min, max, exclusion));
+	this.constraints.add(new DistanceConstraint(min, max, isInOrder, exclusion));
 	return this;
     };
 
@@ -111,11 +111,11 @@
 	if (this.constraints == null)
 	    this.constraints = new ArrayList<DistanceConstraint>(1);
 	if (unit.equals("w"))
-	    this.constraints.add(new DistanceConstraint(min, max, exclusion));
+	    this.constraints.add(new DistanceConstraint(min, max, isInOrder, exclusion));
 	else
 	    this.constraints.add(
 		 new DistanceConstraint(
-                     new SpanElementQuery(this.field, unit), min, max, exclusion)
+                     new SpanElementQuery(this.field, unit), min, max, isInOrder, exclusion)
 	    );
 	return this;
     };
@@ -150,15 +150,11 @@
 	    if (!constraint.getUnit().equals("w")) {
 		for (int i = 1; i < this.segments.size(); i++) {
 		    SpanDistanceQuery sdquery = new SpanDistanceQuery(
-		        new SpanElementQuery(this.field, constraint.getUnit()),
-	                query,
-			this.segments.get(i),
-			constraint.getMinDistance(),
-			constraint.getMaxDistance(),
-			this.isInOrder(),
-			true
+			    query,
+				this.segments.get(i),
+				constraint,
+				true
 		    );
-		    sdquery.setExclusion(constraint.isExclusion());
 		    query = (SpanQuery) sdquery;
 		};
 	    }
@@ -169,12 +165,9 @@
 		    SpanDistanceQuery sdquery = new SpanDistanceQuery(
 	                query,
 			this.segments.get(i),
-			constraint.getMinDistance(),
-			constraint.getMaxDistance(),
-			this.isInOrder(),
+			constraint,
 			true
 		    );
-		    sdquery.setExclusion(constraint.isExclusion());
 		    query = (SpanQuery) sdquery;
 		};
 	    };
@@ -188,7 +181,7 @@
 	        query,
 		this.segments.get(i),
 		this.constraints,
-		this.isInOrder(),
+		isInOrder,
 		true
 	    );
 	};