From 53ed82648036b91e8b0b10ac7caee50933a6d4a0 Mon Sep 17 00:00:00 2001
From: lixiaolong <702156524@qq.com>
Date: Wed, 19 Aug 2026 15:00:49 +0800
Subject: [PATCH] =?UTF-8?q?feat(llm):=20=E6=B7=BB=E5=8A=A0=E9=80=9A?=
=?UTF-8?q?=E7=94=A8=E5=9B=BE=E7=89=87=E5=88=86=E6=9E=90=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E8=BE=B9=E7=BC=98=E7=B3=BB=E7=BB=9F?=
=?UTF-8?q?=E5=AE=89=E5=85=A8=E7=8A=B6=E6=80=81=E6=81=A2=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 IMAGE_ANALYZE 动作类型支持通用图片分析
- 实现图片分析操作服务支持单张及多图片分析
- 添加图片分析的提示词、参考图片和调优参数配置
- 集成 MinIO 服务上传功能支持唯一文件名生成
- 添加 FlowMediaParamResolver 支持 URL 数组解析
- 实现边缘系统恢复运行状态的新 API 接口
- 标记旧的安全状态恢复接口为已弃用
- 更新媒体分析操作服务支持详细的输出选项
- 添加图片分析相关的单元测试验证功能
---
.../controller/api/EdgeSystemController.java | 13 +-
.../aima/support/AimaAnalysisVerdict.java | 3 +-
.../aima/support/AimaAnalysisVerdictTest.java | 2 +
.../client/service/EdgeSystemService.java | 7 +
.../service/impl/EdgeSystemServiceImpl.java | 33 +
.../src/main/java/cmvr/api/SafetyCommand.java | 2772 ++++++++++++++++-
.../main/java/cmvr/api/SystemServiceGrpc.java | 74 +
.../cmvr/api/SystemServiceOuterClass.java | 7 +-
.../main/proto/cmvr/api/safety_command.proto | 18 +
.../main/proto/cmvr/api/system_service.proto | 5 +-
cmvr-iot-common/pom.xml | 7 +
.../cmvr/common/core/minio/MinioService.java | 49 +-
.../common/core/minio/MinioServiceTest.java | 45 +
.../InspectionDetectionAlertServiceImpl.java | 5 +-
.../java/com/cmvr/test/enums/ActionEnum.java | 1 +
.../test/flow/builder/FlowModelBuilder.java | 26 +
.../operator/FlowMediaParamResolver.java | 34 +-
.../llm/LLMMediaAnalysisOperateService.java | 105 +-
.../service/FlowActionExecutorService.java | 4 +-
.../flow/builder/FlowModelBuilderTest.java | 34 +
.../LLMMediaAnalysisOperateServiceTest.java | 84 +-
.../service/impl/CorpusInfoServiceImpl.java | 8 +-
.../impl/TtsSynthesizeTaskServiceImpl.java | 7 +-
23 files changed, 3250 insertions(+), 93 deletions(-)
create mode 100644 cmvr-iot-common/src/test/java/com/cmvr/common/core/minio/MinioServiceTest.java
create mode 100644 cmvr-iot-test/src/test/java/com/cmvr/test/flow/builder/FlowModelBuilderTest.java
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/api/EdgeSystemController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/api/EdgeSystemController.java
index 62482aa..22da74b 100644
--- a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/api/EdgeSystemController.java
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/api/EdgeSystemController.java
@@ -63,7 +63,18 @@ public class EdgeSystemController extends BaseController {
return success(JSON.toJSONString(edgeSystemService.getSafetyState(robotId)));
}
- @ApiOperation("Clear recoverable edge safety errors")
+ @ApiOperation("Restore edge operational state")
+ @PostMapping("/restoreOperationalState")
+ public AjaxResult restoreOperationalState(@RequestBody @Validated EdgeSafetyRecoveryVO request) {
+ return success(JSON.toJSONString(edgeSystemService.restoreOperationalState(
+ request.getRobotId(), request.getReason(), request.getTimeoutMs())));
+ }
+
+ /**
+ * @deprecated Use /restoreOperationalState.
+ */
+ @Deprecated
+ @ApiOperation("[Deprecated] Clear recoverable edge safety errors")
@PostMapping("/recoverSafetyState")
public AjaxResult recoverSafetyState(@RequestBody @Validated EdgeSafetyRecoveryVO request) {
return success(JSON.toJSONString(edgeSystemService.recoverSafetyState(
diff --git a/cmvr-iot-aima/src/main/java/com/cmvr/aima/support/AimaAnalysisVerdict.java b/cmvr-iot-aima/src/main/java/com/cmvr/aima/support/AimaAnalysisVerdict.java
index 65d8c8c..9fb3554 100644
--- a/cmvr-iot-aima/src/main/java/com/cmvr/aima/support/AimaAnalysisVerdict.java
+++ b/cmvr-iot-aima/src/main/java/com/cmvr/aima/support/AimaAnalysisVerdict.java
@@ -31,6 +31,7 @@ public final class AimaAnalysisVerdict {
}
private static boolean isAnalysisAction(ActionEnum action) {
- return action == ActionEnum.AUDIO_EVENT_CLASSIFY || action == ActionEnum.VIDEO_ANALYZE;
+ return action == ActionEnum.AUDIO_EVENT_CLASSIFY
+ || action == ActionEnum.VIDEO_ANALYZE;
}
}
diff --git a/cmvr-iot-aima/src/test/java/com/cmvr/aima/support/AimaAnalysisVerdictTest.java b/cmvr-iot-aima/src/test/java/com/cmvr/aima/support/AimaAnalysisVerdictTest.java
index d0a085f..03b293a 100644
--- a/cmvr-iot-aima/src/test/java/com/cmvr/aima/support/AimaAnalysisVerdictTest.java
+++ b/cmvr-iot-aima/src/test/java/com/cmvr/aima/support/AimaAnalysisVerdictTest.java
@@ -20,6 +20,8 @@ public class AimaAnalysisVerdictTest {
assertEquals(AimaAnalysisVerdict.NOT_PASSED,
AimaAnalysisVerdict.resolve(ActionEnum.VIDEO_ANALYZE,
new JSONObject().fluentPut("analysisStatus", "FAILED")));
+ assertNull(AimaAnalysisVerdict.resolve(ActionEnum.IMAGE_ANALYZE,
+ new JSONObject().fluentPut("result", "12.6")));
assertNull(AimaAnalysisVerdict.resolve(ActionEnum.SLEEP,
new JSONObject().fluentPut("passed", true)));
}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/EdgeSystemService.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/EdgeSystemService.java
index 7dc4f5e..3448cd7 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/EdgeSystemService.java
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/EdgeSystemService.java
@@ -30,6 +30,13 @@ public interface EdgeSystemService {
SafetyCommand.GetSafetyStateCommand.Feedback getSafetyState(String robotId);
+ SafetyCommand.RestoreOperationalStateCommand.Feedback restoreOperationalState(
+ String robotId, String reason, Integer timeoutMs);
+
+ /**
+ * @deprecated Use {@link #restoreOperationalState(String, String, Integer)}.
+ */
+ @Deprecated
SafetyCommand.RecoverSafetyStateCommand.Feedback recoverSafetyState(
String robotId, String reason, Integer timeoutMs);
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeSystemServiceImpl.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeSystemServiceImpl.java
index a512f35..c3051d5 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeSystemServiceImpl.java
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/impl/EdgeSystemServiceImpl.java
@@ -135,6 +135,39 @@ public class EdgeSystemServiceImpl implements EdgeSystemService {
}
@Override
+ public SafetyCommand.RestoreOperationalStateCommand.Feedback restoreOperationalState(
+ String robotId, String reason, Integer timeoutMs) {
+ if (robotId == null || robotId.trim().isEmpty()) {
+ throw new GlobalException("机器人ID不能为空");
+ }
+ SafetyCommand.RestoreOperationalStateCommand.Request request =
+ buildRestoreOperationalStateRequest(reason, timeoutMs);
+ SystemServiceGrpc.SystemServiceBlockingStub stub = grpcServiceManager.getGrpcClient(
+ robotId.trim(), SystemServiceGrpc.SystemServiceBlockingStub.class);
+ SafetyCommand.RestoreOperationalStateCommand.Feedback feedback = stub
+ .withDeadlineAfter(request.getTimeoutMs() + 5000L, TimeUnit.MILLISECONDS)
+ .restoreOperationalState(request);
+ requireSuccessfulHeader(feedback == null || !feedback.hasHeader() ? null : feedback.getHeader(),
+ "恢复机器人运行状态");
+ if (!isSuccessfulRecoveryResult(feedback.getResult())) {
+ throw new GlobalException("恢复机器人运行状态未完成: " + feedback.getResult().name());
+ }
+ return feedback;
+ }
+
+ private SafetyCommand.RestoreOperationalStateCommand.Request buildRestoreOperationalStateRequest(
+ String reason, Integer timeoutMs) {
+ int effectiveTimeoutMs = timeoutMs == null ? 15000 : Math.max(1000, Math.min(timeoutMs, 120000));
+ return SafetyCommand.RestoreOperationalStateCommand.Request.newBuilder()
+ .setRecoveryId(UUID.randomUUID().toString())
+ .setReason(reason == null || reason.trim().isEmpty()
+ ? "Platform manual operational state restore" : reason.trim())
+ .setTimeoutMs(effectiveTimeoutMs)
+ .build();
+ }
+
+ @Override
+ @Deprecated
public SafetyCommand.RecoverSafetyStateCommand.Feedback recoverSafetyState(
String robotId, String reason, Integer timeoutMs) {
SafetyCommand.GetSafetyStateCommand.Feedback current = getSafetyState(robotId);
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SafetyCommand.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SafetyCommand.java
index 3de90c0..0614331 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SafetyCommand.java
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SafetyCommand.java
@@ -16597,6 +16597,2649 @@ public final class SafetyCommand {
}
+ public interface RestoreOperationalStateCommandOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:cmvr.api.RestoreOperationalStateCommand)
+ com.google.protobuf.MessageOrBuilder {
+ }
+ /**
+ * Protobuf type {@code cmvr.api.RestoreOperationalStateCommand}
+ */
+ public static final class RestoreOperationalStateCommand extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:cmvr.api.RestoreOperationalStateCommand)
+ RestoreOperationalStateCommandOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use RestoreOperationalStateCommand.newBuilder() to construct.
+ private RestoreOperationalStateCommand(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private RestoreOperationalStateCommand() {
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new RestoreOperationalStateCommand();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.class, cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Builder.class);
+ }
+
+ public interface RequestOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:cmvr.api.RestoreOperationalStateCommand.Request)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * string recovery_id = 1;
+ * @return The recoveryId.
+ */
+ java.lang.String getRecoveryId();
+ /**
+ * string recovery_id = 1;
+ * @return The bytes for recoveryId.
+ */
+ com.google.protobuf.ByteString
+ getRecoveryIdBytes();
+
+ /**
+ * string reason = 2;
+ * @return The reason.
+ */
+ java.lang.String getReason();
+ /**
+ * string reason = 2;
+ * @return The bytes for reason.
+ */
+ com.google.protobuf.ByteString
+ getReasonBytes();
+
+ /**
+ * uint32 timeout_ms = 3;
+ * @return The timeoutMs.
+ */
+ int getTimeoutMs();
+ }
+ /**
+ * Protobuf type {@code cmvr.api.RestoreOperationalStateCommand.Request}
+ */
+ public static final class Request extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:cmvr.api.RestoreOperationalStateCommand.Request)
+ RequestOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use Request.newBuilder() to construct.
+ private Request(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Request() {
+ recoveryId_ = "";
+ reason_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Request();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Request_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Request_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.class, cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.Builder.class);
+ }
+
+ public static final int RECOVERY_ID_FIELD_NUMBER = 1;
+ private volatile java.lang.Object recoveryId_;
+ /**
+ * string recovery_id = 1;
+ * @return The recoveryId.
+ */
+ @java.lang.Override
+ public java.lang.String getRecoveryId() {
+ java.lang.Object ref = recoveryId_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ recoveryId_ = s;
+ return s;
+ }
+ }
+ /**
+ * string recovery_id = 1;
+ * @return The bytes for recoveryId.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getRecoveryIdBytes() {
+ java.lang.Object ref = recoveryId_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ recoveryId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int REASON_FIELD_NUMBER = 2;
+ private volatile java.lang.Object reason_;
+ /**
+ * string reason = 2;
+ * @return The reason.
+ */
+ @java.lang.Override
+ public java.lang.String getReason() {
+ java.lang.Object ref = reason_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ reason_ = s;
+ return s;
+ }
+ }
+ /**
+ * string reason = 2;
+ * @return The bytes for reason.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getReasonBytes() {
+ java.lang.Object ref = reason_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ reason_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int TIMEOUT_MS_FIELD_NUMBER = 3;
+ private int timeoutMs_;
+ /**
+ * uint32 timeout_ms = 3;
+ * @return The timeoutMs.
+ */
+ @java.lang.Override
+ public int getTimeoutMs() {
+ return timeoutMs_;
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recoveryId_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, recoveryId_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reason_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, reason_);
+ }
+ if (timeoutMs_ != 0) {
+ output.writeUInt32(3, timeoutMs_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recoveryId_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, recoveryId_);
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reason_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, reason_);
+ }
+ if (timeoutMs_ != 0) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeUInt32Size(3, timeoutMs_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request)) {
+ return super.equals(obj);
+ }
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request other = (cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request) obj;
+
+ if (!getRecoveryId()
+ .equals(other.getRecoveryId())) return false;
+ if (!getReason()
+ .equals(other.getReason())) return false;
+ if (getTimeoutMs()
+ != other.getTimeoutMs()) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + RECOVERY_ID_FIELD_NUMBER;
+ hash = (53 * hash) + getRecoveryId().hashCode();
+ hash = (37 * hash) + REASON_FIELD_NUMBER;
+ hash = (53 * hash) + getReason().hashCode();
+ hash = (37 * hash) + TIMEOUT_MS_FIELD_NUMBER;
+ hash = (53 * hash) + getTimeoutMs();
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code cmvr.api.RestoreOperationalStateCommand.Request}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:cmvr.api.RestoreOperationalStateCommand.Request)
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.RequestOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Request_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Request_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.class, cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.Builder.class);
+ }
+
+ // Construct using cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ recoveryId_ = "";
+
+ reason_ = "";
+
+ timeoutMs_ = 0;
+
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Request_descriptor;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request getDefaultInstanceForType() {
+ return cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request build() {
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request buildPartial() {
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request result = new cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request(this);
+ result.recoveryId_ = recoveryId_;
+ result.reason_ = reason_;
+ result.timeoutMs_ = timeoutMs_;
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.setField(field, value);
+ }
+ @java.lang.Override
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+ @java.lang.Override
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request) {
+ return mergeFrom((cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request other) {
+ if (other == cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.getDefaultInstance()) return this;
+ if (!other.getRecoveryId().isEmpty()) {
+ recoveryId_ = other.recoveryId_;
+ onChanged();
+ }
+ if (!other.getReason().isEmpty()) {
+ reason_ = other.reason_;
+ onChanged();
+ }
+ if (other.getTimeoutMs() != 0) {
+ setTimeoutMs(other.getTimeoutMs());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ recoveryId_ = input.readStringRequireUtf8();
+
+ break;
+ } // case 10
+ case 18: {
+ reason_ = input.readStringRequireUtf8();
+
+ break;
+ } // case 18
+ case 24: {
+ timeoutMs_ = input.readUInt32();
+
+ break;
+ } // case 24
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+
+ private java.lang.Object recoveryId_ = "";
+ /**
+ * string recovery_id = 1;
+ * @return The recoveryId.
+ */
+ public java.lang.String getRecoveryId() {
+ java.lang.Object ref = recoveryId_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ recoveryId_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * string recovery_id = 1;
+ * @return The bytes for recoveryId.
+ */
+ public com.google.protobuf.ByteString
+ getRecoveryIdBytes() {
+ java.lang.Object ref = recoveryId_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ recoveryId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * string recovery_id = 1;
+ * @param value The recoveryId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setRecoveryId(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ recoveryId_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * string recovery_id = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearRecoveryId() {
+
+ recoveryId_ = getDefaultInstance().getRecoveryId();
+ onChanged();
+ return this;
+ }
+ /**
+ * string recovery_id = 1;
+ * @param value The bytes for recoveryId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setRecoveryIdBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ recoveryId_ = value;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object reason_ = "";
+ /**
+ * string reason = 2;
+ * @return The reason.
+ */
+ public java.lang.String getReason() {
+ java.lang.Object ref = reason_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ reason_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * string reason = 2;
+ * @return The bytes for reason.
+ */
+ public com.google.protobuf.ByteString
+ getReasonBytes() {
+ java.lang.Object ref = reason_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ reason_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * string reason = 2;
+ * @param value The reason to set.
+ * @return This builder for chaining.
+ */
+ public Builder setReason(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ reason_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * string reason = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearReason() {
+
+ reason_ = getDefaultInstance().getReason();
+ onChanged();
+ return this;
+ }
+ /**
+ * string reason = 2;
+ * @param value The bytes for reason to set.
+ * @return This builder for chaining.
+ */
+ public Builder setReasonBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ reason_ = value;
+ onChanged();
+ return this;
+ }
+
+ private int timeoutMs_ ;
+ /**
+ * uint32 timeout_ms = 3;
+ * @return The timeoutMs.
+ */
+ @java.lang.Override
+ public int getTimeoutMs() {
+ return timeoutMs_;
+ }
+ /**
+ * uint32 timeout_ms = 3;
+ * @param value The timeoutMs to set.
+ * @return This builder for chaining.
+ */
+ public Builder setTimeoutMs(int value) {
+
+ timeoutMs_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * uint32 timeout_ms = 3;
+ * @return This builder for chaining.
+ */
+ public Builder clearTimeoutMs() {
+
+ timeoutMs_ = 0;
+ onChanged();
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:cmvr.api.RestoreOperationalStateCommand.Request)
+ }
+
+ // @@protoc_insertion_point(class_scope:cmvr.api.RestoreOperationalStateCommand.Request)
+ private static final cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request();
+ }
+
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Request parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ public interface FeedbackOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:cmvr.api.RestoreOperationalStateCommand.Feedback)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return Whether the header field is set.
+ */
+ boolean hasHeader();
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return The header.
+ */
+ cmvr.api.Common.CommandHeader.Feedback getHeader();
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder();
+
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return The enum numeric value on the wire for result.
+ */
+ int getResultValue();
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return The result.
+ */
+ cmvr.api.SafetyCommand.SafetyOperationResult getResult();
+
+ /**
+ * uint64 previous_safety_epoch = 3;
+ * @return The previousSafetyEpoch.
+ */
+ long getPreviousSafetyEpoch();
+
+ /**
+ * uint64 current_safety_epoch = 4;
+ * @return The currentSafetyEpoch.
+ */
+ long getCurrentSafetyEpoch();
+
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return The enum numeric value on the wire for systemState.
+ */
+ int getSystemStateValue();
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return The systemState.
+ */
+ cmvr.api.SafetyCommand.SystemAdmissionState getSystemState();
+
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ java.util.List
+ getTargetsList();
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult getTargets(int index);
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ int getTargetsCount();
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ java.util.List extends cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder>
+ getTargetsOrBuilderList();
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder getTargetsOrBuilder(
+ int index);
+
+ /**
+ * string recovery_id = 7;
+ * @return The recoveryId.
+ */
+ java.lang.String getRecoveryId();
+ /**
+ * string recovery_id = 7;
+ * @return The bytes for recoveryId.
+ */
+ com.google.protobuf.ByteString
+ getRecoveryIdBytes();
+ }
+ /**
+ * Protobuf type {@code cmvr.api.RestoreOperationalStateCommand.Feedback}
+ */
+ public static final class Feedback extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:cmvr.api.RestoreOperationalStateCommand.Feedback)
+ FeedbackOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use Feedback.newBuilder() to construct.
+ private Feedback(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Feedback() {
+ result_ = 0;
+ systemState_ = 0;
+ targets_ = java.util.Collections.emptyList();
+ recoveryId_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Feedback();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.class, cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.Builder.class);
+ }
+
+ public static final int HEADER_FIELD_NUMBER = 1;
+ private cmvr.api.Common.CommandHeader.Feedback header_;
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return Whether the header field is set.
+ */
+ @java.lang.Override
+ public boolean hasHeader() {
+ return header_ != null;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return The header.
+ */
+ @java.lang.Override
+ public cmvr.api.Common.CommandHeader.Feedback getHeader() {
+ return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ @java.lang.Override
+ public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() {
+ return getHeader();
+ }
+
+ public static final int RESULT_FIELD_NUMBER = 2;
+ private int result_;
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return The enum numeric value on the wire for result.
+ */
+ @java.lang.Override public int getResultValue() {
+ return result_;
+ }
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return The result.
+ */
+ @java.lang.Override public cmvr.api.SafetyCommand.SafetyOperationResult getResult() {
+ @SuppressWarnings("deprecation")
+ cmvr.api.SafetyCommand.SafetyOperationResult result = cmvr.api.SafetyCommand.SafetyOperationResult.valueOf(result_);
+ return result == null ? cmvr.api.SafetyCommand.SafetyOperationResult.UNRECOGNIZED : result;
+ }
+
+ public static final int PREVIOUS_SAFETY_EPOCH_FIELD_NUMBER = 3;
+ private long previousSafetyEpoch_;
+ /**
+ * uint64 previous_safety_epoch = 3;
+ * @return The previousSafetyEpoch.
+ */
+ @java.lang.Override
+ public long getPreviousSafetyEpoch() {
+ return previousSafetyEpoch_;
+ }
+
+ public static final int CURRENT_SAFETY_EPOCH_FIELD_NUMBER = 4;
+ private long currentSafetyEpoch_;
+ /**
+ * uint64 current_safety_epoch = 4;
+ * @return The currentSafetyEpoch.
+ */
+ @java.lang.Override
+ public long getCurrentSafetyEpoch() {
+ return currentSafetyEpoch_;
+ }
+
+ public static final int SYSTEM_STATE_FIELD_NUMBER = 5;
+ private int systemState_;
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return The enum numeric value on the wire for systemState.
+ */
+ @java.lang.Override public int getSystemStateValue() {
+ return systemState_;
+ }
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return The systemState.
+ */
+ @java.lang.Override public cmvr.api.SafetyCommand.SystemAdmissionState getSystemState() {
+ @SuppressWarnings("deprecation")
+ cmvr.api.SafetyCommand.SystemAdmissionState result = cmvr.api.SafetyCommand.SystemAdmissionState.valueOf(systemState_);
+ return result == null ? cmvr.api.SafetyCommand.SystemAdmissionState.UNRECOGNIZED : result;
+ }
+
+ public static final int TARGETS_FIELD_NUMBER = 6;
+ private java.util.List targets_;
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ @java.lang.Override
+ public java.util.List getTargetsList() {
+ return targets_;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ @java.lang.Override
+ public java.util.List extends cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder>
+ getTargetsOrBuilderList() {
+ return targets_;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ @java.lang.Override
+ public int getTargetsCount() {
+ return targets_.size();
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResult getTargets(int index) {
+ return targets_.get(index);
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder getTargetsOrBuilder(
+ int index) {
+ return targets_.get(index);
+ }
+
+ public static final int RECOVERY_ID_FIELD_NUMBER = 7;
+ private volatile java.lang.Object recoveryId_;
+ /**
+ * string recovery_id = 7;
+ * @return The recoveryId.
+ */
+ @java.lang.Override
+ public java.lang.String getRecoveryId() {
+ java.lang.Object ref = recoveryId_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ recoveryId_ = s;
+ return s;
+ }
+ }
+ /**
+ * string recovery_id = 7;
+ * @return The bytes for recoveryId.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getRecoveryIdBytes() {
+ java.lang.Object ref = recoveryId_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ recoveryId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (header_ != null) {
+ output.writeMessage(1, getHeader());
+ }
+ if (result_ != cmvr.api.SafetyCommand.SafetyOperationResult.SAFETY_OPERATION_RESULT_UNSPECIFIED.getNumber()) {
+ output.writeEnum(2, result_);
+ }
+ if (previousSafetyEpoch_ != 0L) {
+ output.writeUInt64(3, previousSafetyEpoch_);
+ }
+ if (currentSafetyEpoch_ != 0L) {
+ output.writeUInt64(4, currentSafetyEpoch_);
+ }
+ if (systemState_ != cmvr.api.SafetyCommand.SystemAdmissionState.SYSTEM_ADMISSION_STATE_UNSPECIFIED.getNumber()) {
+ output.writeEnum(5, systemState_);
+ }
+ for (int i = 0; i < targets_.size(); i++) {
+ output.writeMessage(6, targets_.get(i));
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recoveryId_)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 7, recoveryId_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (header_ != null) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, getHeader());
+ }
+ if (result_ != cmvr.api.SafetyCommand.SafetyOperationResult.SAFETY_OPERATION_RESULT_UNSPECIFIED.getNumber()) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeEnumSize(2, result_);
+ }
+ if (previousSafetyEpoch_ != 0L) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeUInt64Size(3, previousSafetyEpoch_);
+ }
+ if (currentSafetyEpoch_ != 0L) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeUInt64Size(4, currentSafetyEpoch_);
+ }
+ if (systemState_ != cmvr.api.SafetyCommand.SystemAdmissionState.SYSTEM_ADMISSION_STATE_UNSPECIFIED.getNumber()) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeEnumSize(5, systemState_);
+ }
+ for (int i = 0; i < targets_.size(); i++) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(6, targets_.get(i));
+ }
+ if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(recoveryId_)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, recoveryId_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback)) {
+ return super.equals(obj);
+ }
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback other = (cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback) obj;
+
+ if (hasHeader() != other.hasHeader()) return false;
+ if (hasHeader()) {
+ if (!getHeader()
+ .equals(other.getHeader())) return false;
+ }
+ if (result_ != other.result_) return false;
+ if (getPreviousSafetyEpoch()
+ != other.getPreviousSafetyEpoch()) return false;
+ if (getCurrentSafetyEpoch()
+ != other.getCurrentSafetyEpoch()) return false;
+ if (systemState_ != other.systemState_) return false;
+ if (!getTargetsList()
+ .equals(other.getTargetsList())) return false;
+ if (!getRecoveryId()
+ .equals(other.getRecoveryId())) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasHeader()) {
+ hash = (37 * hash) + HEADER_FIELD_NUMBER;
+ hash = (53 * hash) + getHeader().hashCode();
+ }
+ hash = (37 * hash) + RESULT_FIELD_NUMBER;
+ hash = (53 * hash) + result_;
+ hash = (37 * hash) + PREVIOUS_SAFETY_EPOCH_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+ getPreviousSafetyEpoch());
+ hash = (37 * hash) + CURRENT_SAFETY_EPOCH_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+ getCurrentSafetyEpoch());
+ hash = (37 * hash) + SYSTEM_STATE_FIELD_NUMBER;
+ hash = (53 * hash) + systemState_;
+ if (getTargetsCount() > 0) {
+ hash = (37 * hash) + TARGETS_FIELD_NUMBER;
+ hash = (53 * hash) + getTargetsList().hashCode();
+ }
+ hash = (37 * hash) + RECOVERY_ID_FIELD_NUMBER;
+ hash = (53 * hash) + getRecoveryId().hashCode();
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code cmvr.api.RestoreOperationalStateCommand.Feedback}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:cmvr.api.RestoreOperationalStateCommand.Feedback)
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.FeedbackOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.class, cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.Builder.class);
+ }
+
+ // Construct using cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ if (headerBuilder_ == null) {
+ header_ = null;
+ } else {
+ header_ = null;
+ headerBuilder_ = null;
+ }
+ result_ = 0;
+
+ previousSafetyEpoch_ = 0L;
+
+ currentSafetyEpoch_ = 0L;
+
+ systemState_ = 0;
+
+ if (targetsBuilder_ == null) {
+ targets_ = java.util.Collections.emptyList();
+ } else {
+ targets_ = null;
+ targetsBuilder_.clear();
+ }
+ bitField0_ = (bitField0_ & ~0x00000001);
+ recoveryId_ = "";
+
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_descriptor;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback getDefaultInstanceForType() {
+ return cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback build() {
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback buildPartial() {
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback result = new cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback(this);
+ int from_bitField0_ = bitField0_;
+ if (headerBuilder_ == null) {
+ result.header_ = header_;
+ } else {
+ result.header_ = headerBuilder_.build();
+ }
+ result.result_ = result_;
+ result.previousSafetyEpoch_ = previousSafetyEpoch_;
+ result.currentSafetyEpoch_ = currentSafetyEpoch_;
+ result.systemState_ = systemState_;
+ if (targetsBuilder_ == null) {
+ if (((bitField0_ & 0x00000001) != 0)) {
+ targets_ = java.util.Collections.unmodifiableList(targets_);
+ bitField0_ = (bitField0_ & ~0x00000001);
+ }
+ result.targets_ = targets_;
+ } else {
+ result.targets_ = targetsBuilder_.build();
+ }
+ result.recoveryId_ = recoveryId_;
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.setField(field, value);
+ }
+ @java.lang.Override
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+ @java.lang.Override
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback) {
+ return mergeFrom((cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback other) {
+ if (other == cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.getDefaultInstance()) return this;
+ if (other.hasHeader()) {
+ mergeHeader(other.getHeader());
+ }
+ if (other.result_ != 0) {
+ setResultValue(other.getResultValue());
+ }
+ if (other.getPreviousSafetyEpoch() != 0L) {
+ setPreviousSafetyEpoch(other.getPreviousSafetyEpoch());
+ }
+ if (other.getCurrentSafetyEpoch() != 0L) {
+ setCurrentSafetyEpoch(other.getCurrentSafetyEpoch());
+ }
+ if (other.systemState_ != 0) {
+ setSystemStateValue(other.getSystemStateValue());
+ }
+ if (targetsBuilder_ == null) {
+ if (!other.targets_.isEmpty()) {
+ if (targets_.isEmpty()) {
+ targets_ = other.targets_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ ensureTargetsIsMutable();
+ targets_.addAll(other.targets_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.targets_.isEmpty()) {
+ if (targetsBuilder_.isEmpty()) {
+ targetsBuilder_.dispose();
+ targetsBuilder_ = null;
+ targets_ = other.targets_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ targetsBuilder_ =
+ com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+ getTargetsFieldBuilder() : null;
+ } else {
+ targetsBuilder_.addAllMessages(other.targets_);
+ }
+ }
+ }
+ if (!other.getRecoveryId().isEmpty()) {
+ recoveryId_ = other.recoveryId_;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ input.readMessage(
+ getHeaderFieldBuilder().getBuilder(),
+ extensionRegistry);
+
+ break;
+ } // case 10
+ case 16: {
+ result_ = input.readEnum();
+
+ break;
+ } // case 16
+ case 24: {
+ previousSafetyEpoch_ = input.readUInt64();
+
+ break;
+ } // case 24
+ case 32: {
+ currentSafetyEpoch_ = input.readUInt64();
+
+ break;
+ } // case 32
+ case 40: {
+ systemState_ = input.readEnum();
+
+ break;
+ } // case 40
+ case 50: {
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult m =
+ input.readMessage(
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult.parser(),
+ extensionRegistry);
+ if (targetsBuilder_ == null) {
+ ensureTargetsIsMutable();
+ targets_.add(m);
+ } else {
+ targetsBuilder_.addMessage(m);
+ }
+ break;
+ } // case 50
+ case 58: {
+ recoveryId_ = input.readStringRequireUtf8();
+
+ break;
+ } // case 58
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private cmvr.api.Common.CommandHeader.Feedback header_;
+ private com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> headerBuilder_;
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return Whether the header field is set.
+ */
+ public boolean hasHeader() {
+ return headerBuilder_ != null || header_ != null;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ * @return The header.
+ */
+ public cmvr.api.Common.CommandHeader.Feedback getHeader() {
+ if (headerBuilder_ == null) {
+ return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_;
+ } else {
+ return headerBuilder_.getMessage();
+ }
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder setHeader(cmvr.api.Common.CommandHeader.Feedback value) {
+ if (headerBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ header_ = value;
+ onChanged();
+ } else {
+ headerBuilder_.setMessage(value);
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder setHeader(
+ cmvr.api.Common.CommandHeader.Feedback.Builder builderForValue) {
+ if (headerBuilder_ == null) {
+ header_ = builderForValue.build();
+ onChanged();
+ } else {
+ headerBuilder_.setMessage(builderForValue.build());
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder mergeHeader(cmvr.api.Common.CommandHeader.Feedback value) {
+ if (headerBuilder_ == null) {
+ if (header_ != null) {
+ header_ =
+ cmvr.api.Common.CommandHeader.Feedback.newBuilder(header_).mergeFrom(value).buildPartial();
+ } else {
+ header_ = value;
+ }
+ onChanged();
+ } else {
+ headerBuilder_.mergeFrom(value);
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public Builder clearHeader() {
+ if (headerBuilder_ == null) {
+ header_ = null;
+ onChanged();
+ } else {
+ header_ = null;
+ headerBuilder_ = null;
+ }
+
+ return this;
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public cmvr.api.Common.CommandHeader.Feedback.Builder getHeaderBuilder() {
+
+ onChanged();
+ return getHeaderFieldBuilder().getBuilder();
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() {
+ if (headerBuilder_ != null) {
+ return headerBuilder_.getMessageOrBuilder();
+ } else {
+ return header_ == null ?
+ cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_;
+ }
+ }
+ /**
+ * .cmvr.api.CommandHeader.Feedback header = 1;
+ */
+ private com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>
+ getHeaderFieldBuilder() {
+ if (headerBuilder_ == null) {
+ headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+ cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>(
+ getHeader(),
+ getParentForChildren(),
+ isClean());
+ header_ = null;
+ }
+ return headerBuilder_;
+ }
+
+ private int result_ = 0;
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return The enum numeric value on the wire for result.
+ */
+ @java.lang.Override public int getResultValue() {
+ return result_;
+ }
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @param value The enum numeric value on the wire for result to set.
+ * @return This builder for chaining.
+ */
+ public Builder setResultValue(int value) {
+
+ result_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return The result.
+ */
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.SafetyOperationResult getResult() {
+ @SuppressWarnings("deprecation")
+ cmvr.api.SafetyCommand.SafetyOperationResult result = cmvr.api.SafetyCommand.SafetyOperationResult.valueOf(result_);
+ return result == null ? cmvr.api.SafetyCommand.SafetyOperationResult.UNRECOGNIZED : result;
+ }
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @param value The result to set.
+ * @return This builder for chaining.
+ */
+ public Builder setResult(cmvr.api.SafetyCommand.SafetyOperationResult value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ result_ = value.getNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ * .cmvr.api.SafetyOperationResult result = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearResult() {
+
+ result_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private long previousSafetyEpoch_ ;
+ /**
+ * uint64 previous_safety_epoch = 3;
+ * @return The previousSafetyEpoch.
+ */
+ @java.lang.Override
+ public long getPreviousSafetyEpoch() {
+ return previousSafetyEpoch_;
+ }
+ /**
+ * uint64 previous_safety_epoch = 3;
+ * @param value The previousSafetyEpoch to set.
+ * @return This builder for chaining.
+ */
+ public Builder setPreviousSafetyEpoch(long value) {
+
+ previousSafetyEpoch_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * uint64 previous_safety_epoch = 3;
+ * @return This builder for chaining.
+ */
+ public Builder clearPreviousSafetyEpoch() {
+
+ previousSafetyEpoch_ = 0L;
+ onChanged();
+ return this;
+ }
+
+ private long currentSafetyEpoch_ ;
+ /**
+ * uint64 current_safety_epoch = 4;
+ * @return The currentSafetyEpoch.
+ */
+ @java.lang.Override
+ public long getCurrentSafetyEpoch() {
+ return currentSafetyEpoch_;
+ }
+ /**
+ * uint64 current_safety_epoch = 4;
+ * @param value The currentSafetyEpoch to set.
+ * @return This builder for chaining.
+ */
+ public Builder setCurrentSafetyEpoch(long value) {
+
+ currentSafetyEpoch_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * uint64 current_safety_epoch = 4;
+ * @return This builder for chaining.
+ */
+ public Builder clearCurrentSafetyEpoch() {
+
+ currentSafetyEpoch_ = 0L;
+ onChanged();
+ return this;
+ }
+
+ private int systemState_ = 0;
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return The enum numeric value on the wire for systemState.
+ */
+ @java.lang.Override public int getSystemStateValue() {
+ return systemState_;
+ }
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @param value The enum numeric value on the wire for systemState to set.
+ * @return This builder for chaining.
+ */
+ public Builder setSystemStateValue(int value) {
+
+ systemState_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return The systemState.
+ */
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.SystemAdmissionState getSystemState() {
+ @SuppressWarnings("deprecation")
+ cmvr.api.SafetyCommand.SystemAdmissionState result = cmvr.api.SafetyCommand.SystemAdmissionState.valueOf(systemState_);
+ return result == null ? cmvr.api.SafetyCommand.SystemAdmissionState.UNRECOGNIZED : result;
+ }
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @param value The systemState to set.
+ * @return This builder for chaining.
+ */
+ public Builder setSystemState(cmvr.api.SafetyCommand.SystemAdmissionState value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ systemState_ = value.getNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ * .cmvr.api.SystemAdmissionState system_state = 5;
+ * @return This builder for chaining.
+ */
+ public Builder clearSystemState() {
+
+ systemState_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private java.util.List targets_ =
+ java.util.Collections.emptyList();
+ private void ensureTargetsIsMutable() {
+ if (!((bitField0_ & 0x00000001) != 0)) {
+ targets_ = new java.util.ArrayList(targets_);
+ bitField0_ |= 0x00000001;
+ }
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult, cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder, cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder> targetsBuilder_;
+
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public java.util.List getTargetsList() {
+ if (targetsBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(targets_);
+ } else {
+ return targetsBuilder_.getMessageList();
+ }
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public int getTargetsCount() {
+ if (targetsBuilder_ == null) {
+ return targets_.size();
+ } else {
+ return targetsBuilder_.getCount();
+ }
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResult getTargets(int index) {
+ if (targetsBuilder_ == null) {
+ return targets_.get(index);
+ } else {
+ return targetsBuilder_.getMessage(index);
+ }
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder setTargets(
+ int index, cmvr.api.SafetyCommand.SafetyOperationTargetResult value) {
+ if (targetsBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureTargetsIsMutable();
+ targets_.set(index, value);
+ onChanged();
+ } else {
+ targetsBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder setTargets(
+ int index, cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder builderForValue) {
+ if (targetsBuilder_ == null) {
+ ensureTargetsIsMutable();
+ targets_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ targetsBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder addTargets(cmvr.api.SafetyCommand.SafetyOperationTargetResult value) {
+ if (targetsBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureTargetsIsMutable();
+ targets_.add(value);
+ onChanged();
+ } else {
+ targetsBuilder_.addMessage(value);
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder addTargets(
+ int index, cmvr.api.SafetyCommand.SafetyOperationTargetResult value) {
+ if (targetsBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureTargetsIsMutable();
+ targets_.add(index, value);
+ onChanged();
+ } else {
+ targetsBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder addTargets(
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder builderForValue) {
+ if (targetsBuilder_ == null) {
+ ensureTargetsIsMutable();
+ targets_.add(builderForValue.build());
+ onChanged();
+ } else {
+ targetsBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder addTargets(
+ int index, cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder builderForValue) {
+ if (targetsBuilder_ == null) {
+ ensureTargetsIsMutable();
+ targets_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ targetsBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder addAllTargets(
+ java.lang.Iterable extends cmvr.api.SafetyCommand.SafetyOperationTargetResult> values) {
+ if (targetsBuilder_ == null) {
+ ensureTargetsIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(
+ values, targets_);
+ onChanged();
+ } else {
+ targetsBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder clearTargets() {
+ if (targetsBuilder_ == null) {
+ targets_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ } else {
+ targetsBuilder_.clear();
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public Builder removeTargets(int index) {
+ if (targetsBuilder_ == null) {
+ ensureTargetsIsMutable();
+ targets_.remove(index);
+ onChanged();
+ } else {
+ targetsBuilder_.remove(index);
+ }
+ return this;
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder getTargetsBuilder(
+ int index) {
+ return getTargetsFieldBuilder().getBuilder(index);
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder getTargetsOrBuilder(
+ int index) {
+ if (targetsBuilder_ == null) {
+ return targets_.get(index); } else {
+ return targetsBuilder_.getMessageOrBuilder(index);
+ }
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public java.util.List extends cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder>
+ getTargetsOrBuilderList() {
+ if (targetsBuilder_ != null) {
+ return targetsBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(targets_);
+ }
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder addTargetsBuilder() {
+ return getTargetsFieldBuilder().addBuilder(
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult.getDefaultInstance());
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder addTargetsBuilder(
+ int index) {
+ return getTargetsFieldBuilder().addBuilder(
+ index, cmvr.api.SafetyCommand.SafetyOperationTargetResult.getDefaultInstance());
+ }
+ /**
+ * repeated .cmvr.api.SafetyOperationTargetResult targets = 6;
+ */
+ public java.util.List
+ getTargetsBuilderList() {
+ return getTargetsFieldBuilder().getBuilderList();
+ }
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult, cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder, cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder>
+ getTargetsFieldBuilder() {
+ if (targetsBuilder_ == null) {
+ targetsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+ cmvr.api.SafetyCommand.SafetyOperationTargetResult, cmvr.api.SafetyCommand.SafetyOperationTargetResult.Builder, cmvr.api.SafetyCommand.SafetyOperationTargetResultOrBuilder>(
+ targets_,
+ ((bitField0_ & 0x00000001) != 0),
+ getParentForChildren(),
+ isClean());
+ targets_ = null;
+ }
+ return targetsBuilder_;
+ }
+
+ private java.lang.Object recoveryId_ = "";
+ /**
+ * string recovery_id = 7;
+ * @return The recoveryId.
+ */
+ public java.lang.String getRecoveryId() {
+ java.lang.Object ref = recoveryId_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ recoveryId_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * string recovery_id = 7;
+ * @return The bytes for recoveryId.
+ */
+ public com.google.protobuf.ByteString
+ getRecoveryIdBytes() {
+ java.lang.Object ref = recoveryId_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ recoveryId_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * string recovery_id = 7;
+ * @param value The recoveryId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setRecoveryId(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ recoveryId_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * string recovery_id = 7;
+ * @return This builder for chaining.
+ */
+ public Builder clearRecoveryId() {
+
+ recoveryId_ = getDefaultInstance().getRecoveryId();
+ onChanged();
+ return this;
+ }
+ /**
+ * string recovery_id = 7;
+ * @param value The bytes for recoveryId to set.
+ * @return This builder for chaining.
+ */
+ public Builder setRecoveryIdBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ recoveryId_ = value;
+ onChanged();
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:cmvr.api.RestoreOperationalStateCommand.Feedback)
+ }
+
+ // @@protoc_insertion_point(class_scope:cmvr.api.RestoreOperationalStateCommand.Feedback)
+ private static final cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback();
+ }
+
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Feedback parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof cmvr.api.SafetyCommand.RestoreOperationalStateCommand)) {
+ return super.equals(obj);
+ }
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand other = (cmvr.api.SafetyCommand.RestoreOperationalStateCommand) obj;
+
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(cmvr.api.SafetyCommand.RestoreOperationalStateCommand prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code cmvr.api.RestoreOperationalStateCommand}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:cmvr.api.RestoreOperationalStateCommand)
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommandOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.class, cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Builder.class);
+ }
+
+ // Construct using cmvr.api.SafetyCommand.RestoreOperationalStateCommand.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return cmvr.api.SafetyCommand.internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand getDefaultInstanceForType() {
+ return cmvr.api.SafetyCommand.RestoreOperationalStateCommand.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand build() {
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand buildPartial() {
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand result = new cmvr.api.SafetyCommand.RestoreOperationalStateCommand(this);
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder clone() {
+ return super.clone();
+ }
+ @java.lang.Override
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.setField(field, value);
+ }
+ @java.lang.Override
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return super.clearField(field);
+ }
+ @java.lang.Override
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return super.clearOneof(oneof);
+ }
+ @java.lang.Override
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return super.setRepeatedField(field, index, value);
+ }
+ @java.lang.Override
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return super.addRepeatedField(field, value);
+ }
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof cmvr.api.SafetyCommand.RestoreOperationalStateCommand) {
+ return mergeFrom((cmvr.api.SafetyCommand.RestoreOperationalStateCommand)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(cmvr.api.SafetyCommand.RestoreOperationalStateCommand other) {
+ if (other == cmvr.api.SafetyCommand.RestoreOperationalStateCommand.getDefaultInstance()) return this;
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:cmvr.api.RestoreOperationalStateCommand)
+ }
+
+ // @@protoc_insertion_point(class_scope:cmvr.api.RestoreOperationalStateCommand)
+ private static final cmvr.api.SafetyCommand.RestoreOperationalStateCommand DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new cmvr.api.SafetyCommand.RestoreOperationalStateCommand();
+ }
+
+ public static cmvr.api.SafetyCommand.RestoreOperationalStateCommand getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public RestoreOperationalStateCommand parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_cmvr_api_DeviceIdList_descriptor;
private static final
@@ -16662,6 +19305,21 @@ public final class SafetyCommand {
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_cmvr_api_RecoverSafetyStateCommand_Feedback_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_cmvr_api_RestoreOperationalStateCommand_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Request_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Request_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
@@ -16750,49 +19408,59 @@ public final class SafetyCommand {
"ate\0226\n\007targets\030\006 \003(\0132%.cmvr.api.SafetyOp" +
"erationTargetResult\022\023\n\013recovery_id\030\007 \001(\t" +
"\"G\n\004Mode\022\024\n\020MODE_UNSPECIFIED\020\000\022\017\n\013VERIFY" +
- "_ONLY\020\001\022\030\n\024CLEAR_SOFTWARE_LATCH\020\002*e\n\016Saf" +
- "etyTriState\022\034\n\030SAFETY_TRI_STATE_UNKNOWN\020" +
- "\000\022\032\n\026SAFETY_TRI_STATE_FALSE\020\001\022\031\n\025SAFETY_" +
- "TRI_STATE_TRUE\020\002*\213\001\n\017SafetyCondition\022\034\n\030" +
- "SAFETY_CONDITION_UNKNOWN\020\000\022\034\n\030SAFETY_CON" +
- "DITION_NOMINAL\020\001\022\037\n\033SAFETY_CONDITION_RES" +
- "TRICTED\020\002\022\033\n\027SAFETY_CONDITION_UNSAFE\020\003*\236" +
- "\002\n\024SystemAdmissionState\022&\n\"SYSTEM_ADMISS" +
- "ION_STATE_UNSPECIFIED\020\000\022#\n\037SYSTEM_ADMISS" +
- "ION_STATE_STARTING\020\001\022\037\n\033SYSTEM_ADMISSION" +
- "_STATE_OPEN\020\002\022#\n\037SYSTEM_ADMISSION_STATE_" +
- "STOPPING\020\003\022\"\n\036SYSTEM_ADMISSION_STATE_LAT" +
- "CHED\020\004\022%\n!SYSTEM_ADMISSION_STATE_RECOVER" +
- "ING\020\005\022(\n$SYSTEM_ADMISSION_STATE_SHUTTING" +
- "_DOWN\020\006*\234\002\n\024DeviceAdmissionState\022&\n\"DEVI" +
- "CE_ADMISSION_STATE_UNSPECIFIED\020\000\022$\n DEVI" +
- "CE_ADMISSION_STATE_OBSERVING\020\001\022\037\n\033DEVICE" +
- "_ADMISSION_STATE_OPEN\020\002\022\"\n\036DEVICE_ADMISS" +
- "ION_STATE_BLOCKED\020\003\022&\n\"DEVICE_ADMISSION_" +
- "STATE_QUARANTINED\020\004\022%\n!DEVICE_ADMISSION_" +
- "STATE_RECOVERING\020\005\022\"\n\036DEVICE_ADMISSION_S" +
- "TATE_REMOVED\020\006*|\n\022SafetyBlockerScope\022$\n " +
- "SAFETY_BLOCKER_SCOPE_UNSPECIFIED\020\000\022\037\n\033SA" +
- "FETY_BLOCKER_SCOPE_DEVICE\020\001\022\037\n\033SAFETY_BL" +
- "OCKER_SCOPE_SYSTEM\020\002*\243\002\n\031SafetyRecoveryR" +
- "equirement\022+\n\'SAFETY_RECOVERY_REQUIREMEN" +
- "T_UNSPECIFIED\020\000\022,\n(SAFETY_RECOVERY_REQUI" +
- "REMENT_REFRESH_ONLY\020\001\0224\n0SAFETY_RECOVERY" +
- "_REQUIREMENT_CLEAR_SOFTWARE_LATCH\020\002\0229\n5S" +
- "AFETY_RECOVERY_REQUIREMENT_HARDWARE_RELE" +
- "ASE_REQUIRED\020\003\022:\n6SAFETY_RECOVERY_REQUIR" +
- "EMENT_MANUAL_INSPECTION_REQUIRED\020\004*\232\003\n\025S" +
- "afetyOperationResult\022\'\n#SAFETY_OPERATION" +
- "_RESULT_UNSPECIFIED\020\000\022%\n!SAFETY_OPERATIO" +
- "N_RESULT_SUCCEEDED\020\001\022%\n!SAFETY_OPERATION" +
- "_RESULT_RECOVERED\020\002\0226\n2SAFETY_OPERATION_" +
- "RESULT_VERIFIED_BUT_STILL_BLOCKED\020\003\022+\n\'S" +
- "AFETY_OPERATION_RESULT_BLOCKER_REMAINS\020\004" +
- "\022*\n&SAFETY_OPERATION_RESULT_EPOCH_MISMAT" +
- "CH\020\005\022.\n*SAFETY_OPERATION_RESULT_NOTHING_" +
- "TO_RECOVER\020\006\022%\n!SAFETY_OPERATION_RESULT_" +
- "TIMED_OUT\020\007\022\"\n\036SAFETY_OPERATION_RESULT_F" +
- "AILED\020\010b\006proto3"
+ "_ONLY\020\001\022\030\n\024CLEAR_SOFTWARE_LATCH\020\002\"\224\003\n\036Re" +
+ "storeOperationalStateCommand\032B\n\007Request\022" +
+ "\023\n\013recovery_id\030\001 \001(\t\022\016\n\006reason\030\002 \001(\t\022\022\n\n" +
+ "timeout_ms\030\003 \001(\r\032\255\002\n\010Feedback\0220\n\006header\030" +
+ "\001 \001(\0132 .cmvr.api.CommandHeader.Feedback\022" +
+ "/\n\006result\030\002 \001(\0162\037.cmvr.api.SafetyOperati" +
+ "onResult\022\035\n\025previous_safety_epoch\030\003 \001(\004\022" +
+ "\034\n\024current_safety_epoch\030\004 \001(\004\0224\n\014system_" +
+ "state\030\005 \001(\0162\036.cmvr.api.SystemAdmissionSt" +
+ "ate\0226\n\007targets\030\006 \003(\0132%.cmvr.api.SafetyOp" +
+ "erationTargetResult\022\023\n\013recovery_id\030\007 \001(\t" +
+ "*e\n\016SafetyTriState\022\034\n\030SAFETY_TRI_STATE_U" +
+ "NKNOWN\020\000\022\032\n\026SAFETY_TRI_STATE_FALSE\020\001\022\031\n\025" +
+ "SAFETY_TRI_STATE_TRUE\020\002*\213\001\n\017SafetyCondit" +
+ "ion\022\034\n\030SAFETY_CONDITION_UNKNOWN\020\000\022\034\n\030SAF" +
+ "ETY_CONDITION_NOMINAL\020\001\022\037\n\033SAFETY_CONDIT" +
+ "ION_RESTRICTED\020\002\022\033\n\027SAFETY_CONDITION_UNS" +
+ "AFE\020\003*\236\002\n\024SystemAdmissionState\022&\n\"SYSTEM" +
+ "_ADMISSION_STATE_UNSPECIFIED\020\000\022#\n\037SYSTEM" +
+ "_ADMISSION_STATE_STARTING\020\001\022\037\n\033SYSTEM_AD" +
+ "MISSION_STATE_OPEN\020\002\022#\n\037SYSTEM_ADMISSION" +
+ "_STATE_STOPPING\020\003\022\"\n\036SYSTEM_ADMISSION_ST" +
+ "ATE_LATCHED\020\004\022%\n!SYSTEM_ADMISSION_STATE_" +
+ "RECOVERING\020\005\022(\n$SYSTEM_ADMISSION_STATE_S" +
+ "HUTTING_DOWN\020\006*\234\002\n\024DeviceAdmissionState\022" +
+ "&\n\"DEVICE_ADMISSION_STATE_UNSPECIFIED\020\000\022" +
+ "$\n DEVICE_ADMISSION_STATE_OBSERVING\020\001\022\037\n" +
+ "\033DEVICE_ADMISSION_STATE_OPEN\020\002\022\"\n\036DEVICE" +
+ "_ADMISSION_STATE_BLOCKED\020\003\022&\n\"DEVICE_ADM" +
+ "ISSION_STATE_QUARANTINED\020\004\022%\n!DEVICE_ADM" +
+ "ISSION_STATE_RECOVERING\020\005\022\"\n\036DEVICE_ADMI" +
+ "SSION_STATE_REMOVED\020\006*|\n\022SafetyBlockerSc" +
+ "ope\022$\n SAFETY_BLOCKER_SCOPE_UNSPECIFIED\020" +
+ "\000\022\037\n\033SAFETY_BLOCKER_SCOPE_DEVICE\020\001\022\037\n\033SA" +
+ "FETY_BLOCKER_SCOPE_SYSTEM\020\002*\243\002\n\031SafetyRe" +
+ "coveryRequirement\022+\n\'SAFETY_RECOVERY_REQ" +
+ "UIREMENT_UNSPECIFIED\020\000\022,\n(SAFETY_RECOVER" +
+ "Y_REQUIREMENT_REFRESH_ONLY\020\001\0224\n0SAFETY_R" +
+ "ECOVERY_REQUIREMENT_CLEAR_SOFTWARE_LATCH" +
+ "\020\002\0229\n5SAFETY_RECOVERY_REQUIREMENT_HARDWA" +
+ "RE_RELEASE_REQUIRED\020\003\022:\n6SAFETY_RECOVERY" +
+ "_REQUIREMENT_MANUAL_INSPECTION_REQUIRED\020" +
+ "\004*\232\003\n\025SafetyOperationResult\022\'\n#SAFETY_OP" +
+ "ERATION_RESULT_UNSPECIFIED\020\000\022%\n!SAFETY_O" +
+ "PERATION_RESULT_SUCCEEDED\020\001\022%\n!SAFETY_OP" +
+ "ERATION_RESULT_RECOVERED\020\002\0226\n2SAFETY_OPE" +
+ "RATION_RESULT_VERIFIED_BUT_STILL_BLOCKED" +
+ "\020\003\022+\n\'SAFETY_OPERATION_RESULT_BLOCKER_RE" +
+ "MAINS\020\004\022*\n&SAFETY_OPERATION_RESULT_EPOCH" +
+ "_MISMATCH\020\005\022.\n*SAFETY_OPERATION_RESULT_N" +
+ "OTHING_TO_RECOVER\020\006\022%\n!SAFETY_OPERATION_" +
+ "RESULT_TIMED_OUT\020\007\022\"\n\036SAFETY_OPERATION_R" +
+ "ESULT_FAILED\020\010b\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
@@ -16877,6 +19545,24 @@ public final class SafetyCommand {
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_cmvr_api_RecoverSafetyStateCommand_Feedback_descriptor,
new java.lang.String[] { "Header", "Result", "PreviousSafetyEpoch", "CurrentSafetyEpoch", "SystemState", "Targets", "RecoveryId", });
+ internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor =
+ getDescriptor().getMessageTypes().get(9);
+ internal_static_cmvr_api_RestoreOperationalStateCommand_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor,
+ new java.lang.String[] { });
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Request_descriptor =
+ internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor.getNestedTypes().get(0);
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Request_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Request_descriptor,
+ new java.lang.String[] { "RecoveryId", "Reason", "TimeoutMs", });
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_descriptor =
+ internal_static_cmvr_api_RestoreOperationalStateCommand_descriptor.getNestedTypes().get(1);
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_cmvr_api_RestoreOperationalStateCommand_Feedback_descriptor,
+ new java.lang.String[] { "Header", "Result", "PreviousSafetyEpoch", "CurrentSafetyEpoch", "SystemState", "Targets", "RecoveryId", });
cmvr.api.Common.getDescriptor();
}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceGrpc.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceGrpc.java
index e76b364..b484b72 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceGrpc.java
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceGrpc.java
@@ -263,6 +263,37 @@ public final class SystemServiceGrpc {
return getRecoverSafetyStateMethod;
}
+ private static volatile io.grpc.MethodDescriptor getRestoreOperationalStateMethod;
+
+ @io.grpc.stub.annotations.RpcMethod(
+ fullMethodName = SERVICE_NAME + '/' + "RestoreOperationalState",
+ requestType = cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.class,
+ responseType = cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.class,
+ methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+ public static io.grpc.MethodDescriptor getRestoreOperationalStateMethod() {
+ io.grpc.MethodDescriptor getRestoreOperationalStateMethod;
+ if ((getRestoreOperationalStateMethod = SystemServiceGrpc.getRestoreOperationalStateMethod) == null) {
+ synchronized (SystemServiceGrpc.class) {
+ if ((getRestoreOperationalStateMethod = SystemServiceGrpc.getRestoreOperationalStateMethod) == null) {
+ SystemServiceGrpc.getRestoreOperationalStateMethod = getRestoreOperationalStateMethod =
+ io.grpc.MethodDescriptor.newBuilder()
+ .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RestoreOperationalState"))
+ .setSampledToLocalTracing(true)
+ .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request.getDefaultInstance()))
+ .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback.getDefaultInstance()))
+ .setSchemaDescriptor(new SystemServiceMethodDescriptorSupplier("RestoreOperationalState"))
+ .build();
+ }
+ }
+ }
+ return getRestoreOperationalStateMethod;
+ }
+
/**
* Creates a new async stub that supports all call types for the service
*/
@@ -367,6 +398,13 @@ public final class SystemServiceGrpc {
io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRecoverSafetyStateMethod(), responseObserver);
}
+ /**
+ */
+ public void restoreOperationalState(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request request,
+ io.grpc.stub.StreamObserver responseObserver) {
+ io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRestoreOperationalStateMethod(), responseObserver);
+ }
+
@java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
.addMethod(
@@ -425,6 +463,13 @@ public final class SystemServiceGrpc {
cmvr.api.SafetyCommand.RecoverSafetyStateCommand.Request,
cmvr.api.SafetyCommand.RecoverSafetyStateCommand.Feedback>(
this, METHODID_RECOVER_SAFETY_STATE)))
+ .addMethod(
+ getRestoreOperationalStateMethod(),
+ io.grpc.stub.ServerCalls.asyncUnaryCall(
+ new MethodHandlers<
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request,
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback>(
+ this, METHODID_RESTORE_OPERATIONAL_STATE)))
.build();
}
}
@@ -506,6 +551,14 @@ public final class SystemServiceGrpc {
io.grpc.stub.ClientCalls.asyncUnaryCall(
getChannel().newCall(getRecoverSafetyStateMethod(), getCallOptions()), request, responseObserver);
}
+
+ /**
+ */
+ public void restoreOperationalState(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request request,
+ io.grpc.stub.StreamObserver responseObserver) {
+ io.grpc.stub.ClientCalls.asyncUnaryCall(
+ getChannel().newCall(getRestoreOperationalStateMethod(), getCallOptions()), request, responseObserver);
+ }
}
/**
@@ -577,6 +630,13 @@ public final class SystemServiceGrpc {
return io.grpc.stub.ClientCalls.blockingUnaryCall(
getChannel(), getRecoverSafetyStateMethod(), getCallOptions(), request);
}
+
+ /**
+ */
+ public cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Feedback restoreOperationalState(cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request request) {
+ return io.grpc.stub.ClientCalls.blockingUnaryCall(
+ getChannel(), getRestoreOperationalStateMethod(), getCallOptions(), request);
+ }
}
/**
@@ -656,6 +716,14 @@ public final class SystemServiceGrpc {
return io.grpc.stub.ClientCalls.futureUnaryCall(
getChannel().newCall(getRecoverSafetyStateMethod(), getCallOptions()), request);
}
+
+ /**
+ */
+ public com.google.common.util.concurrent.ListenableFuture restoreOperationalState(
+ cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request request) {
+ return io.grpc.stub.ClientCalls.futureUnaryCall(
+ getChannel().newCall(getRestoreOperationalStateMethod(), getCallOptions()), request);
+ }
}
private static final int METHODID_GET_SYSTEM_INFO = 0;
@@ -666,6 +734,7 @@ public final class SystemServiceGrpc {
private static final int METHODID_EXECUTE_ACTION_QUEUE = 5;
private static final int METHODID_GET_SAFETY_STATE = 6;
private static final int METHODID_RECOVER_SAFETY_STATE = 7;
+ private static final int METHODID_RESTORE_OPERATIONAL_STATE = 8;
private static final class MethodHandlers implements
io.grpc.stub.ServerCalls.UnaryMethod,
@@ -716,6 +785,10 @@ public final class SystemServiceGrpc {
serviceImpl.recoverSafetyState((cmvr.api.SafetyCommand.RecoverSafetyStateCommand.Request) request,
(io.grpc.stub.StreamObserver) responseObserver);
break;
+ case METHODID_RESTORE_OPERATIONAL_STATE:
+ serviceImpl.restoreOperationalState((cmvr.api.SafetyCommand.RestoreOperationalStateCommand.Request) request,
+ (io.grpc.stub.StreamObserver) responseObserver);
+ break;
default:
throw new AssertionError();
}
@@ -785,6 +858,7 @@ public final class SystemServiceGrpc {
.addMethod(getExecuteActionQueueMethod())
.addMethod(getGetSafetyStateMethod())
.addMethod(getRecoverSafetyStateMethod())
+ .addMethod(getRestoreOperationalStateMethod())
.build();
}
}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceOuterClass.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceOuterClass.java
index 97d9b5d..b293e50 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceOuterClass.java
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SystemServiceOuterClass.java
@@ -25,7 +25,7 @@ public final class SystemServiceOuterClass {
java.lang.String[] descriptorData = {
"\n\035cmvr/api/system_service.proto\022\010cmvr.ap" +
"i\032\035cmvr/api/system_command.proto\032\035cmvr/a" +
- "pi/safety_command.proto2\263\006\n\rSystemServic" +
+ "pi/safety_command.proto2\266\007\n\rSystemServic" +
"e\022b\n\rGetSystemInfo\022&.cmvr.api.GetSystemI" +
"nfoCommand.Request\032\'.cmvr.api.GetSystemI" +
"nfoCommand.Feedback\"\000\022h\n\017GetSystemStatus" +
@@ -46,7 +46,10 @@ public final class SystemServiceOuterClass {
"Feedback\"\000\022q\n\022RecoverSafetyState\022+.cmvr." +
"api.RecoverSafetyStateCommand.Request\032,." +
"cmvr.api.RecoverSafetyStateCommand.Feedb" +
- "ack\"\000b\006proto3"
+ "ack\"\000\022\200\001\n\027RestoreOperationalState\0220.cmvr" +
+ ".api.RestoreOperationalStateCommand.Requ" +
+ "est\0321.cmvr.api.RestoreOperationalStateCo" +
+ "mmand.Feedback\"\000b\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/safety_command.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/safety_command.proto
index b227f84..4e5b774 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/safety_command.proto
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/safety_command.proto
@@ -184,3 +184,21 @@ message RecoverSafetyStateCommand {
string recovery_id = 7;
}
}
+
+message RestoreOperationalStateCommand {
+ message Request {
+ string recovery_id = 1;
+ string reason = 2;
+ uint32 timeout_ms = 3;
+ }
+
+ message Feedback {
+ CommandHeader.Feedback header = 1;
+ SafetyOperationResult result = 2;
+ uint64 previous_safety_epoch = 3;
+ uint64 current_safety_epoch = 4;
+ SystemAdmissionState system_state = 5;
+ repeated SafetyOperationTargetResult targets = 6;
+ string recovery_id = 7;
+ }
+}
diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/system_service.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/system_service.proto
index 4426773..8fbac6a 100644
--- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/system_service.proto
+++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/system_service.proto
@@ -18,5 +18,8 @@ service SystemService {
rpc ExecuteActionQueue(ActionQueueCommand.Request) returns (ActionQueueCommand.Feedback) {}
rpc GetSafetyState(GetSafetyStateCommand.Request) returns (GetSafetyStateCommand.Feedback) {}
- rpc RecoverSafetyState(RecoverSafetyStateCommand.Request) returns (RecoverSafetyStateCommand.Feedback) {}
+ rpc RecoverSafetyState(RecoverSafetyStateCommand.Request) returns (RecoverSafetyStateCommand.Feedback) {
+ option deprecated = true;
+ }
+ rpc RestoreOperationalState(RestoreOperationalStateCommand.Request) returns (RestoreOperationalStateCommand.Feedback) {}
}
diff --git a/cmvr-iot-common/pom.xml b/cmvr-iot-common/pom.xml
index 402119e..b9c3f1d 100644
--- a/cmvr-iot-common/pom.xml
+++ b/cmvr-iot-common/pom.xml
@@ -156,6 +156,13 @@
${swagger.annotations.version}
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
diff --git a/cmvr-iot-common/src/main/java/com/cmvr/common/core/minio/MinioService.java b/cmvr-iot-common/src/main/java/com/cmvr/common/core/minio/MinioService.java
index bd560f9..68a4e82 100644
--- a/cmvr-iot-common/src/main/java/com/cmvr/common/core/minio/MinioService.java
+++ b/cmvr-iot-common/src/main/java/com/cmvr/common/core/minio/MinioService.java
@@ -25,6 +25,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+import java.util.UUID;
@Slf4j
@Component
@@ -96,16 +97,12 @@ public class MinioService {
if (StringUtils.isBlank(originalFilename)) {
throw new RuntimeException();
}
- String fileName = System.currentTimeMillis() + "";
- if (originalFilename.lastIndexOf(".") >= 0) {
- fileName += originalFilename.substring(originalFilename.lastIndexOf("."));
- }
+ String fileName = buildUniqueFileName(originalFilename);
String objectName = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN) + "/" + fileName;
try {
InputStream stream = new ByteArrayInputStream(file.getBytes());
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(path + "/" + objectName)
.stream(stream, file.getSize(), -1).contentType(file.getContentType()).build();
- //文件名称相同会覆盖
minioClient.putObject(objectArgs);
} catch (Exception e) {
log.error("上传图片失败,", e);
@@ -121,11 +118,7 @@ public class MinioService {
throw new RuntimeException("文件名为空");
}
- // 生成文件名,使用当前时间戳
- String fileName = System.currentTimeMillis() + "";
- if (originalFilename.lastIndexOf(".") >= 0) {
- fileName += originalFilename.substring(originalFilename.lastIndexOf("."));
- }
+ String fileName = buildUniqueFileName(originalFilename);
// 构建文件在 MinIO 中的路径
String objectName = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN) + "/" + fileName;
@@ -178,13 +171,12 @@ public class MinioService {
*/
public String upload(String bucketName, String path, String name, byte[] fileByte, String contentType) {
- String fileName = System.currentTimeMillis() + name.substring(name.lastIndexOf("."));
+ String fileName = buildUniqueFileName(name);
String objectName = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN) + "/" + fileName;
try {
InputStream stream = new ByteArrayInputStream(fileByte);
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(path + "/" + objectName)
.stream(stream, fileByte.length, -1).contentType(contentType).build();
- //文件名称相同会覆盖
minioClient.putObject(objectArgs);
} catch (Exception e) {
log.error("上传文件失败,", e);
@@ -193,6 +185,30 @@ public class MinioService {
return objectName;
}
+ /**
+ * Generates a collision-resistant object file name while retaining the source extension.
+ */
+ static String buildUniqueFileName(String originalFilename) {
+ String extension = "";
+ if (StringUtils.isNotBlank(originalFilename)) {
+ int separatorIndex = Math.max(originalFilename.lastIndexOf('/'), originalFilename.lastIndexOf('\\'));
+ int extensionIndex = originalFilename.lastIndexOf('.');
+ if (extensionIndex > separatorIndex) {
+ extension = originalFilename.substring(extensionIndex);
+ }
+ }
+ String uuid = UUID.randomUUID().toString().replace("-", "");
+ return System.currentTimeMillis() + "-" + uuid + extension;
+ }
+
+ static String buildUniqueObjectName(String objectName) {
+ String normalized = StringUtils.defaultString(objectName).replace('\\', '/');
+ int separatorIndex = normalized.lastIndexOf('/');
+ String directory = separatorIndex >= 0 ? normalized.substring(0, separatorIndex + 1) : "";
+ String originalFilename = separatorIndex >= 0 ? normalized.substring(separatorIndex + 1) : normalized;
+ return directory + buildUniqueFileName(originalFilename);
+ }
+
/**
* 删除
@@ -265,21 +281,24 @@ public class MinioService {
* @param inputStream 输入流
* @param size 文件大小
* @param contentType 内容类型
+ * @return 实际写入的唯一对象名称
*/
- public void uploadStream(String bucketName, String objectName, InputStream inputStream, long size, String contentType) {
+ public String uploadStream(String bucketName, String objectName, InputStream inputStream, long size, String contentType) {
+ String uniqueObjectName = buildUniqueObjectName(objectName);
try {
Map extraHeaders = new HashMap<>();
extraHeaders.put("x-amz-acl", "public-read");
PutObjectArgs objectArgs = PutObjectArgs.builder()
.bucket(bucketName)
- .object(objectName)
+ .object(uniqueObjectName)
.stream(inputStream, size, -1)
.extraHeaders(extraHeaders)
.contentType(contentType)
.build();
minioClient.putObject(objectArgs);
+ return uniqueObjectName;
} catch (Exception e) {
- log.error("上传文件流失败, objectName: {}", objectName, e);
+ log.error("上传文件流失败, objectName: {}", uniqueObjectName, e);
throw new RuntimeException("上传文件流失败", e);
}
}
diff --git a/cmvr-iot-common/src/test/java/com/cmvr/common/core/minio/MinioServiceTest.java b/cmvr-iot-common/src/test/java/com/cmvr/common/core/minio/MinioServiceTest.java
new file mode 100644
index 0000000..80d1c02
--- /dev/null
+++ b/cmvr-iot-common/src/test/java/com/cmvr/common/core/minio/MinioServiceTest.java
@@ -0,0 +1,45 @@
+package com.cmvr.common.core.minio;
+
+import org.junit.Test;
+
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.IntStream;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class MinioServiceTest {
+
+ @Test
+ public void generatesUniqueNamesUnderConcurrency() {
+ int count = 10_000;
+ Set names = ConcurrentHashMap.newKeySet();
+
+ IntStream.range(0, count).parallel()
+ .mapToObj(index -> MinioService.buildUniqueFileName("recording.mp4"))
+ .forEach(names::add);
+
+ assertEquals(count, names.size());
+ assertTrue(names.stream().allMatch(name ->
+ name.matches("\\d{13}-[0-9a-f]{32}\\.mp4")));
+ }
+
+ @Test
+ public void retainsExtensionAndSupportsExtensionlessNames() {
+ String imageName = MinioService.buildUniqueFileName("folder/archive/photo.JPG");
+ String extensionlessName = MinioService.buildUniqueFileName("README");
+
+ assertTrue(imageName.endsWith(".JPG"));
+ assertFalse(extensionlessName.contains("."));
+ }
+
+ @Test
+ public void retainsObjectDirectoryWhenGeneratingStreamUploadName() {
+ String objectName = MinioService.buildUniqueObjectName("inspection/alerts/source.jpg");
+
+ assertTrue(objectName.matches(
+ "inspection/alerts/\\d{13}-[0-9a-f]{32}\\.jpg"));
+ }
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java
index 30bdbc5..5b19b82 100644
--- a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java
@@ -293,10 +293,11 @@ public class InspectionDetectionAlertServiceImpl implements IInspectionDetection
String extension = extensionFor(image.getMediaType());
String datePath = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE);
- String objectName = IMAGE_OBJECT_PREFIX + "/" + datePath + "/" + alertId + extension;
+ String requestedObjectName = IMAGE_OBJECT_PREFIX + "/" + datePath + "/" + alertId + extension;
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes))
{
- minioService.uploadStream(minioProperties.getBucketName(), objectName, inputStream,
+ String objectName = minioService.uploadStream(
+ minioProperties.getBucketName(), requestedObjectName, inputStream,
imageBytes.length, image.getMediaType());
return new StoredImage(objectName, buildMinioUrl(objectName));
}
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java b/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java
index 83fde61..5703299 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java
@@ -90,6 +90,7 @@ public enum ActionEnum {
GET_CURRENT_PAGE("LLM", "GET_CURRENT_PAGE", "获取当前页面名称"),
AUDIO_EVENT_CLASSIFY("LLM", "AUDIO_EVENT_CLASSIFY", "声音类型检测"),
VIDEO_ANALYZE("LLM", "VIDEO_ANALYZE", "视频智能分析"),
+ IMAGE_ANALYZE("LLM", "IMAGE_ANALYZE", "通用图片分析"),
// 触控交互
TI_PATH_SEARCH("EDGE", "TI_PATH_SEARCH", "路径搜索"),
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/builder/FlowModelBuilder.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/builder/FlowModelBuilder.java
index 701c7b9..f67f76e 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/builder/FlowModelBuilder.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/builder/FlowModelBuilder.java
@@ -178,6 +178,10 @@ public class FlowModelBuilder {
// 设置动作类型
String actionStr = props.getString("action");
+ if (isLegacyImageAnalysisNode(nodeJson, props)) {
+ actionStr = ActionEnum.IMAGE_ANALYZE.getAction();
+ props.put("action", actionStr);
+ }
ActionEnum action = ActionEnum.fromAction(actionStr);
if (ObjUtil.isEmpty(action)) {
throw new IllegalArgumentException("无法识别的action:" + actionStr);
@@ -205,6 +209,28 @@ public class FlowModelBuilder {
return wrapper;
}
+ /**
+ * Early image-analysis nodes could retain TOUCH_COORDINATES metadata while already
+ * carrying the new component type and profile. Normalize those persisted graphs at runtime.
+ */
+ private static boolean isLegacyImageAnalysisNode(JSONObject nodeJson, JSONObject props) {
+ if (!"imageAnalysis".equalsIgnoreCase(nodeJson.getString("type"))) {
+ return false;
+ }
+ JSONArray params = props.getJSONArray("nodeParams");
+ if (params == null) {
+ return false;
+ }
+ for (int i = 0; i < params.size(); i++) {
+ JSONObject param = params.getJSONObject(i);
+ if ("profileCode".equals(param.getString("name"))
+ && "common.image_analysis.v1".equals(param.getString("input"))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* 解析分支条件逻辑
*/
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/FlowMediaParamResolver.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/FlowMediaParamResolver.java
index a6e693f..9cf7740 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/FlowMediaParamResolver.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/FlowMediaParamResolver.java
@@ -1,5 +1,7 @@
package com.cmvr.test.flow.runtime.operator;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.apache.commons.lang3.StringUtils;
@@ -21,17 +23,29 @@ public final class FlowMediaParamResolver {
public static List urls(JSONObject params, String name) {
Object value = params == null ? null : params.get(name);
if (value instanceof List> values) {
- List urls = new ArrayList<>();
- for (Object item : values) {
- String url = normalizeUrl(item);
- if (url != null && !"null".equalsIgnoreCase(url)) {
- urls.add(url);
- }
- }
- return urls;
+ return normalizeUrls(values);
}
- String url = normalizeUrl(value);
- return url == null ? Collections.emptyList() : List.of(url);
+ String text = normalizeUrl(value);
+ if (text != null && text.startsWith("[") && text.endsWith("]")) {
+ try {
+ JSONArray values = JSON.parseArray(text);
+ return normalizeUrls(values);
+ } catch (Exception ignored) {
+ // Keep treating malformed JSON as a scalar so validation can report it upstream.
+ }
+ }
+ return text == null ? Collections.emptyList() : List.of(text);
+ }
+
+ private static List normalizeUrls(List> values) {
+ List urls = new ArrayList<>();
+ for (Object item : values) {
+ String url = normalizeUrl(item);
+ if (url != null && !"null".equalsIgnoreCase(url)) {
+ urls.add(url);
+ }
+ }
+ return urls;
}
private static String normalizeUrl(Object value) {
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateService.java
index 7bf2587..dec41d0 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateService.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateService.java
@@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
+import java.util.List;
import java.util.Set;
import java.util.UUID;
@@ -19,27 +20,33 @@ import java.util.UUID;
public class LLMMediaAnalysisOperateService implements LLMOperateService {
private static final Set VIDEO_ANALYSIS_MODES = Set.of("AUTO", "FAST", "ACCURATE");
-
private final MediaAnalysisClient mediaAnalysisClient;
@Override
public boolean supports(ActionEnum action) {
- return action == ActionEnum.AUDIO_EVENT_CLASSIFY || action == ActionEnum.VIDEO_ANALYZE;
+ return action == ActionEnum.AUDIO_EVENT_CLASSIFY
+ || action == ActionEnum.VIDEO_ANALYZE
+ || action == ActionEnum.IMAGE_ANALYZE;
}
@Override
public TaskNodeExecuteResult execute(TaskNodeExecuteMessage message) {
JSONObject input = message.getInputParams();
boolean audio = message.getAction() == ActionEnum.AUDIO_EVENT_CLASSIFY;
- String mediaParam = audio ? "audioUrl" : "videoUrl";
+ boolean image = message.getAction() == ActionEnum.IMAGE_ANALYZE;
+ String mediaParam = audio ? "audioUrl" : (image ? "imageUrl" : "videoUrl");
+ List mediaUrls = FlowMediaParamResolver.urls(input, mediaParam);
String mediaUrl = FlowMediaParamResolver.lastUrl(input, mediaParam);
String profileCode = StringUtils.trimToNull(input.getString("profileCode"));
if (StringUtils.isBlank(mediaUrl)) {
- throw new GlobalException("{}不能为空", audio ? "音频地址" : "视频地址");
+ throw new GlobalException("{}不能为空", audio ? "音频地址" : (image ? "图片地址" : "视频地址"));
}
if (profileCode == null) {
throw new GlobalException("分析场景不能为空");
}
+ if (image && mediaUrls.size() > 12) {
+ throw new GlobalException("图片分析一次最多支持12张图片");
+ }
JSONObject context = new JSONObject();
context.put("taskId", message.getTaskId());
@@ -58,7 +65,7 @@ public class LLMMediaAnalysisOperateService implements LLMOperateService {
options.put("expectedLabel", expectedLabel);
options.put("expectedLabelName", StringUtils.defaultIfBlank(expectedLabelName, expectedLabel));
}
- } else {
+ } else if (!image) {
options.put("instruction", StringUtils.defaultString(input.getString("instruction")));
String analysisMode = StringUtils.defaultIfBlank(input.getString("analysisMode"), "AUTO")
.trim().toUpperCase();
@@ -67,17 +74,42 @@ public class LLMMediaAnalysisOperateService implements LLMOperateService {
}
options.put("analysisMode", analysisMode);
options.put("decisionPolicy", "FAIL_CLOSED");
+ options.put("detailedOutput", Boolean.TRUE.equals(input.getBoolean("detailedOutput")));
JSONObject tuning = buildVideoTuning(input.getJSONObject("analysisTuning"));
if (!tuning.isEmpty()) {
options.put("tuning", tuning);
}
+ } else {
+ String analysisMode = StringUtils.defaultIfBlank(input.getString("analysisMode"), "AUTO")
+ .trim().toUpperCase();
+ if (!VIDEO_ANALYSIS_MODES.contains(analysisMode)) {
+ throw new GlobalException("图片分析模式无效: {}", analysisMode);
+ }
+ String prompt = resolveImagePrompt(input);
+ if (StringUtils.isBlank(prompt)) {
+ throw new GlobalException("图片分析提示词不能为空");
+ }
+ options.put("prompt", prompt);
+ options.put("analysisMode", analysisMode);
+ String referenceImageUrl = FlowMediaParamResolver.lastUrl(input, "referenceImageUrl");
+ if (StringUtils.isNotBlank(referenceImageUrl)) {
+ options.put("referenceImageUrl", referenceImageUrl);
+ }
+ JSONObject tuning = buildImageTuning(input.getJSONObject("analysisTuning"));
+ if (!tuning.isEmpty()) {
+ options.put("tuning", tuning);
+ }
}
JSONObject request = new JSONObject();
request.put("requestId", buildRequestId(message));
- request.put("analysisType", audio ? "AUDIO_CLASSIFICATION" : "VIDEO_ANALYSIS");
+ request.put("analysisType", audio ? "AUDIO_CLASSIFICATION"
+ : (image ? "IMAGE_ANALYSIS" : "VIDEO_ANALYSIS"));
request.put("profileCode", profileCode);
request.put("mediaUrl", mediaUrl);
+ if (image) {
+ request.put("mediaUrls", mediaUrls);
+ }
request.put("options", options);
request.put("context", context);
@@ -94,6 +126,9 @@ public class LLMMediaAnalysisOperateService implements LLMOperateService {
output.put("analysisModel", response.getJSONObject("model"));
output.put("analysisTimingMs", response.getLong("timingMs"));
output.put("mediaUrl", mediaUrl);
+ if (image) {
+ output.put("mediaUrls", mediaUrls);
+ }
if (audio) {
applyAudioVerdict(output, expectedLabel, expectedLabelName);
}
@@ -127,20 +162,72 @@ public class LLMMediaAnalysisOperateService implements LLMOperateService {
if (source == null || source.isEmpty()) {
return tuning;
}
- Integer maxFrames = source.getInteger("maxFrames");
+ Double sampleFps = source.getDouble("sampleFps");
Integer maxWidth = source.getInteger("maxWidth");
Double confidenceThreshold = source.getDouble("confidenceThreshold");
Boolean fallbackToAccurate = source.getBoolean("fallbackToAccurate");
- validateRange("抽帧数量", maxFrames, 2, 16);
+ validateRange("采样帧率", sampleFps, 0.25D, 6D);
validateRange("图片宽度", maxWidth, 640, 1280);
validateRange("通过置信度", confidenceThreshold, 0.5D, 0.95D);
- if (maxFrames != null) tuning.put("maxFrames", maxFrames);
+ if (sampleFps != null) tuning.put("sampleFps", sampleFps);
if (maxWidth != null) tuning.put("maxWidth", maxWidth);
if (confidenceThreshold != null) tuning.put("confidenceThreshold", confidenceThreshold);
if (fallbackToAccurate != null) tuning.put("fallbackToAccurate", fallbackToAccurate);
return tuning;
}
+ private JSONObject buildImageTuning(JSONObject source) {
+ JSONObject tuning = new JSONObject();
+ if (source == null || source.isEmpty()) {
+ return tuning;
+ }
+ Integer maxWidth = source.getInteger("maxWidth");
+ Integer maxImages = source.getInteger("maxImages");
+ Integer maxOutputTokens = source.getInteger("maxOutputTokens");
+ validateRange("图片宽度", maxWidth, 640, 1600);
+ validateRange("图片数量", maxImages, 1, 12);
+ validateRange("最大输出长度", maxOutputTokens, 32, 4096);
+ if (maxWidth != null) tuning.put("maxWidth", maxWidth);
+ if (maxImages != null) tuning.put("maxImages", maxImages);
+ if (maxOutputTokens != null) tuning.put("maxOutputTokens", maxOutputTokens);
+ return tuning;
+ }
+
+ private String resolveImagePrompt(JSONObject input) {
+ String prompt = StringUtils.trimToNull(input.getString("prompt"));
+ if (prompt != null) {
+ return prompt;
+ }
+
+ // Old image-analysis nodes stored a fixed task type, target and pass criterion.
+ // Convert those fields into one neutral prompt so saved workflows remain runnable
+ // without retaining the old pass/fail semantics.
+ String target = StringUtils.trimToNull(input.getString("targetDescription"));
+ String instruction = StringUtils.trimToNull(input.getString("instruction"));
+ String taskType = StringUtils.trimToEmpty(input.getString("taskType")).toUpperCase();
+ StringBuilder legacyPrompt = new StringBuilder();
+ if (target != null) {
+ legacyPrompt.append(target);
+ }
+ if (instruction != null) {
+ if (!legacyPrompt.isEmpty()) {
+ legacyPrompt.append('\n');
+ }
+ legacyPrompt.append(instruction);
+ }
+ if ("ICON_TEMPLATE_LOCATE".equals(taskType)) {
+ if (!legacyPrompt.isEmpty()) {
+ legacyPrompt.append('\n');
+ }
+ legacyPrompt.append("最后一张图片是参考小图,请在其他图片中查找对应目标。");
+ }
+ if (!legacyPrompt.isEmpty()) {
+ legacyPrompt.append('\n');
+ }
+ legacyPrompt.append("只返回分析结果,不输出通过、未通过或置信度。");
+ return StringUtils.trimToEmpty(legacyPrompt.toString());
+ }
+
private void validateRange(String name, Number value, double minimum, double maximum) {
if (value != null && (value.doubleValue() < minimum || value.doubleValue() > maximum)) {
throw new GlobalException("{}必须在{}到{}之间", name, minimum, maximum);
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/service/FlowActionExecutorService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/service/FlowActionExecutorService.java
index 1315339..b9308a2 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/service/FlowActionExecutorService.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/service/FlowActionExecutorService.java
@@ -327,7 +327,9 @@ public class FlowActionExecutorService {
private String executeLLMAction(ActionEnum action, FlowActionRequestVO req) {
log.info("LLM 执行动作: {}", action);
- if (action == ActionEnum.AUDIO_EVENT_CLASSIFY || action == ActionEnum.VIDEO_ANALYZE) {
+ if (action == ActionEnum.AUDIO_EVENT_CLASSIFY
+ || action == ActionEnum.VIDEO_ANALYZE
+ || action == ActionEnum.IMAGE_ANALYZE) {
for (LLMOperateService service : llmOperateServices) {
if (service.supports(action)) {
return resultToString(service.execute(buildSingleNodeMessage(action, req.getPayload())));
diff --git a/cmvr-iot-test/src/test/java/com/cmvr/test/flow/builder/FlowModelBuilderTest.java b/cmvr-iot-test/src/test/java/com/cmvr/test/flow/builder/FlowModelBuilderTest.java
new file mode 100644
index 0000000..401978f
--- /dev/null
+++ b/cmvr-iot-test/src/test/java/com/cmvr/test/flow/builder/FlowModelBuilderTest.java
@@ -0,0 +1,34 @@
+package com.cmvr.test.flow.builder;
+
+import com.cmvr.test.enums.ActionEnum;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class FlowModelBuilderTest {
+
+ @Test
+ public void normalizesEarlyImageAnalysisNodeWithTouchAction() {
+ String flow = """
+ {
+ "nodes": [{
+ "id": "image-1",
+ "type": "imageAnalysis",
+ "properties": {
+ "name": "图片智能分析",
+ "action": "TOUCH_COORDINATES",
+ "nodeParams": [
+ {"name":"profileCode","type":"input","input":"common.image_analysis.v1"},
+ {"name":"imageUrl","type":"input","input":["http://minio/image.jpg"]}
+ ]
+ }
+ }],
+ "edges": []
+ }
+ """;
+
+ FlowGraph graph = FlowModelBuilder.buildExecutableGraph(flow);
+
+ assertEquals(ActionEnum.IMAGE_ANALYZE, graph.getNodeMap().get("image-1").getAction());
+ }
+}
diff --git a/cmvr-iot-test/src/test/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateServiceTest.java b/cmvr-iot-test/src/test/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateServiceTest.java
index 9a1f8b6..d8ae807 100644
--- a/cmvr-iot-test/src/test/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateServiceTest.java
+++ b/cmvr-iot-test/src/test/java/com/cmvr/test/flow/runtime/operator/llm/LLMMediaAnalysisOperateServiceTest.java
@@ -12,6 +12,7 @@ import org.junit.Test;
import java.util.concurrent.atomic.AtomicReference;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class LLMMediaAnalysisOperateServiceTest {
@@ -95,8 +96,9 @@ public class LLMMediaAnalysisOperateServiceTest {
.fluentPut("profileCode", "aima.power_video.v1")
.fluentPut("videoUrl", "https://files.example/video.mp4")
.fluentPut("analysisMode", "FAST")
+ .fluentPut("detailedOutput", true)
.fluentPut("analysisTuning", new JSONObject()
- .fluentPut("maxFrames", 8)
+ .fluentPut("sampleFps", 2D)
.fluentPut("maxWidth", 960)
.fluentPut("confidenceThreshold", 0.8D)
.fluentPut("fallbackToAccurate", false))
@@ -110,8 +112,10 @@ public class LLMMediaAnalysisOperateServiceTest {
assertEquals("FAST", captured.get().getJSONObject("options").getString("analysisMode"));
assertEquals("FAIL_CLOSED",
captured.get().getJSONObject("options").getString("decisionPolicy"));
+ assertEquals(true,
+ captured.get().getJSONObject("options").getBooleanValue("detailedOutput"));
JSONObject tuning = captured.get().getJSONObject("options").getJSONObject("tuning");
- assertEquals(8, tuning.getIntValue("maxFrames"));
+ assertEquals(2D, tuning.getDoubleValue("sampleFps"), 0.0001D);
assertEquals(960, tuning.getIntValue("maxWidth"));
assertEquals(0.8D, tuning.getDoubleValue("confidenceThreshold"), 0.0001D);
assertEquals(false, tuning.getBooleanValue("fallbackToAccurate"));
@@ -124,11 +128,85 @@ public class LLMMediaAnalysisOperateServiceTest {
.fluentPut("profileCode", "aima.power_video.v1")
.fluentPut("videoUrl", "https://files.example/video.mp4")
.fluentPut("analysisMode", "FAST")
- .fluentPut("analysisTuning", new JSONObject().fluentPut("maxFrames", 30));
+ .fluentPut("analysisTuning", new JSONObject().fluentPut("sampleFps", 6.5D));
service.execute(message(ActionEnum.VIDEO_ANALYZE, input));
}
+ @Test
+ public void forwardsMultipleImagesAndReferenceImage() {
+ AtomicReference captured = new AtomicReference<>();
+ MediaAnalysisClient client = request -> {
+ captured.set(request);
+ return new JSONObject()
+ .fluentPut("status", "SUCCEEDED")
+ .fluentPut("analysisType", "IMAGE_ANALYSIS")
+ .fluentPut("profileCode", "common.image_analysis.v1")
+ .fluentPut("result", new JSONObject()
+ .fluentPut("result", new JSONObject().fluentPut("x", 120).fluentPut("y", 80))
+ .fluentPut("resultText", "{\"x\":120,\"y\":80}"));
+ };
+ LLMMediaAnalysisOperateService service = new LLMMediaAnalysisOperateService(client);
+ JSONObject input = new JSONObject()
+ .fluentPut("profileCode", "common.image_analysis.v1")
+ .fluentPut("imageUrl", new JSONArray()
+ .fluentAdd("https://files.example/scene-1.jpg")
+ .fluentAdd("https://files.example/scene-2.jpg"))
+ .fluentPut("referenceImageUrl", "https://files.example/icon.jpg")
+ .fluentPut("prompt", "最后一张图片是参考图,输出匹配图标的中心坐标 JSON")
+ .fluentPut("analysisMode", "ACCURATE")
+ .fluentPut("analysisTuning", new JSONObject()
+ .fluentPut("maxWidth", 1280)
+ .fluentPut("maxImages", 8)
+ .fluentPut("maxOutputTokens", 256));
+
+ TaskNodeExecuteResult result = service.execute(message(ActionEnum.IMAGE_ANALYZE, input));
+
+ assertTrue(result.isSuccess());
+ assertEquals("IMAGE_ANALYSIS", captured.get().getString("analysisType"));
+ assertEquals(2, captured.get().getJSONArray("mediaUrls").size());
+ JSONObject options = captured.get().getJSONObject("options");
+ assertEquals("最后一张图片是参考图,输出匹配图标的中心坐标 JSON", options.getString("prompt"));
+ assertEquals("https://files.example/icon.jpg", options.getString("referenceImageUrl"));
+ assertEquals(8, options.getJSONObject("tuning").getIntValue("maxImages"));
+ assertEquals(256, options.getJSONObject("tuning").getIntValue("maxOutputTokens"));
+ assertEquals(2, result.getOutputParams().getJSONArray("mediaUrls").size());
+ assertNull(result.getOutputParams().get("passed"));
+ }
+
+ @Test
+ public void restoresStaticImageUrlArraySerializedByLegacyFlowParamModel() {
+ AtomicReference captured = new AtomicReference<>();
+ MediaAnalysisClient client = request -> {
+ captured.set(request);
+ return new JSONObject()
+ .fluentPut("status", "SUCCEEDED")
+ .fluentPut("analysisType", "IMAGE_ANALYSIS")
+ .fluentPut("profileCode", "common.image_analysis.v1")
+ .fluentPut("result", new JSONObject()
+ .fluentPut("result", "图片正常")
+ .fluentPut("resultText", "图片正常"));
+ };
+ LLMMediaAnalysisOperateService service = new LLMMediaAnalysisOperateService(client);
+ JSONObject input = new JSONObject()
+ .fluentPut("profileCode", "common.image_analysis.v1")
+ .fluentPut("taskType", "GENERAL_INSPECTION")
+ .fluentPut("imageUrl", "[\"http://192.168.28.10:9000/cmvr-iot/path%2Fimage.jpg\"]")
+ .fluentPut("targetDescription", "检查图片")
+ .fluentPut("instruction", "满足要求则通过")
+ .fluentPut("analysisTuning", "{\"maxWidth\":1120,\"confidenceThreshold\":0.7,\"maxImages\":12}");
+
+ service.execute(message(ActionEnum.IMAGE_ANALYZE, input));
+
+ assertEquals("http://192.168.28.10:9000/cmvr-iot/path%2Fimage.jpg",
+ captured.get().getString("mediaUrl"));
+ assertEquals(1, captured.get().getJSONArray("mediaUrls").size());
+ assertEquals(1120, captured.get().getJSONObject("options")
+ .getJSONObject("tuning").getIntValue("maxWidth"));
+ assertTrue(captured.get().getJSONObject("options").getString("prompt").contains("检查图片"));
+ assertTrue(captured.get().getJSONObject("options").getString("prompt").contains("满足要求则通过"));
+ }
+
private TaskNodeExecuteMessage message(ActionEnum action, JSONObject input) {
TaskNodeExecuteMessage message = new TaskNodeExecuteMessage();
message.setAction(action);
diff --git a/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/CorpusInfoServiceImpl.java b/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/CorpusInfoServiceImpl.java
index af4112e..efc7f60 100644
--- a/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/CorpusInfoServiceImpl.java
+++ b/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/CorpusInfoServiceImpl.java
@@ -153,8 +153,12 @@ public class CorpusInfoServiceImpl implements ICorpusInfoService {
}
try {
- String objectName = "corpus/" + DateUtils.datePath() + "/" + corpusId + "_" + System.currentTimeMillis() + ".wav";
- minioService.upload("cmvr-iot", "corpus/" + DateUtils.datePath(), file);
+ String uploadPath = "corpus/" + DateUtils.datePath();
+ String uploadedObjectName = minioService.upload("cmvr-iot", uploadPath, file);
+ if (StringUtils.isEmpty(uploadedObjectName)) {
+ throw new RuntimeException("上传音频失败");
+ }
+ String objectName = uploadPath + "/" + uploadedObjectName;
corpus.setAudioFilePath(objectName);
corpus.setFileSize(file.getSize());
diff --git a/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/TtsSynthesizeTaskServiceImpl.java b/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/TtsSynthesizeTaskServiceImpl.java
index deaa8a2..b08f39e 100644
--- a/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/TtsSynthesizeTaskServiceImpl.java
+++ b/cmvr-iot-tts/src/main/java/com/cmvr/tts/service/impl/TtsSynthesizeTaskServiceImpl.java
@@ -285,11 +285,12 @@ public class TtsSynthesizeTaskServiceImpl implements ITtsSynthesizeTaskService {
if (audioBytes != null && audioBytes.length > 0) {
// 上传音频到Minio
- String objectName = "tts/" + DateUtils.datePath() + "/" + task.getTaskCode() + ".wav";
+ String requestedObjectName = "tts/" + DateUtils.datePath() + "/" + task.getTaskCode() + ".wav";
ByteArrayInputStream inputStream = new ByteArrayInputStream(audioBytes);
-
+
// 使用MinioService上传
- minioService.uploadStream(bucketName, objectName, inputStream, audioBytes.length, "audio/wav");
+ String objectName = minioService.uploadStream(
+ bucketName, requestedObjectName, inputStream, audioBytes.length, "audio/wav");
// 更新任务状态
task.setStatus("2");