@@ -21,6 +21,7 @@ import (
21
21
22
22
pb "github.com/datacommonsorg/mixer/internal/proto"
23
23
pbv2 "github.com/datacommonsorg/mixer/internal/proto/v2"
24
+ "github.com/datacommonsorg/mixer/internal/server/node"
24
25
"github.com/datacommonsorg/mixer/internal/server/placein"
25
26
"github.com/datacommonsorg/mixer/internal/server/resource"
26
27
"github.com/datacommonsorg/mixer/internal/server/statvar"
@@ -36,39 +37,80 @@ import (
36
37
func API (
37
38
ctx context.Context ,
38
39
store * store.Store ,
40
+ metadata * resource.Metadata ,
39
41
nodes []string ,
40
42
properties []string ,
41
43
direction string ,
42
44
limit int ,
43
45
reqToken string ,
44
46
) (* pbv2.NodeResponse , error ) {
45
- data , pi , err := v1pv .Fetch (
46
- ctx ,
47
- store ,
48
- nodes ,
49
- properties ,
50
- limit ,
51
- reqToken ,
52
- direction ,
53
- )
54
- if err != nil {
55
- return nil , err
47
+ obsNodes := []string {}
48
+ regularNodes := []string {}
49
+ for _ , n := range nodes {
50
+ if strings .HasPrefix (n , "dc/o" ) {
51
+ obsNodes = append (obsNodes , n )
52
+ } else {
53
+ regularNodes = append (regularNodes , n )
54
+ }
56
55
}
57
56
res := & pbv2.NodeResponse {Data : map [string ]* pbv2.LinkedGraph {}}
58
- for _ , node := range nodes {
59
- res .Data [node ] = & pbv2.LinkedGraph {Arcs : map [string ]* pbv2.Nodes {}}
60
- for _ , property := range properties {
61
- res .Data [node ].Arcs [property ] = & pbv2.Nodes {
62
- Nodes : v1pv .MergeTypedNodes (data [node ][property ]),
57
+
58
+ if len (obsNodes ) > 0 {
59
+ propertySet := map [string ]struct {}{}
60
+ for _ , p := range properties {
61
+ propertySet [p ] = struct {}{}
62
+ }
63
+ tripleResp , err := node .GetObsTriples (ctx , store , metadata , obsNodes )
64
+ if err != nil {
65
+ return nil , err
66
+ }
67
+ for dcid , tripleList := range tripleResp {
68
+ res .Data [dcid ] = & pbv2.LinkedGraph {Arcs : map [string ]* pbv2.Nodes {}}
69
+ for _ , t := range tripleList {
70
+ if _ , ok := propertySet [t .Predicate ]; ok {
71
+ res .Data [dcid ].Arcs [t .Predicate ] = & pbv2.Nodes {
72
+ Nodes : []* pb.EntityInfo {
73
+ {
74
+ Name : t .ObjectName ,
75
+ Value : t .ObjectValue ,
76
+ Types : t .ObjectTypes ,
77
+ Dcid : t .ObjectId ,
78
+ ProvenanceId : t .ProvenanceId ,
79
+ },
80
+ },
81
+ }
82
+ }
63
83
}
64
84
}
65
85
}
66
- if pi != nil {
67
- respToken , err := util .EncodeProto (pi )
86
+ if len (regularNodes ) > 0 {
87
+ data , pi , err := v1pv .Fetch (
88
+ ctx ,
89
+ store ,
90
+ regularNodes ,
91
+ properties ,
92
+ limit ,
93
+ reqToken ,
94
+ direction ,
95
+ )
68
96
if err != nil {
69
97
return nil , err
70
98
}
71
- res .NextToken = respToken
99
+ for _ , n := range regularNodes {
100
+ res .Data [n ] = & pbv2.LinkedGraph {Arcs : map [string ]* pbv2.Nodes {}}
101
+ for _ , property := range properties {
102
+ res .Data [n ].Arcs [property ] = & pbv2.Nodes {
103
+ Nodes : v1pv .MergeTypedNodes (data [n ][property ]),
104
+ }
105
+ }
106
+ }
107
+ if pi != nil {
108
+ respToken , err := util .EncodeProto (pi )
109
+ if err != nil {
110
+ return nil , err
111
+ }
112
+ res .NextToken = respToken
113
+ }
72
114
}
73
115
return res , nil
74
116
}
@@ -87,7 +129,6 @@ func LinkedPropertyValues(
87
129
if ! ok {
88
130
return nil , status .Errorf (codes .InvalidArgument , "must provide typeOf filters" )
89
131
}
90
-
91
132
if linkedProperty == "containedInPlace" && direction == util .DirectionIn {
92
133
data , err := placein .GetPlacesIn (
93
134
ctx ,
0 commit comments