Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B896C200BA4 for ; Sat, 15 Oct 2016 22:06:31 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id B6E79160AF1; Sat, 15 Oct 2016 20:06:31 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 87654160AD9 for ; Sat, 15 Oct 2016 22:06:29 +0200 (CEST) Received: (qmail 89108 invoked by uid 500); 15 Oct 2016 20:06:28 -0000 Mailing-List: contact commits-help@rya.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@rya.incubator.apache.org Delivered-To: mailing list commits@rya.incubator.apache.org Received: (qmail 89099 invoked by uid 99); 15 Oct 2016 20:06:28 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 15 Oct 2016 20:06:28 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 294D1C0232 for ; Sat, 15 Oct 2016 20:06:28 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -6.219 X-Spam-Level: X-Spam-Status: No, score=-6.219 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-2.999] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id 2g-1L_3XCVlv for ; Sat, 15 Oct 2016 20:06:25 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id E689060CD4 for ; Sat, 15 Oct 2016 20:06:22 +0000 (UTC) Received: (qmail 88939 invoked by uid 99); 15 Oct 2016 20:06:22 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 15 Oct 2016 20:06:22 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id C98A5E0556; Sat, 15 Oct 2016 20:06:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: mihalik@apache.org To: commits@rya.incubator.apache.org Date: Sat, 15 Oct 2016 20:06:31 -0000 Message-Id: <05c50ec36fd6414781c02c71807b4be5@git.apache.org> In-Reply-To: <1ec979c2075c47788c67c007b2f73212@git.apache.org> References: <1ec979c2075c47788c67c007b2f73212@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [11/69] [abbrv] [partial] incubator-rya git commit: RYA-198 Renaming Files archived-at: Sat, 15 Oct 2016 20:06:31 -0000 http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/QueryVariableNormalizer.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/QueryVariableNormalizer.java b/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/QueryVariableNormalizer.java deleted file mode 100644 index a3e6e04..0000000 --- a/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/QueryVariableNormalizer.java +++ /dev/null @@ -1,1180 +0,0 @@ -package mvm.rya.indexing.pcj.matching; - -/* - * 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.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import org.openrdf.model.Literal; -import org.openrdf.model.Value; -import org.openrdf.model.impl.ValueFactoryImpl; -import org.openrdf.query.algebra.Filter; -import org.openrdf.query.algebra.NAryValueOperator; -import org.openrdf.query.algebra.ProjectionElem; -import org.openrdf.query.algebra.ProjectionElemList; -import org.openrdf.query.algebra.QueryModelNode; -import org.openrdf.query.algebra.StatementPattern; -import org.openrdf.query.algebra.TupleExpr; -import org.openrdf.query.algebra.ValueConstant; -import org.openrdf.query.algebra.ValueExpr; -import org.openrdf.query.algebra.Var; -import org.openrdf.query.algebra.helpers.QueryModelVisitorBase; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -public class QueryVariableNormalizer { - - - /** - * @param tuple1 - * tuple expression from a parsed query - * @param tuple2 - * tuple expression from a parsed query (the proposed index whose - * variables are to be relabeled) - * @return list of all possible tuples obtained by substituting the - * variables of proposed index with the variables from query - * @throws Exception - * @throws IllegalArgumentException - */ - public static List getNormalizedIndex(TupleExpr tuple1, TupleExpr tuple2) throws Exception { - - List nodes1, nodes2; - TreeMap> queryMap1, indexMap1; - List> varChanges = new ArrayList>(); - List tupleList = new ArrayList(); - - - - // if tuples are equal, no need to do anything - if (tuple1.equals(tuple2)) { - tupleList.add((TupleExpr) tuple1.clone()); - return tupleList; - } - - - NormalizeQueryVisitor tupNVis = new NormalizeQueryVisitor(false); - NormalizeQueryVisitor indexNVis = new NormalizeQueryVisitor(true); - tuple1.visit(tupNVis); - tuple2.visit(indexNVis); - - - TupleExpr tuple; - queryMap1 = tupNVis.getMap(); - indexMap1 = indexNVis.getMap(); - - // TreeMaps that used for comparators - TreeMap[] trees = (TreeMap[]) new TreeMap[4]; - for (int i = 0; i < 4; i++) { - trees[i] = new TreeMap(); - } - - trees[0] = tupNVis.getKeyMap(); // query tuple variable count - trees[2] = indexNVis.getKeyMap(); // index tuple variable count - - - // if query does not contain as many constant Vars as index, - // normalization not possible. -// if (!(trees[0].keySet().size() >= trees[2].keySet().size())) { -// System.out.println("In here:1"); -// return tupleList; -// } - - // sort keys according to size of associated StatementPattern list - // this optimization ensures that initial list of HashMaps (possible - // variable substitutions) - // is as small as possible - // Maybe add additional criteria to comparator taking into account size - // of query bin lists - Set keys = indexMap1.keySet(); - List keyList = new ArrayList(keys); - Collections.sort(keyList, new ConstantKeyComp(indexMap1, queryMap1)); - - // iterate through constant values associated with smaller tuple, - // check that larger tuple constants these constants, and use lists - // of associated statement patterns to begin to construct variable - // substitutions - // that are consistent - - for (String s : keyList) { - if (queryMap1.containsKey(s)) { - nodes1 = queryMap1.get(s); - nodes2 = indexMap1.get(s); - - - if (!(nodes1.size() >= nodes2.size())) { -// System.out.println("In here: 2"); -// System.out.println("Node lists are " + nodes1 + " and " + -// nodes2); - return tupleList; - } - - trees[1] = getListVarCnt(nodes1, tupNVis.getVariableMap()); // query - // list - // variable - // count - trees[3] = getListVarCnt(nodes2, indexNVis.getVariableMap()); // index - // list - // variable - // count - Collections.sort(nodes1, new CountComp(trees[1], trees[0])); - Collections.sort(nodes2, new CountComp(trees[3], trees[2])); - - varChanges = statementCompare(nodes1, nodes2, varChanges, trees); - - if (varChanges.size() == 0) { - return tupleList; - } - } - - else { - return tupleList; - } - - } - - List filters2 = indexNVis.getFilters(); - // determine if index contains filters whose variables need to be relabeled - if (filters2.size() != 0) { - List filters1 = tupNVis.getFilters(); - // only attempt to normalize variables if query contains more filters than index - if (filters1.size() >= filters2.size()) { - Collections.sort(filters1, new FilterComp()); - Collections.sort(filters2, new FilterComp()); - - varChanges = statementCompare(filters1, filters2, varChanges, trees); - - } - } - - List> varChangeSet = new ArrayList>(); - - for (HashMap s : varChanges) { - if (!varChangeSet.contains(s)) { - varChangeSet.add(s); - } - - } - - - ValueMapVisitor valMapVis = new ValueMapVisitor(); - tuple1.visit(valMapVis); - Map valMap = valMapVis.getValueMap(); - - - for (HashMap s : varChangeSet) { - //System.out.println(s); - tuple = tuple2.clone(); - replaceTupleVariables(s, tuple, valMap); - tupleList.add(tuple); - } - - return tupleList; - - } - - /** - * Produces a list of all possible substitutions stored in HashMaps that are - * consistent with the two lists of statement patterns - * - * @param qArray - * list of Statement nodes from query tuple - * @param iArray - * list of Statement nodes from index tuple - * @param hMaps - * HashMap containing variable substitutions - * @param trees - * TreeMaps used for statement pattern node ordering - * @return - */ - private static List> statementCompare(List qArray, - List iArray, List> hMaps, TreeMap[] trees) { - - if (hMaps.size() == 0) { - HashMap, Boolean> mapConsistent = new HashMap, Boolean>(); - HashMap hMap = new HashMap(); - mapConsistent.put(hMap, false); - evaluateMap(qArray, iArray, hMap, hMaps, mapConsistent, trees); - - return hMaps; - } - - else { - - ArrayList> tempMaps = Lists.newArrayList(hMaps); - HashMap, Boolean> mapConsistent = new HashMap, Boolean>(); - for (HashMap s : hMaps) { - mapConsistent.put(s, false); - } - for (HashMap s : hMaps) { - evaluateMap(qArray, iArray, s, tempMaps, mapConsistent, trees); - } - - return tempMaps; - - } - } - - - /** - * Adds or removes HashMap substitution schemes to the list of substitutions - * schemes depending on whether or not they are consistent with the two - * lists of statement patterns - * - * @param qArray - * List of StatementPatterns associated with query array - * @param iArray - * List of StatementPatterns associated with index array - * @param hMap - * HashMap of substitutions to be analyzed for consistent and - * added or removed - * @param hMaps - * List of HashMaps containing substitution schemes - * @param trees - * Array of TreeMaps used for comparison of StatementPattern - * nodes - */ - private static void evaluateMap(List qArray, List iArray, - HashMap hMap, List> hMaps, - HashMap, Boolean> mapConsistent, TreeMap[] trees) throws IllegalArgumentException { - - // if all nodes in indexArray have been exhausted, add map of substitutions to - // list of possible substitution schemes. - if (iArray.size() == 0) { - if (!hMaps.contains(hMap)) { - hMaps.add(hMap); - } - mapConsistent.put(hMap, true); - return; - } - - // for a given constant key, iterate through possible combinations of statement pattern nodes contained in associated query list and - // index list to generate all possible substitution schemes. - for (int i = 0; i < iArray.size(); i++) { - for (int j = 0; j < qArray.size(); j++) { - //System.out.println("Query list is " + qArray+ " and index list is " + iArray); - - QueryModelNode node1 = qArray.get(j); - QueryModelNode node2 = iArray.get(i); - // if lists contain statement patterns, check to see if two given statement patterns have same structure - // independent of variables names (same constants in same place, non constant Vars in same place) - if ((node1 instanceof StatementPattern) && (node2 instanceof StatementPattern)) { - if (genConstantCompare((StatementPattern) node1, (StatementPattern) node2)) { - - List variables1 = ((StatementPattern)node1).getVarList(); - List variables2 = ((StatementPattern)node2).getVarList(); - - List> vars = genGetCommonVars(variables1, variables2); - List vars1 = vars.get(0); - List vars2 = vars.get(1); - - if (listConsistent(vars1, vars2, hMap)) { - - HashMap hashMap = Maps.newHashMap(hMap); - putVars(vars1, vars2, hashMap); - - List queryArray = Lists.newArrayList(qArray); - List indexArray = Lists.newArrayList(iArray); - - indexArray.remove(i); - queryArray.remove(j); - - evaluateMap(queryArray, indexArray, hashMap, hMaps, mapConsistent, trees); - } - } - } // if lists contain filters, see if filters have same structure independent of variables names - //(check that conditions are same independent of variable names). - else if ((node1 instanceof Filter) && (node2 instanceof Filter)) { - try { - if (filterCompare((Filter) node1, (Filter) node2)) { - - List variables1 = FilterVarValueCollector.process(((Filter) node1).getCondition()); - List variables2 = FilterVarValueCollector.process(((Filter) node2).getCondition()); - - List> vars = filterCommonVars(variables1, variables2); - List vars1 = vars.get(0); - List vars2 = vars.get(1); - - if (listConsistent(vars1, vars2, hMap)) { - - HashMap hashMap = Maps.newHashMap(hMap); - putVars(vars1, vars2, hashMap); - - List queryArray = Lists.newArrayList(qArray); - List indexArray = Lists.newArrayList(iArray); - - indexArray.remove(i); - queryArray.remove(j); - - evaluateMap(queryArray, indexArray, hashMap, hMaps, mapConsistent, trees); - } - - } - } catch (Exception e) { - System.out.println("Invalid Filter! " + e); - } - - } else { - throw new IllegalArgumentException("Invalid query tree."); - } - - } - } - if (mapConsistent.containsKey(hMap)) - if (mapConsistent.get(hMap) == false) { - hMaps.remove(hMap); - } - return; - - } - - - - - private static List> genGetCommonVars(List vars1, List vars2) { - - - List> varList = Lists.newArrayList(); - List varList1 = Lists.newArrayList(); - List varList2 = Lists.newArrayList(); - - - - for (int i = 0; i < vars1.size(); i++) { - - if (!vars1.get(i).isConstant() && !vars2.get(i).isConstant()) { - - varList1.add(vars1.get(i).getName()); - varList2.add(vars2.get(i).getName()); - - } else if(vars1.get(i).isConstant() && !vars2.get(i).isConstant()) { - varList1.add(vars1.get(i).getName()); - varList2.add(vars2.get(i).getName()); - } - - } - - varList.add(varList1); - varList.add(varList2); - - return varList; - } - - - private static List> filterCommonVars(List vars1, List vars2) { - - - List> varList = Lists.newArrayList(); - List varList1 = Lists.newArrayList(); - List varList2 = Lists.newArrayList(); - - - - for (int i = 0; i < vars1.size(); i++) { - - if ((vars1.get(i) instanceof ValueConstant) && (vars2.get(i) instanceof Var)) { - - ValueConstant vc = (ValueConstant) vars1.get(i); - String s = vc.getValue().toString(); - if(vc.getValue() instanceof Literal) { - s = s.substring(1, s.length() - 1); - } - s = "-const-" + s; - varList1.add(s); - varList2.add(((Var)vars2.get(i)).getName()); - } else if(!(vars1.get(i) instanceof ValueConstant)){ - if (!((Var) vars1.get(i)).isConstant() && (vars2.get(i) instanceof Var) - && !((Var) vars2.get(i)).isConstant()) { - varList1.add(((Var) vars1.get(i)).getName()); - varList2.add(((Var) vars2.get(i)).getName()); - } else if (((Var) vars1.get(i)).isConstant() && (vars2.get(i) instanceof Var) - && !((Var) vars2.get(i)).isConstant()) { - varList1.add(((Var) vars1.get(i)).getName()); - varList2.add(((Var) vars2.get(i)).getName()); - } - } - - } - - varList.add(varList1); - varList.add(varList2); - - return varList; - } - - - - private static boolean genConstantCompare(StatementPattern queryNode, StatementPattern indexNode) { - - - - ArrayList vars1 = (ArrayList) queryNode.getVarList(); - ArrayList vars2 = (ArrayList) indexNode.getVarList(); - - - for (int i = 0; i < vars1.size(); i++) { - - if (vars1.get(i).isConstant() && vars2.get(i).isConstant()) { - - if (!vars1.get(i).equals(vars2.get(i))) { - return false; - - } - - } else if(!vars1.get(i).isConstant() && vars2.get(i).isConstant() ) { - return false; - } - - } - - return true; - - } - - - - - /** - * Method checks that substituting val for key is consistent with - * substitutions in hMap - * - * @param val - * substituting variable - * @param key - * variable to be substituted for - * @param hMap - * HashMap containing the substitutions to be made - * @return true if the proposed substitution is consistent with hMap, and - * false otherwise - */ - private static boolean checkVariables(String val, String key, HashMap hMap) { - - if (!hMap.containsKey(key) && !hMap.containsValue(val)) { - - return true; - } else if (!hMap.containsKey(key) && hMap.containsValue(val) || hMap.containsKey(key) - && !hMap.containsValue(val)) { - - return false; - } else { - - if (hMap.get(key).equals(val)) { - return true; - } else - return false; - - } - - } - - - - - - - // given two lists of variables and a HashMap, checks to see if substituting variable names in varList1 - // for variable names in varList2 is consistent with map. - private static boolean listConsistent(List varList1, List varList2, HashMap hMap) { - - for (int k = 0; k < varList1.size(); k++) { - - String s1 = varList1.get(k); - String s2 = varList2.get(k); - if (!checkVariables(s1, s2, hMap)) { - return false; - } - } - return true; - - } - - - // given two lists of variables and a HashMap, substitutes variable names in varList1 - // for variable names in varList2 by updating map. - private static void putVars(List varList1, List varList2, HashMap hashMap) { - - for (int k = 0; k < varList1.size(); k++) { - String s1 = varList1.get(k); - String s2 = varList2.get(k); - if (!hashMap.containsKey(s2)) { - - hashMap.put(s2, s1); - } - } - - } - - - /** - * @param filter1 - * @param filter2 - * @return true if filter2 is equal to filter1 once variables in filter2 are replaced with variables and constants - * occurring in same position in filter1 (allows filter1 to contain constants where filter2 contains variables) - * @throws Exception - */ - private static boolean filterCompare(Filter filter1, Filter filter2) throws Exception { - - NodeCollector nc1 = new NodeCollector(); - NodeCollector nc2 = new NodeCollector(); - - filter1.getCondition().visit(nc1); - filter2.getCondition().visit(nc2); - - List nodeList1 = nc1.getNodes(); - List nodeList2 = nc2.getNodes(); - - if (nodeList1.size() != nodeList2.size()) { - return false; - } - - for (int i = 0; i < nodeList1.size(); i++) { - if ((nodeList1.get(i) instanceof ValueConstant) && (nodeList2.get(i) instanceof Var)) { - continue; - } else { - if (nodeList1.get(i).getClass() != nodeList2.get(i).getClass()) { - return false; - } - } - } - - return true; - - } - - /** - * Given a HashMap containing variable substitutions and a tuple, this - * method uses a visitor to iterate through the tuple and make the necessary - * substitutions - * - * @param varChanges - * @param tuple - * @throws Exception - */ - private static void replaceTupleVariables(HashMap varChanges, TupleExpr tuple, Map valMap) throws Exception { - - TupleVarRenamer visitor = new TupleVarRenamer(varChanges, valMap); - tuple.visit(visitor); - } - - /** - * Given a list of StatementPattern nodes and a TreeMap containing the - * variables in the tuple, this method counts the number of occurrences of - * each variable in the given list - * - * @param list - * List of StatementPattern nodes - * @param cnt - * TreeMap whose keys are tuple variables and whose value is 0 - * @return TreeMap whose keys are tuple variables and whose value is the - * number of times variable appears in list - */ - private static TreeMap getListVarCnt(List list, TreeMap cnt) { - - int count = 0; - - for (QueryModelNode qNode : list) { - List vars = VarCollector.process(qNode); - for (String s : vars) { - count = cnt.get(s); - count++; - cnt.put(s, count); - } - - } - - return cnt; - - } - - /** - * Given a StatementPattern and two TreeMaps containing the variable counts - * associated with an associated list and tuple, this method assigns a - * number to the StatementPattern node which is determined by the number of - * times its variables (non-constant Vars) appear in the list and throughout - * the tuple - * - * @param sp - * StatementPattern node - * @param listCount - * TreeMap with variable count info associated with list - * @param tupCount - * TreeMap with variable count info associated with tuple - * @return count info associated with StatementPattern node - */ - private static int getSpCount(QueryModelNode sp, TreeMap listCount, - TreeMap tupCount) { - - int spCount = 0; - - List vars = VarCollector.process(sp); - for (String var : vars) { - spCount = spCount + listCount.get(var) + tupCount.get(var); - } - return spCount; - - } - - /** - * @return NormalizedQueryVisitor - */ - public static NormalizeQueryVisitor getVisitor(boolean isIndex) { - return new NormalizeQueryVisitor(isIndex); - - } - - - // ********************Definition of Comparators**************** - // ************************************************************* - public static class CountComp implements Comparator { - - private TreeMap lCount, tupleCount; - - public CountComp(TreeMap lCount, TreeMap tupleCount) { - - this.lCount = lCount; - this.tupleCount = tupleCount; - } - - // compares StatementPattern nodes based on frequency at which their - // variables appear in other StatementPattern nodes in associated - // tuple and list - - public int compare(QueryModelNode sp1, QueryModelNode sp2) { - - return -(getSpCount(sp1, lCount, tupleCount) - getSpCount(sp2, lCount, tupleCount)); - } - - } - - // comparator to sort constant key list according to size of associated - // StatementPattern array - public static class ConstantKeyComp implements Comparator { - - private TreeMap> indexMap, queryMap; - - public ConstantKeyComp(TreeMap> indexMap, - TreeMap> queryMap) { - - this.indexMap = indexMap; - this.queryMap = queryMap; - - } - - // Compare method to sort keys of HashMap - // for index based on whether key also appears in query Map--if key does - // not appear - // in query map, key is given value 0 so it is moved to front when key - // list is sorted. - // If key appears in query map, key is assigned value that is the sum of - // the size of the associated - // lists in index map and query map. - - public int compare(String key1, String key2) { - - int len1 = 0; - int len2 = 0; - - if (queryMap.containsKey(key1) && indexMap.containsKey(key1)) - len1 = indexMap.get(key1).size() + queryMap.get(key1).size(); - if (queryMap.containsKey(key2) && indexMap.containsKey(key2)) - len2 = indexMap.get(key2).size() + queryMap.get(key2).size(); - - return (len1 - len2); - - } - - } - - public static class FilterComp implements Comparator { - - public int compare(QueryModelNode q1, QueryModelNode q2) { - - int size1 = VarCollector.process(q1).size(); - int size2 = VarCollector.process(q2).size(); - - return size1 - size2; - - } - - } - - // ******************** Definition of Visitors***************** - // ************************************************************ - - - - public static class ValueMapVisitor extends QueryModelVisitorBase { - - - private Map valMap = Maps.newHashMap(); - - - - public Map getValueMap() { - return valMap; - } - - public void meet(Var var) { - if (var.isConstant()) { - valMap.put(var.getName(),var.getValue()); - } - - - } - - public void meet(ValueConstant val) { - - String s = val.getValue().toString(); - - if (val.getValue() instanceof Literal) { - s = s.substring(1, s.length() - 1); - } - - s = "-const-" + s; - valMap.put(s, val.getValue()); - } - - } - - - - - - - - public static class NodeCollector extends QueryModelVisitorBase { - - - private List nodes = Lists.newArrayList(); - - public List getNodes() { - return nodes; - } - - @Override - public void meetNode(QueryModelNode node) throws Exception { - nodes.add(node); - super.meetNode(node); - } - - } - - public static class SpVarReNamer extends QueryModelVisitorBase { - - private final HashMap hMap; - private Map valMap; - private final ValueFactoryImpl vf = new ValueFactoryImpl(); - - public SpVarReNamer(HashMap hMap, Map valMap) { - this.valMap = valMap; - this.hMap = hMap; - } - - public void meet(Var var) { - if (!var.isConstant() && hMap.containsKey(var.getName())) { - String val = hMap.get(var.getName()); - if (val.startsWith("-const-")) { - var.setName(val); - var.setValue(valMap.get(val)); - var.setAnonymous(true); //TODO this might be a hack -- when are Vars not anonymous? - } else { - var.setName(val); - } - } - } - - } - - - - - public static class FilterVarReNamer extends QueryModelVisitorBase { - - private final HashMap hMap; - private Map valMap; - private final ValueFactoryImpl vf = new ValueFactoryImpl(); - - public FilterVarReNamer(HashMap hMap, Map valMap) { - this.valMap = valMap; - this.hMap = hMap; - } - - @Override - public void meet(Var var) { - - if (!(var.getParentNode() instanceof NAryValueOperator)) { - if (!var.isConstant() && hMap.containsKey(var.getName())) { - String val = hMap.get(var.getName()); - if (val.startsWith("-const-")) { - var.replaceWith(new ValueConstant(valMap.get(val))); - } else { - var.setName(val); - } - } - } - } - - - - @Override - public void meetNAryValueOperator(NAryValueOperator node) { - - List oldValues = node.getArguments(); - List newValues = Lists.newArrayList(); - - for (ValueExpr v : oldValues) { - if (v instanceof Var) { - Var var = (Var) v; - if (!(var.isConstant() && hMap.containsKey(var.getName()))) { - String val = hMap.get(var.getName()); - if (val.startsWith("-const-")) { - newValues.add(new ValueConstant(valMap.get(val))); - } else { - var.setName(val); - newValues.add(var); - } - } - } else { - newValues.add(v); - } - } - - node.setArguments(newValues); - - } - - - } - - - - - public static class TupleVarRenamer extends QueryModelVisitorBase { - - private final HashMap varChanges; - private Map valMap; - - public TupleVarRenamer(HashMap varChanges, Map valMap) { - this.varChanges = varChanges; - this.valMap = valMap; - } - - @Override - public void meet(ProjectionElemList node) { - List proj = node.getElements(); - for (ProjectionElem s : proj) { - if (varChanges.containsKey(s.getSourceName())) { - String name = s.getSourceName(); - s.setSourceName(varChanges.get(name)); - s.setTargetName(varChanges.get(name)); - - } - } - - } - - - @Override - public void meet(StatementPattern node) { - SpVarReNamer spv = new SpVarReNamer(varChanges, valMap); - node.visit(spv); - } - - - @Override - public void meet(Filter node) { - FilterVarReNamer fvr = new FilterVarReNamer(varChanges, valMap); - node.getCondition().visit(fvr); - node.getArg().visit(this); - - } - - - - } - - public static class VarCollector extends QueryModelVisitorBase { - - public static List process(QueryModelNode node) { - VarCollector collector = new VarCollector(); - node.visit(collector); - return collector.getVarNames(); - } - - public static List processVar(QueryModelNode node) { - VarCollector collector = new VarCollector(); - node.visit(collector); - return collector.getVars(); - } - - private List varNames = new ArrayList(); - private List vars = Lists.newArrayList(); - - public List getVarNames() { - return varNames; - } - - public List getVars() { - return vars; - } - - @Override - public void meet(Var var) { - if (!var.hasValue()) { - varNames.add(var.getName()); - } - vars.add(var); - } - } - - public static class FilterVarValueCollector extends QueryModelVisitorBase { - - public static List process(QueryModelNode node) { - FilterVarValueCollector collector = new FilterVarValueCollector(); - node.visit(collector); - return collector.getVars(); - } - - - - private List vars = Lists.newArrayList(); - - - public List getVars() { - return vars; - } - - @Override - public void meet(Var node) { - vars.add(node); - } - - @Override - public void meet(ValueConstant node) { - vars.add(node); - } - - - - } - - - - - public static class NormalizeQueryVisitor extends QueryModelVisitorBase { - - private TreeMap> map = new TreeMap>(); - private TreeMap varMap = new TreeMap(); - private TreeMap emptyVarMap = new TreeMap(); - private List statementList = new ArrayList(); - private List filters = new ArrayList(); - private boolean isIndex; - - - - public NormalizeQueryVisitor(boolean isIndex) { - this.isIndex = isIndex; - } - - - - private TreeMap> getMap() { - - return map; - - } - - - private TreeMap getKeyMap() { - - return varMap; - } - - private TreeMap getVariableMap() { - return emptyVarMap; - } - - public List getStatementPatterns() { - return statementList; - } - - - private List getFilters() { - - return filters; - } - - @Override - public void meet(StatementPattern node) throws Exception { - - statementList.add(node); - - String s = ""; - String t = ""; - - Var node1 = node.getSubjectVar(); - Var node2 = node.getObjectVar(); - Var node3 = node.getPredicateVar(); - Var node4 = node.getContextVar(); - - String s1 = ""; - String s2 = ""; - String s3 = ""; - String s4 = ""; - - - if (node1.isConstant()) - s1 = node1.getName().substring(7); - - if (node2.isConstant()) - s2 = node2.getName().substring(7); - - if (node3.isConstant()) - s3 = node3.getName().substring(7); - - if (node4 != null) { - if (node4.isConstant()) - s4 = node4.getName().substring(7); - } - - if ((s1+s2+s3).length() == 0) { - s = "Nonconstant nodes have no variables."; - } - - List nodes; - - - if (s.length() > 0) { - - if (map.containsKey(s)) { - nodes = map.get(s); - nodes.add(node); - } else { - nodes = new ArrayList(); - nodes.add(node); - } - - map.put(s, nodes); - - } else { - - if (isIndex) { - - t = s1 + s2 + s3 + s4; - - if (map.containsKey(t)) { - nodes = map.get(t); - nodes.add(node); - } else { - nodes = new ArrayList(); - nodes.add(node); - } - - map.put(t, nodes); - - } else { - - String[] comps = new String[4]; - comps[0] = s1; - comps[1] = s2; - comps[2] = s3; - comps[3] = s4; - - for (int i = 0; i < 3; i++) { - if (comps[i].length() != 0) { - if (map.containsKey(comps[i] + comps[3])) { - nodes = map.get(comps[i] + comps[3]); - nodes.add(node); - } else { - nodes = new ArrayList(); - nodes.add(node); - } - - map.put(comps[i] + comps[3], nodes); - - for (int j = i + 1; j < 3; j++) { - if (comps[j].length() != 0) { - if (map.containsKey(comps[i] + comps[j] + comps[3])) { - nodes = map.get(comps[i] + comps[j] + comps[3]); - nodes.add(node); - } else { - nodes = new ArrayList(); - nodes.add(node); - } - map.put(comps[i] + comps[j] + comps[3], nodes); - } - - } - } - } - - if (s1.length() != 0 && s2.length() != 0 && s3.length() != 0) { - if (map.containsKey(s1 + s2 + s3 + s4)) { - nodes = map.get(s1 + s2 + s3 + s4); - nodes.add(node); - } else { - nodes = new ArrayList(); - nodes.add(node); - } - map.put(s1 + s2 + s3 + s4, nodes); - } - } - } - - super.meet(node); - - } - - @Override - public void meet(Var node) throws Exception { - - int count = 1; - - if (!node.isConstant()) { - if (varMap.containsKey(node.getName())) { - count = varMap.get(node.getName()); - count++; - varMap.put(node.getName(), count); - } else - varMap.put(node.getName(), 1); - - if (!emptyVarMap.containsKey(node.getName())) - emptyVarMap.put(node.getName(), 0); - - } - super.meet(node); - } - - public void meet(Filter filter) throws Exception { - filters.add(filter); - super.meet(filter); - } - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/TopOfQueryFilterRelocator.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/TopOfQueryFilterRelocator.java b/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/TopOfQueryFilterRelocator.java deleted file mode 100644 index 71e119e..0000000 --- a/extras/indexing/src/main/java/mvm/rya/indexing/pcj/matching/TopOfQueryFilterRelocator.java +++ /dev/null @@ -1,97 +0,0 @@ -package mvm.rya.indexing.pcj.matching; - -/* - * 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.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.openrdf.query.algebra.Filter; -import org.openrdf.query.algebra.Projection; -import org.openrdf.query.algebra.TupleExpr; -import org.openrdf.query.algebra.ValueExpr; -import org.openrdf.query.algebra.helpers.QueryModelVisitorBase; - -/** - * Class consisting of a single utility method for relocating filters. - * - */ -public class TopOfQueryFilterRelocator { - - - /** - * - * This method moves the Filters of a specified {@link TupleExpr} - * to the top of the TupleExpr. - * - * @param query - query whose filters will be relocated - * @return - TupleExpr with filters relocated to top - */ - public static TupleExpr moveFiltersToTop(TupleExpr query) { - - ProjectionAndFilterGatherer fg = new ProjectionAndFilterGatherer(); - query.visit(fg); - List filterCond = new ArrayList<>(fg.filterCond); - Projection projection = fg.projection; - - if(filterCond.size() == 0) { - return query; - } - - Filter first = new Filter(); - first.setCondition(filterCond.remove(0)); - Filter current = first; - for(ValueExpr cond: filterCond) { - Filter filter = new Filter(null, cond); - current.setArg(filter); - current = filter; - } - - TupleExpr te = projection.getArg(); - projection.setArg(first); - current.setArg(te); - - return query; - - } - - - static class ProjectionAndFilterGatherer extends QueryModelVisitorBase { - - Set filterCond = new HashSet<>(); - Projection projection; - - - @Override - public void meet(Projection node) { - this.projection = node; - node.getArg().visit(this); - } - - @Override - public void meet(Filter node) { - filterCond.add(node.getCondition()); - node.replaceWith(node.getArg()); - } - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailConfig.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailConfig.java b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailConfig.java deleted file mode 100644 index d66fdd7..0000000 --- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailConfig.java +++ /dev/null @@ -1,165 +0,0 @@ -package mvm.rya.sail.config; - -import org.openrdf.model.Graph; -import org.openrdf.model.Literal; -import org.openrdf.model.Resource; -import org.openrdf.model.URI; -import org.openrdf.model.ValueFactory; -import org.openrdf.model.impl.ValueFactoryImpl; -import org.openrdf.model.util.GraphUtil; -import org.openrdf.model.util.GraphUtilException; -import org.openrdf.sail.config.SailConfigException; -import org.openrdf.sail.config.SailImplConfigBase; - -/* - * 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 mvm.rya.accumulo.AccumuloRdfConfiguration; - -/** - * @deprecated Use {@link AccumuloRdfConfiguration} instead. - */ -@Deprecated -public class RyaAccumuloSailConfig extends SailImplConfigBase { - - public static final String NAMESPACE = "http://rya.apache.org/RyaAccumuloSail/Config#"; - - public static final URI INSTANCE; - public static final URI USER; - public static final URI PASSWORD; - public static final URI ZOOKEEPERS; - public static final URI IS_MOCK; - - static { - final ValueFactory factory = ValueFactoryImpl.getInstance(); - USER = factory.createURI(NAMESPACE, "user"); - PASSWORD = factory.createURI(NAMESPACE, "password"); - INSTANCE = factory.createURI(NAMESPACE, "instance"); - ZOOKEEPERS = factory.createURI(NAMESPACE, "zookeepers"); - IS_MOCK = factory.createURI(NAMESPACE, "isMock"); - } - - private String user = "root"; - private String password = "root"; - private String instance = "dev"; - private String zookeepers = "zoo1,zoo2,zoo3"; - private boolean isMock = false; - - public RyaAccumuloSailConfig() { - super(RyaAccumuloSailFactory.SAIL_TYPE); - } - - public String getUser() { - return user; - } - - public void setUser(final String user) { - this.user = user; - } - - public String getPassword() { - return password; - } - - public void setPassword(final String password) { - this.password = password; - } - - public String getInstance() { - return instance; - } - - public void setInstance(final String instance) { - this.instance = instance; - } - - public String getZookeepers() { - return zookeepers; - } - - public void setZookeepers(final String zookeepers) { - this.zookeepers = zookeepers; - } - - public boolean isMock() { - return isMock; - } - - public void setMock(final boolean isMock) { - this.isMock = isMock; - } - - public AccumuloRdfConfiguration toRdfConfiguation() { - final AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration(); - return conf; - } - - @Override - public void validate() throws SailConfigException { - super.validate(); - } - - @Override - public Resource export(final Graph graph) { - final Resource implNode = super.export(graph); - - @SuppressWarnings("deprecation") - final - ValueFactory v = graph.getValueFactory(); - - graph.add(implNode, USER, v.createLiteral(user)); - graph.add(implNode, PASSWORD, v.createLiteral(password)); - graph.add(implNode, INSTANCE, v.createLiteral(instance)); - graph.add(implNode, ZOOKEEPERS, v.createLiteral(zookeepers)); - graph.add(implNode, IS_MOCK, v.createLiteral(isMock)); - - return implNode; - } - - @Override - public void parse(final Graph graph, final Resource implNode) throws SailConfigException { - super.parse(graph, implNode); - System.out.println("parsing"); - - try { - final Literal userLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, USER); - if (userLit != null) { - setUser(userLit.getLabel()); - } - final Literal pwdLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, PASSWORD); - if (pwdLit != null) { - setPassword(pwdLit.getLabel()); - } - final Literal instLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, INSTANCE); - if (instLit != null) { - setInstance(instLit.getLabel()); - } - final Literal zooLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, ZOOKEEPERS); - if (zooLit != null) { - setZookeepers(zooLit.getLabel()); - } - final Literal mockLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, IS_MOCK); - if (mockLit != null) { - setMock(Boolean.parseBoolean(mockLit.getLabel())); - } - } catch (final GraphUtilException e) { - throw new SailConfigException(e.getMessage(), e); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailFactory.java b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailFactory.java deleted file mode 100644 index 83641bd..0000000 --- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaAccumuloSailFactory.java +++ /dev/null @@ -1,95 +0,0 @@ -package mvm.rya.sail.config; - -import org.apache.accumulo.core.client.AccumuloException; -import org.apache.accumulo.core.client.AccumuloSecurityException; -import org.apache.accumulo.core.client.Connector; -import org.apache.accumulo.core.client.Instance; -import org.apache.accumulo.core.client.ZooKeeperInstance; -import org.apache.accumulo.core.client.mock.MockInstance; -import org.apache.accumulo.core.client.security.tokens.PasswordToken; -import org.openrdf.sail.Sail; -import org.openrdf.sail.config.SailConfigException; -import org.openrdf.sail.config.SailFactory; -import org.openrdf.sail.config.SailImplConfig; - -/* - * 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 mvm.rya.accumulo.AccumuloRdfConfiguration; -import mvm.rya.accumulo.AccumuloRyaDAO; -import mvm.rya.api.persist.RyaDAOException; -import mvm.rya.indexing.accumulo.ConfigUtils; -import mvm.rya.rdftriplestore.RdfCloudTripleStore; - -/** - * @deprecated Use {@link RyaSailFactory} instead. - */ -@Deprecated -public class RyaAccumuloSailFactory implements SailFactory { - - public static final String SAIL_TYPE = "rya:RyaAccumuloSail"; - - @Override - public SailImplConfig getConfig() { - return new RyaAccumuloSailConfig(); - } - - @Override - public Sail getSail(final SailImplConfig config) throws SailConfigException { - try { - final RdfCloudTripleStore store = new RdfCloudTripleStore(); - final RyaAccumuloSailConfig cbconfig = (RyaAccumuloSailConfig) config; - - final String instanceName = cbconfig.getInstance(); - final String zooKeepers = cbconfig.getZookeepers(); - - Instance i; - if (cbconfig.isMock()) { - i = new MockInstance(instanceName); - } else { - i = new ZooKeeperInstance(instanceName, zooKeepers); - } - - final String user = cbconfig.getUser(); - final String pass = cbconfig.getPassword(); - - final Connector connector = i.getConnector(user, new PasswordToken(pass)); - final AccumuloRyaDAO crdfdao = new AccumuloRyaDAO(); - crdfdao.setConnector(connector); - - final AccumuloRdfConfiguration conf = cbconfig.toRdfConfiguation(); - ConfigUtils.setIndexers(conf); - conf.setDisplayQueryPlan(true); - - crdfdao.setConf(conf); - crdfdao.init(); - store.setRyaDAO(crdfdao); - - return store; - } catch (RyaDAOException | AccumuloException | AccumuloSecurityException e) { - throw new SailConfigException(e); - } - } - - @Override - public String getSailType() { - return SAIL_TYPE; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java deleted file mode 100644 index d3c891c..0000000 --- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * 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. - */ -package mvm.rya.sail.config; - -import static java.util.Objects.requireNonNull; - -import java.net.UnknownHostException; -import java.util.Objects; - -import org.apache.accumulo.core.client.AccumuloException; -import org.apache.accumulo.core.client.AccumuloSecurityException; -import org.apache.accumulo.core.client.Connector; -import org.apache.accumulo.core.client.Instance; -import org.apache.accumulo.core.client.security.tokens.PasswordToken; -import org.apache.hadoop.conf.Configuration; -import org.openrdf.sail.Sail; -import org.openrdf.sail.SailException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.mongodb.MongoClient; - -import mvm.rya.accumulo.AccumuloRdfConfiguration; -import mvm.rya.accumulo.AccumuloRyaDAO; -import mvm.rya.accumulo.instance.AccumuloRyaInstanceDetailsRepository; -import mvm.rya.api.RdfCloudTripleStoreConfiguration; -import mvm.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException; -import mvm.rya.api.instance.RyaDetailsToConfiguration; -import mvm.rya.api.layout.TablePrefixLayoutStrategy; -import mvm.rya.api.persist.RyaDAO; -import mvm.rya.api.persist.RyaDAOException; -import mvm.rya.indexing.accumulo.ConfigUtils; -import mvm.rya.mongodb.MongoConnectorFactory; -import mvm.rya.mongodb.MongoDBRdfConfiguration; -import mvm.rya.mongodb.MongoDBRyaDAO; -import mvm.rya.mongodb.instance.MongoRyaInstanceDetailsRepository; -import mvm.rya.rdftriplestore.RdfCloudTripleStore; -import mvm.rya.rdftriplestore.inference.InferenceEngine; -import mvm.rya.rdftriplestore.inference.InferenceEngineException; - -public class RyaSailFactory { - private static final Logger LOG = LoggerFactory.getLogger(RyaSailFactory.class); - - /** - * Creates an instance of {@link Sail} that is attached to a Rya instance. - * - * @param conf - Configures how the Sail object will be constructed. (not null) - * @return A {@link Sail} object that is backed by a Rya datastore. - * @throws SailException The object could not be created. - */ - public static Sail getInstance(final Configuration conf) throws AccumuloException, - AccumuloSecurityException, RyaDAOException, InferenceEngineException, SailException { - requireNonNull(conf); - return getRyaSail(conf); - } - - private static Sail getRyaSail(final Configuration config) throws InferenceEngineException, RyaDAOException, AccumuloException, AccumuloSecurityException, SailException { - final RdfCloudTripleStore store = new RdfCloudTripleStore(); - final RyaDAO dao; - final RdfCloudTripleStoreConfiguration rdfConfig; - - final String user; - final String pswd; - // XXX Should(?) be MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX inside the if below. RYA-135 - final String ryaInstance = config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX); - Objects.requireNonNull(ryaInstance, "RyaInstance or table prefix is missing from configuration."+RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX); - - if(ConfigUtils.getUseMongo(config)) { - final MongoDBRdfConfiguration mongoConfig = new MongoDBRdfConfiguration(config); - rdfConfig = mongoConfig; - final MongoClient client = MongoConnectorFactory.getMongoClient(config); - try { - final MongoRyaInstanceDetailsRepository ryaDetailsRepo = new MongoRyaInstanceDetailsRepository(client, mongoConfig.getCollectionName()); - RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(), mongoConfig); - } catch (final RyaDetailsRepositoryException e) { - LOG.info("Instance does not have a rya details collection, skipping."); - } dao = getMongoDAO((MongoDBRdfConfiguration)rdfConfig, client); - } else { - rdfConfig = new AccumuloRdfConfiguration(config); - user = rdfConfig.get(ConfigUtils.CLOUDBASE_USER); - pswd = rdfConfig.get(ConfigUtils.CLOUDBASE_PASSWORD); - Objects.requireNonNull(user, "Accumulo user name is missing from configuration."+ConfigUtils.CLOUDBASE_USER); - Objects.requireNonNull(pswd, "Accumulo user password is missing from configuration."+ConfigUtils.CLOUDBASE_PASSWORD); - rdfConfig.setTableLayoutStrategy( new TablePrefixLayoutStrategy(ryaInstance) ); - updateAccumuloConfig((AccumuloRdfConfiguration) rdfConfig, user, pswd, ryaInstance); - dao = getAccumuloDAO((AccumuloRdfConfiguration)rdfConfig); - } - store.setRyaDAO(dao); - rdfConfig.setTablePrefix(ryaInstance); - - if (rdfConfig.isInfer()){ - final InferenceEngine inferenceEngine = new InferenceEngine(); - inferenceEngine.setConf(rdfConfig); - inferenceEngine.setRyaDAO(dao); - inferenceEngine.init(); - store.setInferenceEngine(inferenceEngine); - } - - store.initialize(); - - return store; - } - - private static MongoDBRyaDAO getMongoDAO(final MongoDBRdfConfiguration config, final MongoClient client) throws RyaDAOException { - MongoDBRyaDAO dao = null; - ConfigUtils.setIndexers(config); - if(client != null) { - dao = new MongoDBRyaDAO(config, client); - } else { - try { - dao = new MongoDBRyaDAO(config); - } catch (NumberFormatException | UnknownHostException e) { - throw new RyaDAOException("Unable to connect to mongo at the configured location.", e); - } - } - dao.init(); - return dao; - } - - private static AccumuloRyaDAO getAccumuloDAO(final AccumuloRdfConfiguration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException { - final Connector connector = ConfigUtils.getConnector(config); - final AccumuloRyaDAO dao = new AccumuloRyaDAO(); - dao.setConnector(connector); - - ConfigUtils.setIndexers(config); - config.setDisplayQueryPlan(true); - - dao.setConf(config); - dao.init(); - return dao; - } - - public static void updateAccumuloConfig(final AccumuloRdfConfiguration config, final String user, final String pswd, final String ryaInstance) throws AccumuloException, AccumuloSecurityException { - try { - final PasswordToken pswdToken = new PasswordToken(pswd); - final Instance accInst = ConfigUtils.getInstance(config); - final AccumuloRyaInstanceDetailsRepository ryaDetailsRepo = new AccumuloRyaInstanceDetailsRepository(accInst.getConnector(user, pswdToken), ryaInstance); - RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(), config); - } catch(final RyaDetailsRepositoryException e) { - LOG.info("Instance does not have a rya details collection, skipping."); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/extras/indexing/src/main/java/org/apache/rya/accumulo/documentIndex/DocIndexIteratorUtil.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/accumulo/documentIndex/DocIndexIteratorUtil.java b/extras/indexing/src/main/java/org/apache/rya/accumulo/documentIndex/DocIndexIteratorUtil.java new file mode 100644 index 0000000..fefd651 --- /dev/null +++ b/extras/indexing/src/main/java/org/apache/rya/accumulo/documentIndex/DocIndexIteratorUtil.java @@ -0,0 +1,31 @@ +package mvm.rya.accumulo.documentIndex; + +/* + * 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. + */ + + +public class DocIndexIteratorUtil { + + + + public static final String DOC_ID_INDEX_DELIM = "\u001D" + "\u001E"; + + + +}