Skip to content

Commit 799a86c

Browse files
author
saxenakshitiz
committed
Address review comments. Also exposed rules count
1 parent 3e923c5 commit 799a86c

File tree

12 files changed

+459
-266
lines changed

12 files changed

+459
-266
lines changed

hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/fetcher/LabelFetcher.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import java.util.concurrent.CompletableFuture;
66
import javax.inject.Inject;
77
import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher;
8-
import org.hypertrace.graphql.label.dao.LabelDao;
9-
import org.hypertrace.graphql.label.joiner.LabelJoinerBuilder;
8+
import org.hypertrace.graphql.label.joiner.EntityAndRuleJoinerBuilder;
109
import org.hypertrace.graphql.label.schema.LabelResultSet;
1110

1211
public class LabelFetcher extends InjectableDataFetcher<LabelResultSet> {
@@ -16,20 +15,18 @@ public LabelFetcher() {
1615
}
1716

1817
static final class LabelFetcherImpl implements DataFetcher<CompletableFuture<LabelResultSet>> {
19-
private final LabelJoinerBuilder requestBuilder;
20-
private final LabelDao labelDao;
18+
private final EntityAndRuleJoinerBuilder requestBuilder;
2119

2220
@Inject
23-
LabelFetcherImpl(LabelJoinerBuilder requestBuilder, LabelDao labelDao) {
21+
LabelFetcherImpl(EntityAndRuleJoinerBuilder requestBuilder) {
2422
this.requestBuilder = requestBuilder;
25-
this.labelDao = labelDao;
2623
}
2724

2825
@Override
2926
public CompletableFuture<LabelResultSet> get(DataFetchingEnvironment environment) {
3027
return this.requestBuilder
3128
.build(environment.getContext(), environment.getSelectionSet())
32-
.flatMap(request -> request.joinLabelsWithEntities())
29+
.flatMap(request -> request.joinLabelsWithEntitiesAndRules())
3330
.toCompletionStage()
3431
.toCompletableFuture();
3532
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.hypertrace.graphql.label.joiner;
2+
3+
import io.reactivex.rxjava3.core.Single;
4+
import org.hypertrace.graphql.label.schema.LabelResultSet;
5+
6+
public interface EntityAndRuleJoiner {
7+
8+
/**
9+
* Produces label result set after joining labels with associated entities and label application
10+
* rules
11+
*
12+
* @return label result set
13+
*/
14+
Single<LabelResultSet> joinLabelsWithEntitiesAndRules();
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.hypertrace.graphql.label.joiner;
2+
3+
import graphql.schema.DataFetchingFieldSelectionSet;
4+
import io.reactivex.rxjava3.core.Single;
5+
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
6+
7+
public interface EntityAndRuleJoinerBuilder {
8+
Single<EntityAndRuleJoiner> build(
9+
GraphQlRequestContext context, DataFetchingFieldSelectionSet selectionSet);
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.hypertrace.graphql.label.joiner;
2+
3+
public interface LabelApplicationRulesRequest {
4+
int limit();
5+
}

hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/joiner/LabelJoiner.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ public <T> Single<Map<T, LabelResultSet>> joinLabels(
1717
Collection<T> joinSources, LabelIdGetter<T> labelIdGetter) {
1818
return Single.just(Collections.emptyMap());
1919
}
20-
21-
@Override
22-
public Single<LabelResultSet> joinLabelsWithEntities() {
23-
throw new UnsupportedOperationException();
24-
}
2520
};
2621

2722
/**
@@ -35,13 +30,6 @@ public Single<LabelResultSet> joinLabelsWithEntities() {
3530
<T> Single<Map<T, LabelResultSet>> joinLabels(
3631
Collection<T> joinSources, LabelIdGetter<T> labelIdGetter);
3732

38-
/**
39-
* Produces a map of label result set to source ids
40-
*
41-
* @return A map of each source to its matching label result set
42-
*/
43-
Single<LabelResultSet> joinLabelsWithEntities();
44-
4533
@FunctionalInterface
4634
interface LabelIdGetter<T> {
4735
Single<List<String>> getLabelIds(T source);
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
package org.hypertrace.graphql.label.joiner;
22

3-
import graphql.schema.DataFetchingFieldSelectionSet;
43
import io.reactivex.rxjava3.core.Single;
54
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
65

76
public interface LabelJoinerBuilder {
87
Single<LabelJoiner> build(GraphQlRequestContext context);
9-
10-
Single<LabelJoiner> build(
11-
GraphQlRequestContext context, DataFetchingFieldSelectionSet selectionSet);
128
}

hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/Label.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import org.hypertrace.core.graphql.common.schema.id.Identifiable;
55

66
@GraphQLName(Label.TYPE_NAME)
7-
public interface Label extends Identifiable, LabelData, LabeledEntities {
7+
public interface Label extends Identifiable, LabelData, LabeledEntities, LabelApplicationRules {
88
String TYPE_NAME = "Label";
99
String ARGUMENT_NAME = "label";
1010
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.hypertrace.graphql.label.schema;
2+
3+
import graphql.annotations.annotationTypes.GraphQLField;
4+
import graphql.annotations.annotationTypes.GraphQLName;
5+
import graphql.annotations.annotationTypes.GraphQLNonNull;
6+
import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument;
7+
import org.hypertrace.graphql.label.schema.rule.LabelApplicationRuleResultSet;
8+
9+
@GraphQLName(LabelApplicationRules.TYPE_NAME)
10+
public interface LabelApplicationRules {
11+
String TYPE_NAME = "LabelApplicationRules";
12+
String LABEL_APPLICATION_RULES_QUERY_NAME = "labelApplicationRules";
13+
14+
@GraphQLField
15+
@GraphQLNonNull
16+
@GraphQLName(LABEL_APPLICATION_RULES_QUERY_NAME)
17+
LabelApplicationRuleResultSet labelApplicationRules(
18+
@GraphQLName(LimitArgument.ARGUMENT_NAME) int limit);
19+
}

hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelResponseConverter.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.Collections;
55
import java.util.List;
66
import java.util.Map;
7-
import java.util.Optional;
87
import java.util.stream.Collectors;
98
import lombok.Value;
109
import lombok.experimental.Accessors;
@@ -15,6 +14,7 @@
1514
import org.hypertrace.graphql.label.schema.LabelResultSet;
1615
import org.hypertrace.graphql.label.schema.LabeledEntity;
1716
import org.hypertrace.graphql.label.schema.LabeledEntityResultSet;
17+
import org.hypertrace.graphql.label.schema.rule.LabelApplicationRuleResultSet;
1818
import org.hypertrace.label.config.service.v1.CreateLabelResponse;
1919
import org.hypertrace.label.config.service.v1.GetLabelsResponse;
2020
import org.hypertrace.label.config.service.v1.UpdateLabelResponse;
@@ -51,27 +51,38 @@ private Label convertLabel(org.hypertrace.label.config.service.v1.Label label) {
5151
label.getData().getKey(),
5252
label.getData().hasColor() ? label.getData().getColor() : null,
5353
label.getData().hasDescription() ? label.getData().getDescription() : null,
54-
Collections.emptyMap());
54+
Collections.emptyMap(),
55+
null);
5556
}
5657

57-
public Single<Label> convertLabel(Label label, Map<String, EntityResultSet> entityResultMap) {
58+
public Single<Label> convertLabel(
59+
Label label,
60+
Map<String, EntityResultSet> entityResultMap,
61+
LabelApplicationRuleResultSet labelApplicationRuleResultSet) {
5862
Label convertedLabel =
5963
new DefaultLabel(
6064
label.id(),
6165
label.key(),
6266
label.color(),
6367
label.description(),
64-
getLabeledEntitiesMap(entityResultMap));
68+
getLabeledEntityResultSetMap(entityResultMap),
69+
labelApplicationRuleResultSet);
6570
return Single.just(convertedLabel);
6671
}
6772

68-
private Map<String, List<LabeledEntity>> getLabeledEntitiesMap(
73+
private Map<String, LabeledEntityResultSet> getLabeledEntityResultSetMap(
6974
Map<String, EntityResultSet> entityResultMap) {
7075
return entityResultMap.entrySet().stream()
71-
.map(entry -> Map.entry(entry.getKey(), convertEntities(entry.getValue())))
76+
.map(entry -> Map.entry(entry.getKey(), getLabeledEntityResultSet(entry.getValue())))
7277
.collect(CollectorUtils.immutableMapEntryCollector());
7378
}
7479

80+
private LabeledEntityResultSet getLabeledEntityResultSet(EntityResultSet entityResultSet) {
81+
List<LabeledEntity> labeledEntities = convertEntities(entityResultSet);
82+
return new DefaultLabeledEntityResultSet(
83+
labeledEntities, labeledEntities.size(), entityResultSet.total());
84+
}
85+
7586
private List<LabeledEntity> convertEntities(EntityResultSet entityResultSet) {
7687
return entityResultSet.results().stream()
7788
.map(DefaultLabeledEntity::new)
@@ -93,16 +104,17 @@ private static class DefaultLabel implements Label {
93104
String key;
94105
String color;
95106
String description;
96-
Map<String, List<LabeledEntity>> labeledEntitiesMap;
107+
Map<String, LabeledEntityResultSet> labeledEntityResultSetMap;
108+
LabelApplicationRuleResultSet labelApplicationRuleResultSet;
97109

98110
@Override
99111
public LabeledEntityResultSet labeledEntities(String entityType, int limit) {
100-
List<LabeledEntity> labeledEntities =
101-
Optional.ofNullable(labeledEntitiesMap.get(entityType)).orElse(Collections.emptyList());
102-
List<LabeledEntity> labeledEntitiesWithLimit =
103-
labeledEntities.size() > limit ? labeledEntities.subList(0, limit) : labeledEntities;
104-
return new DefaultLabeledEntityResultSet(
105-
labeledEntitiesWithLimit, labeledEntitiesWithLimit.size(), labeledEntities.size());
112+
return labeledEntityResultSetMap.get(entityType);
113+
}
114+
115+
@Override
116+
public LabelApplicationRuleResultSet labelApplicationRules(int limit) {
117+
return labelApplicationRuleResultSet;
106118
}
107119
}
108120

0 commit comments

Comments
 (0)