private static CypherResult ExecuteMirrorGremlin(string script, AlgoContext context, int[] productIds)
        {
            try
            {
                Neo4jContext client = new Neo4jContext(false);
                Dictionary <string, object> parameters = new Dictionary <string, object>();
                foreach (RecommendationContext item in context.Context.Keys)
                {
                    parameters["pMap" + item.ToString()] = context.Context[item];
                }

                if (productIds != null && productIds.Count() > 0)
                {
                    parameters["pMapProductsId"] = productIds;
                }

                string response = client.ExecuteGremlinScript(new Script {
                    ScriptStr = script, ParameterMap = parameters
                });
                return(JsonConvert.DeserializeObject <CypherResult>(response));
            }
            catch (Exception e)
            {
                Log.Error("ExecuteMirrorQuery", "Error executing query", e);
                throw;
            }
        }
        public static CypherResult ExecuteMirrorQuery(GraphAction ga, AlgoContext context, int[] productIds)
        {
            if (ga.MirrorQuery != null)
            {
                return(ExecuteMirrorCypherQuery(ga.MirrorQuery.QueryContent, context, productIds));
            }
            else if (ga.MirrorScript != null)
            {
                return(ExecuteMirrorGremlin(ga.MirrorScript.MirrorScript, context, productIds));
            }

            return(null);
        }
        private static CypherResult ExecuteMirrorCypherQuery(string query, AlgoContext context, int[] productIds)
        {
            try
            {
                Log.Debug("ExecuteMirrorQuery", "Building query from parameters", query);
                string filteredQuery = BuildMirrorQuery(query, productIds);
                Log.Debug("ExecuteMirrorQuery", "Query built from parameters", filteredQuery);

                Neo4jContext client = new Neo4jContext(false);
                Dictionary <string, string> parameters = new Dictionary <string, string>();
                foreach (RecommendationContext item in context.Context.Keys)
                {
                    parameters[item.ToString()] = context.Context[item];
                }
                string response = client.GetWithCypherQuery(filteredQuery, parameters);
                return(JsonConvert.DeserializeObject <CypherResult>(response));
            }
            catch (Exception e)
            {
                Log.Error("ExecuteMirrorQuery", "Error executing query", e);
                throw;
            }
        }
        public static CypherResult ExecuteGremlinRecommendation(string query, ContentTypeDistribution distribution, AggregateFilter filters, AlgoContext context, out string requestString)
        {
            try
            {
                string filteredQuery = BuildGremlinQuery(query, filters, distribution);
                Log.Debug("ExecuteGremlinRecommendation", "Query built from parameters");

                Neo4jContext client = new Neo4jContext(false);
                Dictionary <string, object> parameters = new Dictionary <string, object>();
                foreach (RecommendationContext item in context.Context.Keys)
                {
                    parameters["pMap" + item.ToString()] = context.Context[item];
                }

                Script gremlinScript = new Script
                {
                    ScriptStr    = filteredQuery,
                    ParameterMap = parameters
                };

                string response = client.ExecuteGremlinScript(gremlinScript, out requestString);
                if (!string.IsNullOrEmpty(response))
                {
                    return(JsonConvert.DeserializeObject <CypherResult>(response));
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception e)
            {
                Log.Error("ExecuteRecommendationQuery", "Error executing query", e);
                throw;
            }
        }
 public static CypherResult ExecuteRecommendationQuery(GraphAction graphAction, ContentTypeDistribution distribution, AggregateFilter filters, AlgoContext context, out string requestString)
 {
     try
     {
         if (graphAction.Query != null)
         {
             return(ExecuteCypherRecommendation(graphAction.Query.QueryContent, distribution, filters, context, out requestString));
         }
         else if (graphAction.Script != null)
         {
             return(ExecuteGremlinRecommendation(graphAction.Script.Script, distribution, filters, context, out requestString));
         }
         else
         {
             Log.Error("ExecuteRecommendationQuery", "This graph actions defines neither a Cypher query, nor a Gremlin query", graphAction.Id);
             requestString = null;
             return(null);
         }
     }
     catch (Exception e)
     {
         Log.Error("ExecuteRecommendationQuery", "Error executing query", e);
         throw;
     }
 }
        private static CypherResult ExecuteCypherRecommendation(string query, ContentTypeDistribution distribution, AggregateFilter filters, AlgoContext context, out string requestString)
        {
            try
            {
                Log.Debug("ExecuteRecommendationQuery", "Building query from parameters", query);
                string filteredQuery = BuildCypherRecommendationQuery(query, filters, distribution);
                Log.Debug("ExecuteRecommendationQuery", "Query built from parameters", filteredQuery);

                Neo4jContext client = new Neo4jContext(false);
                Dictionary <string, string> parameters = new Dictionary <string, string>();
                foreach (RecommendationContext item in context.Context.Keys)
                {
                    parameters[item.ToString()] = context.Context[item];
                }
                string response = client.GetWithCypherQuery(filteredQuery, parameters, out requestString);
                return(JsonConvert.DeserializeObject <CypherResult>(response));
            }
            catch (Exception e)
            {
                Log.Error("ExecuteRecommendationQuery", "Error executing query", e);
                throw;
            }
        }