pacer 0.9.1.1-java → 1.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +4 -1
- data/.gitignore +4 -0
- data/.rspec +1 -1
- data/Gemfile-dev +33 -0
- data/Gemfile-release +4 -0
- data/README.md +27 -9
- data/Rakefile +26 -8
- data/bin/autotest +1 -1
- data/lib/pacer/blueprints/multi_graph.rb +7 -19
- data/lib/pacer/blueprints/ruby_graph.rb +77 -52
- data/lib/pacer/blueprints/tg.rb +6 -93
- data/lib/pacer/blueprints.rb +0 -1
- data/lib/pacer/core/graph/edges_route.rb +10 -12
- data/lib/pacer/core/graph/element_route.rb +14 -21
- data/lib/pacer/core/graph/graph_index_route.rb +12 -8
- data/lib/pacer/core/graph/graph_route.rb +2 -5
- data/lib/pacer/core/graph/mixed_route.rb +3 -5
- data/lib/pacer/core/graph/vertices_route.rb +26 -27
- data/lib/pacer/core/route.rb +35 -66
- data/lib/pacer/exceptions.rb +13 -6
- data/lib/pacer/extensions/block_filter_element.rb +0 -5
- data/lib/pacer/filter/collection_filter.rb +9 -2
- data/lib/pacer/filter/empty_filter.rb +12 -3
- data/lib/pacer/filter/future_filter.rb +5 -5
- data/lib/pacer/filter/loop_filter.rb +7 -13
- data/lib/pacer/filter/object_filter.rb +10 -16
- data/lib/pacer/filter/property_filter/filters.rb +134 -93
- data/lib/pacer/filter/property_filter.rb +22 -19
- data/lib/pacer/filter/where_filter/node_visitor.rb +47 -26
- data/lib/pacer/filter/where_filter.rb +24 -3
- data/lib/pacer/function_resolver.rb +7 -2
- data/lib/pacer/graph/graph_ml.rb +39 -0
- data/lib/pacer/graph/graph_transactions_mixin.rb +107 -175
- data/lib/pacer/graph/pacer_graph.rb +438 -0
- data/lib/pacer/graph/simple_encoder.rb +20 -0
- data/lib/pacer/graph/yaml_encoder.rb +81 -0
- data/lib/pacer/graph.rb +8 -10
- data/lib/pacer/pipe/blackbox_pipeline.rb +11 -4
- data/lib/pacer/pipe/block_filter_pipe.rb +5 -22
- data/lib/pacer/pipe/cross_product_transform_pipe.rb +5 -7
- data/lib/pacer/pipe/edges_pipe.rb +22 -0
- data/lib/pacer/pipe/enumerable_pipe.rb +3 -9
- data/lib/pacer/pipe/expandable_pipe.rb +2 -14
- data/lib/pacer/pipe/id_collection_filter_pipe.rb +2 -8
- data/lib/pacer/pipe/is_empty_pipe.rb +5 -12
- data/lib/pacer/pipe/is_unique_pipe.rb +3 -13
- data/lib/pacer/pipe/label_collection_filter_pipe.rb +1 -7
- data/lib/pacer/pipe/label_prefix_pipe.rb +0 -6
- data/lib/pacer/pipe/loop_pipe.rb +27 -25
- data/lib/pacer/pipe/never_pipe.rb +1 -1
- data/lib/pacer/pipe/path_wrapping_pipe.rb +40 -0
- data/lib/pacer/pipe/process_pipe.rb +2 -20
- data/lib/pacer/pipe/property_comparison_pipe.rb +0 -6
- data/lib/pacer/pipe/ruby_pipe.rb +10 -3
- data/lib/pacer/pipe/simple_visitor_pipe.rb +12 -11
- data/lib/pacer/pipe/stream_sort_pipe.rb +1 -7
- data/lib/pacer/pipe/stream_uniq_pipe.rb +0 -6
- data/lib/pacer/pipe/type_filter_pipe.rb +1 -7
- data/lib/pacer/pipe/unary_transform_pipe.rb +6 -8
- data/lib/pacer/pipe/unwrapping_pipe.rb +13 -0
- data/lib/pacer/pipe/vertices_pipe.rb +22 -0
- data/lib/pacer/pipe/visitor_pipe.rb +3 -7
- data/lib/pacer/pipe/wrapping_pipe.rb +37 -0
- data/lib/pacer/pipes.rb +17 -12
- data/lib/pacer/route/mixin/bulk_operations.rb +8 -9
- data/lib/pacer/route/mixin/route_operations.rb +17 -11
- data/lib/pacer/route/mixins.rb +0 -1
- data/lib/pacer/route.rb +198 -121
- data/lib/pacer/side_effect/aggregate.rb +22 -2
- data/lib/pacer/side_effect/as.rb +73 -0
- data/lib/pacer/side_effect/group_count.rb +0 -3
- data/lib/pacer/side_effect/is_unique.rb +7 -6
- data/lib/pacer/side_effect.rb +1 -1
- data/lib/pacer/support/enumerable.rb +14 -12
- data/lib/pacer/support/nil_class.rb +5 -0
- data/lib/pacer/support/proc.rb +2 -2
- data/lib/pacer/support.rb +1 -1
- data/lib/pacer/transform/cap.rb +1 -1
- data/lib/pacer/transform/has_count_cap.rb +1 -1
- data/lib/pacer/transform/join.rb +20 -16
- data/lib/pacer/transform/map.rb +6 -2
- data/lib/pacer/transform/path.rb +44 -20
- data/lib/pacer/transform/sort_section.rb +58 -51
- data/lib/pacer/utils/tsort.rb +7 -2
- data/lib/pacer/utils.rb +0 -1
- data/lib/pacer/version.rb +4 -3
- data/lib/pacer/visitors/section.rb +42 -0
- data/lib/pacer/visitors/visits_section.rb +32 -0
- data/lib/pacer/visitors.rb +7 -0
- data/lib/pacer/wrappers/edge_wrapper.rb +164 -11
- data/lib/pacer/wrappers/element_wrapper.rb +133 -8
- data/lib/pacer/wrappers/index_wrapper.rb +47 -0
- data/lib/pacer/wrappers/vertex_wrapper.rb +175 -12
- data/lib/pacer/wrappers/wrapper_selector.rb +40 -0
- data/lib/pacer/wrappers/wrapping_pipe_function.rb +90 -0
- data/lib/pacer/wrappers.rb +3 -1
- data/lib/pacer-1.0.0-standalone.jar +0 -0
- data/lib/pacer.rb +13 -47
- data/pacer.gemspec +0 -8
- data/pom.xml +10 -3
- data/spec/pacer/blueprints/dex_spec.rb +12 -26
- data/spec/pacer/blueprints/neo4j_spec.rb +14 -28
- data/spec/pacer/blueprints/tg_spec.rb +6 -54
- data/spec/pacer/core/graph/edges_route_spec.rb +1 -1
- data/spec/pacer/core/graph/element_route_spec.rb +2 -2
- data/spec/pacer/core/graph/graph_route_spec.rb +2 -2
- data/spec/pacer/core/graph/vertices_route_spec.rb +10 -3
- data/spec/pacer/core/route_spec.rb +35 -58
- data/spec/pacer/filter/empty_filter_spec.rb +5 -6
- data/spec/pacer/filter/future_filter_spec.rb +8 -8
- data/spec/pacer/filter/loop_filter_spec.rb +120 -6
- data/spec/pacer/filter/object_filter_spec.rb +15 -0
- data/spec/pacer/filter/property_filter/filters_spec.rb +169 -0
- data/spec/pacer/filter/property_filter_spec.rb +15 -12
- data/spec/pacer/filter/uniq_filter_spec.rb +1 -1
- data/spec/pacer/filter/where_filter_spec.rb +55 -7
- data/spec/pacer/graph/{graph_mixin_spec.rb → pacer_graph_spec.rb} +114 -185
- data/spec/pacer/route/mixin/base_spec.rb +36 -35
- data/spec/pacer/route/mixin/route_operations_spec.rb +4 -46
- data/spec/pacer/side_effect/as_spec.rb +34 -0
- data/spec/pacer/support/enumerable_spec.rb +6 -6
- data/spec/pacer/transform/join_spec.rb +7 -5
- data/spec/pacer/transform/map_spec.rb +55 -0
- data/spec/pacer/transform/path_spec.rb +30 -15
- data/spec/pacer/transform/process_spec.rb +42 -0
- data/spec/pacer/transform/sort_section_spec.rb +82 -0
- data/spec/pacer/wrapper/edge_wrapper_spec.rb +122 -2
- data/spec/pacer/wrapper/element_wrapper_spec.rb +289 -3
- data/spec/pacer/wrapper/vertex_wrapper_spec.rb +289 -2
- data/spec/spec_helper.rb +16 -7
- data/spec/support/graph_runner.rb +80 -29
- data/tags +1165 -0
- metadata +46 -107
- data/.rvmrc +0 -0
- data/lib/pacer/blueprints/extensions.rb +0 -77
- data/lib/pacer/graph/edge_mixin.rb +0 -127
- data/lib/pacer/graph/element_mixin.rb +0 -202
- data/lib/pacer/graph/graph_indices_mixin.rb +0 -93
- data/lib/pacer/graph/graph_mixin.rb +0 -361
- data/lib/pacer/graph/index_mixin.rb +0 -30
- data/lib/pacer/graph/vertex_mixin.rb +0 -119
- data/lib/pacer/pipe/map_pipe.rb +0 -36
- data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +0 -26
- data/lib/pacer/route/mixin/variable_route_module.rb +0 -26
- data/lib/pacer/side_effect/section.rb +0 -25
- data/lib/pacer/support/iterator_mixins.rb +0 -110
- data/lib/pacer/wrappers/new_element.rb +0 -106
- data/lib/pacer-0.9.1.1-standalone.jar +0 -0
- data/spec/pacer/graph/edge_mixin_spec.rb +0 -116
- data/spec/pacer/graph/element_mixin_spec.rb +0 -297
- data/spec/pacer/graph/index_mixin_spec.rb +0 -0
- data/spec/pacer/graph/vertex_mixin_spec.rb +0 -192
@@ -15,12 +15,6 @@ module Pacer::Pipes
|
|
15
15
|
|
16
16
|
def next
|
17
17
|
super
|
18
|
-
rescue NativeException => e
|
19
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
20
|
-
raise e.cause
|
21
|
-
else
|
22
|
-
raise e
|
23
|
-
end
|
24
18
|
ensure
|
25
19
|
@path = @next_path
|
26
20
|
@metadata = @next_metadata
|
@@ -32,8 +26,8 @@ module Pacer::Pipes
|
|
32
26
|
if @queue.isEmpty
|
33
27
|
@next_metadata = nil
|
34
28
|
r = @starts.next
|
35
|
-
if @starts.respond_to? :
|
36
|
-
@next_path = @starts.
|
29
|
+
if pathEnabled and @starts.respond_to? :getCurrentPath
|
30
|
+
@next_path = @starts.getCurrentPath
|
37
31
|
else
|
38
32
|
@next_path = java.util.ArrayList.new
|
39
33
|
end
|
@@ -42,12 +36,6 @@ module Pacer::Pipes
|
|
42
36
|
element, @next_metadata, @next_path = @queue.remove
|
43
37
|
element
|
44
38
|
end
|
45
|
-
rescue NativeException => e
|
46
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
47
|
-
raise e.cause
|
48
|
-
else
|
49
|
-
raise e
|
50
|
-
end
|
51
39
|
end
|
52
40
|
|
53
41
|
def getPathToHere
|
@@ -10,24 +10,18 @@ module Pacer::Pipes
|
|
10
10
|
if @comparison == Pacer::Pipes::EQUAL
|
11
11
|
while true
|
12
12
|
element = @starts.next
|
13
|
-
if element and @ids.include? element.
|
13
|
+
if element and @ids.include? element.getId
|
14
14
|
return element
|
15
15
|
end
|
16
16
|
end
|
17
17
|
else
|
18
18
|
while true
|
19
19
|
element = @starts.next
|
20
|
-
if element and not @ids.include? element.
|
20
|
+
if element and not @ids.include? element.getId
|
21
21
|
return element
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
|
-
rescue NativeException => e
|
26
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
27
|
-
raise e.cause
|
28
|
-
else
|
29
|
-
raise e
|
30
|
-
end
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|
@@ -6,20 +6,13 @@ module Pacer::Pipes
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def processNextStart
|
9
|
-
raise
|
10
|
-
|
9
|
+
raise EmptyPipe.instance if @raise
|
10
|
+
starts.next
|
11
11
|
@raise = true
|
12
|
-
rescue
|
13
|
-
|
14
|
-
# This is the only case where we return true.
|
15
|
-
# The only time we get here is if the first call to next
|
16
|
-
# has no results.
|
17
|
-
true
|
18
|
-
else
|
19
|
-
raise e
|
20
|
-
end
|
12
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
13
|
+
true
|
21
14
|
else
|
22
|
-
raise
|
15
|
+
raise EmptyPipe.instance
|
23
16
|
end
|
24
17
|
|
25
18
|
def reset
|
@@ -2,7 +2,7 @@ module Pacer::Pipes
|
|
2
2
|
class IsUniquePipe < RubyPipe
|
3
3
|
import java.util.ArrayList
|
4
4
|
import com.tinkerpop.pipes.sideeffect.SideEffectPipe
|
5
|
-
import com.tinkerpop.pipes.util.ExpandableIterator
|
5
|
+
import com.tinkerpop.pipes.util.iterators.ExpandableIterator
|
6
6
|
import com.tinkerpop.pipes.filter.DuplicateFilterPipe
|
7
7
|
|
8
8
|
include SideEffectPipe
|
@@ -16,12 +16,6 @@ module Pacer::Pipes
|
|
16
16
|
value = starts.next
|
17
17
|
check_uniqueness value if @unique
|
18
18
|
value
|
19
|
-
rescue NativeException => e
|
20
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
21
|
-
raise e.cause
|
22
|
-
else
|
23
|
-
raise e
|
24
|
-
end
|
25
19
|
end
|
26
20
|
|
27
21
|
def reset
|
@@ -42,12 +36,8 @@ module Pacer::Pipes
|
|
42
36
|
def check_uniqueness(value)
|
43
37
|
@expando.add value
|
44
38
|
@unique_pipe.next
|
45
|
-
rescue
|
46
|
-
|
47
|
-
@unique = false
|
48
|
-
else
|
49
|
-
raise e
|
50
|
-
end
|
39
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
40
|
+
@unique = false
|
51
41
|
end
|
52
42
|
|
53
43
|
def prepare_state
|
@@ -8,13 +8,7 @@ module Pacer::Pipes
|
|
8
8
|
def processNextStart
|
9
9
|
while true
|
10
10
|
edge = @starts.next
|
11
|
-
return edge if edge and @labels.include? edge.
|
12
|
-
end
|
13
|
-
rescue NativeException => e
|
14
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
15
|
-
raise e.cause
|
16
|
-
else
|
17
|
-
raise e
|
11
|
+
return edge if edge and @labels.include? edge.getLabel
|
18
12
|
end
|
19
13
|
end
|
20
14
|
end
|
data/lib/pacer/pipe/loop_pipe.rb
CHANGED
@@ -4,73 +4,75 @@ module Pacer::Pipes
|
|
4
4
|
|
5
5
|
def initialize(graph, looping_pipe, control_block)
|
6
6
|
super()
|
7
|
+
@graph = graph
|
7
8
|
@control_block = control_block
|
9
|
+
@wrapper = Pacer::Wrappers::WrapperSelector.build
|
8
10
|
|
9
11
|
@expando = ExpandablePipe.new
|
10
12
|
empty = ArrayList.new
|
11
13
|
@expando.setStarts empty.iterator
|
12
14
|
looping_pipe.setStarts(@expando)
|
15
|
+
#if control_block.arity < 0 and 1 < control_block.arity
|
16
|
+
@yield_paths = true
|
17
|
+
looping_pipe.enablePath true
|
18
|
+
#end
|
13
19
|
@looping_pipe = looping_pipe
|
14
20
|
end
|
15
21
|
|
16
22
|
def next
|
17
23
|
super
|
18
|
-
rescue NativeException => e
|
19
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
20
|
-
raise e.cause
|
21
|
-
else
|
22
|
-
raise e
|
23
|
-
end
|
24
24
|
ensure
|
25
25
|
@path = @next_path
|
26
26
|
end
|
27
27
|
|
28
28
|
def setStarts(starts)
|
29
|
-
@starts_has_path = starts.respond_to? :getPath
|
30
29
|
super
|
30
|
+
enablePath true if yield_paths
|
31
31
|
end
|
32
32
|
|
33
33
|
protected
|
34
34
|
|
35
|
+
attr_reader :wrapper, :control_block, :expando, :looping_pipe, :graph, :yield_paths
|
36
|
+
|
35
37
|
def processNextStart
|
36
38
|
while true
|
37
39
|
# FIXME: hasNext shouldn't be raising an exception...
|
38
|
-
has_next =
|
40
|
+
has_next = looping_pipe.hasNext
|
39
41
|
if has_next
|
40
|
-
element =
|
41
|
-
depth = (
|
42
|
-
@next_path =
|
42
|
+
element = looping_pipe.next
|
43
|
+
depth = (expando.metadata || 0) + 1
|
44
|
+
@next_path = looping_pipe.getCurrentPath if yield_paths
|
43
45
|
else
|
44
|
-
element =
|
45
|
-
if
|
46
|
-
@next_path =
|
46
|
+
element = starts.next
|
47
|
+
if pathEnabled
|
48
|
+
@next_path = starts.getCurrentPath
|
47
49
|
else
|
48
50
|
@next_path = ArrayList.new
|
49
51
|
@next_path.add element
|
50
52
|
end
|
51
53
|
depth = 0
|
52
54
|
end
|
53
|
-
|
54
|
-
|
55
|
+
wrapped = wrapper.new(element)
|
56
|
+
wrapped.graph = graph if wrapped.respond_to? :graph=
|
57
|
+
path = @next_path.map do |e|
|
58
|
+
w = wrapper.new e
|
59
|
+
w.graph = graph if w.respond_to? :graph=
|
60
|
+
w
|
61
|
+
end
|
62
|
+
case control_block.call wrapped, depth, path
|
55
63
|
when :loop
|
56
|
-
|
64
|
+
expando.add element, depth, @next_path
|
57
65
|
when :emit
|
58
66
|
return element
|
59
67
|
when :emit_and_loop, :loop_and_emit
|
60
|
-
|
68
|
+
expando.add element, depth, @next_path
|
61
69
|
return element
|
62
70
|
when false, nil
|
63
71
|
else
|
64
|
-
|
72
|
+
expando.add element, depth, @next_path
|
65
73
|
return element
|
66
74
|
end
|
67
75
|
end
|
68
|
-
rescue NativeException => e
|
69
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
70
|
-
raise e.cause
|
71
|
-
else
|
72
|
-
raise e
|
73
|
-
end
|
74
76
|
end
|
75
77
|
|
76
78
|
def getPathToHere
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Pacer
|
2
|
+
module Pipes
|
3
|
+
class PathWrappingPipe < RubyPipe
|
4
|
+
attr_reader :graph
|
5
|
+
attr_accessor :vertex_wrapper, :edge_wrapper, :other_wrapper
|
6
|
+
|
7
|
+
def initialize(graph, vertex_extensions = [], edge_extensions = [])
|
8
|
+
super()
|
9
|
+
@graph = graph
|
10
|
+
@vertex_wrapper = Pacer::Wrappers::WrapperSelector.build :vertex, vertex_extensions || Set[]
|
11
|
+
@edge_wrapper = Pacer::Wrappers::WrapperSelector.build :edge, edge_extensions || Set[]
|
12
|
+
end
|
13
|
+
|
14
|
+
def getCurrentPath
|
15
|
+
starts.getCurrentPath
|
16
|
+
end
|
17
|
+
|
18
|
+
def processNextStart
|
19
|
+
path = starts.next
|
20
|
+
path.collect do |item|
|
21
|
+
if item.is_a? Pacer::Vertex
|
22
|
+
wrapped = vertex_wrapper.new item
|
23
|
+
wrapped.graph = graph
|
24
|
+
wrapped
|
25
|
+
elsif item.is_a? Pacer::Edge
|
26
|
+
wrapped = edge_wrapper.new item
|
27
|
+
wrapped.graph = graph
|
28
|
+
wrapped
|
29
|
+
elsif other_wrapper
|
30
|
+
wrapped = other_wrapper.new item
|
31
|
+
wrapped.graph = graph if wrapped.respond_to? :graph
|
32
|
+
wrapped
|
33
|
+
else
|
34
|
+
item
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -5,33 +5,15 @@ module Pacer::Pipes
|
|
5
5
|
|
6
6
|
def initialize(back, block)
|
7
7
|
super()
|
8
|
-
@block = block
|
9
|
-
@back = back
|
10
|
-
@graph = back.graph if back
|
11
|
-
@extensions = back.extensions + [Pacer::Extensions::BlockFilterElement]
|
12
|
-
@is_element = graph.element_type?(back.element_type) if graph
|
8
|
+
@block = Pacer::Wrappers::WrappingPipeFunction.new back, block
|
13
9
|
end
|
14
10
|
|
15
11
|
def processNextStart
|
16
12
|
while true
|
17
13
|
obj = starts.next
|
18
|
-
|
19
|
-
if is_element
|
20
|
-
obj = obj.add_extensions(extensions)
|
21
|
-
obj.back = back
|
22
|
-
obj.graph = graph
|
23
|
-
end
|
24
|
-
rescue
|
25
|
-
end
|
26
|
-
result = block.call(obj)
|
14
|
+
block.call(obj)
|
27
15
|
return obj
|
28
16
|
end
|
29
|
-
rescue NativeException => e
|
30
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
31
|
-
raise e.cause
|
32
|
-
else
|
33
|
-
raise e
|
34
|
-
end
|
35
17
|
end
|
36
18
|
end
|
37
19
|
end
|
data/lib/pacer/pipe/ruby_pipe.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Pacer::Pipes
|
2
2
|
class RubyPipe < AbstractPipe
|
3
|
+
field_reader :pathEnabled
|
4
|
+
|
3
5
|
attr_reader :starts
|
4
6
|
|
5
7
|
def setStarts(starts)
|
@@ -9,14 +11,19 @@ module Pacer::Pipes
|
|
9
11
|
|
10
12
|
def reset
|
11
13
|
super
|
12
|
-
|
14
|
+
starts.reset if starts.respond_to? :reset
|
15
|
+
end
|
16
|
+
|
17
|
+
def enablePath(b)
|
18
|
+
super
|
19
|
+
starts.enablePath b if starts.respond_to? :enablePath
|
13
20
|
end
|
14
21
|
|
15
22
|
protected
|
16
23
|
|
17
24
|
def getPathToHere
|
18
|
-
if starts.respond_to? :
|
19
|
-
starts.
|
25
|
+
if starts.respond_to? :getCurrentPath
|
26
|
+
starts.getCurrentPath
|
20
27
|
else
|
21
28
|
java.util.ArrayList.new
|
22
29
|
end
|
@@ -1,14 +1,15 @@
|
|
1
1
|
module Pacer
|
2
2
|
module Pipes
|
3
3
|
class SimpleVisitorPipe < Pacer::Pipes::RubyPipe
|
4
|
-
attr_reader :visitor, :in_section
|
4
|
+
attr_reader :visitor, :in_section, :wrapper, :graph
|
5
5
|
|
6
6
|
attr_accessor :use_on_element, :use_after_element, :use_reset
|
7
7
|
|
8
|
-
def initialize(
|
8
|
+
def initialize(wrapper, graph)
|
9
9
|
super()
|
10
|
-
self.visitor = visitor if visitor
|
11
10
|
@in_section = false
|
11
|
+
@wrapper = wrapper
|
12
|
+
@graph = graph
|
12
13
|
end
|
13
14
|
|
14
15
|
def visitor=(visitor)
|
@@ -22,15 +23,15 @@ module Pacer
|
|
22
23
|
visitor.after_element if use_after_element and in_section
|
23
24
|
current = starts.next
|
24
25
|
@in_section = true unless in_section
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@in_section = false
|
30
|
-
raise e.cause
|
31
|
-
else
|
32
|
-
raise
|
26
|
+
if use_on_element
|
27
|
+
wrapped = wrapper.new current
|
28
|
+
wrapped.graph = graph
|
29
|
+
visitor.on_element(wrapped)
|
33
30
|
end
|
31
|
+
return current
|
32
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
33
|
+
@in_section = false
|
34
|
+
raise EmptyPipe.instance
|
34
35
|
end
|
35
36
|
|
36
37
|
def reset
|
@@ -72,13 +72,7 @@ module Pacer::Pipes
|
|
72
72
|
@clearing = @first_silo + @second_silo.sort! + @third_silo.sort!
|
73
73
|
return processNextStart if @clearing.any?
|
74
74
|
end
|
75
|
-
raise
|
76
|
-
rescue NativeException => e
|
77
|
-
if e.cause.getClass == NoSuchElementException.getClass
|
78
|
-
raise e.cause
|
79
|
-
else
|
80
|
-
raise e
|
81
|
-
end
|
75
|
+
raise EmptyPipe.instance
|
82
76
|
end
|
83
77
|
end
|
84
78
|
end
|
@@ -10,13 +10,7 @@ module Pacer::Pipes
|
|
10
10
|
s = @starts.next
|
11
11
|
return s if s.is_a? @type
|
12
12
|
end
|
13
|
-
raise
|
14
|
-
rescue NativeException => e
|
15
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
16
|
-
raise e.cause
|
17
|
-
else
|
18
|
-
raise e
|
19
|
-
end
|
13
|
+
raise EmptyPipe.instance
|
20
14
|
end
|
21
15
|
end
|
22
16
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Pacer::Pipes
|
2
2
|
class UnaryTransformPipe < RubyPipe
|
3
3
|
import com.tinkerpop.pipes.Pipe
|
4
|
-
import com.tinkerpop.pipes.util.SingleIterator
|
4
|
+
import com.tinkerpop.pipes.util.iterators.SingleIterator
|
5
5
|
|
6
6
|
attr_reader :branch_a, :method
|
7
7
|
|
@@ -21,12 +21,6 @@ module Pacer::Pipes
|
|
21
21
|
def processNextStart
|
22
22
|
next_a
|
23
23
|
a.send method rescue nil if a.respond_to? method
|
24
|
-
rescue NativeException => e
|
25
|
-
if e.cause.getClass == Pacer::NoSuchElementException.getClass
|
26
|
-
raise e.cause
|
27
|
-
else
|
28
|
-
raise e
|
29
|
-
end
|
30
24
|
end
|
31
25
|
|
32
26
|
protected
|
@@ -42,8 +36,12 @@ module Pacer::Pipes
|
|
42
36
|
if branch_a
|
43
37
|
begin
|
44
38
|
self.a = branch_a.next
|
39
|
+
rescue EmptyPipe
|
40
|
+
next_element
|
41
|
+
branch_a.setStarts SingleIterator.new(element) if branch_a
|
42
|
+
retry
|
45
43
|
rescue NativeException => e
|
46
|
-
if
|
44
|
+
if @first
|
47
45
|
next_element
|
48
46
|
branch_a.setStarts SingleIterator.new(element) if branch_a
|
49
47
|
retry
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pacer::Pipes
|
2
|
+
class VerticesPipe < AbstractPipe
|
3
|
+
attr_reader :starts
|
4
|
+
|
5
|
+
def setStarts(starts)
|
6
|
+
@starts = starts.first
|
7
|
+
self.iter = @starts.getVertices.iterator
|
8
|
+
end
|
9
|
+
|
10
|
+
def processNextStart
|
11
|
+
iter.next
|
12
|
+
end
|
13
|
+
|
14
|
+
def reset
|
15
|
+
self.iter = @starts.getVertices.iterator
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_accessor :iter
|
21
|
+
end
|
22
|
+
end
|
@@ -47,13 +47,9 @@ module Pacer
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
50
|
-
rescue
|
51
|
-
|
52
|
-
|
53
|
-
raise e.cause
|
54
|
-
else
|
55
|
-
raise
|
56
|
-
end
|
50
|
+
rescue EmptyPipe, java.util.NoSuchElementException
|
51
|
+
@in_section = false
|
52
|
+
raise EmptyPipe.instance
|
57
53
|
end
|
58
54
|
|
59
55
|
def reset
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Pacer
|
2
|
+
module Pipes
|
3
|
+
class WrappingPipe < RubyPipe
|
4
|
+
attr_reader :graph, :element_type, :extensions, :wrapper
|
5
|
+
|
6
|
+
def initialize(graph, element_type = nil, extensions = [])
|
7
|
+
super()
|
8
|
+
@graph = graph
|
9
|
+
@element_type = element_type
|
10
|
+
@extensions = extensions || []
|
11
|
+
@wrapper = Pacer::Wrappers::WrapperSelector.build element_type, @extensions
|
12
|
+
end
|
13
|
+
|
14
|
+
def getCurrentPath
|
15
|
+
starts.getCurrentPath
|
16
|
+
end
|
17
|
+
|
18
|
+
def wrapper=(w)
|
19
|
+
if extensions.any? and w.respond_to? :add_extensions
|
20
|
+
@wrapper = w.add_extensions extensions
|
21
|
+
else
|
22
|
+
@wrapper = w
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def processNextStart
|
27
|
+
e = wrapper.new starts.next
|
28
|
+
if element_type == :vertex or element_type == :edge or element_type == :mixed
|
29
|
+
e.graph = graph
|
30
|
+
elsif e.respond_to? :graph=
|
31
|
+
e.graph = graph
|
32
|
+
end
|
33
|
+
e
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/pacer/pipes.rb
CHANGED
@@ -5,8 +5,7 @@ module Pacer
|
|
5
5
|
import com.tinkerpop.pipes.AbstractPipe
|
6
6
|
import com.tinkerpop.pipes.transform.IdentityPipe
|
7
7
|
import com.tinkerpop.pipes.util.Pipeline
|
8
|
-
import com.tinkerpop.pipes.util.
|
9
|
-
import com.tinkerpop.pipes.util.MultiIterator
|
8
|
+
import com.tinkerpop.pipes.util.iterators.MultiIterator
|
10
9
|
import com.tinkerpop.pipes.util.PipeHelper
|
11
10
|
|
12
11
|
import com.tinkerpop.pipes.filter.RandomFilterPipe
|
@@ -14,8 +13,12 @@ module Pacer
|
|
14
13
|
import com.tinkerpop.pipes.filter.RangeFilterPipe
|
15
14
|
import com.tinkerpop.pipes.filter.FilterPipe
|
16
15
|
|
17
|
-
import com.tinkerpop.pipes.transform.IdPipe
|
18
|
-
import com.tinkerpop.pipes.transform.PropertyPipe
|
16
|
+
import com.tinkerpop.gremlin.pipes.transform.IdPipe
|
17
|
+
import com.tinkerpop.gremlin.pipes.transform.PropertyPipe
|
18
|
+
|
19
|
+
IN = com.tinkerpop.blueprints.Direction::IN
|
20
|
+
OUT = com.tinkerpop.blueprints.Direction::OUT
|
21
|
+
BOTH = com.tinkerpop.blueprints.Direction::BOTH
|
19
22
|
|
20
23
|
EQUAL = FilterPipe::Filter::EQUAL
|
21
24
|
NOT_EQUAL = FilterPipe::Filter::NOT_EQUAL
|
@@ -23,23 +26,22 @@ module Pacer
|
|
23
26
|
end
|
24
27
|
|
25
28
|
import java.util.Iterator
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
NoSuchElementException = e.cause
|
30
|
-
Pipes::NoSuchElementException = e.cause
|
31
|
-
end
|
29
|
+
|
30
|
+
EmptyPipe = com.tinkerpop.pipes.util.FastNoSuchElementException
|
31
|
+
Pipes::EmptyPipe = EmptyPipe
|
32
32
|
end
|
33
33
|
|
34
34
|
require 'pacer/pipe/ruby_pipe'
|
35
35
|
|
36
|
+
require 'pacer/pipe/vertices_pipe'
|
37
|
+
require 'pacer/pipe/edges_pipe'
|
38
|
+
|
36
39
|
require 'pacer/pipe/never_pipe'
|
37
40
|
require 'pacer/pipe/block_filter_pipe'
|
38
41
|
require 'pacer/pipe/collection_filter_pipe'
|
39
42
|
require 'pacer/pipe/enumerable_pipe'
|
40
43
|
require 'pacer/pipe/expandable_pipe'
|
41
44
|
require 'pacer/pipe/loop_pipe'
|
42
|
-
require 'pacer/pipe/map_pipe'
|
43
45
|
require 'pacer/pipe/process_pipe'
|
44
46
|
require 'pacer/pipe/visitor_pipe'
|
45
47
|
require 'pacer/pipe/simple_visitor_pipe'
|
@@ -51,7 +53,6 @@ require 'pacer/pipe/type_filter_pipe'
|
|
51
53
|
require 'pacer/pipe/label_collection_filter_pipe'
|
52
54
|
require 'pacer/pipe/id_collection_filter_pipe'
|
53
55
|
require 'pacer/pipe/label_prefix_pipe'
|
54
|
-
require 'pacer/pipe/variable_store_iterator_wrapper'
|
55
56
|
|
56
57
|
require 'pacer/pipe/property_comparison_pipe'
|
57
58
|
|
@@ -59,3 +60,7 @@ require 'pacer/pipe/blackbox_pipeline'
|
|
59
60
|
|
60
61
|
require 'pacer/pipe/unary_transform_pipe'
|
61
62
|
require 'pacer/pipe/cross_product_transform_pipe'
|
63
|
+
|
64
|
+
require 'pacer/pipe/wrapping_pipe'
|
65
|
+
require 'pacer/pipe/path_wrapping_pipe'
|
66
|
+
require 'pacer/pipe/unwrapping_pipe'
|