Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder;
import org.hypertrace.graphql.config.HypertraceGraphQlServiceConfig;
import org.hypertrace.graphql.label.application.rules.request.LabelApplicationRuleCreateRequest;
import org.hypertrace.graphql.label.application.rules.request.LabelApplicationRuleUpdateRequest;
import org.hypertrace.graphql.label.application.rules.schema.query.LabelApplicationRuleResultSet;
import org.hypertrace.graphql.label.application.rules.schema.shared.LabelApplicationRule;
import org.hypertrace.label.application.rule.config.service.v1.GetLabelApplicationRulesRequest;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleConfigServiceGrpc;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleConfigServiceGrpc.LabelApplicationRuleConfigServiceFutureStub;

public class LabelApplicationRuleConfigServiceDao implements LabelApplicationRuleDao {
class LabelApplicationRuleConfigServiceDao implements LabelApplicationRuleDao {

private final LabelApplicationRuleConfigServiceFutureStub
labelApplicationRuleConfigServiceFutureStub;
Expand Down Expand Up @@ -77,7 +78,8 @@ public Single<LabelApplicationRuleResultSet> getLabelApplicationRules(Contextual
}

@Override
public Single<LabelApplicationRule> updateLabelApplicationRule(ContextualRequest request) {
return null;
public Single<LabelApplicationRule> updateLabelApplicationRule(
LabelApplicationRuleUpdateRequest request) {
return Single.error(new UnsupportedOperationException("Not yet implemented"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io.reactivex.rxjava3.core.Single;
import org.hypertrace.core.graphql.common.request.ContextualRequest;
import org.hypertrace.graphql.label.application.rules.request.LabelApplicationRuleCreateRequest;
import org.hypertrace.graphql.label.application.rules.request.LabelApplicationRuleUpdateRequest;
import org.hypertrace.graphql.label.application.rules.schema.query.LabelApplicationRuleResultSet;
import org.hypertrace.graphql.label.application.rules.schema.shared.LabelApplicationRule;

Expand All @@ -12,5 +13,6 @@ Single<LabelApplicationRule> createLabelApplicationRule(

Single<LabelApplicationRuleResultSet> getLabelApplicationRules(ContextualRequest request);

Single<LabelApplicationRule> updateLabelApplicationRule(ContextualRequest request);
Single<LabelApplicationRule> updateLabelApplicationRule(
LabelApplicationRuleUpdateRequest request);
}
Original file line number Diff line number Diff line change
@@ -1,57 +1,104 @@
package org.hypertrace.graphql.label.application.rules.dao;

import java.util.stream.Collectors;
import org.hypertrace.graphql.label.application.rules.request.LabelApplicationRuleCreateRequest;
import org.hypertrace.graphql.label.application.rules.schema.shared.Condition;
import org.hypertrace.graphql.label.application.rules.schema.shared.LabelApplicationRuleData;
import org.hypertrace.graphql.label.application.rules.schema.shared.LeafCondition;
import org.hypertrace.graphql.label.application.rules.schema.shared.StringCondition;
import org.hypertrace.graphql.label.application.rules.schema.shared.UnaryCondition;
import org.hypertrace.label.application.rule.config.service.v1.CreateLabelApplicationRuleRequest;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.CompositeCondition;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Condition;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.LeafCondition;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringCondition;
import org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.UnaryCondition;

public class LabelApplicationRuleRequestConverter {
class LabelApplicationRuleRequestConverter {
CreateLabelApplicationRuleRequest convertCreationRequest(
LabelApplicationRuleCreateRequest labelApplicationRuleCreateRequest) {
LabelApplicationRuleData data =
org.hypertrace.graphql.label.application.rules.schema.shared.LabelApplicationRuleData data =
labelApplicationRuleCreateRequest
.createLabelApplicationRuleRequest()
.labelApplicationRuleData();
return CreateLabelApplicationRuleRequest.newBuilder()
.setData(
org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.newBuilder()
LabelApplicationRuleData.newBuilder()
.setName(data.name())
.setMatchingCondition(convertMatchingCondition(data.condition()))
.setLabelAction(convertLabelAction()))
.setLabelAction(convertLabelAction(data.action())))
.build();
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Condition
convertMatchingCondition(Condition condition) {
Condition convertMatchingCondition(
org.hypertrace.graphql.label.application.rules.schema.shared.Condition condition) {
switch (condition.conditionType()) {
case LEAF_CONDITION:
return org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.Condition.newBuilder()
return Condition.newBuilder()
.setLeafCondition(convertLeafCondition(condition.leafCondition()))
.build();
case COMPOSITE_CONDITION:
return Condition.newBuilder()
.setCompositeCondition(convertCompositeCondition(condition.compositeCondition()))
.build();
default:
throw new IllegalArgumentException("Error when parsing matching condition");
}
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action
convertLabelAction() {
return null;
Action convertLabelAction(
org.hypertrace.graphql.label.application.rules.schema.shared.Action action) {
Action.Builder actionBuilder = Action.newBuilder().addAllEntityTypes(action.entityTypes());

switch (action.operation()) {
case OPERATION_MERGE:
actionBuilder.setOperation(Action.Operation.OPERATION_MERGE);
break;
default:
throw new IllegalArgumentException("Unsupported Operation");
}

switch (action.valueType()) {
case STATIC_LABELS:
return actionBuilder
.setStaticLabels(
Action.StaticLabels.newBuilder().addAllIds(action.staticLabels().ids()).build())
.build();
case DYNAMIC_LABEL_KEY:
return actionBuilder.setDynamicLabelKey(action.dynamicLabelKey()).build();
default:
throw new IllegalArgumentException("Unsupported action value");
}
}

CompositeCondition convertCompositeCondition(
org.hypertrace.graphql.label.application.rules.schema.shared.CompositeCondition
compositeCondition) {
CompositeCondition.Builder compositeConditionBuilder =
CompositeCondition.newBuilder()
.addAllChildren(
compositeCondition.children().stream()
.map(this::convertLeafCondition)
.map(
leafCondition ->
Condition.newBuilder().setLeafCondition(leafCondition).build())
.collect(Collectors.toList()));
switch (compositeCondition.operator()) {
case LOGICAL_OPERATOR_AND:
return compositeConditionBuilder
.setOperator(CompositeCondition.LogicalOperator.LOGICAL_OPERATOR_AND)
.build();
case LOGICAL_OPERATOR_OR:
return compositeConditionBuilder
.setOperator(CompositeCondition.LogicalOperator.LOGICAL_OPERATOR_OR)
.build();
default:
throw new IllegalArgumentException("Composite Condition Conversion Failed");
}
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.LeafCondition
convertLeafCondition(LeafCondition leafCondition) {
org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.LeafCondition
.Builder
leafConditionBuilder =
org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.LeafCondition.newBuilder()
.setKeyCondition(convertStringCondition(leafCondition.keyCondition()));
LeafCondition convertLeafCondition(
org.hypertrace.graphql.label.application.rules.schema.shared.LeafCondition leafCondition) {
LeafCondition.Builder leafConditionBuilder =
LeafCondition.newBuilder()
.setKeyCondition(convertStringCondition(leafCondition.keyCondition()));
switch (leafCondition.valueCondition().valueConditionType()) {
case STRING_CONDITION:
return leafConditionBuilder
Expand All @@ -68,45 +115,41 @@ CreateLabelApplicationRuleRequest convertCreationRequest(
}
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringCondition
convertStringCondition(StringCondition stringCondition) {
return org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.StringCondition.newBuilder()
StringCondition convertStringCondition(
org.hypertrace.graphql.label.application.rules.schema.shared.StringCondition
stringCondition) {
return StringCondition.newBuilder()
.setOperator(convertStringConditionOperator(stringCondition.operator()))
.setValue(stringCondition.value())
.build();
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.UnaryCondition
convertUnaryCondition(UnaryCondition unaryCondition) {
return org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.UnaryCondition.newBuilder()
UnaryCondition convertUnaryCondition(
org.hypertrace.graphql.label.application.rules.schema.shared.UnaryCondition unaryCondition) {
return UnaryCondition.newBuilder()
.setOperator(convertUnaryOperator(unaryCondition.operator()))
.build();
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.StringCondition
.Operator
convertStringConditionOperator(StringCondition.Operator operator) {
StringCondition.Operator convertStringConditionOperator(
org.hypertrace.graphql.label.application.rules.schema.shared.StringCondition.Operator
operator) {
switch (operator) {
case OPERATOR_EQUALS:
return org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.StringCondition.Operator.OPERATOR_EQUALS;
return StringCondition.Operator.OPERATOR_EQUALS;
case OPERATOR_MATCHES_REGEX:
return org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.StringCondition.Operator.OPERATOR_MATCHES_REGEX;
return StringCondition.Operator.OPERATOR_MATCHES_REGEX;
default:
throw new IllegalArgumentException("Unsupported String Condition Operator");
}
}

org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.UnaryCondition
.Operator
convertUnaryOperator(UnaryCondition.Operator operator) {
UnaryCondition.Operator convertUnaryOperator(
org.hypertrace.graphql.label.application.rules.schema.shared.UnaryCondition.Operator
operator) {
switch (operator) {
case OPERATOR_EXISTS:
return org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData
.UnaryCondition.Operator.OPERATOR_EXISTS;
return UnaryCondition.Operator.OPERATOR_EXISTS;
default:
throw new IllegalArgumentException("Unsupported Unary Condition Operator");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
import lombok.Value;
import lombok.experimental.Accessors;
import org.hypertrace.graphql.label.application.rules.schema.query.LabelApplicationRuleResultSet;
import org.hypertrace.graphql.label.application.rules.schema.shared.Action;
import org.hypertrace.graphql.label.application.rules.schema.shared.CompositeCondition;
import org.hypertrace.graphql.label.application.rules.schema.shared.Condition;
import org.hypertrace.graphql.label.application.rules.schema.shared.LabelApplicationRule;
import org.hypertrace.graphql.label.application.rules.schema.shared.LabelApplicationRuleData;
import org.hypertrace.graphql.label.application.rules.schema.shared.LeafCondition;
import org.hypertrace.graphql.label.application.rules.schema.shared.StaticLabels;
import org.hypertrace.graphql.label.application.rules.schema.shared.StringCondition;
import org.hypertrace.graphql.label.application.rules.schema.shared.UnaryCondition;
import org.hypertrace.graphql.label.application.rules.schema.shared.ValueCondition;
Expand All @@ -19,6 +21,7 @@

class LabelApplicationRuleResponseConverter {

// TODO: Refactor logic into convert methods from the static methods
Single<LabelApplicationRuleResultSet> convertGetLabelApplicationsRuleResponse(
GetLabelApplicationRulesResponse response) {
return Observable.fromIterable(response.getLabelApplicationRulesList())
Expand Down Expand Up @@ -61,11 +64,64 @@ private static LabelApplicationRuleData of(
org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData data) {
String ruleName = data.getName();
Condition matchingCondition = DefaultCondition.of(data.getMatchingCondition());
return new DefaultLabelApplicationRuleData(ruleName, matchingCondition);
Action action = DefaultAction.of(data.getLabelAction());
return new DefaultLabelApplicationRuleData(ruleName, matchingCondition, action);
}

String name;
Condition condition;
Action action;
}

@Value
@Accessors(fluent = true)
private static class DefaultAction implements Action {
private static Action of(
org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action
action) {
List<String> entityTypes = action.getEntityTypesList();
Operation operation;
switch (action.getOperation()) {
case OPERATION_MERGE:
operation = Operation.OPERATION_MERGE;
break;
default:
throw new IllegalArgumentException("Invalid operation in label");
}
switch (action.getValueCase()) {
case STATIC_LABELS:
return new DefaultAction(
entityTypes,
operation,
DefaultStaticLabels.of(action.getStaticLabels()),
null,
ValueType.STATIC_LABELS);
case DYNAMIC_LABEL_KEY:
return new DefaultAction(
entityTypes, operation, null, action.getDynamicLabelKey(), ValueType.STATIC_LABELS);
default:
throw new IllegalArgumentException("Unsupported value type in action");
}
}

List<String> entityTypes;
Operation operation;
StaticLabels staticLabels;
String dynamicLabelKey;
ValueType valueType;
}

@Value
@Accessors(fluent = true)
private static class DefaultStaticLabels implements StaticLabels {
private static StaticLabels of(
org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData.Action
.StaticLabels
staticLabels) {
return new DefaultStaticLabels(staticLabels.getIdsList());
}

List<String> ids;
}

@Value
Expand Down
Loading