Skip to content

Commit

Permalink
Fix behavior policy serialization order
Browse files Browse the repository at this point in the history
  • Loading branch information
busybeetree committed Sep 22, 2023
1 parent 8a7bced commit 8a61f46
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,17 @@
import com.google.gson.JsonSerializer;
import com.hivemq.cli.openapi.hivemq.BehaviorPolicy;
import com.hivemq.cli.openapi.hivemq.BehaviorPolicyBehavior;
import com.hivemq.cli.openapi.hivemq.BehaviorPolicyOnEvent;
import com.hivemq.cli.openapi.hivemq.BehaviorPolicyOnTransition;
import com.hivemq.cli.openapi.hivemq.PolicyOperation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.lang.reflect.Type;
import java.util.List;

import static com.hivemq.cli.utils.json.DataHubSerialization.serializePolicyOperation;

/**
* The generated OpenAPI classes do not preserve JSON field ordering.
* This serializer manually restores the correct order.
Expand Down Expand Up @@ -71,23 +75,42 @@ public class BehaviorPolicySerializer implements JsonSerializer<BehaviorPolicy>
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_TO_STATE,
context.serialize(onTransition.getToState()));
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_EVENT_ON_ANY,
context.serialize(onTransition.getEventOnAny()));
serializeBehaviorPolicyOnEvent(onTransition.getEventOnAny(), context));
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_MQTT_ON_INBOUND_CONNECT,
context.serialize(onTransition.getMqttOnInboundConnect()));
serializeBehaviorPolicyOnEvent(onTransition.getMqttOnInboundConnect(), context));
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_MQTT_ON_INBOUND_PUBLISH,
context.serialize(onTransition.getMqttOnInboundPublish()));
serializeBehaviorPolicyOnEvent(onTransition.getMqttOnInboundPublish(), context));
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_MQTT_ON_INBOUND_SUBSCRIBE,
context.serialize(onTransition.getMqttOnInboundSubscribe()));
serializeBehaviorPolicyOnEvent(onTransition.getMqttOnInboundSubscribe(), context));
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_MQTT_ON_INBOUND_DISCONNECT,
context.serialize(onTransition.getMqttOnInboundDisconnect()));
serializeBehaviorPolicyOnEvent(onTransition.getMqttOnInboundDisconnect(), context));
onTransitionObject.add(BehaviorPolicyOnTransition.SERIALIZED_NAME_CONNECTION_ON_DISCONNECT,
context.serialize(onTransition.getConnectionOnDisconnect()));
serializeBehaviorPolicyOnEvent(onTransition.getConnectionOnDisconnect(), context));
arrayObject.add(onTransitionObject);
}

return arrayObject;
}

private @Nullable JsonElement serializeBehaviorPolicyOnEvent(
final @Nullable BehaviorPolicyOnEvent onEvent, final @NotNull JsonSerializationContext context) {
if (onEvent == null) {
return null;
}

final JsonObject object = new JsonObject();
if (onEvent.getPipeline() == null) {
return object;
}

final JsonArray operationsArray = new JsonArray();
for (final PolicyOperation operation : onEvent.getPipeline()) {
operationsArray.add(serializePolicyOperation(operation, context));
}

object.add(BehaviorPolicyOnEvent.SERIALIZED_NAME_PIPELINE, context.serialize(operationsArray));
return object;
}

private @Nullable JsonElement serializePolicyBehavior(
final @Nullable BehaviorPolicyBehavior policyBehavior, final @NotNull JsonSerializationContext context) {
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/com/hivemq/cli/utils/json/DataHubSerialization.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.hivemq.cli.utils.json;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.hivemq.cli.openapi.hivemq.PolicyOperation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class DataHubSerialization {
public static @Nullable JsonElement serializePolicyOperation(
final @Nullable PolicyOperation policyOperation, final @NotNull JsonSerializationContext context) {
if (policyOperation == null) {
return null;
}

final JsonObject operationObject = new JsonObject();
operationObject.add(PolicyOperation.SERIALIZED_NAME_ID, context.serialize(policyOperation.getId()));
operationObject.add(PolicyOperation.SERIALIZED_NAME_FUNCTION_ID,
context.serialize(policyOperation.getFunctionId()));
operationObject.add(PolicyOperation.SERIALIZED_NAME_ARGUMENTS,
context.serialize(policyOperation.getArguments()));
return operationObject;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

import java.lang.reflect.Type;

import static com.hivemq.cli.utils.json.DataHubSerialization.serializePolicyOperation;

/**
* The generated OpenAPI classes do not preserve JSON field ordering.
* This serializer manually restores the correct order.
Expand Down Expand Up @@ -94,12 +96,7 @@ public class DataPolicySerializer implements JsonSerializer<DataPolicy> {
final JsonArray operationsArray = new JsonArray();

for (final PolicyOperation operation : policyAction.getPipeline()) {
final JsonObject operationObject = new JsonObject();
operationObject.add(PolicyOperation.SERIALIZED_NAME_ID, context.serialize(operation.getId()));
operationObject.add(PolicyOperation.SERIALIZED_NAME_FUNCTION_ID,
context.serialize(operation.getFunctionId()));
operationObject.add(PolicyOperation.SERIALIZED_NAME_ARGUMENTS, context.serialize(operation.getArguments()));
operationsArray.add(operationObject);
operationsArray.add(serializePolicyOperation(operation, context));
}

object.add(DataPolicyAction.SERIALIZED_NAME_PIPELINE, context.serialize(operationsArray));
Expand Down

0 comments on commit 8a61f46

Please sign in to comment.