2020package org .neo4j .gds .procedures .algorithms .pathfinding .write ;
2121
2222import org .neo4j .gds .api .GraphName ;
23+ import org .neo4j .gds .applications .algorithms .machinery .RequestScopedDependencies ;
24+ import org .neo4j .gds .applications .algorithms .machinery .WriteContext ;
25+ import org .neo4j .gds .applications .algorithms .machinery .WriteRelationshipService ;
26+ import org .neo4j .gds .kspanningtree .KSpanningTreeWriteConfig ;
27+ import org .neo4j .gds .logging .Log ;
28+ import org .neo4j .gds .pathfinding .BellmanFordWriteStep ;
29+ import org .neo4j .gds .pathfinding .KSpanningTreeWriteStep ;
2330import org .neo4j .gds .pathfinding .PathFindingComputeBusinessFacade ;
31+ import org .neo4j .gds .pathfinding .PrizeCollectingSteinerTreeWriteStep ;
32+ import org .neo4j .gds .pathfinding .ShortestPathWriteStep ;
33+ import org .neo4j .gds .pathfinding .SpanningTreeWriteStep ;
34+ import org .neo4j .gds .pathfinding .SteinerTreeWriteStep ;
35+ import org .neo4j .gds .paths .astar .config .ShortestPathAStarWriteConfig ;
2436import org .neo4j .gds .paths .bellmanford .AllShortestPathsBellmanFordWriteConfig ;
2537import org .neo4j .gds .paths .delta .config .AllShortestPathsDeltaWriteConfig ;
38+ import org .neo4j .gds .paths .dijkstra .config .AllShortestPathsDijkstraWriteConfig ;
39+ import org .neo4j .gds .paths .dijkstra .config .ShortestPathDijkstraWriteConfig ;
40+ import org .neo4j .gds .paths .yens .config .ShortestPathYensWriteConfig ;
2641import org .neo4j .gds .pcst .PCSTWriteConfig ;
2742import org .neo4j .gds .procedures .algorithms .configuration .UserSpecificConfigurationParser ;
2843import org .neo4j .gds .procedures .algorithms .pathfinding .BellmanFordWriteResult ;
4055public class PushbackPathFindingWriteProcedureFacade {
4156 private final PathFindingComputeBusinessFacade businessFacade ;
4257
58+ private final RequestScopedDependencies requestScopedDependencies ;
59+ private final WriteContext writeContext ;
60+
61+ private final Log log ;
62+
63+ private final WriteRelationshipService writeRelationshipService ;
4364 private final UserSpecificConfigurationParser configurationParser ;
4465
4566 public PushbackPathFindingWriteProcedureFacade (
4667 PathFindingComputeBusinessFacade businessFacade ,
68+ RequestScopedDependencies requestScopedDependencies ,
69+ WriteContext writeContext , Log log ,
70+ WriteRelationshipService writeRelationshipService ,
4771 UserSpecificConfigurationParser configurationParser
4872 ) {
4973 this .businessFacade = businessFacade ;
74+ this .requestScopedDependencies = requestScopedDependencies ;
75+ this .writeContext = writeContext ;
76+ this .log = log ;
77+ this .writeRelationshipService = writeRelationshipService ;
5078 this .configurationParser = configurationParser ;
5179 }
5280
@@ -56,14 +84,24 @@ public Stream<BellmanFordWriteResult> bellmanFord(String graphName, Map<String,
5684 AllShortestPathsBellmanFordWriteConfig ::of
5785 );
5886
87+ var writeStep = new BellmanFordWriteStep (
88+ writeRelationshipService ,
89+ config .writeRelationshipType (),
90+ config .writeNegativeCycles (),
91+ config .writeNodeIds (),
92+ config .writeCosts (),
93+ config ::resolveResultStore ,
94+ config .jobId ()
95+ );
96+
5997 return businessFacade .bellmanFord (
6098 GraphName .parse (graphName ),
6199 config .toGraphParameters (),
62100 config .relationshipWeightProperty (),
63101 config .toParameters (),
64102 config .jobId (),
65103 config .logProgress (),
66- new BellmanFordWriteResultTransformerBuilder (config )
104+ new BellmanFordWriteResultTransformerBuilder (writeStep , config )
67105 ).join ();
68106 }
69107
@@ -76,21 +114,47 @@ public Stream<StandardWriteRelationshipsResult> deltaStepping(
76114 AllShortestPathsDeltaWriteConfig ::of
77115 );
78116
117+ var writeStep = new ShortestPathWriteStep (
118+ writeRelationshipService ,
119+ config .writeRelationshipType (),
120+ config .writeNodeIds (),
121+ config .writeCosts (),
122+ config ::resolveResultStore ,
123+ config .jobId ()
124+ );
125+
126+
79127 return businessFacade .deltaStepping (
80128 GraphName .parse (graphName ),
81129 config .toGraphParameters (),
82130 config .relationshipWeightProperty (),
83131 config .toParameters (),
84132 config .jobId (),
85133 config .logProgress (),
86- new DeltaSteppingWriteResultTransformerBuilder (config )
134+ new DeltaSteppingWriteResultTransformerBuilder (writeStep , config )
87135 ).join ();
88136 }
89137
90138 public Stream <KSpanningTreeWriteResult > kSpanningTree (
91139 String graphName ,
92140 Map <String , Object > configuration
93141 ) {
142+ var config = configurationParser .parseConfiguration (
143+ configuration ,
144+ KSpanningTreeWriteConfig ::of
145+ );
146+
147+ var writeStep = new KSpanningTreeWriteStep (
148+ config .writeProperty (),
149+ writeContext ,
150+ config ::resolveResultStore ,
151+ config .jobId (),
152+ config .writeConcurrency (),
153+ log ,
154+ requestScopedDependencies .taskRegistryFactory (),
155+ requestScopedDependencies .terminationFlag ()
156+ );
157+
94158 return Stream .empty ();
95159 }
96160
@@ -103,6 +167,13 @@ public Stream<PrizeCollectingSteinerTreeWriteResult> pcst(
103167 configuration ,
104168 PCSTWriteConfig ::of
105169 );
170+ var writeStep = new PrizeCollectingSteinerTreeWriteStep (
171+ writeRelationshipService ,
172+ config .writeRelationshipType (),
173+ config .writeProperty (),
174+ config ::resolveResultStore ,
175+ config .jobId ()
176+ );
106177
107178 return businessFacade .pcst (
108179 GraphName .parse (graphName ),
@@ -111,35 +182,93 @@ public Stream<PrizeCollectingSteinerTreeWriteResult> pcst(
111182 config .toParameters (),
112183 config .jobId (),
113184 config .logProgress (),
114- new PCSTWriteResultTransformerBuilder (config )
185+ new PCSTWriteResultTransformerBuilder (writeStep , config )
115186 ).join ();
116187 }
117188
118189 public Stream <StandardWriteRelationshipsResult > singlePairShortestPathAStar (
119190 String graphName ,
120191 Map <String , Object > configuration
121192 ) {
193+ var config = configurationParser .parseConfiguration (
194+ configuration ,
195+ ShortestPathAStarWriteConfig ::of
196+ );
197+
198+ var writeStep = new ShortestPathWriteStep (
199+ writeRelationshipService ,
200+ config .writeRelationshipType (),
201+ config .writeNodeIds (),
202+ config .writeCosts (),
203+ config ::resolveResultStore ,
204+ config .jobId ()
205+ );
206+
122207 return Stream .empty ();
123208 }
124209
125210 public Stream <StandardWriteRelationshipsResult > singlePairShortestPathDijkstra (
126211 String graphName ,
127212 Map <String , Object > configuration
128213 ) {
214+ var config = configurationParser .parseConfiguration (
215+ configuration ,
216+ ShortestPathDijkstraWriteConfig ::of
217+ );
218+
219+ var writeStep = new ShortestPathWriteStep (
220+ writeRelationshipService ,
221+ config .writeRelationshipType (),
222+ config .writeNodeIds (),
223+ config .writeCosts (),
224+ config ::resolveResultStore ,
225+ config .jobId ()
226+ );
227+
129228 return Stream .empty ();
130229 }
131230
132231 public Stream <StandardWriteRelationshipsResult > singlePairShortestPathYens (
133232 String graphName ,
134233 Map <String , Object > configuration
135234 ) {
235+
236+ var config = configurationParser .parseConfiguration (
237+ configuration ,
238+ ShortestPathYensWriteConfig ::of
239+ );
240+
241+ var writeStep = new ShortestPathWriteStep (
242+ writeRelationshipService ,
243+ config .writeRelationshipType (),
244+ config .writeNodeIds (),
245+ config .writeCosts (),
246+ config ::resolveResultStore ,
247+ config .jobId ()
248+ );
249+
136250 return Stream .empty ();
137251 }
138252
139253 public Stream <StandardWriteRelationshipsResult > singleSourceShortestPathDijkstra (
140254 String graphName ,
141255 Map <String , Object > configuration
142256 ) {
257+
258+ var config = configurationParser .parseConfiguration (
259+ configuration ,
260+ AllShortestPathsDijkstraWriteConfig ::of
261+ );
262+
263+ var writeStep = new ShortestPathWriteStep (
264+ writeRelationshipService ,
265+ config .writeRelationshipType (),
266+ config .writeNodeIds (),
267+ config .writeCosts (),
268+ config ::resolveResultStore ,
269+ config .jobId ()
270+ );
271+
143272 return Stream .empty ();
144273 }
145274
@@ -149,14 +278,22 @@ public Stream<SpanningTreeWriteResult> spanningTree(String graphName, Map<String
149278 SpanningTreeWriteConfig ::of
150279 );
151280
281+ var writeStep = new SpanningTreeWriteStep (
282+ writeRelationshipService ,
283+ config .writeRelationshipType (),
284+ config .writeProperty (),
285+ config ::resolveResultStore ,
286+ config .jobId ()
287+ );
288+
152289 return businessFacade .spanningTree (
153290 GraphName .parse (graphName ),
154291 config .toGraphParameters (),
155292 config .relationshipWeightProperty (),
156293 config .toParameters (),
157294 config .jobId (),
158295 config .logProgress (),
159- new SpanningTreeWriteResultTransformerBuilder (config )
296+ new SpanningTreeWriteResultTransformerBuilder (writeStep , config )
160297 ).join ();
161298 }
162299
@@ -166,14 +303,23 @@ public Stream<SteinerWriteResult> steinerTree(String graphName, Map<String, Obje
166303 SteinerTreeWriteConfig ::of
167304 );
168305
306+ var writeStep = new SteinerTreeWriteStep (
307+ writeRelationshipService ,
308+ config .sourceNode (),
309+ config .writeRelationshipType (),
310+ config .writeProperty (),
311+ config ::resolveResultStore ,
312+ config .jobId ()
313+ );
314+
169315 return businessFacade .steinerTree (
170316 GraphName .parse (graphName ),
171317 config .toGraphParameters (),
172318 config .relationshipWeightProperty (),
173319 config .toParameters (),
174320 config .jobId (),
175321 config .logProgress (),
176- new SteinerTreeWriteResultTransformerBuilder (config )
322+ new SteinerTreeWriteResultTransformerBuilder (writeStep , config )
177323 ).join ();
178324
179325 }
0 commit comments