http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedExecutionPlanGenerator.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedExecutionPlanGenerator.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedExecutionPlanGenerator.java
deleted file mode 100644
index acf3f6a..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedExecutionPlanGenerator.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import mvm.rya.indexing.external.QueryVariableNormalizer;
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-
-import org.openrdf.query.algebra.Projection;
-import org.openrdf.query.algebra.TupleExpr;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-public class IndexedExecutionPlanGenerator implements ExternalIndexMatcher {
-
-    private final TupleExpr query;
-    private List<ExternalTupleSet> normalizedIndexList;
-    
-    public IndexedExecutionPlanGenerator(TupleExpr query, 
List<ExternalTupleSet> indexList) {
-        this.query = query;
-        VarConstantIndexListPruner vci = new VarConstantIndexListPruner(query);
-        normalizedIndexList = 
getNormalizedIndices(vci.getRelevantIndices(indexList));
-    }
-    
-    public List<ExternalTupleSet> getNormalizedIndices() {
-        return normalizedIndexList;
-    }
-    
-  
-    
-    
-    @Override
-    public Iterator<TupleExpr> getIndexedTuples() {
-        
-        ValidIndexCombinationGenerator vic = new 
ValidIndexCombinationGenerator(query);
-        final Iterator<List<ExternalTupleSet>> iter = 
vic.getValidIndexCombos(normalizedIndexList);
-
-        return new Iterator<TupleExpr>() {
-
-            private TupleExpr next = null;
-            private boolean hasNextCalled = false;
-            private boolean isEmpty = false;
-
-            @Override
-            public boolean hasNext() {
-
-                if (!hasNextCalled && !isEmpty) {
-                    while (iter.hasNext()) {
-                        TupleExpr temp = 
GeneralizedExternalProcessor.process(query, iter.next());
-                        if (temp != null) {
-                            next = temp;
-                            hasNextCalled = true;
-                            return true;
-                        }
-                    }
-                    isEmpty = true;
-                    return false;
-                } else if(isEmpty) {
-                    return false;
-                } else {
-                    return true;
-                }
-            }
-
-            @Override
-            public TupleExpr next() {
-
-                if (hasNextCalled) {
-                    hasNextCalled = false;
-                    return next;
-                } else if(isEmpty) {
-                    throw new NoSuchElementException();
-                }else {
-                    if (this.hasNext()) {
-                        hasNextCalled = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-
-                }
-
-            }
-
-            @Override
-            public void remove() {
-
-                throw new UnsupportedOperationException("Cannot delete from 
iterator!");
-
-            }
-
-        };
-    }
-
-    
-    private List<ExternalTupleSet> getNormalizedIndices(Set<ExternalTupleSet> 
indexSet) {
-
-        ExternalTupleSet tempIndex;
-        List<ExternalTupleSet> normalizedIndexSet = Lists.newArrayList();
-
-        for (ExternalTupleSet e : indexSet) {
-
-            List<TupleExpr> tupList = null;
-            try {
-                tupList = QueryVariableNormalizer.getNormalizedIndex(query, 
e.getTupleExpr());
-            } catch (Exception e1) {
-                // TODO Auto-generated catch block
-                e1.printStackTrace();
-            }
-
-            for (TupleExpr te : tupList) {
-
-                tempIndex = (ExternalTupleSet) e.clone();
-                setTableMap(te, tempIndex);
-                setSupportedVarOrderMap(tempIndex);
-                tempIndex.setProjectionExpr((Projection) te);
-                normalizedIndexSet.add(tempIndex);
-
-            }
-
-        }
-
-        return normalizedIndexSet;
-    }
-
-    private void setTableMap(TupleExpr tupleMatch, ExternalTupleSet index) {
-
-        List<String> replacementVars = 
Lists.newArrayList(tupleMatch.getBindingNames());
-        List<String> tableVars = 
Lists.newArrayList(index.getTupleExpr().getBindingNames());
-
-        Map<String, String> tableMap = Maps.newHashMap();
-
-        for (int i = 0; i < tableVars.size(); i++) {
-            tableMap.put(replacementVars.get(i), tableVars.get(i));
-        }
-        // System.out.println("Table map is " + tableMap);
-        index.setTableVarMap(tableMap);
-
-    }
-    
-    
-    private void setSupportedVarOrderMap(ExternalTupleSet index) {
-
-        Map<String, Set<String>> supportedVarOrders = Maps.newHashMap();
-        BiMap<String, String> biMap = 
HashBiMap.create(index.getTableVarMap()).inverse();
-        Map<String, Set<String>> oldSupportedVarOrders = 
index.getSupportedVariableOrderMap();
-
-        Set<String> temp = null;
-        Set<String> keys = oldSupportedVarOrders.keySet();
-
-        for (String s : keys) {
-            temp = oldSupportedVarOrders.get(s);
-            Set<String> newSet = Sets.newHashSet();
-
-            for (String t : temp) {
-                newSet.add(biMap.get(t));
-            }
-            
-            String[] tempStrings = s.split("\u0000");
-            String v = "";
-            for(String u: tempStrings) {
-                if(v.length() == 0){
-                    v = v + biMap.get(u);
-                } else {
-                    v = v + "\u0000" + biMap.get(u);
-                }
-            }
-
-            supportedVarOrders.put(v, newSet);
-
-        }
-
-        index.setSupportedVariableOrderMap(supportedVarOrders);
-
-    }
-    
-    
-    
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
deleted file mode 100644
index dbd1972..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/IndexedQueryPlanSelector.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Iterator;
-
-import org.openrdf.query.algebra.TupleExpr;
-
-public interface IndexedQueryPlanSelector {
-    
-    public TupleExpr getThreshholdQueryPlan(Iterator<TupleExpr> tupleList, 
double threshhold, 
-            double indexWeight, double commonVarWeight, double dirProdWeight);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ThreshholdPlanSelector.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ThreshholdPlanSelector.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ThreshholdPlanSelector.java
deleted file mode 100644
index a333dcb..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ThreshholdPlanSelector.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Iterator;
-import java.util.Set;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-
-import org.openrdf.query.algebra.BindingSetAssignment;
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.Join;
-import org.openrdf.query.algebra.Projection;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.google.common.collect.Sets;
-
-public class ThreshholdPlanSelector implements IndexedQueryPlanSelector {
-
-    private TupleExpr query;
-    private int queryNodeCount = 0;
-
-    public ThreshholdPlanSelector(TupleExpr query) {
-        this.query = query;
-        QueryNodeCount qnc = new QueryNodeCount();
-        query.visit(qnc);
-
-        this.queryNodeCount = qnc.getNodeCount();
-        
-        if(queryNodeCount == 0) {
-            throw new IllegalArgumentException("TupleExpr must contain at 
least one node!");
-        }
-    }
-
-    
-    
-    
-    @Override
-    public TupleExpr getThreshholdQueryPlan(Iterator<TupleExpr> tuples, double 
threshhold, double indexWeight,
-            double commonVarWeight, double extProdWeight) {
-
-        if (threshhold < 0 || threshhold > 1) {
-            throw new IllegalArgumentException("Threshhold must be between 0 
and 1!");
-        }
-        double minCost = Double.MAX_VALUE;
-        TupleExpr minTup = null;
-
-        double tempCost = 0;
-        TupleExpr tempTup = null;
-
-        
-        
-        while (tuples.hasNext()) {
-
-            tempTup = tuples.next();
-            tempCost = getCost(tempTup, indexWeight, commonVarWeight, 
extProdWeight);
-
-            if (tempCost < minCost) {
-                minCost = tempCost;
-                minTup = tempTup;
-            }
-
-            if (minCost <= threshhold) {
-                return minTup;
-            }
-
-        }
-
-        return minTup;
-    }
-
-    public double getCost(TupleExpr te, double indexWeight, double 
commonVarWeight, double dirProdWeight) {
-
-        if (indexWeight + commonVarWeight + dirProdWeight != 1) {
-            throw new IllegalArgumentException("Weights must sum to 1!");
-        }
-        
-        if(te == null) {
-            throw new IllegalArgumentException("TupleExpr cannot be null!");
-        }
-
-        QueryNodeCount qnc = new QueryNodeCount();
-        te.visit(qnc);
-
-        double nodeCount = qnc.getNodeCount();
-        double commonJoinVars = qnc.getCommonJoinVarCount();
-        double joinVars = qnc.getJoinVarCount();
-        double joinCount = qnc.getJoinCount();
-        double dirProdCount = qnc.getDirProdCount();
-        double dirProductScale;
-        
-        if(queryNodeCount > nodeCount) {
-            dirProductScale = 1/((double)(queryNodeCount - nodeCount));
-        } else {
-            dirProductScale = 1/((double)(queryNodeCount - nodeCount + 1));
-        }
-        
-        double joinVarRatio;
-        double dirProductRatio;
-        
-        if(joinVars != 0) {
-            joinVarRatio = (joinVars - commonJoinVars) / joinVars;
-        } else {
-            joinVarRatio = 0;
-        }
-        
-        if(joinCount != 0) {
-            dirProductRatio = dirProdCount / joinCount;
-        } else {
-            dirProductRatio = 0;
-        }
-        
-        
-        double cost = indexWeight * (nodeCount / queryNodeCount) + 
commonVarWeight*joinVarRatio
-                + dirProdWeight *dirProductRatio*dirProductScale;
-        
-//        System.out.println("Tuple is " + te + " and cost is " + cost);
-//        System.out.println("Node count is " + nodeCount + " and query node 
count is " + queryNodeCount);
-//        System.out.println("Common join vars are " + commonJoinVars + " and 
join vars " + joinVars);
-//        System.out.println("Join count is " + joinCount + " and direct prod 
count is " + dirProdCount);
-        
-        return cost;
-    }
-
-    public static class QueryNodeCount extends 
QueryModelVisitorBase<RuntimeException> {
-
-        private int nodeCount = 0;
-        private int commonJoinVars = 0;
-        private int joinVars = 0;
-        private int joinCount = 0;
-        private int dirProdCount = 0;
-
-        public int getCommonJoinVarCount() {
-            return commonJoinVars;
-        }
-
-        public int getJoinVarCount() {
-            return joinVars;
-        }
-
-        public int getNodeCount() {
-            return nodeCount;
-        }
-
-        public int getJoinCount() {
-            return joinCount;
-        }
-
-        public int getDirProdCount() {
-            return dirProdCount;
-        }
-
-        public void meet(Projection node) {
-            node.getArg().visit(this);
-        }
-
-        public void meetNode(QueryModelNode node) {
-            if (node instanceof ExternalTupleSet) {
-                nodeCount += 1;
-                return;
-            }
-            super.meetNode(node);
-            return;
-        }
-
-        @Override
-        public void meet(StatementPattern node) {
-            nodeCount += 1;
-            return;
-        }
-
-        @Override
-        public void meet(Filter node) {
-            nodeCount += 1;
-            node.getArg().visit(this);
-        }
-
-        public void meet(BindingSetAssignment node) {
-            nodeCount += 1;
-            return;
-        }
-
-        @Override
-        public void meet(Join node) {
-
-            int tempCount = 0;
-
-            Set<String> lNames = node.getLeftArg().getAssuredBindingNames();
-            Set<String> rNames = node.getRightArg().getAssuredBindingNames();
-            
-            for(String s: node.getLeftArg().getBindingNames()) {
-                if(s.startsWith("-const-")) {
-                    lNames.remove(s);
-                }
-            }
-            
-            for(String s: node.getRightArg().getBindingNames()) {
-                if(s.startsWith("-const-")) {
-                    rNames.remove(s);
-                }
-            }
-           
-            
-            joinVars += Math.min(lNames.size(), rNames.size());
-            tempCount = Sets.intersection(lNames, rNames).size();
-            if (tempCount == 0) {
-                dirProdCount += 1;
-            } else {
-                commonJoinVars += tempCount;
-            }
-            joinCount += 1;
-
-            super.meet(node);
-
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleExecutionPlanGenerator.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleExecutionPlanGenerator.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleExecutionPlanGenerator.java
deleted file mode 100644
index 2776a9e..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleExecutionPlanGenerator.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-
-import org.openrdf.query.algebra.BindingSetAssignment;
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.Join;
-import org.openrdf.query.algebra.Projection;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.beust.jcommander.internal.Lists;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Sets;
-
-public class TupleExecutionPlanGenerator implements IndexTupleGenerator {
-
-    
-    
-    @Override
-    public Iterator<TupleExpr> getPlans(Iterator<TupleExpr> indexPlans) {
-
-        final Iterator<TupleExpr> iter = indexPlans;
-        
-        return new Iterator<TupleExpr>() {
-
-            private TupleExpr next = null;
-            private boolean hasNextCalled = false;
-            private boolean isEmpty = false;
-            Iterator<TupleExpr> tuples = null;
-
-            @Override
-            public boolean hasNext() {
-
-                if (!hasNextCalled && !isEmpty) {
-                    if (tuples != null && tuples.hasNext()) {
-                        next = tuples.next();
-                        hasNextCalled = true;
-                        return true;
-                    } else {
-                        while (iter.hasNext()) {
-                            tuples = getPlans(iter.next()).iterator();
-                            if (tuples == null) {
-                                throw new IllegalStateException("Plans cannot 
be null!");
-                            }
-                            next = tuples.next();
-                            hasNextCalled = true;
-                            return true;
-                        }
-                        isEmpty = true;
-                        return false;
-                    }
-                } else if (isEmpty) {
-                    return false;
-                } else {
-                    return true;
-                }
-            }
-
-            @Override
-            public TupleExpr next() {
-
-                if (hasNextCalled) {
-                    hasNextCalled = false;
-                    return next;
-                } else if(isEmpty) {
-                    throw new NoSuchElementException();
-                }else {
-                    if (this.hasNext()) {
-                        hasNextCalled = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-
-                }
-
-            }
-            
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("Cannot delete from 
iterator!");
-            }
-
-        };
-              
-    }
-
-    private List<TupleExpr> getPlans(TupleExpr te) {
-
-        
-        NodeCollector nc = new NodeCollector();
-        te.visit(nc);
-
-        Set<QueryModelNode> nodeSet = nc.getNodeSet();
-        List<Filter> filterList = nc.getFilterSet();
-        Projection projection = nc.getProjection().clone();
-  
-        List<TupleExpr> queryPlans = Lists.newArrayList();
-
-        Collection<List<QueryModelNode>> plans = 
Collections2.permutations(nodeSet);
-
-        for (List<QueryModelNode> p : plans) {
-            if (p.size() == 0) {
-                throw new IllegalArgumentException("Tuple must contain at 
least one node!");
-            } else if (p.size() == 1) {
-                queryPlans.add(te);
-            } else {
-                queryPlans.add(buildTuple(p, filterList, projection));
-            }
-        }
-
-        return queryPlans;
-    }
-
-    private TupleExpr buildTuple(List<QueryModelNode> nodes, List<Filter> 
filters, Projection projection) {
-
-        Projection proj = (Projection)projection.clone();
-        Join join = null;
-
-        join = new Join((TupleExpr) nodes.get(0).clone(), (TupleExpr) 
nodes.get(1).clone());
-
-        for (int i = 2; i < nodes.size(); i++) {
-            join = new Join(join, (TupleExpr) nodes.get(i).clone());
-        }
-
-        if (filters.size() == 0) {
-            proj.setArg(join);
-            return proj;
-        } else {
-            TupleExpr queryPlan = join;
-            for (Filter f : filters) {
-                Filter filt = (Filter) f.clone();
-                filt.setArg(queryPlan);
-                queryPlan = filt;
-            }
-            proj.setArg(queryPlan);
-            return proj;
-        }
-
-    }
-
-    public static class NodeCollector extends 
QueryModelVisitorBase<RuntimeException> {
-
-        private Set<QueryModelNode> nodeSet = Sets.newHashSet();
-        private List<Filter> filterSet = Lists.newArrayList();
-        private Projection projection;
-
-        public Projection getProjection() {
-            return projection;
-        }
-
-        public Set<QueryModelNode> getNodeSet() {
-            return nodeSet;
-        }
-
-        public List<Filter> getFilterSet() {
-            return filterSet;
-        }
-
-        @Override
-        public void meet(Projection node) {
-            projection = node;
-            node.getArg().visit(this);
-        }
-
-        @Override
-        public void meetNode(QueryModelNode node) throws RuntimeException {
-            if (node instanceof ExternalTupleSet || node instanceof 
BindingSetAssignment
-                    || node instanceof StatementPattern) {
-                nodeSet.add(node);
-            }
-            super.meetNode(node);
-        }
-
-        @Override
-        public void meet(Filter node) {
-            filterSet.add(node);
-            node.getArg().visit(this);
-        }
-
-    }
-    
-    
-    
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
deleted file mode 100644
index 089ef5d..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleReArranger.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-import mvm.rya.rdftriplestore.inference.DoNotExpandSP;
-import mvm.rya.rdftriplestore.utils.FixedStatementPattern;
-
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.Join;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.beust.jcommander.internal.Lists;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Maps;
-
-
-//A given TupleExpr can be broken up into "join segments", which are sections 
of the TupleExpr where nodes can
-//be freely exchanged.  This class creates a list of permuted TupleExpr from a 
specified TupleExpr by permuting the nodes
-//in each join segment.
-public class TupleReArranger {
-
-    private static Map<Join, List<List<TupleExpr>>> joinArgs;
-    private static Map<Join, List<Filter>> filterArgs;
-
-    
-    public static Iterator<TupleExpr> getPlans(Iterator<TupleExpr> indexPlans) 
{
-
-        final Iterator<TupleExpr> iter = indexPlans;
-
-        return new Iterator<TupleExpr>() {
-
-            private TupleExpr next = null;
-            private boolean hasNextCalled = false;
-            private boolean isEmpty = false;
-            Iterator<TupleExpr> tuples = null;
-
-            @Override
-            public boolean hasNext() {
-
-                if (!hasNextCalled && !isEmpty) {
-                    if (tuples != null && tuples.hasNext()) {
-                        next = tuples.next();
-                        hasNextCalled = true;
-                        return true;
-                    } else {
-                        while (iter.hasNext()) {
-                            tuples = 
getTupleReOrderings(iter.next()).iterator();
-                            if (tuples == null) {
-                                throw new IllegalStateException("Plans cannot 
be null!");
-                            }
-                            next = tuples.next();
-                            hasNextCalled = true;
-                            return true;
-                        }
-                        isEmpty = true;
-                        return false;
-                    }
-                } else if (isEmpty) {
-                    return false;
-                } else {
-                    return true;
-                }
-            }
-
-            @Override
-            public TupleExpr next() {
-
-                if (hasNextCalled) {
-                    hasNextCalled = false;
-                    return next;
-                } else if (isEmpty) {
-                    throw new NoSuchElementException();
-                } else {
-                    if (this.hasNext()) {
-                        hasNextCalled = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-                }
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("Cannot delete from 
iterator!");
-            }
-        };
-    }
-    
-    
-    //Give a TupleExpr, return list of join segment permuted TupleExpr
-    public static List<TupleExpr> getTupleReOrderings(TupleExpr te) {
-
-        joinArgs = Maps.newHashMap();
-        filterArgs = Maps.newHashMap();
-        
-        NodeCollector nc = new NodeCollector();
-        te.visit(nc);
-        joinArgs = nc.getPerms();
-        List<Join> joins = Lists.newArrayList(joinArgs.keySet());
-        
-        return getPlans(getReOrderings(joins), te);
-
-    }
-
-    
-    //iterates through the reOrder maps, and for each reOrder map builds a 
new, reordered tupleExpr
-    private static List<TupleExpr> getPlans(List<Map<Join, List<TupleExpr>>> 
reOrderings, TupleExpr te) {
-
-        List<TupleExpr> queryPlans = Lists.newArrayList();
-        PermInserter pm = new PermInserter();
-
-        for (Map<Join, List<TupleExpr>> order : reOrderings) {
-            TupleExpr clone = te.clone();
-            pm.setReOrderMap(order);
-            clone.visit(pm);
-            queryPlans.add(clone);
-        }
-
-        return queryPlans;
-    }
-
-  
-  
-    //recursive method which produces a list of maps.  Each map associates a 
join with
-    //a list of the non-join arguments below it contained in same join 
segment.  The list 
-    //represents an ordering of the
-    //non-join arguments and creating a TupleExpr from this map yields a new 
TupleExpr
-    //whose non-join arguments are permuted
-    private static List<Map<Join, List<TupleExpr>>> getReOrderings(List<Join> 
joins) {
-        Map<Join, List<TupleExpr>> reOrder = Maps.newHashMap();
-        List<Map<Join, List<TupleExpr>>> reOrderings = Lists.newArrayList();
-        getReOrderings(joins, reOrder, reOrderings);
-        return reOrderings;
-
-    }
-
-    private static void getReOrderings(List<Join> joins, Map<Join, 
List<TupleExpr>> reOrder,
-            List<Map<Join, List<TupleExpr>>> reOrderings) {
-
-        if (joins.isEmpty()) {
-            reOrderings.add(reOrder);
-            return;
-        }
-
-        List<Join> joinsCopy = Lists.newArrayList(joins);
-        Join join = joinsCopy.remove(0);
-        List<List<TupleExpr>> joinArgPerms = joinArgs.get(join);
-        for (List<TupleExpr> tupList : joinArgPerms) {
-            Map<Join, List<TupleExpr>> newReOrder = Maps.newHashMap(reOrder);
-            newReOrder.put(join, tupList);
-            getReOrderings(joinsCopy, newReOrder, reOrderings);
-        }
-        
-        return;
-
-    }
-    
-    
-   //creates a map which associates each first join of a TupleExpr join 
segment with all permutations of
-    //the non-join nodes after it.  More specifically, each join is associated 
with a list of TupleExpr
-    //lists, where each list represents an ordering of the non-join nodes 
following the associated join
-    private static class NodeCollector extends 
QueryModelVisitorBase<RuntimeException> {
-
-        private static List<Filter> filterList;
-
-        public Map<Join, List<List<TupleExpr>>> getPerms() {
-            return joinArgs;
-        }
-
-        @Override
-        public void meet(Join node) {
-
-            filterList = Lists.newArrayList();
-            
-            List<TupleExpr> args = Lists.newArrayList();
-            args = getJoinArgs(node, args);
-            List<List<TupleExpr>> argPerms = 
Lists.newArrayList(Collections2.permutations(args));
-            joinArgs.put(node, argPerms);
-            filterArgs.put(node, filterList);
-
-            for (TupleExpr te : args) {
-                if (!(te instanceof StatementPattern) && !(te instanceof 
ExternalTupleSet)) {
-                    te.visit(this);
-                }
-            }
-
-        }
-
-        
-        //get all non-join nodes below tupleExpr in same join segment
-        private static List<TupleExpr> getJoinArgs(TupleExpr tupleExpr, 
List<TupleExpr> joinArgs) {
-            if (tupleExpr instanceof Join) {
-                if (!(((Join) tupleExpr).getLeftArg() instanceof 
FixedStatementPattern)
-                        && !(((Join) tupleExpr).getRightArg() instanceof 
DoNotExpandSP)) {
-                    Join join = (Join) tupleExpr;
-                    getJoinArgs(join.getLeftArg(), joinArgs);
-                    getJoinArgs(join.getRightArg(), joinArgs);
-                } // assumes all filter occur above first join of segment --
-                  // this should be the state
-                  // after PrecompJoinOptimizer is called
-            } else if (tupleExpr instanceof Filter) {
-                filterList.add((Filter) tupleExpr);
-                getJoinArgs(((Filter) tupleExpr).getArg(), joinArgs);
-            } else {
-                joinArgs.add(tupleExpr);
-            }
-
-            return joinArgs;
-        }
-
-    }
-
-    
-
-    //for a given reOrder map, searches through TupleExpr and places each 
reordered collection
-    //of nodes at appropriate join
-    private static class PermInserter extends 
QueryModelVisitorBase<RuntimeException> {
-
-        private Map<Join, List<TupleExpr>> reOrderMap = Maps.newHashMap();
-
-        public void setReOrderMap(Map<Join, List<TupleExpr>> reOrderMap) {
-            this.reOrderMap = reOrderMap;
-        }
-
-        @Override
-        public void meet(Join node) {
-
-            List<TupleExpr> reOrder = reOrderMap.get(node);
-            if (reOrder != null) {
-                List<Filter> filterList = 
Lists.newArrayList(filterArgs.get(node));
-                node.replaceWith(getNewJoin(reOrder, 
getFilterChain(filterList)));
-
-                for (TupleExpr te : reOrder) {
-                    if (!(te instanceof StatementPattern) && !(te instanceof 
ExternalTupleSet)) {
-                        te.visit(this);
-                    }
-                }
-            }
-            super.meet(node);
-        }
-    }
-   
-
-    // chain filters together and return front and back of chain
-    private static List<TupleExpr> getFilterChain(List<Filter> filters) {
-        List<TupleExpr> filterTopBottom = Lists.newArrayList();
-        Filter filterChainTop = null;
-        Filter filterChainBottom = null;
-
-        for (Filter filter : filters) {
-            if (filterChainTop == null) {
-                filterChainTop = filter.clone();
-            } else if (filterChainBottom == null) {
-                filterChainBottom = filter.clone();
-                filterChainTop.setArg(filterChainBottom);
-            } else {
-                Filter newFilter = filter.clone();
-                filterChainBottom.setArg(newFilter);
-                filterChainBottom = newFilter;
-            }
-        }
-        if (filterChainTop != null) {
-            filterTopBottom.add(filterChainTop);
-        }
-        if (filterChainBottom != null) {
-            filterTopBottom.add(filterChainBottom);
-        }
-        return filterTopBottom;
-    }
-
-    // build newJoin node given remaining joinArgs and chain of filters
-    private static TupleExpr getNewJoin(List<TupleExpr> args, List<TupleExpr> 
filterChain) {
-        TupleExpr newJoin;
-        List<TupleExpr> joinArgs = Lists.newArrayList(args);
-
-        if (joinArgs.size() > 1) {
-            if (filterChain.size() > 0) {
-                TupleExpr finalJoinArg = joinArgs.remove(0).clone();
-                TupleExpr tempJoin;
-                TupleExpr temp = filterChain.get(0);
-
-                if (joinArgs.size() > 1) {
-                    tempJoin = new Join(joinArgs.remove(0).clone(), 
joinArgs.remove(0).clone());
-                    for (TupleExpr te : joinArgs) {
-                        tempJoin = new Join(tempJoin, te.clone());
-                    }
-                } else {
-                    tempJoin = joinArgs.remove(0).clone();
-                }
-
-                if (filterChain.size() == 1) {
-                    ((Filter) temp).setArg(tempJoin);
-                } else {
-                    ((Filter) filterChain.get(1)).setArg(tempJoin);
-                }
-                newJoin = new Join(temp, finalJoinArg);
-            } else {
-                newJoin = new Join(joinArgs.remove(0).clone(), 
joinArgs.remove(0).clone());
-
-                for (TupleExpr te : joinArgs) {
-                    newJoin = new Join(newJoin, te.clone());
-                }
-            }
-        } else if (joinArgs.size() == 1) {
-            if (filterChain.size() > 0) {
-                newJoin = filterChain.get(0);
-                if (filterChain.size() == 1) {
-                    ((Filter) newJoin).setArg(joinArgs.get(0).clone());
-                } else {
-                    ((Filter) 
filterChain.get(1)).setArg(joinArgs.get(0).clone());
-                }
-            } else {
-                newJoin = joinArgs.get(0).clone();
-            }
-        } else {
-            throw new IllegalStateException("JoinArgs size cannot be zero.");
-        }
-        return newJoin;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
deleted file mode 100644
index 4960d78..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/TupleValidator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Iterator;
-
-import org.openrdf.query.algebra.TupleExpr;
-
-public interface TupleValidator {
-
-    public boolean isValid(TupleExpr te);
-    
-    public Iterator<TupleExpr> getValidTuples(Iterator<TupleExpr> tupleList);
-    
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
deleted file mode 100644
index b3c3fcd..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/ValidIndexCombinationGenerator.java
+++ /dev/null
@@ -1,671 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-import mvm.rya.indexing.external.tupleSet.SimpleExternalTupleSet;
-
-import org.openrdf.query.MalformedQueryException;
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.Projection;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-import org.openrdf.query.parser.ParsedQuery;
-import org.openrdf.query.parser.sparql.SPARQLParser;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-public class ValidIndexCombinationGenerator {
-    
-    
-    private TupleExpr query;
-    private Set<String> invalidCombos = Sets.newTreeSet();
-    private Set<QueryModelNode> spFilterSet;
-    
-    
-    public ValidIndexCombinationGenerator(TupleExpr query) {
-        this.query = query;
-        SpFilterCollector sfc = new SpFilterCollector();
-        query.visit(sfc);
-        spFilterSet = sfc.getSpFilterSet();
-    }
-    
-    
-    
-    
-    public Iterator<List<ExternalTupleSet>> 
getValidIndexCombos(List<ExternalTupleSet> indexSet) {
-
-        Collections.shuffle(indexSet);
-        final List<ExternalTupleSet> list = indexSet;
-        final Iterator<List<Integer>> iter = getValidCombos(list);
-
-        return new Iterator<List<ExternalTupleSet>>() {
-
-            private List<ExternalTupleSet> next = null;
-            private List<Integer> nextCombo = null;
-            private boolean hasNextCalled = false;
-            private boolean isEmpty = false;
-
-            @Override
-            public boolean hasNext() {
-
-                if (!hasNextCalled && !isEmpty) {
-                    if (!iter.hasNext()) {
-                        isEmpty = true;
-                        return false;
-                    } else {
-                        nextCombo = iter.next();
-                        List<ExternalTupleSet> indexCombo = 
Lists.newArrayList();
-                        for (Integer i : nextCombo) {
-                            indexCombo.add(list.get(i));
-                        }
-                        next = indexCombo;
-                        hasNextCalled = true;
-                        return true;
-
-                    }
-
-                } else if (isEmpty) {
-                    return false;
-                } else {
-                    return true;
-                }
-            }
-
-            @Override
-            public List<ExternalTupleSet> next() {
-
-                if (hasNextCalled) {
-                    hasNextCalled = false;
-                    return next;
-                } else if(isEmpty) {
-                    throw new NoSuchElementException();
-                }else {
-                    if (this.hasNext()) {
-                        hasNextCalled = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-                }
-            }
-
-            @Override
-            public void remove() {
-
-                throw new UnsupportedOperationException("Cannot delete from 
iterator!");
-
-            }
-
-        };
-
-    }
-    
-    
-    
-    private Iterator<List<Integer>> getValidCombos(List<ExternalTupleSet> 
indexList) {
-        
-        
-        final List<ExternalTupleSet> list = indexList;
-        final int indexSize = list.size();
-        final Iterator<List<Integer>> iter = getCombos(indexSize);
-        
-        
-        return new Iterator<List<Integer>>() {
-
-            private List<Integer> next = null;
-            private boolean hasNextCalled = false;
-            private boolean isEmpty = false;
-
-            @Override
-            public boolean hasNext() {
-                if (!hasNextCalled && !isEmpty) {
-
-                    while (iter.hasNext()) {
-                        List<Integer> tempNext = iter.next();
-                        if (isValid(tempNext, list)) {
-                            next = tempNext;
-                            hasNextCalled = true;
-                            return true;
-                        }
-
-                    }
-
-                    isEmpty = true;
-                    return false;
-
-                } else if (isEmpty) {
-                    return false;
-                } else {
-                    return true;
-                }
-            }
-
-            @Override
-            public List<Integer> next() {
-
-                if (hasNextCalled) {
-                    hasNextCalled = false;
-                    return next;
-                } else if (isEmpty) {
-                    throw new NoSuchElementException();
-                } else {
-                    if (this.hasNext()) {
-                        hasNextCalled = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-
-                }
-
-            }
-
-            @Override
-            public void remove() {
-
-                throw new UnsupportedOperationException("Cannot delete from 
iterator!");
-
-            }
-
-        };
-    }
-    
-    
-    
-    
-    
-    
-    private Iterator<List<Integer>> getCombos(int indexListSize) {
-
-        final int indexSize = indexListSize;
-        final int maxSubListSize = spFilterSet.size() / 2;
-
-        return new Iterator<List<Integer>>() {
-
-            private List<Integer> next = null;
-            private boolean hasNextCalled = false;
-            private boolean isEmpty = false;
-            private int subListSize = Math.min(maxSubListSize, indexSize) + 1;
-            Iterator<List<Integer>> subList = null;
-
-            @Override
-            public boolean hasNext() {
-
-                if (!hasNextCalled && !isEmpty) {
-                    if (subList != null && subList.hasNext()) {
-                        next = subList.next();
-                        hasNextCalled = true;
-                        return true;
-                    } else {
-                        subListSize--;
-                        if (subListSize == 0) {
-                            isEmpty = true;
-                            return false;
-                        }
-                        subList = getCombos(subListSize, indexSize);
-                        if (subList == null) {
-                            throw new IllegalStateException("Combos cannot be 
null!");
-                        }
-                        next = subList.next();
-                        hasNextCalled = true;
-                        return true;
-
-                    }
-                } else if (isEmpty) {
-                    return false;
-                } else {
-                    return true;
-                }
-            }
-
-            @Override
-            public List<Integer> next() {
-
-                if (hasNextCalled) {
-                    hasNextCalled = false;
-                    return next;
-                } else if (isEmpty) {
-                    throw new NoSuchElementException();
-                } else {
-                    if (this.hasNext()) {
-                        hasNextCalled = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-
-                }
-
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("Cannot delete from 
iterator!");
-            }
-
-        };
-
-    }
-    
-    
-    
-    private Iterator<List<Integer>> getCombos(int subListSize, int 
indexListSize) {
-        
-        if(subListSize > indexListSize) {
-            throw new IllegalArgumentException("Sublist size must be less than 
or equal to list size!");
-        }
-        
-        final int subSize = subListSize;
-        final int indexSize = indexListSize;
-        
-        return new Iterator<List<Integer>>() {
-
-            private List<Integer> next = null;
-            private List<Integer> tempList = Lists.newArrayList();
-            private boolean calledHasNext = false;
-            private boolean isEmpty = false;
-            
-            @Override
-            public boolean hasNext() {
-
-                if (!calledHasNext && !isEmpty) {
-                    if (next == null) {
-                        for (int i = 0; i < subSize; i++) {
-                            tempList.add(i);
-                        }
-                        next = tempList;
-                        calledHasNext = true;
-                        return true;
-                    } else {
-                        next = getNext(next, indexSize - 1);
-                        if (next == null) {
-                            isEmpty = true;
-                            return false;
-                        } else {
-                            calledHasNext = true;
-                            return true;
-                        }
-
-                    }
-                } else if(isEmpty) {  
-                    return false;
-                } else {
-                    return true;
-                }
-
-            }
-
-            @Override
-            public List<Integer> next() {
-
-                if (calledHasNext) {
-                    calledHasNext = false;
-                    return next;
-                } else if (isEmpty) {
-                    throw new NoSuchElementException();
-                } else {
-                    if (this.hasNext()) {
-                        calledHasNext = false;
-                        return next;
-                    } else {
-                        throw new NoSuchElementException();
-                    }
-                }
-            }
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException();
-                
-            }
-            
-            
-            
-        };
-    }
-    
-
-    
-    
-    
-    
-    private List<Integer> getNext(List<Integer> prev, int maxInt) {
-        
-        List<Integer> returnList = Lists.newArrayList();
-        int size = prev.size();
-        int incrementPos = -1;
-        int incrementVal = 0;
-        
-        for(int i = 0; i < size; i++) {
-            if(prev.get(size-(i+1)) != maxInt - i) {
-                incrementPos = size - (i+1);
-                break;
-            }
-        }
-        
-        if (incrementPos == -1) {
-            return null;
-        } else {
-
-            incrementVal = prev.get(incrementPos);
-            for (int i = 0; i < incrementPos; i++) {
-                returnList.add(prev.get(i));
-            }
-
-            for (int j = incrementPos; j < size; j++) {
-                returnList.add(++incrementVal);
-            }
-
-            return returnList;
-        }
-    }
-    
-    
-    
-    
-    private boolean isValid(List<Integer> combo, List<ExternalTupleSet> 
indexList) {
-        
-        String s1 = Joiner.on("\u0000").join(combo).trim();
-        
-        if(invalidCombos.contains(s1)) {
-            return false;
-        } else {
-            int valid = indicesDisjoint(combo, indexList);
-            
-            if (valid >= 0) {
-                String s2 = "";
-                for (int i = 0; i < valid + 1; i++) {
-                    if (s2.length() == 0) {
-                        s2 = s2 + combo.get(i);
-                    } else {
-                        s2 = s2 + "\u0000" + combo.get(i);
-                    }
-                }
-                invalidCombos.add(s2);
-
-                for (int i = valid + 1; i < combo.size(); i++) {
-                    s2 = s2 + "\u0000" + combo.get(i);
-                    invalidCombos.add(s2);
-                }
-
-                return false;
-            } else {
-                return true;
-            }
-        }
-        
-        
-    }
-    
-    
-    
-    private int indicesDisjoint(List<Integer> combo, List<ExternalTupleSet> 
indexList) {
-        
-        Set<QueryModelNode> indexNodes = Sets.newHashSet();
-        Set<QueryModelNode> tempNodes;
-        TupleExpr temp;
-        
-        
-        int j = 0;
-        for(Integer i: combo) {
-            temp = indexList.get(i).getTupleExpr();
-            SpFilterCollector spf = new SpFilterCollector();
-            temp.visit(spf);
-            tempNodes = spf.getSpFilterSet();
-            if(Sets.intersection(indexNodes, tempNodes).size() == 0) {
-                indexNodes = Sets.union(indexNodes, tempNodes);
-                if(indexNodes.size() > spFilterSet.size()) {
-                    return j;
-                }
-            } else {
-                return j;
-            }
-            j++;
-        }
-        
-        return -1;
-    }
-    
-    
-    
-    
-    public static void main(String[] args) {
-        
-        
-        String q1 = ""//
-                + "SELECT ?f ?m ?d " //
-                + "{" //
-                + "  ?f a ?m ."//
-                + "  ?m <http://www.w3.org/2000/01/rdf-schema#label> ?d ."//
-                + "  ?d <uri:talksTo> ?f . "//
-                + "  ?f <uri:hangOutWith> ?m ." //
-                + "  ?m <uri:hangOutWith> ?d ." //
-                + "  ?f <uri:associatesWith> ?m ." //
-                + "  ?m <uri:associatesWith> ?d ." //
-                + "}";//
-        
-        
-        String q2 = ""//
-                + "SELECT ?t ?s ?u " //
-                + "{" //
-                + "  ?s a ?t ."//
-                + "  ?t <http://www.w3.org/2000/01/rdf-schema#label> ?u ."//
-                + "  ?u <uri:talksTo> ?s . "//
-                + "}";//
-        
-        
-        String q3 = ""//
-                + "SELECT ?s ?t ?u " //
-                + "{" //
-                + "  ?s <uri:hangOutWith> ?t ." //
-                + "  ?t <uri:hangOutWith> ?u ." //
-                + "}";//
-        
-        String q4 = ""//
-                + "SELECT ?s ?t ?u " //
-                + "{" //
-                + "  ?s <uri:associatesWith> ?t ." //
-                + "  ?t <uri:associatesWith> ?u ." //
-                + "}";//
-        
-        
-        String q5 = ""//
-                + "SELECT ?t ?s ?u " //
-                + "{" //
-                + "  ?s a ?t ."//
-                + "  ?t <http://www.w3.org/2000/01/rdf-schema#label> ?u ."//
-                + "  ?u <uri:talksTo> ?s . "//
-                + "  ?s <uri:hangOutWith> ?t ." //
-                + "  ?t <uri:hangOutWith> ?u ." //
-                + "}";//
-        
-        String q6 = ""//
-                + "SELECT ?s ?t ?u " //
-                + "{" //
-                + "  ?s <uri:associatesWith> ?t ." //
-                + "  ?t <uri:associatesWith> ?u ." //
-                + "  ?s <uri:hangOutWith> ?t ." //
-                + "  ?t <uri:hangOutWith> ?u ." //
-                + "}";//
-        
-        
-        String q7 = ""//
-                + "SELECT ?s ?t ?u " //
-                + "{" //
-                + "  ?s <uri:associatesWith> ?t ." //
-                + "  ?t <uri:associatesWith> ?u ." //
-                + "  ?t <uri:hangOutWith> ?u ." //
-                + "}";//
-        
-        
-        
-        String q8 = ""//
-                + "SELECT ?t ?s ?u " //
-                + "{" //
-                + "  ?s a ?t ."//
-                + "  ?t <http://www.w3.org/2000/01/rdf-schema#label> ?u ."//
-                + "  ?u <uri:talksTo> ?s . "//
-                + "  ?s <uri:associatesWith> ?t ." //
-                + "}";//
-        
-        
-        String q9 = ""//
-                + "SELECT ?t ?s ?u " //
-                + "{" //
-                + "  ?s a ?t ."//
-                + "  ?t <http://www.w3.org/2000/01/rdf-schema#label> ?u ."//
-                + "}";//
-        
-        
-        
-        
-        
-        
-        
-        
-
-        SPARQLParser parser = new SPARQLParser();
-        ParsedQuery pq1 = null;
-        ParsedQuery pq2 = null;
-        ParsedQuery pq3 = null;
-        ParsedQuery pq4 = null;
-        ParsedQuery pq5 = null;
-        ParsedQuery pq6 = null;
-        ParsedQuery pq7 = null;
-        ParsedQuery pq8 = null;
-        ParsedQuery pq9 = null;
-        
-        SimpleExternalTupleSet extTup1 = null;
-        SimpleExternalTupleSet extTup2 = null;
-        SimpleExternalTupleSet extTup3 = null;
-        SimpleExternalTupleSet extTup4 = null;
-        SimpleExternalTupleSet extTup5 = null;
-        SimpleExternalTupleSet extTup6 = null;
-        SimpleExternalTupleSet extTup7 = null;
-        SimpleExternalTupleSet extTup8 = null;
-        
-        
-        
-        
-        
-        try {
-            pq1 = parser.parseQuery(q1, null);
-            pq2 = parser.parseQuery(q2, null);
-            pq3 = parser.parseQuery(q3, null);
-            pq4 = parser.parseQuery(q4, null);
-            pq5 = parser.parseQuery(q5, null);
-            pq6 = parser.parseQuery(q6, null);
-            pq7 = parser.parseQuery(q7, null);
-            pq8 = parser.parseQuery(q8, null);
-            pq9 = parser.parseQuery(q9, null);
-           
-
-            extTup1 = new SimpleExternalTupleSet((Projection) 
pq2.getTupleExpr());
-            extTup2 = new SimpleExternalTupleSet((Projection) 
pq3.getTupleExpr());
-            extTup3 = new SimpleExternalTupleSet((Projection) 
pq4.getTupleExpr());
-            extTup4 = new SimpleExternalTupleSet((Projection) 
pq5.getTupleExpr());
-            extTup5 = new SimpleExternalTupleSet((Projection) 
pq6.getTupleExpr());
-            extTup6 = new SimpleExternalTupleSet((Projection) 
pq7.getTupleExpr());
-            extTup7 = new SimpleExternalTupleSet((Projection) 
pq8.getTupleExpr());
-            extTup8 = new SimpleExternalTupleSet((Projection) 
pq9.getTupleExpr());
-            
-          
-        } catch (MalformedQueryException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        
-        List<ExternalTupleSet> indexList = Lists.newArrayList();
-        indexList.add(extTup1);
-        indexList.add(extTup2);
-        indexList.add(extTup3);
-        indexList.add(extTup4);
-        indexList.add(extTup5);
-        indexList.add(extTup6);
-        indexList.add(extTup7);
-        indexList.add(extTup8);
-        
-        
-        ValidIndexCombinationGenerator vic = new 
ValidIndexCombinationGenerator(pq1.getTupleExpr());
-        Iterator<List<ExternalTupleSet>> combos = 
vic.getValidIndexCombos(indexList);
-        int size = 0;
-        while(combos.hasNext()) {
-            combos.hasNext();
-            size++;
-            List<ExternalTupleSet> eSet = combos.next();
-            System.out.println("********************************************");
-            for(ExternalTupleSet e: eSet) {
-                System.out.println(e.getTupleExpr());
-            }
-            System.out.println("********************************************");
-        }
-        
-        System.out.println("size is " + size + " has next " + 
combos.hasNext());
-    }
-    
-    
-    
-    
-    
-    private static class SpFilterCollector extends 
QueryModelVisitorBase<RuntimeException> {
-
-        private Set<QueryModelNode> spFilterSet = Sets.newHashSet();
-
-        
-        public int getNodeNumber() {
-            return spFilterSet.size();
-        }
-        
-        
-        public Set<QueryModelNode> getSpFilterSet() {
-            return spFilterSet;
-        }
-        
-        
-        @Override
-        public void meet(StatementPattern node) {
-            
-            spFilterSet.add(node);
-            return;
-            
-        }
-        
-        
-        @Override
-        public void meet(Filter node) {
-            
-            spFilterSet.add(node.getCondition());
-            node.getArg().visit(this);
-        }  
-        
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
deleted file mode 100644
index 7e72821..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexPlanValidator/VarConstantIndexListPruner.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package mvm.rya.indexing.IndexPlanValidator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-
-import org.openrdf.query.algebra.Filter;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.TupleExpr;
-import org.openrdf.query.algebra.ValueConstant;
-import org.openrdf.query.algebra.Var;
-import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
-
-import com.beust.jcommander.internal.Maps;
-import com.google.common.collect.Sets;
-
-
-
-
-public class VarConstantIndexListPruner implements IndexListPruner {
-
-    private Map<String, Integer> queryConstantMap;
-    private int querySpCount;
-    private int queryFilterCount;
-
-    public VarConstantIndexListPruner(TupleExpr te) {
-
-        ConstantCollector cc = new ConstantCollector();
-        te.visit(cc);
-        this.queryConstantMap = cc.getConstantMap();
-        querySpCount = cc.getSpCount();
-        queryFilterCount = cc.getFilterCount();
-    }
-
-    public Set<ExternalTupleSet> getRelevantIndices(List<ExternalTupleSet> 
indexList) {
-
-        Set<ExternalTupleSet> relIndexSet = Sets.newHashSet();
-
-        for (ExternalTupleSet e : indexList) {
-
-            if (isRelevant(e.getTupleExpr())) {
-                relIndexSet.add(e);
-            }
-
-        }
-
-        return relIndexSet;
-    }
-
-    private boolean isRelevant(TupleExpr index) {
-
-        ConstantCollector cc = new ConstantCollector();
-        index.visit(cc);
-        
-        Map<String, Integer> indexConstantMap = cc.getConstantMap();
-        int indexSpCount = cc.getSpCount();
-        int indexFilterCount = cc.getFilterCount();
-        Set<String> indexConstants = indexConstantMap.keySet();
-
-        if ((indexSpCount > querySpCount) || (indexFilterCount > 
queryFilterCount) 
-                || !(Sets.intersection(indexConstants, 
queryConstantMap.keySet()).equals(indexConstants))) {
-            return false;
-        }
-
-        for (String s : indexConstants) {
-            if (indexConstantMap.get(s) > queryConstantMap.get(s)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-
-    private static class ConstantCollector extends 
QueryModelVisitorBase<RuntimeException> {
-
-        private Map<String, Integer> constantMap = Maps.newHashMap();
-        private int spCount = 0;
-        private int filterCount = 0;
-        
-        
-        @Override
-        public void meet(StatementPattern node) throws RuntimeException {
-            
-           spCount++;
-           super.meet(node);
-
-        }
-        
-        
-        @Override
-        public void meet(Filter node) throws RuntimeException {
-            
-           filterCount++;
-           super.meet(node);
-
-        }
-        
-        
-        
-        
-        @Override
-        public void meet(Var node) throws RuntimeException {
-            
-            if (node.isConstant()) {
-                String key = node.getValue().toString();
-                if(constantMap.containsKey(key)){
-                    int count = constantMap.get(key);
-                    count += 1;
-                    constantMap.put(key, count);
-                } else {
-                    constantMap.put(key, 1);
-                }
-            }
-
-        }
-        
-        
-        public void meet(ValueConstant node) throws RuntimeException {
-            
-            String key = node.getValue().toString();
-            
-            if(constantMap.containsKey(key)) {
-                int count = constantMap.get(key);
-                count += 1;
-                constantMap.put(key, count);
-            } else {
-                constantMap.put(key,1);
-            }
-            
-        }
-        
-
-        public Map<String, Integer> getConstantMap() {
-            return constantMap;
-        }
-        
-        public int getSpCount(){
-            return spCount;
-        }
-
-        
-        public int getFilterCount() {
-            return filterCount;
-        }
-        
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java
deleted file mode 100644
index 1d4c4bb..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingExpr.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.Set;
-
-import org.openrdf.model.URI;
-import org.openrdf.model.Value;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.Var;
-
-import com.google.common.collect.Sets;
-
-public class IndexingExpr {
-
-    private final URI function;
-    private final Value[] arguments;
-    private final StatementPattern spConstraint;
-
-    public IndexingExpr(URI function, StatementPattern spConstraint, Value... 
arguments) {
-        this.function = function;
-        this.arguments = arguments;
-        this.spConstraint = spConstraint;
-    }
-
-    public URI getFunction() {
-        return function;
-    }
-
-    public Value[] getArguments() {
-        return arguments;
-    }
-
-    public StatementPattern getSpConstraint() {
-        return spConstraint;
-    }
-
-
-    public Set<String> getBindingNames() {
-        //resource and match variable for search are already included as 
standard result-bindings
-        Set<String> bindings = Sets.newHashSet();
-
-        for(Var v: spConstraint.getVarList()) {
-            if(!v.isConstant()) {
-                bindings.add(v.getName());
-            }
-        }
-        return bindings;
-    }
-    
-    
-    @Override
-    public boolean equals(Object other) {
-        if (!(other instanceof IndexingExpr)) {
-            return false;
-        }
-        IndexingExpr arg = (IndexingExpr) other;
-        return (this.function.equals(arg.function)) && 
(this.spConstraint.equals(arg.spConstraint))
-                && (this.arguments.equals(arg.arguments));
-    }
-    
-    
-    @Override
-    public int hashCode() {
-        int result = 17;
-        result = 31*result + function.hashCode();
-        result = 31*result + spConstraint.hashCode();
-        result = 31*result + arguments.hashCode();
-        
-        return result;
-    }
-    
-}
-
-    
-

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java 
b/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java
deleted file mode 100644
index e96b8a3..0000000
--- 
a/extras/indexing/src/main/java/mvm/rya/indexing/IndexingFunctionRegistry.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import mvm.rya.indexing.accumulo.geo.GeoConstants;
-
-import org.openrdf.model.URI;
-import org.openrdf.model.impl.URIImpl;
-import org.openrdf.query.algebra.ValueConstant;
-import org.openrdf.query.algebra.ValueExpr;
-import org.openrdf.query.algebra.Var;
-
-import com.google.common.collect.Maps;
-
-public class IndexingFunctionRegistry {
-
-    
-    private static final Map<URI, FUNCTION_TYPE> SEARCH_FUNCTIONS = 
Maps.newHashMap();
-    
-    static {
-        
-        String TEMPORAL_NS = "tag:rya-rdf.org,2015:temporal#";         
-
-        SEARCH_FUNCTIONS.put(new 
URIImpl(TEMPORAL_NS+"after"),FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"before"), 
FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"equals"), 
FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"beforeInterval"), 
FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"afterInterval"), 
FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"insideInterval"), 
FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"hasBeginningInterval"), 
FUNCTION_TYPE.TEMPORAL);
-        SEARCH_FUNCTIONS.put(new URIImpl(TEMPORAL_NS+"hasEndInterval"), 
FUNCTION_TYPE.TEMPORAL);
-        
-        
-        SEARCH_FUNCTIONS.put(new URIImpl("http://rdf.useekm.com/fts#text";), 
FUNCTION_TYPE.FREETEXT);
-
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_EQUALS, FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_DISJOINT, FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_INTERSECTS, 
FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_TOUCHES, FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_WITHIN, FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_CONTAINS, FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_OVERLAPS, FUNCTION_TYPE.GEO);
-        SEARCH_FUNCTIONS.put(GeoConstants.GEO_SF_CROSSES, FUNCTION_TYPE.GEO);
-
-    }
-    
-    public enum FUNCTION_TYPE {GEO, TEMPORAL, FREETEXT};
-    
-    
-    public static Set<URI> getFunctions() {
-        return SEARCH_FUNCTIONS.keySet();
-    }
-    
-    
-    public static Var getResultVarFromFunctionCall(URI function, 
List<ValueExpr> args) {
-        
-        FUNCTION_TYPE type = SEARCH_FUNCTIONS.get(function);
-        
-        switch(type) {
-        case GEO: 
-            return findBinaryResultVar(args);
-        case FREETEXT:
-            return findLiteralResultVar(args);
-        case TEMPORAL:
-            return findBinaryResultVar(args);
-        default:
-            return null;
-        }
-        
-    }
-    
-    
-    public static FUNCTION_TYPE getFunctionType(URI func) {
-        return SEARCH_FUNCTIONS.get(func);
-    }
-    
-    
-    
-    private static boolean isUnboundVariable(ValueExpr expr) {
-        return expr instanceof Var && !((Var)expr).hasValue();
-    }
-    
-    private static boolean isConstant(ValueExpr expr) {
-        return expr instanceof ValueConstant || (expr instanceof Var && 
((Var)expr).hasValue());
-    }
-    
-    
-    private static Var findBinaryResultVar(List<ValueExpr> args) {
-     
-        if (args.size() >= 2) {
-            ValueExpr arg1 = args.get(0);
-            ValueExpr arg2 = args.get(1);
-            if (isUnboundVariable(arg1) && isConstant(arg2))
-                return (Var) arg1;
-            else if (isUnboundVariable(arg2) && isConstant(arg1))
-                return (Var) arg2;
-        }
-        return null;
-    }
-    
-    
-    private static Var findLiteralResultVar(List<ValueExpr> args) {
-        if (args.size() >= 2) {
-            ValueExpr arg1 = args.get(0);
-            ValueExpr arg2 = args.get(1);
-            if (isUnboundVariable(arg1) && isConstant(arg2))
-                return (Var)arg1;
-        }
-        return null;
-    }
-    
-    
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5a03ef61/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java 
b/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java
deleted file mode 100644
index d61c5ae..0000000
--- a/extras/indexing/src/main/java/mvm/rya/indexing/IteratorFactory.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package mvm.rya.indexing;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import info.aduna.iteration.CloseableIteration;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import org.openrdf.model.Resource;
-import org.openrdf.model.Statement;
-import org.openrdf.model.URI;
-import org.openrdf.query.BindingSet;
-import org.openrdf.query.QueryEvaluationException;
-import org.openrdf.query.algebra.QueryModelNode;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.Var;
-import org.openrdf.query.impl.MapBindingSet;
-
-
-//Given StatementPattern constraint and SearchFunction associated with an 
Indexing Node,
-//creates appropriate StatementConstraints object from StatementPattern 
constraint and
-//binding set and then uses SearchFunction to delegate query to appropriate 
index.
-//Resulting iterator over statements is then converted to an iterator over 
binding sets
-public class IteratorFactory {
-
-    public static CloseableIteration<BindingSet, QueryEvaluationException> 
getIterator(final StatementPattern match, 
-            final BindingSet bindings, final String queryText, final 
SearchFunction searchFunction) {
-        return new CloseableIteration<BindingSet, QueryEvaluationException>() {
-
-            private boolean isClosed = false;
-            private CloseableIteration<Statement, QueryEvaluationException> 
statementIt = null;
-
-            private String subjectBinding = match.getSubjectVar().getName();
-            private String predicateBinding = 
match.getPredicateVar().getName();
-            private String objectBinding = match.getObjectVar().getName();
-            private String contextBinding = null;
-
-            private void performQuery() throws QueryEvaluationException {
-
-                StatementContraints contraints = new StatementContraints();
-
-                // get the context (i.e. named graph) of the statement and use 
that in the query
-                QueryModelNode parentNode = 
match.getSubjectVar().getParentNode();
-                if (parentNode instanceof StatementPattern) {
-                    StatementPattern parentStatement = (StatementPattern) 
parentNode;
-                    Var contextVar = parentStatement.getContextVar();
-                    if (contextVar != null) {
-                        contextBinding = contextVar.getName();
-                        Resource context = (Resource) contextVar.getValue();
-                        contraints.setContext(context);
-                    }
-                }
-
-                // get the subject constraint
-                if (match.getSubjectVar().isConstant()) {
-                    // get the subject binding from the filter/statement pair
-                    Resource subject = (Resource) 
match.getSubjectVar().getValue();
-                    contraints.setSubject(subject);
-                } else if (bindings.hasBinding(subjectBinding)) {
-                    // get the subject binding from the passed in bindings (eg 
from other statements/parts of the tree)
-                    Resource subject = (Resource) 
bindings.getValue(subjectBinding);
-                    contraints.setSubject(subject);
-                }
-
-                // get the predicate constraint
-                if (match.getPredicateVar().isConstant()) {
-                    // get the predicate binding from the filter/statement pair
-                    Set<URI> predicates = new 
HashSet<URI>(getPredicateRestrictions(match.getPredicateVar()));
-                    contraints.setPredicates(predicates);
-                } else if (bindings.hasBinding(predicateBinding)) {
-                    // get the predicate binding from the passed in bindings 
(eg from other statements/parts of the tree)
-                    URI predicateUri = (URI) 
bindings.getValue(predicateBinding);
-                    Set<URI> predicates = Collections.singleton(predicateUri);
-                    contraints.setPredicates(predicates);
-                }
-
-                statementIt = searchFunction.performSearch(queryText, 
contraints);
-            }
-
-            @Override
-            public boolean hasNext() throws QueryEvaluationException {
-                if (statementIt == null) {
-                    performQuery();
-                }
-                return statementIt.hasNext();
-            }
-
-            @Override
-            public BindingSet next() throws QueryEvaluationException {
-                if (!hasNext() || isClosed) {
-                    throw new NoSuchElementException();
-                }
-
-                Statement statment = statementIt.next();
-
-                MapBindingSet bset = new MapBindingSet();
-                if (!subjectBinding.startsWith("-const"))
-                    bset.addBinding(subjectBinding, statment.getSubject());
-                if (!predicateBinding.startsWith("-const"))
-                    bset.addBinding(predicateBinding, statment.getPredicate());
-                if (!objectBinding.startsWith("-const"))
-                    bset.addBinding(objectBinding, statment.getObject());
-                if (contextBinding != null && 
!contextBinding.startsWith("-const"))
-                    bset.addBinding(contextBinding, statment.getContext());
-
-                // merge with other bindings.
-                for (String name : bindings.getBindingNames()) {
-                    bset.addBinding(name, bindings.getValue(name));
-                }
-
-                return bset;
-            }
-
-            @Override
-            public void remove() throws QueryEvaluationException {
-                throw new UnsupportedOperationException();
-
-            }
-
-            @Override
-            public void close() throws QueryEvaluationException {
-                if (statementIt != null) {
-                    statementIt.close();
-                }
-                isClosed = true;
-            }
-
-        };
-
-    }
-   
-    public static Collection<URI> getPredicateRestrictions(Var predicate) {
-        if (predicate.hasValue())
-            return Collections.singleton((URI) predicate.getValue());
-        return Collections.emptyList();
-    }
-}

Reply via email to