Skip to content

Commit 6462896

Browse files
committed
Adding the reading and writing back using the reduced API
1 parent 461dff7 commit 6462896

File tree

2 files changed

+97
-4
lines changed

2 files changed

+97
-4
lines changed

src/CloudGraphsDFG/services/CloudGraphsDFG.jl

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,17 @@ end
1717

1818
# Accessors
1919
function getDescription(dfg::CloudGraphsDFG)
20-
return _getNodeProperty(dfg.neo4jInstance, [dfg.sessionId, dfg.robotId, dfg.userId, "SESSION"], "description")
20+
return _getNodeProperty(
21+
dfg.neo4jInstance,
22+
[dfg.sessionId, dfg.robotId, dfg.userId, "SESSION"],
23+
"description")
2124
end
2225
function setDescription!(dfg::CloudGraphsDFG, description::String)
23-
_setNodeProperty(dfg.neo4jInstance, [dfg.sessionId, dfg.robotId, dfg.userId, "SESSION"], "description", description)
26+
_setNodeProperty(
27+
dfg.neo4jInstance,
28+
[dfg.sessionId, dfg.robotId, dfg.userId, "SESSION"],
29+
"description",
30+
description)
2431
end
2532

2633
function getSerializationModule(dfg::CloudGraphsDFG)::Module where G <: AbstractDFG
@@ -510,3 +517,81 @@ function deletePPE!(dfg::CloudGraphsDFG, variablekey::Symbol, ppekey::Symbol=:de
510517
length(result.results[1]["data"][1]["row"]) != 1 && error("Cannot find PPE '$ppekey' for variable '$variablekey'")
511518
return unpackPPE(dfg, @show result.results[1]["data"][1]["row"][1])
512519
end
520+
521+
### Updated functions from AbstractDFG
522+
### These functions write back as you add the data.
523+
524+
function addVariableSolverData!(dfg::CloudGraphsDFG, variablekey::Symbol, vnd::VariableNodeData, solvekey::Symbol=:default)::VariableNodeData
525+
# TODO: Just get the property, update it, and send it back
526+
var = getVariable(dfg, variablekey)
527+
if haskey(var.solverDataDict, solvekey)
528+
error("VariableNodeData '$(solvekey)' already exists")
529+
end
530+
var.solverDataDict[solvekey] = vnd
531+
# TODO: Cleanup
532+
solverDataDict = JSON2.write(Dict(keys(var.solverDataDict) .=> map(vnd -> packVariableNodeData(dfg, vnd), values(var.solverDataDict))))
533+
_setNodeProperty(
534+
dfg.neo4jInstance,
535+
_getLabelsForInst(dfg, var),
536+
"solverDataDict",
537+
solverDataDict)
538+
return vnd
539+
end
540+
541+
function updateVariableSolverData!(dfg::CloudGraphsDFG, variablekey::Symbol, vnd::VariableNodeData, solvekey::Symbol=:default)::VariableNodeData
542+
#This is basically just setSolverData
543+
var = getVariable(dfg, variablekey)
544+
if !haskey(var.solverDataDict, solvekey)
545+
@warn "VariableNodeData '$(solvekey)' does not exist, adding"
546+
end
547+
var.solverDataDict[solvekey] = vnd
548+
# TODO: Cleanup
549+
solverDataDict = JSON2.write(Dict(keys(var.solverDataDict) .=> map(vnd -> packVariableNodeData(dfg, vnd), values(var.solverDataDict))))
550+
_setNodeProperty(
551+
dfg.neo4jInstance,
552+
_getLabelsForInst(dfg, var),
553+
"solverDataDict",
554+
solverDataDict)
555+
return vnd
556+
end
557+
558+
function updateVariableSolverData!(dfg::CloudGraphsDFG, sourceVariables::Vector{<:DFGVariable}, solvekey::Symbol=:default)
559+
#TODO: Do in bulk for speed.
560+
for var in sourceVariables
561+
updateVariableSolverData!(dfg, var.label, getSolverData(var, solvekey), solvekey)
562+
end
563+
end
564+
565+
function deleteVariableSolverData!(dfg::CloudGraphsDFG, variablekey::Symbol, solvekey::Symbol=:default)::VariableNodeData
566+
var = getVariable(dfg, variablekey)
567+
568+
if !haskey(var.solverDataDict, solvekey)
569+
error("VariableNodeData '$(solvekey)' does not exist")
570+
end
571+
vnd = pop!(var.solverDataDict, solvekey)
572+
# TODO: Cleanup
573+
solverDataDict = JSON2.write(Dict(keys(var.solverDataDict) .=> map(vnd -> packVariableNodeData(dfg, vnd), values(var.solverDataDict))))
574+
_setNodeProperty(
575+
dfg.neo4jInstance,
576+
_getLabelsForInst(dfg, var),
577+
"solverDataDict",
578+
solverDataDict)
579+
return vnd
580+
end
581+
582+
function getSolvable(dfg::CloudGraphsDFG, sym::Symbol)
583+
prop = _getNodeProperty(
584+
dfg.neo4jInstance,
585+
[dfg.sessionId, dfg.robotId, dfg.userId, String(sym)],
586+
"solvable")
587+
return prop
588+
end
589+
590+
function setSolvable!(dfg::CloudGraphsDFG, sym::Symbol, solvable::Int)::Int
591+
prop = _setNodeProperty(
592+
dfg.neo4jInstance,
593+
[dfg.sessionId, dfg.robotId, dfg.userId, String(sym)],
594+
"solvable",
595+
solvable)
596+
return solvable
597+
end

src/CloudGraphsDFG/services/CommonFunctions.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Get a node property - returns nothing if not found
5555
"""
5656
function _getNodeProperty(neo4jInstance::Neo4jInstance, nodeLabels::Vector{String}, property::String)
5757
query = "match (n:$(join(nodeLabels, ":"))) return n.$property"
58+
@debug "[Query] $query"
5859
result = DistributedFactorGraphs._queryNeo4j(neo4jInstance, query)
5960
length(result.results[1]["data"]) != 1 && return 0
6061
length(result.results[1]["data"][1]["row"]) != 1 && return 0
@@ -65,8 +66,15 @@ end
6566
$(SIGNATURES)
6667
Set a node property - returns count of changed nodes.
6768
"""
68-
function _setNodeProperty(neo4jInstance::Neo4jInstance, nodeLabels::Vector{String}, property::String, value::String)
69-
query = "match (n:$(join(nodeLabels, ":"))) set n.$property = \"$value\" return count(n)"
69+
function _setNodeProperty(neo4jInstance::Neo4jInstance, nodeLabels::Vector{String}, property::String, value::Union{String, Int, Float64})
70+
if value isa String
71+
value = "\""*replace(value, "\"" => "\\\"")*"\"" # Escape strings
72+
end
73+
query = """
74+
match (n:$(join(nodeLabels, ":")))
75+
set n.$property = $value
76+
return count(n)"""
77+
@debug "[Query] $query"
7078
result = DistributedFactorGraphs._queryNeo4j(neo4jInstance, query)
7179
length(result.results[1]["data"]) != 1 && return 0
7280
length(result.results[1]["data"][1]["row"]) != 1 && return 0

0 commit comments

Comments
 (0)