From 8a9d180d6ed3b5e92021210881bd30067f64759f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 12:52:17 +0000 Subject: [PATCH 1/7] feat(edit): author state transitions and behavior parameters Co-Authored-By: jason.han --- api/proto/sysml.pb.go | 990 +++++----- api/proto/sysml.proto | 25 +- .../unreleased/authoring-transitions.added.md | 1 + client/java/README.md | 8 +- .../org/openmbee/opensysml/Capabilities.java | 3 + .../java/org/openmbee/opensysml/Edit.java | 51 + .../java/org/openmbee/opensysml/Model.java | 8 + .../openmbee/opensysml/internal/Protos.java | 12 + .../opensysml/proto/AddSatisfyEdit.java | 18 +- .../proto/AddSatisfyEditOrBuilder.java | 4 +- .../opensysml/proto/AddTransitionEdit.java | 1605 +++++++++++++++++ .../proto/AddTransitionEditOrBuilder.java | 162 ++ .../opensysml/proto/EditOperation.java | 208 +++ .../proto/EditOperationOrBuilder.java | 15 + .../org/openmbee/opensysml/proto/Sysml.java | 772 ++++---- .../opensysml/ApiIntegrationTest.java | 1 + .../openmbee/opensysml/PublicTypesTest.java | 21 + .../opensysml/internal/EditProtosTest.java | 23 + .../openmbee/opensysml/conformance/Api.java | 19 + client/node/src/generated/sysml_pb.ts | 198 +- client/opensysml/README.md | 4 +- client/opensysml/authoring.go | 47 +- client/opensysml/authoring_internal_test.go | 35 + client/opensysml/types.go | 1 + client/python/README.md | 15 +- client/python/opensysml/capabilities.py | 2 + client/python/opensysml/connection.py | 28 +- client/python/opensysml/edit.py | 149 +- client/python/opensysml/proto/sysml_pb2.py | 278 +-- client/python/opensysml/proto/sysml_pb2.pyi | 26 +- client/python/tests/test_edit.py | 216 ++- client/python/tests/test_wire_compat.py | 5 + .../rust/conformance/sysml.descriptor.binpb | Bin 126206 -> 127478 bytes .../rust/opensysml/src/proto/sysml/sysml.rs | 36 +- .../fixtures/apply_edits_transition.sysml | 8 + conformance/scenarios/08-apply-edits.json | 49 + docs/guide/09-clients.md | 6 + docs/project/spec-compliance.md | 4 +- docs/reference/api.md | 17 +- docs/reference/service-transports.md | 2 +- internal/check/edit/add.go | 4 +- internal/check/edit/edit.go | 27 + internal/check/edit/substate_test.go | 73 + internal/check/edit/transition.go | 184 ++ internal/check/edit/transition_test.go | 122 ++ internal/frontend/grpc/authoring_test.go | 42 +- internal/frontend/grpc/capability_test.go | 6 + internal/frontend/grpc/edit.go | 23 +- internal/frontend/grpc/service.go | 4 + internal/syntax/parser/defusage.go | 4 + internal/syntax/parser/defusage_test.go | 24 + .../top_level_redefinition_value_test.go | 54 + tests/grpc/conformance_test.go | 13 + 53 files changed, 4594 insertions(+), 1058 deletions(-) create mode 100644 changes/unreleased/authoring-transitions.added.md create mode 100644 client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEdit.java create mode 100644 client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEditOrBuilder.java create mode 100644 conformance/fixtures/apply_edits_transition.sysml create mode 100644 internal/check/edit/substate_test.go create mode 100644 internal/check/edit/transition.go create mode 100644 internal/check/edit/transition_test.go create mode 100644 tests/export/top_level_redefinition_value_test.go diff --git a/api/proto/sysml.pb.go b/api/proto/sysml.pb.go index 7d251ebc18..b3ef462d15 100644 --- a/api/proto/sysml.pb.go +++ b/api/proto/sysml.pb.go @@ -4073,6 +4073,7 @@ type EditOperation struct { // *EditOperation_AddConnection // *EditOperation_AddSatisfy // *EditOperation_AddRequirementConstraint + // *EditOperation_AddTransition Operation isEditOperation_Operation `protobuf_oneof:"operation"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -4187,6 +4188,15 @@ func (x *EditOperation) GetAddRequirementConstraint() *AddRequirementConstraintE return nil } +func (x *EditOperation) GetAddTransition() *AddTransitionEdit { + if x != nil { + if x, ok := x.Operation.(*EditOperation_AddTransition); ok { + return x.AddTransition + } + } + return nil +} + type isEditOperation_Operation interface { isEditOperation_Operation() } @@ -4223,6 +4233,10 @@ type EditOperation_AddRequirementConstraint struct { AddRequirementConstraint *AddRequirementConstraintEdit `protobuf:"bytes,8,opt,name=add_requirement_constraint,json=addRequirementConstraint,proto3,oneof"` } +type EditOperation_AddTransition struct { + AddTransition *AddTransitionEdit `protobuf:"bytes,9,opt,name=add_transition,json=addTransition,proto3,oneof"` +} + func (*EditOperation_SetValue) isEditOperation_Operation() {} func (*EditOperation_Rename) isEditOperation_Operation() {} @@ -4239,6 +4253,8 @@ func (*EditOperation_AddSatisfy) isEditOperation_Operation() {} func (*EditOperation_AddRequirementConstraint) isEditOperation_Operation() {} +func (*EditOperation_AddTransition) isEditOperation_Operation() {} + // AddMemberEdit inserts a declaration into a namespace or the document root. type AddMemberEdit struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -4375,10 +4391,10 @@ func (x *AddMemberEdit) GetDirection() string { return "" } -// AddSatisfyEdit inserts a satisfy usage into a body that admits behavior usages. +// AddSatisfyEdit inserts a satisfy usage into any package or body that admits behavior usages. type AddSatisfyEdit struct { state protoimpl.MessageState `protogen:"open.v1"` - // Namespace FQN receiving the usage. + // Body receiving the usage. Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` // Requirement feature reference. Requirement string `protobuf:"bytes,2,opt,name=requirement,proto3" json:"requirement,omitempty"` @@ -4530,6 +4546,115 @@ func (x *AddRequirementConstraintEdit) GetName() string { return "" } +// AddTransitionEdit inserts a transition usage, or an entry transition, into a state body. +type AddTransitionEdit struct { + state protoimpl.MessageState `protogen:"open.v1"` + // State body receiving the transition. + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + // Optional transition name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Source feature reference; empty only for an entry transition. + Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"` + // Target feature reference. + Target string `protobuf:"bytes,4,opt,name=target,proto3" json:"target,omitempty"` + // Optional text after `accept`. + Trigger string `protobuf:"bytes,5,opt,name=trigger,proto3" json:"trigger,omitempty"` + // Optional boolean expression after `if`. + Guard string `protobuf:"bytes,6,opt,name=guard,proto3" json:"guard,omitempty"` + // Optional effect text after `do`. + Effect string `protobuf:"bytes,7,opt,name=effect,proto3" json:"effect,omitempty"` + // Write `entry; then ;` instead of a regular transition. + Initial bool `protobuf:"varint,8,opt,name=initial,proto3" json:"initial,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddTransitionEdit) Reset() { + *x = AddTransitionEdit{} + mi := &file_sysml_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddTransitionEdit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddTransitionEdit) ProtoMessage() {} + +func (x *AddTransitionEdit) ProtoReflect() protoreflect.Message { + mi := &file_sysml_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddTransitionEdit.ProtoReflect.Descriptor instead. +func (*AddTransitionEdit) Descriptor() ([]byte, []int) { + return file_sysml_proto_rawDescGZIP(), []int{48} +} + +func (x *AddTransitionEdit) GetOwner() string { + if x != nil { + return x.Owner + } + return "" +} + +func (x *AddTransitionEdit) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AddTransitionEdit) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *AddTransitionEdit) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +func (x *AddTransitionEdit) GetTrigger() string { + if x != nil { + return x.Trigger + } + return "" +} + +func (x *AddTransitionEdit) GetGuard() string { + if x != nil { + return x.Guard + } + return "" +} + +func (x *AddTransitionEdit) GetEffect() string { + if x != nil { + return x.Effect + } + return "" +} + +func (x *AddTransitionEdit) GetInitial() bool { + if x != nil { + return x.Initial + } + return false +} + // AddConnectionEdit inserts a usage whose ends connect two features. type AddConnectionEdit struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -4552,7 +4677,7 @@ type AddConnectionEdit struct { func (x *AddConnectionEdit) Reset() { *x = AddConnectionEdit{} - mi := &file_sysml_proto_msgTypes[48] + mi := &file_sysml_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4564,7 +4689,7 @@ func (x *AddConnectionEdit) String() string { func (*AddConnectionEdit) ProtoMessage() {} func (x *AddConnectionEdit) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[48] + mi := &file_sysml_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4577,7 +4702,7 @@ func (x *AddConnectionEdit) ProtoReflect() protoreflect.Message { // Deprecated: Use AddConnectionEdit.ProtoReflect.Descriptor instead. func (*AddConnectionEdit) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{48} + return file_sysml_proto_rawDescGZIP(), []int{49} } func (x *AddConnectionEdit) GetOwner() string { @@ -4635,7 +4760,7 @@ type DeleteEdit struct { func (x *DeleteEdit) Reset() { *x = DeleteEdit{} - mi := &file_sysml_proto_msgTypes[49] + mi := &file_sysml_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4647,7 +4772,7 @@ func (x *DeleteEdit) String() string { func (*DeleteEdit) ProtoMessage() {} func (x *DeleteEdit) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[49] + mi := &file_sysml_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4660,7 +4785,7 @@ func (x *DeleteEdit) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteEdit.ProtoReflect.Descriptor instead. func (*DeleteEdit) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{49} + return file_sysml_proto_rawDescGZIP(), []int{50} } func (x *DeleteEdit) GetTarget() string { @@ -4693,7 +4818,7 @@ type MoveEdit struct { func (x *MoveEdit) Reset() { *x = MoveEdit{} - mi := &file_sysml_proto_msgTypes[50] + mi := &file_sysml_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4705,7 +4830,7 @@ func (x *MoveEdit) String() string { func (*MoveEdit) ProtoMessage() {} func (x *MoveEdit) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[50] + mi := &file_sysml_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4718,7 +4843,7 @@ func (x *MoveEdit) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveEdit.ProtoReflect.Descriptor instead. func (*MoveEdit) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{50} + return file_sysml_proto_rawDescGZIP(), []int{51} } func (x *MoveEdit) GetTarget() string { @@ -4750,7 +4875,7 @@ type SetValueEdit struct { func (x *SetValueEdit) Reset() { *x = SetValueEdit{} - mi := &file_sysml_proto_msgTypes[51] + mi := &file_sysml_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4762,7 +4887,7 @@ func (x *SetValueEdit) String() string { func (*SetValueEdit) ProtoMessage() {} func (x *SetValueEdit) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[51] + mi := &file_sysml_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4775,7 +4900,7 @@ func (x *SetValueEdit) ProtoReflect() protoreflect.Message { // Deprecated: Use SetValueEdit.ProtoReflect.Descriptor instead. func (*SetValueEdit) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{51} + return file_sysml_proto_rawDescGZIP(), []int{52} } func (x *SetValueEdit) GetTarget() string { @@ -4806,7 +4931,7 @@ type RenameEdit struct { func (x *RenameEdit) Reset() { *x = RenameEdit{} - mi := &file_sysml_proto_msgTypes[52] + mi := &file_sysml_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4818,7 +4943,7 @@ func (x *RenameEdit) String() string { func (*RenameEdit) ProtoMessage() {} func (x *RenameEdit) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[52] + mi := &file_sysml_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4831,7 +4956,7 @@ func (x *RenameEdit) ProtoReflect() protoreflect.Message { // Deprecated: Use RenameEdit.ProtoReflect.Descriptor instead. func (*RenameEdit) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{52} + return file_sysml_proto_rawDescGZIP(), []int{53} } func (x *RenameEdit) GetTarget() string { @@ -4893,7 +5018,7 @@ type ApplyEditsResponse struct { func (x *ApplyEditsResponse) Reset() { *x = ApplyEditsResponse{} - mi := &file_sysml_proto_msgTypes[53] + mi := &file_sysml_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4905,7 +5030,7 @@ func (x *ApplyEditsResponse) String() string { func (*ApplyEditsResponse) ProtoMessage() {} func (x *ApplyEditsResponse) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[53] + mi := &file_sysml_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4918,7 +5043,7 @@ func (x *ApplyEditsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyEditsResponse.ProtoReflect.Descriptor instead. func (*ApplyEditsResponse) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{53} + return file_sysml_proto_rawDescGZIP(), []int{54} } func (x *ApplyEditsResponse) GetContent() string { @@ -4992,7 +5117,7 @@ type EditedDocument struct { func (x *EditedDocument) Reset() { *x = EditedDocument{} - mi := &file_sysml_proto_msgTypes[54] + mi := &file_sysml_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5004,7 +5129,7 @@ func (x *EditedDocument) String() string { func (*EditedDocument) ProtoMessage() {} func (x *EditedDocument) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[54] + mi := &file_sysml_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5017,7 +5142,7 @@ func (x *EditedDocument) ProtoReflect() protoreflect.Message { // Deprecated: Use EditedDocument.ProtoReflect.Descriptor instead. func (*EditedDocument) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{54} + return file_sysml_proto_rawDescGZIP(), []int{55} } func (x *EditedDocument) GetName() string { @@ -5048,7 +5173,7 @@ type Referrer struct { func (x *Referrer) Reset() { *x = Referrer{} - mi := &file_sysml_proto_msgTypes[55] + mi := &file_sysml_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5060,7 +5185,7 @@ func (x *Referrer) String() string { func (*Referrer) ProtoMessage() {} func (x *Referrer) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[55] + mi := &file_sysml_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5073,7 +5198,7 @@ func (x *Referrer) ProtoReflect() protoreflect.Message { // Deprecated: Use Referrer.ProtoReflect.Descriptor instead. func (*Referrer) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{55} + return file_sysml_proto_rawDescGZIP(), []int{56} } func (x *Referrer) GetName() string { @@ -5112,7 +5237,7 @@ type AppliedEdit struct { func (x *AppliedEdit) Reset() { *x = AppliedEdit{} - mi := &file_sysml_proto_msgTypes[56] + mi := &file_sysml_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5124,7 +5249,7 @@ func (x *AppliedEdit) String() string { func (*AppliedEdit) ProtoMessage() {} func (x *AppliedEdit) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[56] + mi := &file_sysml_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5137,7 +5262,7 @@ func (x *AppliedEdit) ProtoReflect() protoreflect.Message { // Deprecated: Use AppliedEdit.ProtoReflect.Descriptor instead. func (*AppliedEdit) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{56} + return file_sysml_proto_rawDescGZIP(), []int{57} } func (x *AppliedEdit) GetOperationIndex() int32 { @@ -5214,7 +5339,7 @@ type SymbolInfo struct { func (x *SymbolInfo) Reset() { *x = SymbolInfo{} - mi := &file_sysml_proto_msgTypes[57] + mi := &file_sysml_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5226,7 +5351,7 @@ func (x *SymbolInfo) String() string { func (*SymbolInfo) ProtoMessage() {} func (x *SymbolInfo) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[57] + mi := &file_sysml_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5239,7 +5364,7 @@ func (x *SymbolInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SymbolInfo.ProtoReflect.Descriptor instead. func (*SymbolInfo) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{57} + return file_sysml_proto_rawDescGZIP(), []int{58} } func (x *SymbolInfo) GetId() string { @@ -5329,7 +5454,7 @@ type Specialization struct { func (x *Specialization) Reset() { *x = Specialization{} - mi := &file_sysml_proto_msgTypes[58] + mi := &file_sysml_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5341,7 +5466,7 @@ func (x *Specialization) String() string { func (*Specialization) ProtoMessage() {} func (x *Specialization) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[58] + mi := &file_sysml_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5354,7 +5479,7 @@ func (x *Specialization) ProtoReflect() protoreflect.Message { // Deprecated: Use Specialization.ProtoReflect.Descriptor instead. func (*Specialization) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{58} + return file_sysml_proto_rawDescGZIP(), []int{59} } func (x *Specialization) GetKind() string { @@ -5411,7 +5536,7 @@ type TypeInfo struct { func (x *TypeInfo) Reset() { *x = TypeInfo{} - mi := &file_sysml_proto_msgTypes[59] + mi := &file_sysml_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5423,7 +5548,7 @@ func (x *TypeInfo) String() string { func (*TypeInfo) ProtoMessage() {} func (x *TypeInfo) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[59] + mi := &file_sysml_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5436,7 +5561,7 @@ func (x *TypeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeInfo.ProtoReflect.Descriptor instead. func (*TypeInfo) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{59} + return file_sysml_proto_rawDescGZIP(), []int{60} } func (x *TypeInfo) GetDeclared() string { @@ -5500,7 +5625,7 @@ type MultiplicityInfo struct { func (x *MultiplicityInfo) Reset() { *x = MultiplicityInfo{} - mi := &file_sysml_proto_msgTypes[60] + mi := &file_sysml_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5512,7 +5637,7 @@ func (x *MultiplicityInfo) String() string { func (*MultiplicityInfo) ProtoMessage() {} func (x *MultiplicityInfo) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[60] + mi := &file_sysml_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5525,7 +5650,7 @@ func (x *MultiplicityInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiplicityInfo.ProtoReflect.Descriptor instead. func (*MultiplicityInfo) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{60} + return file_sysml_proto_rawDescGZIP(), []int{61} } func (x *MultiplicityInfo) GetLower() string { @@ -5555,7 +5680,7 @@ type AttributeInfo struct { func (x *AttributeInfo) Reset() { *x = AttributeInfo{} - mi := &file_sysml_proto_msgTypes[61] + mi := &file_sysml_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5567,7 +5692,7 @@ func (x *AttributeInfo) String() string { func (*AttributeInfo) ProtoMessage() {} func (x *AttributeInfo) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[61] + mi := &file_sysml_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5580,7 +5705,7 @@ func (x *AttributeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeInfo.ProtoReflect.Descriptor instead. func (*AttributeInfo) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{61} + return file_sysml_proto_rawDescGZIP(), []int{62} } func (x *AttributeInfo) GetName() string { @@ -5644,7 +5769,7 @@ type Value struct { func (x *Value) Reset() { *x = Value{} - mi := &file_sysml_proto_msgTypes[62] + mi := &file_sysml_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5656,7 +5781,7 @@ func (x *Value) String() string { func (*Value) ProtoMessage() {} func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[62] + mi := &file_sysml_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5669,7 +5794,7 @@ func (x *Value) ProtoReflect() protoreflect.Message { // Deprecated: Use Value.ProtoReflect.Descriptor instead. func (*Value) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{62} + return file_sysml_proto_rawDescGZIP(), []int{63} } func (x *Value) GetKind() isValue_Kind { @@ -6027,7 +6152,7 @@ type Metaobject struct { func (x *Metaobject) Reset() { *x = Metaobject{} - mi := &file_sysml_proto_msgTypes[63] + mi := &file_sysml_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6039,7 +6164,7 @@ func (x *Metaobject) String() string { func (*Metaobject) ProtoMessage() {} func (x *Metaobject) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[63] + mi := &file_sysml_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6052,7 +6177,7 @@ func (x *Metaobject) ProtoReflect() protoreflect.Message { // Deprecated: Use Metaobject.ProtoReflect.Descriptor instead. func (*Metaobject) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{63} + return file_sysml_proto_rawDescGZIP(), []int{64} } func (x *Metaobject) GetElementId() string { @@ -6089,7 +6214,7 @@ type Undetermined struct { func (x *Undetermined) Reset() { *x = Undetermined{} - mi := &file_sysml_proto_msgTypes[64] + mi := &file_sysml_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6101,7 +6226,7 @@ func (x *Undetermined) String() string { func (*Undetermined) ProtoMessage() {} func (x *Undetermined) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[64] + mi := &file_sysml_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6114,7 +6239,7 @@ func (x *Undetermined) ProtoReflect() protoreflect.Message { // Deprecated: Use Undetermined.ProtoReflect.Descriptor instead. func (*Undetermined) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{64} + return file_sysml_proto_rawDescGZIP(), []int{65} } func (x *Undetermined) GetReason() string { @@ -6153,7 +6278,7 @@ type Function struct { func (x *Function) Reset() { *x = Function{} - mi := &file_sysml_proto_msgTypes[65] + mi := &file_sysml_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6165,7 +6290,7 @@ func (x *Function) String() string { func (*Function) ProtoMessage() {} func (x *Function) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[65] + mi := &file_sysml_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6178,7 +6303,7 @@ func (x *Function) ProtoReflect() protoreflect.Message { // Deprecated: Use Function.ProtoReflect.Descriptor instead. func (*Function) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{65} + return file_sysml_proto_rawDescGZIP(), []int{66} } func (x *Function) GetCalcId() string { @@ -6212,7 +6337,7 @@ type ValueSet struct { func (x *ValueSet) Reset() { *x = ValueSet{} - mi := &file_sysml_proto_msgTypes[66] + mi := &file_sysml_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6224,7 +6349,7 @@ func (x *ValueSet) String() string { func (*ValueSet) ProtoMessage() {} func (x *ValueSet) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[66] + mi := &file_sysml_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6237,7 +6362,7 @@ func (x *ValueSet) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueSet.ProtoReflect.Descriptor instead. func (*ValueSet) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{66} + return file_sysml_proto_rawDescGZIP(), []int{67} } func (x *ValueSet) GetElements() []*Value { @@ -6264,7 +6389,7 @@ type TensorQuantity struct { func (x *TensorQuantity) Reset() { *x = TensorQuantity{} - mi := &file_sysml_proto_msgTypes[67] + mi := &file_sysml_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6276,7 +6401,7 @@ func (x *TensorQuantity) String() string { func (*TensorQuantity) ProtoMessage() {} func (x *TensorQuantity) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[67] + mi := &file_sysml_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6289,7 +6414,7 @@ func (x *TensorQuantity) ProtoReflect() protoreflect.Message { // Deprecated: Use TensorQuantity.ProtoReflect.Descriptor instead. func (*TensorQuantity) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{67} + return file_sysml_proto_rawDescGZIP(), []int{68} } func (x *TensorQuantity) GetDimensions() []int64 { @@ -6321,7 +6446,7 @@ type Array struct { func (x *Array) Reset() { *x = Array{} - mi := &file_sysml_proto_msgTypes[68] + mi := &file_sysml_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6333,7 +6458,7 @@ func (x *Array) String() string { func (*Array) ProtoMessage() {} func (x *Array) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[68] + mi := &file_sysml_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6346,7 +6471,7 @@ func (x *Array) ProtoReflect() protoreflect.Message { // Deprecated: Use Array.ProtoReflect.Descriptor instead. func (*Array) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{68} + return file_sysml_proto_rawDescGZIP(), []int{69} } func (x *Array) GetDimensions() []int64 { @@ -6376,7 +6501,7 @@ type Vector struct { func (x *Vector) Reset() { *x = Vector{} - mi := &file_sysml_proto_msgTypes[69] + mi := &file_sysml_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6388,7 +6513,7 @@ func (x *Vector) String() string { func (*Vector) ProtoMessage() {} func (x *Vector) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[69] + mi := &file_sysml_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6401,7 +6526,7 @@ func (x *Vector) ProtoReflect() protoreflect.Message { // Deprecated: Use Vector.ProtoReflect.Descriptor instead. func (*Vector) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{69} + return file_sysml_proto_rawDescGZIP(), []int{70} } func (x *Vector) GetComponents() []*Value { @@ -6424,7 +6549,7 @@ type VectorQuantity struct { func (x *VectorQuantity) Reset() { *x = VectorQuantity{} - mi := &file_sysml_proto_msgTypes[70] + mi := &file_sysml_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6436,7 +6561,7 @@ func (x *VectorQuantity) String() string { func (*VectorQuantity) ProtoMessage() {} func (x *VectorQuantity) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[70] + mi := &file_sysml_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6449,7 +6574,7 @@ func (x *VectorQuantity) ProtoReflect() protoreflect.Message { // Deprecated: Use VectorQuantity.ProtoReflect.Descriptor instead. func (*VectorQuantity) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{70} + return file_sysml_proto_rawDescGZIP(), []int{71} } func (x *VectorQuantity) GetComponents() []*Quantity { @@ -6471,7 +6596,7 @@ type Complex struct { func (x *Complex) Reset() { *x = Complex{} - mi := &file_sysml_proto_msgTypes[71] + mi := &file_sysml_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6483,7 +6608,7 @@ func (x *Complex) String() string { func (*Complex) ProtoMessage() {} func (x *Complex) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[71] + mi := &file_sysml_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6496,7 +6621,7 @@ func (x *Complex) ProtoReflect() protoreflect.Message { // Deprecated: Use Complex.ProtoReflect.Descriptor instead. func (*Complex) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{71} + return file_sysml_proto_rawDescGZIP(), []int{72} } func (x *Complex) GetReal() float64 { @@ -6533,7 +6658,7 @@ type EnumLiteral struct { func (x *EnumLiteral) Reset() { *x = EnumLiteral{} - mi := &file_sysml_proto_msgTypes[72] + mi := &file_sysml_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6545,7 +6670,7 @@ func (x *EnumLiteral) String() string { func (*EnumLiteral) ProtoMessage() {} func (x *EnumLiteral) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[72] + mi := &file_sysml_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6558,7 +6683,7 @@ func (x *EnumLiteral) ProtoReflect() protoreflect.Message { // Deprecated: Use EnumLiteral.ProtoReflect.Descriptor instead. func (*EnumLiteral) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{72} + return file_sysml_proto_rawDescGZIP(), []int{73} } func (x *EnumLiteral) GetLiteralId() string { @@ -6598,7 +6723,7 @@ type ValueSequence struct { func (x *ValueSequence) Reset() { *x = ValueSequence{} - mi := &file_sysml_proto_msgTypes[73] + mi := &file_sysml_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6610,7 +6735,7 @@ func (x *ValueSequence) String() string { func (*ValueSequence) ProtoMessage() {} func (x *ValueSequence) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[73] + mi := &file_sysml_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6623,7 +6748,7 @@ func (x *ValueSequence) ProtoReflect() protoreflect.Message { // Deprecated: Use ValueSequence.ProtoReflect.Descriptor instead. func (*ValueSequence) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{73} + return file_sysml_proto_rawDescGZIP(), []int{74} } func (x *ValueSequence) GetElements() []*Value { @@ -6657,7 +6782,7 @@ type Quantity struct { func (x *Quantity) Reset() { *x = Quantity{} - mi := &file_sysml_proto_msgTypes[74] + mi := &file_sysml_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6669,7 +6794,7 @@ func (x *Quantity) String() string { func (*Quantity) ProtoMessage() {} func (x *Quantity) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[74] + mi := &file_sysml_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6682,7 +6807,7 @@ func (x *Quantity) ProtoReflect() protoreflect.Message { // Deprecated: Use Quantity.ProtoReflect.Descriptor instead. func (*Quantity) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{74} + return file_sysml_proto_rawDescGZIP(), []int{75} } func (x *Quantity) GetMagnitude() isQuantity_Magnitude { @@ -6768,7 +6893,7 @@ type MeasurementRef struct { func (x *MeasurementRef) Reset() { *x = MeasurementRef{} - mi := &file_sysml_proto_msgTypes[75] + mi := &file_sysml_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6780,7 +6905,7 @@ func (x *MeasurementRef) String() string { func (*MeasurementRef) ProtoMessage() {} func (x *MeasurementRef) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[75] + mi := &file_sysml_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6793,7 +6918,7 @@ func (x *MeasurementRef) ProtoReflect() protoreflect.Message { // Deprecated: Use MeasurementRef.ProtoReflect.Descriptor instead. func (*MeasurementRef) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{75} + return file_sysml_proto_rawDescGZIP(), []int{76} } func (x *MeasurementRef) GetUnit() string { @@ -6832,7 +6957,7 @@ type UnitTerm struct { func (x *UnitTerm) Reset() { *x = UnitTerm{} - mi := &file_sysml_proto_msgTypes[76] + mi := &file_sysml_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6844,7 +6969,7 @@ func (x *UnitTerm) String() string { func (*UnitTerm) ProtoMessage() {} func (x *UnitTerm) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[76] + mi := &file_sysml_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6857,7 +6982,7 @@ func (x *UnitTerm) ProtoReflect() protoreflect.Message { // Deprecated: Use UnitTerm.ProtoReflect.Descriptor instead. func (*UnitTerm) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{76} + return file_sysml_proto_rawDescGZIP(), []int{77} } func (x *UnitTerm) GetScaleNum() float64 { @@ -6893,7 +7018,7 @@ type UnitFactor struct { func (x *UnitFactor) Reset() { *x = UnitFactor{} - mi := &file_sysml_proto_msgTypes[77] + mi := &file_sysml_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6905,7 +7030,7 @@ func (x *UnitFactor) String() string { func (*UnitFactor) ProtoMessage() {} func (x *UnitFactor) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[77] + mi := &file_sysml_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6918,7 +7043,7 @@ func (x *UnitFactor) ProtoReflect() protoreflect.Message { // Deprecated: Use UnitFactor.ProtoReflect.Descriptor instead. func (*UnitFactor) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{77} + return file_sysml_proto_rawDescGZIP(), []int{78} } func (x *UnitFactor) GetUnitId() string { @@ -6950,7 +7075,7 @@ type Diagnostic struct { func (x *Diagnostic) Reset() { *x = Diagnostic{} - mi := &file_sysml_proto_msgTypes[78] + mi := &file_sysml_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6962,7 +7087,7 @@ func (x *Diagnostic) String() string { func (*Diagnostic) ProtoMessage() {} func (x *Diagnostic) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[78] + mi := &file_sysml_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6975,7 +7100,7 @@ func (x *Diagnostic) ProtoReflect() protoreflect.Message { // Deprecated: Use Diagnostic.ProtoReflect.Descriptor instead. func (*Diagnostic) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{78} + return file_sysml_proto_rawDescGZIP(), []int{79} } func (x *Diagnostic) GetSeverity() string { @@ -7020,7 +7145,7 @@ type Span struct { func (x *Span) Reset() { *x = Span{} - mi := &file_sysml_proto_msgTypes[79] + mi := &file_sysml_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7032,7 +7157,7 @@ func (x *Span) String() string { func (*Span) ProtoMessage() {} func (x *Span) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[79] + mi := &file_sysml_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7045,7 +7170,7 @@ func (x *Span) ProtoReflect() protoreflect.Message { // Deprecated: Use Span.ProtoReflect.Descriptor instead. func (*Span) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{79} + return file_sysml_proto_rawDescGZIP(), []int{80} } func (x *Span) GetFile() string { @@ -7093,7 +7218,7 @@ type ServerInfoRequest struct { func (x *ServerInfoRequest) Reset() { *x = ServerInfoRequest{} - mi := &file_sysml_proto_msgTypes[80] + mi := &file_sysml_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7105,7 +7230,7 @@ func (x *ServerInfoRequest) String() string { func (*ServerInfoRequest) ProtoMessage() {} func (x *ServerInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[80] + mi := &file_sysml_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7118,7 +7243,7 @@ func (x *ServerInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerInfoRequest.ProtoReflect.Descriptor instead. func (*ServerInfoRequest) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{80} + return file_sysml_proto_rawDescGZIP(), []int{81} } // ServerInfoResponse describes the running service. @@ -7249,7 +7374,7 @@ type ServerInfoResponse struct { func (x *ServerInfoResponse) Reset() { *x = ServerInfoResponse{} - mi := &file_sysml_proto_msgTypes[81] + mi := &file_sysml_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7261,7 +7386,7 @@ func (x *ServerInfoResponse) String() string { func (*ServerInfoResponse) ProtoMessage() {} func (x *ServerInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[81] + mi := &file_sysml_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7274,7 +7399,7 @@ func (x *ServerInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerInfoResponse.ProtoReflect.Descriptor instead. func (*ServerInfoResponse) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{81} + return file_sysml_proto_rawDescGZIP(), []int{82} } func (x *ServerInfoResponse) GetVersion() string { @@ -7304,7 +7429,7 @@ type QueryRequest struct { func (x *QueryRequest) Reset() { *x = QueryRequest{} - mi := &file_sysml_proto_msgTypes[82] + mi := &file_sysml_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7316,7 +7441,7 @@ func (x *QueryRequest) String() string { func (*QueryRequest) ProtoMessage() {} func (x *QueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[82] + mi := &file_sysml_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7329,7 +7454,7 @@ func (x *QueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRequest.ProtoReflect.Descriptor instead. func (*QueryRequest) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{82} + return file_sysml_proto_rawDescGZIP(), []int{83} } func (x *QueryRequest) GetModelHash() string { @@ -7366,7 +7491,7 @@ type QueryResponse struct { func (x *QueryResponse) Reset() { *x = QueryResponse{} - mi := &file_sysml_proto_msgTypes[83] + mi := &file_sysml_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7378,7 +7503,7 @@ func (x *QueryResponse) String() string { func (*QueryResponse) ProtoMessage() {} func (x *QueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[83] + mi := &file_sysml_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7391,7 +7516,7 @@ func (x *QueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryResponse.ProtoReflect.Descriptor instead. func (*QueryResponse) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{83} + return file_sysml_proto_rawDescGZIP(), []int{84} } func (x *QueryResponse) GetElements() []*QueryResultElement { @@ -7421,7 +7546,7 @@ type Query struct { func (x *Query) Reset() { *x = Query{} - mi := &file_sysml_proto_msgTypes[84] + mi := &file_sysml_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7433,7 +7558,7 @@ func (x *Query) String() string { func (*Query) ProtoMessage() {} func (x *Query) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[84] + mi := &file_sysml_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7446,7 +7571,7 @@ func (x *Query) ProtoReflect() protoreflect.Message { // Deprecated: Use Query.ProtoReflect.Descriptor instead. func (*Query) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{84} + return file_sysml_proto_rawDescGZIP(), []int{85} } func (x *Query) GetScope() []string { @@ -7485,7 +7610,7 @@ type Constraint struct { func (x *Constraint) Reset() { *x = Constraint{} - mi := &file_sysml_proto_msgTypes[85] + mi := &file_sysml_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7497,7 +7622,7 @@ func (x *Constraint) String() string { func (*Constraint) ProtoMessage() {} func (x *Constraint) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[85] + mi := &file_sysml_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7510,7 +7635,7 @@ func (x *Constraint) ProtoReflect() protoreflect.Message { // Deprecated: Use Constraint.ProtoReflect.Descriptor instead. func (*Constraint) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{85} + return file_sysml_proto_rawDescGZIP(), []int{86} } func (x *Constraint) GetConstraint() isConstraint_Constraint { @@ -7573,7 +7698,7 @@ type PrimitiveConstraint struct { func (x *PrimitiveConstraint) Reset() { *x = PrimitiveConstraint{} - mi := &file_sysml_proto_msgTypes[86] + mi := &file_sysml_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7585,7 +7710,7 @@ func (x *PrimitiveConstraint) String() string { func (*PrimitiveConstraint) ProtoMessage() {} func (x *PrimitiveConstraint) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[86] + mi := &file_sysml_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7598,7 +7723,7 @@ func (x *PrimitiveConstraint) ProtoReflect() protoreflect.Message { // Deprecated: Use PrimitiveConstraint.ProtoReflect.Descriptor instead. func (*PrimitiveConstraint) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{86} + return file_sysml_proto_rawDescGZIP(), []int{87} } func (x *PrimitiveConstraint) GetInverse() bool { @@ -7641,7 +7766,7 @@ type CompositeConstraint struct { func (x *CompositeConstraint) Reset() { *x = CompositeConstraint{} - mi := &file_sysml_proto_msgTypes[87] + mi := &file_sysml_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7653,7 +7778,7 @@ func (x *CompositeConstraint) String() string { func (*CompositeConstraint) ProtoMessage() {} func (x *CompositeConstraint) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[87] + mi := &file_sysml_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7666,7 +7791,7 @@ func (x *CompositeConstraint) ProtoReflect() protoreflect.Message { // Deprecated: Use CompositeConstraint.ProtoReflect.Descriptor instead. func (*CompositeConstraint) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{87} + return file_sysml_proto_rawDescGZIP(), []int{88} } func (x *CompositeConstraint) GetOperator() CompositeOperator { @@ -7698,7 +7823,7 @@ type QueryResultElement struct { func (x *QueryResultElement) Reset() { *x = QueryResultElement{} - mi := &file_sysml_proto_msgTypes[88] + mi := &file_sysml_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7710,7 +7835,7 @@ func (x *QueryResultElement) String() string { func (*QueryResultElement) ProtoMessage() {} func (x *QueryResultElement) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[88] + mi := &file_sysml_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7723,7 +7848,7 @@ func (x *QueryResultElement) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryResultElement.ProtoReflect.Descriptor instead. func (*QueryResultElement) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{88} + return file_sysml_proto_rawDescGZIP(), []int{89} } func (x *QueryResultElement) GetId() string { @@ -7768,7 +7893,7 @@ type SweepRange struct { func (x *SweepRange) Reset() { *x = SweepRange{} - mi := &file_sysml_proto_msgTypes[89] + mi := &file_sysml_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7780,7 +7905,7 @@ func (x *SweepRange) String() string { func (*SweepRange) ProtoMessage() {} func (x *SweepRange) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[89] + mi := &file_sysml_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7793,7 +7918,7 @@ func (x *SweepRange) ProtoReflect() protoreflect.Message { // Deprecated: Use SweepRange.ProtoReflect.Descriptor instead. func (*SweepRange) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{89} + return file_sysml_proto_rawDescGZIP(), []int{90} } func (x *SweepRange) GetParameter() string { @@ -7858,7 +7983,7 @@ type RunSweepRequest struct { func (x *RunSweepRequest) Reset() { *x = RunSweepRequest{} - mi := &file_sysml_proto_msgTypes[90] + mi := &file_sysml_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7870,7 +7995,7 @@ func (x *RunSweepRequest) String() string { func (*RunSweepRequest) ProtoMessage() {} func (x *RunSweepRequest) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[90] + mi := &file_sysml_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7883,7 +8008,7 @@ func (x *RunSweepRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunSweepRequest.ProtoReflect.Descriptor instead. func (*RunSweepRequest) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{90} + return file_sysml_proto_rawDescGZIP(), []int{91} } func (x *RunSweepRequest) GetModelHash() string { @@ -7977,7 +8102,7 @@ type SweepRow struct { func (x *SweepRow) Reset() { *x = SweepRow{} - mi := &file_sysml_proto_msgTypes[91] + mi := &file_sysml_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7989,7 +8114,7 @@ func (x *SweepRow) String() string { func (*SweepRow) ProtoMessage() {} func (x *SweepRow) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[91] + mi := &file_sysml_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8002,7 +8127,7 @@ func (x *SweepRow) ProtoReflect() protoreflect.Message { // Deprecated: Use SweepRow.ProtoReflect.Descriptor instead. func (*SweepRow) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{91} + return file_sysml_proto_rawDescGZIP(), []int{92} } func (x *SweepRow) GetInputs() []*CalcOutput { @@ -8088,7 +8213,7 @@ type RunSweepResponse struct { func (x *RunSweepResponse) Reset() { *x = RunSweepResponse{} - mi := &file_sysml_proto_msgTypes[92] + mi := &file_sysml_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8100,7 +8225,7 @@ func (x *RunSweepResponse) String() string { func (*RunSweepResponse) ProtoMessage() {} func (x *RunSweepResponse) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[92] + mi := &file_sysml_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8113,7 +8238,7 @@ func (x *RunSweepResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunSweepResponse.ProtoReflect.Descriptor instead. func (*RunSweepResponse) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{92} + return file_sysml_proto_rawDescGZIP(), []int{93} } func (x *RunSweepResponse) GetRows() []*SweepRow { @@ -8214,7 +8339,7 @@ type RunDocumentQueryRequest struct { func (x *RunDocumentQueryRequest) Reset() { *x = RunDocumentQueryRequest{} - mi := &file_sysml_proto_msgTypes[93] + mi := &file_sysml_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8226,7 +8351,7 @@ func (x *RunDocumentQueryRequest) String() string { func (*RunDocumentQueryRequest) ProtoMessage() {} func (x *RunDocumentQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[93] + mi := &file_sysml_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8239,7 +8364,7 @@ func (x *RunDocumentQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunDocumentQueryRequest.ProtoReflect.Descriptor instead. func (*RunDocumentQueryRequest) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{93} + return file_sysml_proto_rawDescGZIP(), []int{94} } func (x *RunDocumentQueryRequest) GetModelHash() string { @@ -8274,7 +8399,7 @@ type DocumentQueryBinding struct { func (x *DocumentQueryBinding) Reset() { *x = DocumentQueryBinding{} - mi := &file_sysml_proto_msgTypes[94] + mi := &file_sysml_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8286,7 +8411,7 @@ func (x *DocumentQueryBinding) String() string { func (*DocumentQueryBinding) ProtoMessage() {} func (x *DocumentQueryBinding) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[94] + mi := &file_sysml_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8299,7 +8424,7 @@ func (x *DocumentQueryBinding) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentQueryBinding.ProtoReflect.Descriptor instead. func (*DocumentQueryBinding) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{94} + return file_sysml_proto_rawDescGZIP(), []int{95} } func (x *DocumentQueryBinding) GetParameter() string { @@ -8344,7 +8469,7 @@ type DocumentValue struct { func (x *DocumentValue) Reset() { *x = DocumentValue{} - mi := &file_sysml_proto_msgTypes[95] + mi := &file_sysml_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8356,7 +8481,7 @@ func (x *DocumentValue) String() string { func (*DocumentValue) ProtoMessage() {} func (x *DocumentValue) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[95] + mi := &file_sysml_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8369,7 +8494,7 @@ func (x *DocumentValue) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentValue.ProtoReflect.Descriptor instead. func (*DocumentValue) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{95} + return file_sysml_proto_rawDescGZIP(), []int{96} } func (x *DocumentValue) GetKind() isDocumentValue_Kind { @@ -8582,7 +8707,7 @@ type DocumentObject struct { func (x *DocumentObject) Reset() { *x = DocumentObject{} - mi := &file_sysml_proto_msgTypes[96] + mi := &file_sysml_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8594,7 +8719,7 @@ func (x *DocumentObject) String() string { func (*DocumentObject) ProtoMessage() {} func (x *DocumentObject) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[96] + mi := &file_sysml_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8607,7 +8732,7 @@ func (x *DocumentObject) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentObject.ProtoReflect.Descriptor instead. func (*DocumentObject) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{96} + return file_sysml_proto_rawDescGZIP(), []int{97} } func (x *DocumentObject) GetInstanceId() int64 { @@ -8662,7 +8787,7 @@ type DocumentVerdict struct { func (x *DocumentVerdict) Reset() { *x = DocumentVerdict{} - mi := &file_sysml_proto_msgTypes[97] + mi := &file_sysml_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8674,7 +8799,7 @@ func (x *DocumentVerdict) String() string { func (*DocumentVerdict) ProtoMessage() {} func (x *DocumentVerdict) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[97] + mi := &file_sysml_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8687,7 +8812,7 @@ func (x *DocumentVerdict) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentVerdict.ProtoReflect.Descriptor instead. func (*DocumentVerdict) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{97} + return file_sysml_proto_rawDescGZIP(), []int{98} } func (x *DocumentVerdict) GetAssertion() *DocumentValue { @@ -8773,7 +8898,7 @@ type DocumentState struct { func (x *DocumentState) Reset() { *x = DocumentState{} - mi := &file_sysml_proto_msgTypes[98] + mi := &file_sysml_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8785,7 +8910,7 @@ func (x *DocumentState) String() string { func (*DocumentState) ProtoMessage() {} func (x *DocumentState) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[98] + mi := &file_sysml_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8798,7 +8923,7 @@ func (x *DocumentState) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentState.ProtoReflect.Descriptor instead. func (*DocumentState) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{98} + return file_sysml_proto_rawDescGZIP(), []int{99} } func (x *DocumentState) GetObject() *DocumentObject { @@ -8888,7 +9013,7 @@ type DocumentEvent struct { func (x *DocumentEvent) Reset() { *x = DocumentEvent{} - mi := &file_sysml_proto_msgTypes[99] + mi := &file_sysml_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8900,7 +9025,7 @@ func (x *DocumentEvent) String() string { func (*DocumentEvent) ProtoMessage() {} func (x *DocumentEvent) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[99] + mi := &file_sysml_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8913,7 +9038,7 @@ func (x *DocumentEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentEvent.ProtoReflect.Descriptor instead. func (*DocumentEvent) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{99} + return file_sysml_proto_rawDescGZIP(), []int{100} } func (x *DocumentEvent) GetKind() string { @@ -9017,7 +9142,7 @@ type DocumentQueryColumn struct { func (x *DocumentQueryColumn) Reset() { *x = DocumentQueryColumn{} - mi := &file_sysml_proto_msgTypes[100] + mi := &file_sysml_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9029,7 +9154,7 @@ func (x *DocumentQueryColumn) String() string { func (*DocumentQueryColumn) ProtoMessage() {} func (x *DocumentQueryColumn) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[100] + mi := &file_sysml_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9042,7 +9167,7 @@ func (x *DocumentQueryColumn) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentQueryColumn.ProtoReflect.Descriptor instead. func (*DocumentQueryColumn) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{100} + return file_sysml_proto_rawDescGZIP(), []int{101} } func (x *DocumentQueryColumn) GetName() string { @@ -9062,7 +9187,7 @@ type DocumentQueryCell struct { func (x *DocumentQueryCell) Reset() { *x = DocumentQueryCell{} - mi := &file_sysml_proto_msgTypes[101] + mi := &file_sysml_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9074,7 +9199,7 @@ func (x *DocumentQueryCell) String() string { func (*DocumentQueryCell) ProtoMessage() {} func (x *DocumentQueryCell) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[101] + mi := &file_sysml_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9087,7 +9212,7 @@ func (x *DocumentQueryCell) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentQueryCell.ProtoReflect.Descriptor instead. func (*DocumentQueryCell) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{101} + return file_sysml_proto_rawDescGZIP(), []int{102} } func (x *DocumentQueryCell) GetValues() []*DocumentValue { @@ -9113,7 +9238,7 @@ type DocumentQueryRow struct { func (x *DocumentQueryRow) Reset() { *x = DocumentQueryRow{} - mi := &file_sysml_proto_msgTypes[102] + mi := &file_sysml_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9125,7 +9250,7 @@ func (x *DocumentQueryRow) String() string { func (*DocumentQueryRow) ProtoMessage() {} func (x *DocumentQueryRow) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[102] + mi := &file_sysml_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9138,7 +9263,7 @@ func (x *DocumentQueryRow) ProtoReflect() protoreflect.Message { // Deprecated: Use DocumentQueryRow.ProtoReflect.Descriptor instead. func (*DocumentQueryRow) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{102} + return file_sysml_proto_rawDescGZIP(), []int{103} } func (x *DocumentQueryRow) GetElement() *DocumentValue { @@ -9169,7 +9294,7 @@ type RunDocumentQueryResponse struct { func (x *RunDocumentQueryResponse) Reset() { *x = RunDocumentQueryResponse{} - mi := &file_sysml_proto_msgTypes[103] + mi := &file_sysml_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9181,7 +9306,7 @@ func (x *RunDocumentQueryResponse) String() string { func (*RunDocumentQueryResponse) ProtoMessage() {} func (x *RunDocumentQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[103] + mi := &file_sysml_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9194,7 +9319,7 @@ func (x *RunDocumentQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunDocumentQueryResponse.ProtoReflect.Descriptor instead. func (*RunDocumentQueryResponse) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{103} + return file_sysml_proto_rawDescGZIP(), []int{104} } func (x *RunDocumentQueryResponse) GetColumns() []*DocumentQueryColumn { @@ -9231,7 +9356,7 @@ type RenderDocumentRequest struct { func (x *RenderDocumentRequest) Reset() { *x = RenderDocumentRequest{} - mi := &file_sysml_proto_msgTypes[104] + mi := &file_sysml_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9243,7 +9368,7 @@ func (x *RenderDocumentRequest) String() string { func (*RenderDocumentRequest) ProtoMessage() {} func (x *RenderDocumentRequest) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[104] + mi := &file_sysml_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9256,7 +9381,7 @@ func (x *RenderDocumentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderDocumentRequest.ProtoReflect.Descriptor instead. func (*RenderDocumentRequest) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{104} + return file_sysml_proto_rawDescGZIP(), []int{105} } func (x *RenderDocumentRequest) GetModelHash() string { @@ -9293,7 +9418,7 @@ type RenderDocumentResponse struct { func (x *RenderDocumentResponse) Reset() { *x = RenderDocumentResponse{} - mi := &file_sysml_proto_msgTypes[105] + mi := &file_sysml_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9305,7 +9430,7 @@ func (x *RenderDocumentResponse) String() string { func (*RenderDocumentResponse) ProtoMessage() {} func (x *RenderDocumentResponse) ProtoReflect() protoreflect.Message { - mi := &file_sysml_proto_msgTypes[105] + mi := &file_sysml_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9318,7 +9443,7 @@ func (x *RenderDocumentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderDocumentResponse.ProtoReflect.Descriptor instead. func (*RenderDocumentResponse) Descriptor() ([]byte, []int) { - return file_sysml_proto_rawDescGZIP(), []int{105} + return file_sysml_proto_rawDescGZIP(), []int{106} } func (x *RenderDocumentResponse) GetMarkdown() string { @@ -9654,7 +9779,7 @@ const file_sysml_proto_rawDesc = "" + "operations\x18\x02 \x03(\v2\x14.sysml.EditOperationR\n" + "operations\x12\x1a\n" + "\bdocument\x18\x03 \x01(\tR\bdocument\x12)\n" + - "\x10accept_documents\x18\x04 \x01(\bR\x0facceptDocuments\"\xea\x03\n" + + "\x10accept_documents\x18\x04 \x01(\bR\x0facceptDocuments\"\xad\x04\n" + "\rEditOperation\x122\n" + "\tset_value\x18\x01 \x01(\v2\x13.sysml.SetValueEditH\x00R\bsetValue\x12+\n" + "\x06rename\x18\x02 \x01(\v2\x11.sysml.RenameEditH\x00R\x06rename\x125\n" + @@ -9665,7 +9790,8 @@ const file_sysml_proto_rawDesc = "" + "\x0eadd_connection\x18\x06 \x01(\v2\x18.sysml.AddConnectionEditH\x00R\raddConnection\x128\n" + "\vadd_satisfy\x18\a \x01(\v2\x15.sysml.AddSatisfyEditH\x00R\n" + "addSatisfy\x12c\n" + - "\x1aadd_requirement_constraint\x18\b \x01(\v2#.sysml.AddRequirementConstraintEditH\x00R\x18addRequirementConstraintB\v\n" + + "\x1aadd_requirement_constraint\x18\b \x01(\v2#.sysml.AddRequirementConstraintEditH\x00R\x18addRequirementConstraint\x12A\n" + + "\x0eadd_transition\x18\t \x01(\v2\x18.sysml.AddTransitionEditH\x00R\raddTransitionB\v\n" + "\toperation\"\xb9\x02\n" + "\rAddMemberEdit\x12\x14\n" + "\x05owner\x18\x01 \x01(\tR\x05owner\x12\x12\n" + @@ -9696,7 +9822,16 @@ const file_sysml_proto_rawDesc = "" + "\n" + "expression\x18\x03 \x01(\tR\n" + "expression\x12\x12\n" + - "\x04name\x18\x04 \x01(\tR\x04name\"\x97\x01\n" + + "\x04name\x18\x04 \x01(\tR\x04name\"\xcf\x01\n" + + "\x11AddTransitionEdit\x12\x14\n" + + "\x05owner\x18\x01 \x01(\tR\x05owner\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n" + + "\x06source\x18\x03 \x01(\tR\x06source\x12\x16\n" + + "\x06target\x18\x04 \x01(\tR\x06target\x12\x18\n" + + "\atrigger\x18\x05 \x01(\tR\atrigger\x12\x14\n" + + "\x05guard\x18\x06 \x01(\tR\x05guard\x12\x16\n" + + "\x06effect\x18\a \x01(\tR\x06effect\x12\x18\n" + + "\ainitial\x18\b \x01(\bR\ainitial\"\x97\x01\n" + "\x11AddConnectionEdit\x12\x14\n" + "\x05owner\x18\x01 \x01(\tR\x05owner\x12\x12\n" + "\x04kind\x18\x02 \x01(\tR\x04kind\x12\x19\n" + @@ -10127,7 +10262,7 @@ func file_sysml_proto_rawDescGZIP() []byte { } var file_sysml_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_sysml_proto_msgTypes = make([]protoimpl.MessageInfo, 115) +var file_sysml_proto_msgTypes = make([]protoimpl.MessageInfo, 116) var file_sysml_proto_goTypes = []any{ (FailureReason)(0), // 0: sysml.FailureReason (EditFailure)(0), // 1: sysml.EditFailure @@ -10181,289 +10316,291 @@ var file_sysml_proto_goTypes = []any{ (*AddMemberEdit)(nil), // 49: sysml.AddMemberEdit (*AddSatisfyEdit)(nil), // 50: sysml.AddSatisfyEdit (*AddRequirementConstraintEdit)(nil), // 51: sysml.AddRequirementConstraintEdit - (*AddConnectionEdit)(nil), // 52: sysml.AddConnectionEdit - (*DeleteEdit)(nil), // 53: sysml.DeleteEdit - (*MoveEdit)(nil), // 54: sysml.MoveEdit - (*SetValueEdit)(nil), // 55: sysml.SetValueEdit - (*RenameEdit)(nil), // 56: sysml.RenameEdit - (*ApplyEditsResponse)(nil), // 57: sysml.ApplyEditsResponse - (*EditedDocument)(nil), // 58: sysml.EditedDocument - (*Referrer)(nil), // 59: sysml.Referrer - (*AppliedEdit)(nil), // 60: sysml.AppliedEdit - (*SymbolInfo)(nil), // 61: sysml.SymbolInfo - (*Specialization)(nil), // 62: sysml.Specialization - (*TypeInfo)(nil), // 63: sysml.TypeInfo - (*MultiplicityInfo)(nil), // 64: sysml.MultiplicityInfo - (*AttributeInfo)(nil), // 65: sysml.AttributeInfo - (*Value)(nil), // 66: sysml.Value - (*Metaobject)(nil), // 67: sysml.Metaobject - (*Undetermined)(nil), // 68: sysml.Undetermined - (*Function)(nil), // 69: sysml.Function - (*ValueSet)(nil), // 70: sysml.ValueSet - (*TensorQuantity)(nil), // 71: sysml.TensorQuantity - (*Array)(nil), // 72: sysml.Array - (*Vector)(nil), // 73: sysml.Vector - (*VectorQuantity)(nil), // 74: sysml.VectorQuantity - (*Complex)(nil), // 75: sysml.Complex - (*EnumLiteral)(nil), // 76: sysml.EnumLiteral - (*ValueSequence)(nil), // 77: sysml.ValueSequence - (*Quantity)(nil), // 78: sysml.Quantity - (*MeasurementRef)(nil), // 79: sysml.MeasurementRef - (*UnitTerm)(nil), // 80: sysml.UnitTerm - (*UnitFactor)(nil), // 81: sysml.UnitFactor - (*Diagnostic)(nil), // 82: sysml.Diagnostic - (*Span)(nil), // 83: sysml.Span - (*ServerInfoRequest)(nil), // 84: sysml.ServerInfoRequest - (*ServerInfoResponse)(nil), // 85: sysml.ServerInfoResponse - (*QueryRequest)(nil), // 86: sysml.QueryRequest - (*QueryResponse)(nil), // 87: sysml.QueryResponse - (*Query)(nil), // 88: sysml.Query - (*Constraint)(nil), // 89: sysml.Constraint - (*PrimitiveConstraint)(nil), // 90: sysml.PrimitiveConstraint - (*CompositeConstraint)(nil), // 91: sysml.CompositeConstraint - (*QueryResultElement)(nil), // 92: sysml.QueryResultElement - (*SweepRange)(nil), // 93: sysml.SweepRange - (*RunSweepRequest)(nil), // 94: sysml.RunSweepRequest - (*SweepRow)(nil), // 95: sysml.SweepRow - (*RunSweepResponse)(nil), // 96: sysml.RunSweepResponse - (*RunDocumentQueryRequest)(nil), // 97: sysml.RunDocumentQueryRequest - (*DocumentQueryBinding)(nil), // 98: sysml.DocumentQueryBinding - (*DocumentValue)(nil), // 99: sysml.DocumentValue - (*DocumentObject)(nil), // 100: sysml.DocumentObject - (*DocumentVerdict)(nil), // 101: sysml.DocumentVerdict - (*DocumentState)(nil), // 102: sysml.DocumentState - (*DocumentEvent)(nil), // 103: sysml.DocumentEvent - (*DocumentQueryColumn)(nil), // 104: sysml.DocumentQueryColumn - (*DocumentQueryCell)(nil), // 105: sysml.DocumentQueryCell - (*DocumentQueryRow)(nil), // 106: sysml.DocumentQueryRow - (*RunDocumentQueryResponse)(nil), // 107: sysml.RunDocumentQueryResponse - (*RenderDocumentRequest)(nil), // 108: sysml.RenderDocumentRequest - (*RenderDocumentResponse)(nil), // 109: sysml.RenderDocumentResponse - nil, // 110: sysml.RunAnalysisRequest.NamedArgumentsEntry - nil, // 111: sysml.Outcome.OutputsEntry - nil, // 112: sysml.Instance.FeatureValuesEntry - nil, // 113: sysml.ExecuteActionRequest.InputsEntry - nil, // 114: sysml.ExecuteActionResponse.OutputsEntry - nil, // 115: sysml.ExecuteStateResponse.FinalContextEntry - nil, // 116: sysml.SymbolInfo.MetadataEntry - nil, // 117: sysml.QueryResultElement.PropertiesEntry - nil, // 118: sysml.RunSweepRequest.NamedArgumentsEntry + (*AddTransitionEdit)(nil), // 52: sysml.AddTransitionEdit + (*AddConnectionEdit)(nil), // 53: sysml.AddConnectionEdit + (*DeleteEdit)(nil), // 54: sysml.DeleteEdit + (*MoveEdit)(nil), // 55: sysml.MoveEdit + (*SetValueEdit)(nil), // 56: sysml.SetValueEdit + (*RenameEdit)(nil), // 57: sysml.RenameEdit + (*ApplyEditsResponse)(nil), // 58: sysml.ApplyEditsResponse + (*EditedDocument)(nil), // 59: sysml.EditedDocument + (*Referrer)(nil), // 60: sysml.Referrer + (*AppliedEdit)(nil), // 61: sysml.AppliedEdit + (*SymbolInfo)(nil), // 62: sysml.SymbolInfo + (*Specialization)(nil), // 63: sysml.Specialization + (*TypeInfo)(nil), // 64: sysml.TypeInfo + (*MultiplicityInfo)(nil), // 65: sysml.MultiplicityInfo + (*AttributeInfo)(nil), // 66: sysml.AttributeInfo + (*Value)(nil), // 67: sysml.Value + (*Metaobject)(nil), // 68: sysml.Metaobject + (*Undetermined)(nil), // 69: sysml.Undetermined + (*Function)(nil), // 70: sysml.Function + (*ValueSet)(nil), // 71: sysml.ValueSet + (*TensorQuantity)(nil), // 72: sysml.TensorQuantity + (*Array)(nil), // 73: sysml.Array + (*Vector)(nil), // 74: sysml.Vector + (*VectorQuantity)(nil), // 75: sysml.VectorQuantity + (*Complex)(nil), // 76: sysml.Complex + (*EnumLiteral)(nil), // 77: sysml.EnumLiteral + (*ValueSequence)(nil), // 78: sysml.ValueSequence + (*Quantity)(nil), // 79: sysml.Quantity + (*MeasurementRef)(nil), // 80: sysml.MeasurementRef + (*UnitTerm)(nil), // 81: sysml.UnitTerm + (*UnitFactor)(nil), // 82: sysml.UnitFactor + (*Diagnostic)(nil), // 83: sysml.Diagnostic + (*Span)(nil), // 84: sysml.Span + (*ServerInfoRequest)(nil), // 85: sysml.ServerInfoRequest + (*ServerInfoResponse)(nil), // 86: sysml.ServerInfoResponse + (*QueryRequest)(nil), // 87: sysml.QueryRequest + (*QueryResponse)(nil), // 88: sysml.QueryResponse + (*Query)(nil), // 89: sysml.Query + (*Constraint)(nil), // 90: sysml.Constraint + (*PrimitiveConstraint)(nil), // 91: sysml.PrimitiveConstraint + (*CompositeConstraint)(nil), // 92: sysml.CompositeConstraint + (*QueryResultElement)(nil), // 93: sysml.QueryResultElement + (*SweepRange)(nil), // 94: sysml.SweepRange + (*RunSweepRequest)(nil), // 95: sysml.RunSweepRequest + (*SweepRow)(nil), // 96: sysml.SweepRow + (*RunSweepResponse)(nil), // 97: sysml.RunSweepResponse + (*RunDocumentQueryRequest)(nil), // 98: sysml.RunDocumentQueryRequest + (*DocumentQueryBinding)(nil), // 99: sysml.DocumentQueryBinding + (*DocumentValue)(nil), // 100: sysml.DocumentValue + (*DocumentObject)(nil), // 101: sysml.DocumentObject + (*DocumentVerdict)(nil), // 102: sysml.DocumentVerdict + (*DocumentState)(nil), // 103: sysml.DocumentState + (*DocumentEvent)(nil), // 104: sysml.DocumentEvent + (*DocumentQueryColumn)(nil), // 105: sysml.DocumentQueryColumn + (*DocumentQueryCell)(nil), // 106: sysml.DocumentQueryCell + (*DocumentQueryRow)(nil), // 107: sysml.DocumentQueryRow + (*RunDocumentQueryResponse)(nil), // 108: sysml.RunDocumentQueryResponse + (*RenderDocumentRequest)(nil), // 109: sysml.RenderDocumentRequest + (*RenderDocumentResponse)(nil), // 110: sysml.RenderDocumentResponse + nil, // 111: sysml.RunAnalysisRequest.NamedArgumentsEntry + nil, // 112: sysml.Outcome.OutputsEntry + nil, // 113: sysml.Instance.FeatureValuesEntry + nil, // 114: sysml.ExecuteActionRequest.InputsEntry + nil, // 115: sysml.ExecuteActionResponse.OutputsEntry + nil, // 116: sysml.ExecuteStateResponse.FinalContextEntry + nil, // 117: sysml.SymbolInfo.MetadataEntry + nil, // 118: sysml.QueryResultElement.PropertiesEntry + nil, // 119: sysml.RunSweepRequest.NamedArgumentsEntry } var file_sysml_proto_depIdxs = []int32{ 0, // 0: sysml.Verdict.failure_reason:type_name -> sysml.FailureReason 5, // 1: sysml.Verdict.bounds:type_name -> sysml.Bound 4, // 2: sysml.VerifyConstraintResponse.verdict:type_name -> sysml.Verdict 37, // 3: sysml.VerifyConstraintResponse.instances:type_name -> sysml.Instance - 82, // 4: sysml.VerifyConstraintResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 4: sysml.VerifyConstraintResponse.diagnostics:type_name -> sysml.Diagnostic 4, // 5: sysml.VerifyRequirementResponse.verdict:type_name -> sysml.Verdict 37, // 6: sysml.VerifyRequirementResponse.instances:type_name -> sysml.Instance - 82, // 7: sysml.VerifyRequirementResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 7: sysml.VerifyRequirementResponse.diagnostics:type_name -> sysml.Diagnostic 9, // 8: sysml.VerifyRequirementResponse.verification_verdicts:type_name -> sysml.VerificationVerdict 4, // 9: sysml.VerifySatisfactionResponse.verdicts:type_name -> sysml.Verdict 37, // 10: sysml.VerifySatisfactionResponse.instances:type_name -> sysml.Instance - 82, // 11: sysml.VerifySatisfactionResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 11: sysml.VerifySatisfactionResponse.diagnostics:type_name -> sysml.Diagnostic 0, // 12: sysml.VerifySatisfactionResponse.failure_reason:type_name -> sysml.FailureReason 9, // 13: sysml.VerifySatisfactionResponse.verification_verdicts:type_name -> sysml.VerificationVerdict 4, // 14: sysml.ValidateInstanceResponse.verdicts:type_name -> sysml.Verdict 4, // 15: sysml.ValidateInstanceResponse.summary:type_name -> sysml.Verdict 37, // 16: sysml.ValidateInstanceResponse.instances:type_name -> sysml.Instance - 82, // 17: sysml.ValidateInstanceResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 17: sysml.ValidateInstanceResponse.diagnostics:type_name -> sysml.Diagnostic 0, // 18: sysml.ValidateInstanceResponse.failure_reason:type_name -> sysml.FailureReason 9, // 19: sysml.ValidateInstanceResponse.verification_verdicts:type_name -> sysml.VerificationVerdict - 66, // 20: sysml.EvaluateCalcRequest.arguments:type_name -> sysml.Value - 66, // 21: sysml.EvaluateCalcResponse.result:type_name -> sysml.Value + 67, // 20: sysml.EvaluateCalcRequest.arguments:type_name -> sysml.Value + 67, // 21: sysml.EvaluateCalcResponse.result:type_name -> sysml.Value 17, // 22: sysml.EvaluateCalcResponse.outputs:type_name -> sysml.CalcOutput - 82, // 23: sysml.EvaluateCalcResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 23: sysml.EvaluateCalcResponse.diagnostics:type_name -> sysml.Diagnostic 0, // 24: sysml.EvaluateCalcResponse.failure_reason:type_name -> sysml.FailureReason 5, // 25: sysml.EvaluateCalcResponse.bounds:type_name -> sysml.Bound - 66, // 26: sysml.CalcOutput.value:type_name -> sysml.Value - 66, // 27: sysml.CaseEvaluation.arguments:type_name -> sysml.Value - 66, // 28: sysml.CaseEvaluation.result:type_name -> sysml.Value - 66, // 29: sysml.RunAnalysisRequest.arguments:type_name -> sysml.Value - 110, // 30: sysml.RunAnalysisRequest.named_arguments:type_name -> sysml.RunAnalysisRequest.NamedArgumentsEntry + 67, // 26: sysml.CalcOutput.value:type_name -> sysml.Value + 67, // 27: sysml.CaseEvaluation.arguments:type_name -> sysml.Value + 67, // 28: sysml.CaseEvaluation.result:type_name -> sysml.Value + 67, // 29: sysml.RunAnalysisRequest.arguments:type_name -> sysml.Value + 111, // 30: sysml.RunAnalysisRequest.named_arguments:type_name -> sysml.RunAnalysisRequest.NamedArgumentsEntry 17, // 31: sysml.RunAnalysisResponse.outputs:type_name -> sysml.CalcOutput 4, // 32: sysml.RunAnalysisResponse.verdicts:type_name -> sysml.Verdict 37, // 33: sysml.RunAnalysisResponse.instances:type_name -> sysml.Instance - 82, // 34: sysml.RunAnalysisResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 34: sysml.RunAnalysisResponse.diagnostics:type_name -> sysml.Diagnostic 0, // 35: sysml.RunAnalysisResponse.failure_reason:type_name -> sysml.FailureReason 9, // 36: sysml.RunAnalysisResponse.verification_verdicts:type_name -> sysml.VerificationVerdict 21, // 37: sysml.RunAnalysisResponse.outcomes:type_name -> sysml.Outcome 22, // 38: sysml.RunAnalysisResponse.exploration:type_name -> sysml.ExplorationStatus 18, // 39: sysml.RunAnalysisResponse.evaluations:type_name -> sysml.CaseEvaluation 5, // 40: sysml.RunAnalysisResponse.bounds:type_name -> sysml.Bound - 111, // 41: sysml.Outcome.outputs:type_name -> sysml.Outcome.OutputsEntry - 82, // 42: sysml.Outcome.diagnostics:type_name -> sysml.Diagnostic + 112, // 41: sysml.Outcome.outputs:type_name -> sysml.Outcome.OutputsEntry + 83, // 42: sysml.Outcome.diagnostics:type_name -> sysml.Diagnostic 24, // 43: sysml.ListEnginesResponse.engines:type_name -> sysml.EngineInfo 27, // 44: sysml.ParseSourcesRequest.documents:type_name -> sysml.SourceDocument - 61, // 45: sysml.ParseSourcesResponse.roots:type_name -> sysml.SymbolInfo - 82, // 46: sysml.ParseSourcesResponse.diagnostics:type_name -> sysml.Diagnostic - 61, // 47: sysml.ParseFileResponse.root:type_name -> sysml.SymbolInfo - 82, // 48: sysml.ParseFileResponse.diagnostics:type_name -> sysml.Diagnostic - 61, // 49: sysml.SymbolResponse.symbol:type_name -> sysml.SymbolInfo - 82, // 50: sysml.DiagnosticsResponse.diagnostics:type_name -> sysml.Diagnostic - 66, // 51: sysml.EvaluateResponse.result:type_name -> sysml.Value - 82, // 52: sysml.EvaluateResponse.diagnostics:type_name -> sysml.Diagnostic - 112, // 53: sysml.Instance.feature_values:type_name -> sysml.Instance.FeatureValuesEntry - 66, // 54: sysml.FeatureValue.value:type_name -> sysml.Value - 66, // 55: sysml.FeatureValue.values:type_name -> sysml.Value + 62, // 45: sysml.ParseSourcesResponse.roots:type_name -> sysml.SymbolInfo + 83, // 46: sysml.ParseSourcesResponse.diagnostics:type_name -> sysml.Diagnostic + 62, // 47: sysml.ParseFileResponse.root:type_name -> sysml.SymbolInfo + 83, // 48: sysml.ParseFileResponse.diagnostics:type_name -> sysml.Diagnostic + 62, // 49: sysml.SymbolResponse.symbol:type_name -> sysml.SymbolInfo + 83, // 50: sysml.DiagnosticsResponse.diagnostics:type_name -> sysml.Diagnostic + 67, // 51: sysml.EvaluateResponse.result:type_name -> sysml.Value + 83, // 52: sysml.EvaluateResponse.diagnostics:type_name -> sysml.Diagnostic + 113, // 53: sysml.Instance.feature_values:type_name -> sysml.Instance.FeatureValuesEntry + 67, // 54: sysml.FeatureValue.value:type_name -> sysml.Value + 67, // 55: sysml.FeatureValue.values:type_name -> sysml.Value 37, // 56: sysml.InstantiateResponse.instance:type_name -> sysml.Instance - 82, // 57: sysml.InstantiateResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 57: sysml.InstantiateResponse.diagnostics:type_name -> sysml.Diagnostic 37, // 58: sysml.InstantiateResponse.instances:type_name -> sysml.Instance - 113, // 59: sysml.ExecuteActionRequest.inputs:type_name -> sysml.ExecuteActionRequest.InputsEntry - 114, // 60: sysml.ExecuteActionResponse.outputs:type_name -> sysml.ExecuteActionResponse.OutputsEntry - 82, // 61: sysml.ExecuteActionResponse.diagnostics:type_name -> sysml.Diagnostic + 114, // 59: sysml.ExecuteActionRequest.inputs:type_name -> sysml.ExecuteActionRequest.InputsEntry + 115, // 60: sysml.ExecuteActionResponse.outputs:type_name -> sysml.ExecuteActionResponse.OutputsEntry + 83, // 61: sysml.ExecuteActionResponse.diagnostics:type_name -> sysml.Diagnostic 21, // 62: sysml.ExecuteActionResponse.outcomes:type_name -> sysml.Outcome 22, // 63: sysml.ExecuteActionResponse.exploration:type_name -> sysml.ExplorationStatus - 115, // 64: sysml.ExecuteStateResponse.final_context:type_name -> sysml.ExecuteStateResponse.FinalContextEntry - 82, // 65: sysml.ExecuteStateResponse.diagnostics:type_name -> sysml.Diagnostic + 116, // 64: sysml.ExecuteStateResponse.final_context:type_name -> sysml.ExecuteStateResponse.FinalContextEntry + 83, // 65: sysml.ExecuteStateResponse.diagnostics:type_name -> sysml.Diagnostic 21, // 66: sysml.ExecuteStateResponse.outcomes:type_name -> sysml.Outcome 22, // 67: sysml.ExecuteStateResponse.exploration:type_name -> sysml.ExplorationStatus - 82, // 68: sysml.ConvertResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 68: sysml.ConvertResponse.diagnostics:type_name -> sysml.Diagnostic 48, // 69: sysml.ApplyEditsRequest.operations:type_name -> sysml.EditOperation - 55, // 70: sysml.EditOperation.set_value:type_name -> sysml.SetValueEdit - 56, // 71: sysml.EditOperation.rename:type_name -> sysml.RenameEdit + 56, // 70: sysml.EditOperation.set_value:type_name -> sysml.SetValueEdit + 57, // 71: sysml.EditOperation.rename:type_name -> sysml.RenameEdit 49, // 72: sysml.EditOperation.add_member:type_name -> sysml.AddMemberEdit - 53, // 73: sysml.EditOperation.delete:type_name -> sysml.DeleteEdit - 54, // 74: sysml.EditOperation.move:type_name -> sysml.MoveEdit - 52, // 75: sysml.EditOperation.add_connection:type_name -> sysml.AddConnectionEdit + 54, // 73: sysml.EditOperation.delete:type_name -> sysml.DeleteEdit + 55, // 74: sysml.EditOperation.move:type_name -> sysml.MoveEdit + 53, // 75: sysml.EditOperation.add_connection:type_name -> sysml.AddConnectionEdit 50, // 76: sysml.EditOperation.add_satisfy:type_name -> sysml.AddSatisfyEdit 51, // 77: sysml.EditOperation.add_requirement_constraint:type_name -> sysml.AddRequirementConstraintEdit - 60, // 78: sysml.ApplyEditsResponse.applied:type_name -> sysml.AppliedEdit - 1, // 79: sysml.ApplyEditsResponse.failure:type_name -> sysml.EditFailure - 82, // 80: sysml.ApplyEditsResponse.diagnostics:type_name -> sysml.Diagnostic - 58, // 81: sysml.ApplyEditsResponse.documents:type_name -> sysml.EditedDocument - 59, // 82: sysml.ApplyEditsResponse.referrers:type_name -> sysml.Referrer - 116, // 83: sysml.SymbolInfo.metadata:type_name -> sysml.SymbolInfo.MetadataEntry - 65, // 84: sysml.SymbolInfo.attributes:type_name -> sysml.AttributeInfo - 63, // 85: sysml.SymbolInfo.type_info:type_name -> sysml.TypeInfo - 64, // 86: sysml.SymbolInfo.multiplicity:type_name -> sysml.MultiplicityInfo - 62, // 87: sysml.SymbolInfo.specializations:type_name -> sysml.Specialization - 66, // 88: sysml.AttributeInfo.value:type_name -> sysml.Value - 77, // 89: sysml.Value.sequence:type_name -> sysml.ValueSequence - 78, // 90: sysml.Value.quantity:type_name -> sysml.Quantity - 76, // 91: sysml.Value.enum_literal:type_name -> sysml.EnumLiteral - 75, // 92: sysml.Value.complex:type_name -> sysml.Complex - 72, // 93: sysml.Value.array:type_name -> sysml.Array - 73, // 94: sysml.Value.vector:type_name -> sysml.Vector - 74, // 95: sysml.Value.vector_quantity:type_name -> sysml.VectorQuantity - 79, // 96: sysml.Value.measurement_ref:type_name -> sysml.MeasurementRef - 69, // 97: sysml.Value.function:type_name -> sysml.Function - 70, // 98: sysml.Value.set:type_name -> sysml.ValueSet - 71, // 99: sysml.Value.tensor_quantity:type_name -> sysml.TensorQuantity - 67, // 100: sysml.Value.metaobject:type_name -> sysml.Metaobject - 68, // 101: sysml.Value.undetermined:type_name -> sysml.Undetermined - 64, // 102: sysml.Undetermined.count:type_name -> sysml.MultiplicityInfo - 66, // 103: sysml.ValueSet.elements:type_name -> sysml.Value - 78, // 104: sysml.TensorQuantity.components:type_name -> sysml.Quantity - 66, // 105: sysml.Array.elements:type_name -> sysml.Value - 66, // 106: sysml.Vector.components:type_name -> sysml.Value - 78, // 107: sysml.VectorQuantity.components:type_name -> sysml.Quantity - 66, // 108: sysml.EnumLiteral.value:type_name -> sysml.Value - 66, // 109: sysml.ValueSequence.elements:type_name -> sysml.Value - 80, // 110: sysml.Quantity.unit_term:type_name -> sysml.UnitTerm - 80, // 111: sysml.MeasurementRef.unit_term:type_name -> sysml.UnitTerm - 81, // 112: sysml.UnitTerm.factors:type_name -> sysml.UnitFactor - 83, // 113: sysml.Diagnostic.span:type_name -> sysml.Span - 88, // 114: sysml.QueryRequest.query:type_name -> sysml.Query - 92, // 115: sysml.QueryResponse.elements:type_name -> sysml.QueryResultElement - 89, // 116: sysml.Query.where:type_name -> sysml.Constraint - 90, // 117: sysml.Constraint.primitive:type_name -> sysml.PrimitiveConstraint - 91, // 118: sysml.Constraint.composite:type_name -> sysml.CompositeConstraint - 2, // 119: sysml.PrimitiveConstraint.operator:type_name -> sysml.PrimitiveOperator - 3, // 120: sysml.CompositeConstraint.operator:type_name -> sysml.CompositeOperator - 89, // 121: sysml.CompositeConstraint.constraint:type_name -> sysml.Constraint - 117, // 122: sysml.QueryResultElement.properties:type_name -> sysml.QueryResultElement.PropertiesEntry - 66, // 123: sysml.SweepRange.start:type_name -> sysml.Value - 66, // 124: sysml.SweepRange.end:type_name -> sysml.Value - 66, // 125: sysml.SweepRange.step:type_name -> sysml.Value - 66, // 126: sysml.RunSweepRequest.arguments:type_name -> sysml.Value - 118, // 127: sysml.RunSweepRequest.named_arguments:type_name -> sysml.RunSweepRequest.NamedArgumentsEntry - 93, // 128: sysml.RunSweepRequest.ranges:type_name -> sysml.SweepRange - 17, // 129: sysml.SweepRow.inputs:type_name -> sysml.CalcOutput - 17, // 130: sysml.SweepRow.outputs:type_name -> sysml.CalcOutput - 4, // 131: sysml.SweepRow.verdicts:type_name -> sysml.Verdict - 0, // 132: sysml.SweepRow.failure_reason:type_name -> sysml.FailureReason - 18, // 133: sysml.SweepRow.evaluations:type_name -> sysml.CaseEvaluation - 95, // 134: sysml.RunSweepResponse.rows:type_name -> sysml.SweepRow - 82, // 135: sysml.RunSweepResponse.diagnostics:type_name -> sysml.Diagnostic - 0, // 136: sysml.RunSweepResponse.failure_reason:type_name -> sysml.FailureReason - 37, // 137: sysml.RunSweepResponse.instances:type_name -> sysml.Instance - 5, // 138: sysml.RunSweepResponse.bounds:type_name -> sysml.Bound - 98, // 139: sysml.RunDocumentQueryRequest.bindings:type_name -> sysml.DocumentQueryBinding - 99, // 140: sysml.DocumentQueryBinding.values:type_name -> sysml.DocumentValue - 78, // 141: sysml.DocumentValue.quantity:type_name -> sysml.Quantity - 101, // 142: sysml.DocumentValue.verdict:type_name -> sysml.DocumentVerdict - 100, // 143: sysml.DocumentValue.object:type_name -> sysml.DocumentObject - 102, // 144: sysml.DocumentValue.state:type_name -> sysml.DocumentState - 103, // 145: sysml.DocumentValue.event:type_name -> sysml.DocumentEvent - 99, // 146: sysml.DocumentObject.element:type_name -> sysml.DocumentValue - 99, // 147: sysml.DocumentVerdict.assertion:type_name -> sysml.DocumentValue - 100, // 148: sysml.DocumentState.object:type_name -> sysml.DocumentObject - 99, // 149: sysml.DocumentState.state:type_name -> sysml.DocumentValue - 99, // 150: sysml.DocumentEvent.time:type_name -> sysml.DocumentValue - 100, // 151: sysml.DocumentEvent.object:type_name -> sysml.DocumentObject - 100, // 152: sysml.DocumentEvent.target:type_name -> sysml.DocumentObject - 99, // 153: sysml.DocumentQueryCell.values:type_name -> sysml.DocumentValue - 99, // 154: sysml.DocumentQueryRow.element:type_name -> sysml.DocumentValue - 105, // 155: sysml.DocumentQueryRow.cells:type_name -> sysml.DocumentQueryCell - 104, // 156: sysml.RunDocumentQueryResponse.columns:type_name -> sysml.DocumentQueryColumn - 106, // 157: sysml.RunDocumentQueryResponse.rows:type_name -> sysml.DocumentQueryRow - 66, // 158: sysml.RunAnalysisRequest.NamedArgumentsEntry.value:type_name -> sysml.Value - 66, // 159: sysml.Outcome.OutputsEntry.value:type_name -> sysml.Value - 38, // 160: sysml.Instance.FeatureValuesEntry.value:type_name -> sysml.FeatureValue - 66, // 161: sysml.ExecuteActionRequest.InputsEntry.value:type_name -> sysml.Value - 66, // 162: sysml.ExecuteActionResponse.OutputsEntry.value:type_name -> sysml.Value - 66, // 163: sysml.ExecuteStateResponse.FinalContextEntry.value:type_name -> sysml.Value - 66, // 164: sysml.RunSweepRequest.NamedArgumentsEntry.value:type_name -> sysml.Value - 84, // 165: sysml.SysMLService.GetServerInfo:input_type -> sysml.ServerInfoRequest - 26, // 166: sysml.SysMLService.ParseFile:input_type -> sysml.ParseFileRequest - 28, // 167: sysml.SysMLService.ParseSources:input_type -> sysml.ParseSourcesRequest - 31, // 168: sysml.SysMLService.GetSymbol:input_type -> sysml.GetSymbolRequest - 33, // 169: sysml.SysMLService.GetDiagnostics:input_type -> sysml.DiagnosticsRequest - 35, // 170: sysml.SysMLService.Evaluate:input_type -> sysml.EvaluateRequest - 39, // 171: sysml.SysMLService.Instantiate:input_type -> sysml.InstantiateRequest - 41, // 172: sysml.SysMLService.ExecuteAction:input_type -> sysml.ExecuteActionRequest - 43, // 173: sysml.SysMLService.ExecuteState:input_type -> sysml.ExecuteStateRequest - 45, // 174: sysml.SysMLService.Convert:input_type -> sysml.ConvertRequest - 47, // 175: sysml.SysMLService.ApplyEdits:input_type -> sysml.ApplyEditsRequest - 6, // 176: sysml.SysMLService.VerifyConstraint:input_type -> sysml.VerifyConstraintRequest - 8, // 177: sysml.SysMLService.VerifyRequirement:input_type -> sysml.VerifyRequirementRequest - 11, // 178: sysml.SysMLService.VerifySatisfaction:input_type -> sysml.VerifySatisfactionRequest - 13, // 179: sysml.SysMLService.ValidateInstance:input_type -> sysml.ValidateInstanceRequest - 15, // 180: sysml.SysMLService.EvaluateCalc:input_type -> sysml.EvaluateCalcRequest - 19, // 181: sysml.SysMLService.RunAnalysis:input_type -> sysml.RunAnalysisRequest - 94, // 182: sysml.SysMLService.RunSweep:input_type -> sysml.RunSweepRequest - 23, // 183: sysml.SysMLService.ListEngines:input_type -> sysml.ListEnginesRequest - 86, // 184: sysml.SysMLService.Query:input_type -> sysml.QueryRequest - 97, // 185: sysml.SysMLService.RunDocumentQuery:input_type -> sysml.RunDocumentQueryRequest - 108, // 186: sysml.SysMLService.RenderDocument:input_type -> sysml.RenderDocumentRequest - 85, // 187: sysml.SysMLService.GetServerInfo:output_type -> sysml.ServerInfoResponse - 30, // 188: sysml.SysMLService.ParseFile:output_type -> sysml.ParseFileResponse - 29, // 189: sysml.SysMLService.ParseSources:output_type -> sysml.ParseSourcesResponse - 32, // 190: sysml.SysMLService.GetSymbol:output_type -> sysml.SymbolResponse - 34, // 191: sysml.SysMLService.GetDiagnostics:output_type -> sysml.DiagnosticsResponse - 36, // 192: sysml.SysMLService.Evaluate:output_type -> sysml.EvaluateResponse - 40, // 193: sysml.SysMLService.Instantiate:output_type -> sysml.InstantiateResponse - 42, // 194: sysml.SysMLService.ExecuteAction:output_type -> sysml.ExecuteActionResponse - 44, // 195: sysml.SysMLService.ExecuteState:output_type -> sysml.ExecuteStateResponse - 46, // 196: sysml.SysMLService.Convert:output_type -> sysml.ConvertResponse - 57, // 197: sysml.SysMLService.ApplyEdits:output_type -> sysml.ApplyEditsResponse - 7, // 198: sysml.SysMLService.VerifyConstraint:output_type -> sysml.VerifyConstraintResponse - 10, // 199: sysml.SysMLService.VerifyRequirement:output_type -> sysml.VerifyRequirementResponse - 12, // 200: sysml.SysMLService.VerifySatisfaction:output_type -> sysml.VerifySatisfactionResponse - 14, // 201: sysml.SysMLService.ValidateInstance:output_type -> sysml.ValidateInstanceResponse - 16, // 202: sysml.SysMLService.EvaluateCalc:output_type -> sysml.EvaluateCalcResponse - 20, // 203: sysml.SysMLService.RunAnalysis:output_type -> sysml.RunAnalysisResponse - 96, // 204: sysml.SysMLService.RunSweep:output_type -> sysml.RunSweepResponse - 25, // 205: sysml.SysMLService.ListEngines:output_type -> sysml.ListEnginesResponse - 87, // 206: sysml.SysMLService.Query:output_type -> sysml.QueryResponse - 107, // 207: sysml.SysMLService.RunDocumentQuery:output_type -> sysml.RunDocumentQueryResponse - 109, // 208: sysml.SysMLService.RenderDocument:output_type -> sysml.RenderDocumentResponse - 187, // [187:209] is the sub-list for method output_type - 165, // [165:187] is the sub-list for method input_type - 165, // [165:165] is the sub-list for extension type_name - 165, // [165:165] is the sub-list for extension extendee - 0, // [0:165] is the sub-list for field type_name + 52, // 78: sysml.EditOperation.add_transition:type_name -> sysml.AddTransitionEdit + 61, // 79: sysml.ApplyEditsResponse.applied:type_name -> sysml.AppliedEdit + 1, // 80: sysml.ApplyEditsResponse.failure:type_name -> sysml.EditFailure + 83, // 81: sysml.ApplyEditsResponse.diagnostics:type_name -> sysml.Diagnostic + 59, // 82: sysml.ApplyEditsResponse.documents:type_name -> sysml.EditedDocument + 60, // 83: sysml.ApplyEditsResponse.referrers:type_name -> sysml.Referrer + 117, // 84: sysml.SymbolInfo.metadata:type_name -> sysml.SymbolInfo.MetadataEntry + 66, // 85: sysml.SymbolInfo.attributes:type_name -> sysml.AttributeInfo + 64, // 86: sysml.SymbolInfo.type_info:type_name -> sysml.TypeInfo + 65, // 87: sysml.SymbolInfo.multiplicity:type_name -> sysml.MultiplicityInfo + 63, // 88: sysml.SymbolInfo.specializations:type_name -> sysml.Specialization + 67, // 89: sysml.AttributeInfo.value:type_name -> sysml.Value + 78, // 90: sysml.Value.sequence:type_name -> sysml.ValueSequence + 79, // 91: sysml.Value.quantity:type_name -> sysml.Quantity + 77, // 92: sysml.Value.enum_literal:type_name -> sysml.EnumLiteral + 76, // 93: sysml.Value.complex:type_name -> sysml.Complex + 73, // 94: sysml.Value.array:type_name -> sysml.Array + 74, // 95: sysml.Value.vector:type_name -> sysml.Vector + 75, // 96: sysml.Value.vector_quantity:type_name -> sysml.VectorQuantity + 80, // 97: sysml.Value.measurement_ref:type_name -> sysml.MeasurementRef + 70, // 98: sysml.Value.function:type_name -> sysml.Function + 71, // 99: sysml.Value.set:type_name -> sysml.ValueSet + 72, // 100: sysml.Value.tensor_quantity:type_name -> sysml.TensorQuantity + 68, // 101: sysml.Value.metaobject:type_name -> sysml.Metaobject + 69, // 102: sysml.Value.undetermined:type_name -> sysml.Undetermined + 65, // 103: sysml.Undetermined.count:type_name -> sysml.MultiplicityInfo + 67, // 104: sysml.ValueSet.elements:type_name -> sysml.Value + 79, // 105: sysml.TensorQuantity.components:type_name -> sysml.Quantity + 67, // 106: sysml.Array.elements:type_name -> sysml.Value + 67, // 107: sysml.Vector.components:type_name -> sysml.Value + 79, // 108: sysml.VectorQuantity.components:type_name -> sysml.Quantity + 67, // 109: sysml.EnumLiteral.value:type_name -> sysml.Value + 67, // 110: sysml.ValueSequence.elements:type_name -> sysml.Value + 81, // 111: sysml.Quantity.unit_term:type_name -> sysml.UnitTerm + 81, // 112: sysml.MeasurementRef.unit_term:type_name -> sysml.UnitTerm + 82, // 113: sysml.UnitTerm.factors:type_name -> sysml.UnitFactor + 84, // 114: sysml.Diagnostic.span:type_name -> sysml.Span + 89, // 115: sysml.QueryRequest.query:type_name -> sysml.Query + 93, // 116: sysml.QueryResponse.elements:type_name -> sysml.QueryResultElement + 90, // 117: sysml.Query.where:type_name -> sysml.Constraint + 91, // 118: sysml.Constraint.primitive:type_name -> sysml.PrimitiveConstraint + 92, // 119: sysml.Constraint.composite:type_name -> sysml.CompositeConstraint + 2, // 120: sysml.PrimitiveConstraint.operator:type_name -> sysml.PrimitiveOperator + 3, // 121: sysml.CompositeConstraint.operator:type_name -> sysml.CompositeOperator + 90, // 122: sysml.CompositeConstraint.constraint:type_name -> sysml.Constraint + 118, // 123: sysml.QueryResultElement.properties:type_name -> sysml.QueryResultElement.PropertiesEntry + 67, // 124: sysml.SweepRange.start:type_name -> sysml.Value + 67, // 125: sysml.SweepRange.end:type_name -> sysml.Value + 67, // 126: sysml.SweepRange.step:type_name -> sysml.Value + 67, // 127: sysml.RunSweepRequest.arguments:type_name -> sysml.Value + 119, // 128: sysml.RunSweepRequest.named_arguments:type_name -> sysml.RunSweepRequest.NamedArgumentsEntry + 94, // 129: sysml.RunSweepRequest.ranges:type_name -> sysml.SweepRange + 17, // 130: sysml.SweepRow.inputs:type_name -> sysml.CalcOutput + 17, // 131: sysml.SweepRow.outputs:type_name -> sysml.CalcOutput + 4, // 132: sysml.SweepRow.verdicts:type_name -> sysml.Verdict + 0, // 133: sysml.SweepRow.failure_reason:type_name -> sysml.FailureReason + 18, // 134: sysml.SweepRow.evaluations:type_name -> sysml.CaseEvaluation + 96, // 135: sysml.RunSweepResponse.rows:type_name -> sysml.SweepRow + 83, // 136: sysml.RunSweepResponse.diagnostics:type_name -> sysml.Diagnostic + 0, // 137: sysml.RunSweepResponse.failure_reason:type_name -> sysml.FailureReason + 37, // 138: sysml.RunSweepResponse.instances:type_name -> sysml.Instance + 5, // 139: sysml.RunSweepResponse.bounds:type_name -> sysml.Bound + 99, // 140: sysml.RunDocumentQueryRequest.bindings:type_name -> sysml.DocumentQueryBinding + 100, // 141: sysml.DocumentQueryBinding.values:type_name -> sysml.DocumentValue + 79, // 142: sysml.DocumentValue.quantity:type_name -> sysml.Quantity + 102, // 143: sysml.DocumentValue.verdict:type_name -> sysml.DocumentVerdict + 101, // 144: sysml.DocumentValue.object:type_name -> sysml.DocumentObject + 103, // 145: sysml.DocumentValue.state:type_name -> sysml.DocumentState + 104, // 146: sysml.DocumentValue.event:type_name -> sysml.DocumentEvent + 100, // 147: sysml.DocumentObject.element:type_name -> sysml.DocumentValue + 100, // 148: sysml.DocumentVerdict.assertion:type_name -> sysml.DocumentValue + 101, // 149: sysml.DocumentState.object:type_name -> sysml.DocumentObject + 100, // 150: sysml.DocumentState.state:type_name -> sysml.DocumentValue + 100, // 151: sysml.DocumentEvent.time:type_name -> sysml.DocumentValue + 101, // 152: sysml.DocumentEvent.object:type_name -> sysml.DocumentObject + 101, // 153: sysml.DocumentEvent.target:type_name -> sysml.DocumentObject + 100, // 154: sysml.DocumentQueryCell.values:type_name -> sysml.DocumentValue + 100, // 155: sysml.DocumentQueryRow.element:type_name -> sysml.DocumentValue + 106, // 156: sysml.DocumentQueryRow.cells:type_name -> sysml.DocumentQueryCell + 105, // 157: sysml.RunDocumentQueryResponse.columns:type_name -> sysml.DocumentQueryColumn + 107, // 158: sysml.RunDocumentQueryResponse.rows:type_name -> sysml.DocumentQueryRow + 67, // 159: sysml.RunAnalysisRequest.NamedArgumentsEntry.value:type_name -> sysml.Value + 67, // 160: sysml.Outcome.OutputsEntry.value:type_name -> sysml.Value + 38, // 161: sysml.Instance.FeatureValuesEntry.value:type_name -> sysml.FeatureValue + 67, // 162: sysml.ExecuteActionRequest.InputsEntry.value:type_name -> sysml.Value + 67, // 163: sysml.ExecuteActionResponse.OutputsEntry.value:type_name -> sysml.Value + 67, // 164: sysml.ExecuteStateResponse.FinalContextEntry.value:type_name -> sysml.Value + 67, // 165: sysml.RunSweepRequest.NamedArgumentsEntry.value:type_name -> sysml.Value + 85, // 166: sysml.SysMLService.GetServerInfo:input_type -> sysml.ServerInfoRequest + 26, // 167: sysml.SysMLService.ParseFile:input_type -> sysml.ParseFileRequest + 28, // 168: sysml.SysMLService.ParseSources:input_type -> sysml.ParseSourcesRequest + 31, // 169: sysml.SysMLService.GetSymbol:input_type -> sysml.GetSymbolRequest + 33, // 170: sysml.SysMLService.GetDiagnostics:input_type -> sysml.DiagnosticsRequest + 35, // 171: sysml.SysMLService.Evaluate:input_type -> sysml.EvaluateRequest + 39, // 172: sysml.SysMLService.Instantiate:input_type -> sysml.InstantiateRequest + 41, // 173: sysml.SysMLService.ExecuteAction:input_type -> sysml.ExecuteActionRequest + 43, // 174: sysml.SysMLService.ExecuteState:input_type -> sysml.ExecuteStateRequest + 45, // 175: sysml.SysMLService.Convert:input_type -> sysml.ConvertRequest + 47, // 176: sysml.SysMLService.ApplyEdits:input_type -> sysml.ApplyEditsRequest + 6, // 177: sysml.SysMLService.VerifyConstraint:input_type -> sysml.VerifyConstraintRequest + 8, // 178: sysml.SysMLService.VerifyRequirement:input_type -> sysml.VerifyRequirementRequest + 11, // 179: sysml.SysMLService.VerifySatisfaction:input_type -> sysml.VerifySatisfactionRequest + 13, // 180: sysml.SysMLService.ValidateInstance:input_type -> sysml.ValidateInstanceRequest + 15, // 181: sysml.SysMLService.EvaluateCalc:input_type -> sysml.EvaluateCalcRequest + 19, // 182: sysml.SysMLService.RunAnalysis:input_type -> sysml.RunAnalysisRequest + 95, // 183: sysml.SysMLService.RunSweep:input_type -> sysml.RunSweepRequest + 23, // 184: sysml.SysMLService.ListEngines:input_type -> sysml.ListEnginesRequest + 87, // 185: sysml.SysMLService.Query:input_type -> sysml.QueryRequest + 98, // 186: sysml.SysMLService.RunDocumentQuery:input_type -> sysml.RunDocumentQueryRequest + 109, // 187: sysml.SysMLService.RenderDocument:input_type -> sysml.RenderDocumentRequest + 86, // 188: sysml.SysMLService.GetServerInfo:output_type -> sysml.ServerInfoResponse + 30, // 189: sysml.SysMLService.ParseFile:output_type -> sysml.ParseFileResponse + 29, // 190: sysml.SysMLService.ParseSources:output_type -> sysml.ParseSourcesResponse + 32, // 191: sysml.SysMLService.GetSymbol:output_type -> sysml.SymbolResponse + 34, // 192: sysml.SysMLService.GetDiagnostics:output_type -> sysml.DiagnosticsResponse + 36, // 193: sysml.SysMLService.Evaluate:output_type -> sysml.EvaluateResponse + 40, // 194: sysml.SysMLService.Instantiate:output_type -> sysml.InstantiateResponse + 42, // 195: sysml.SysMLService.ExecuteAction:output_type -> sysml.ExecuteActionResponse + 44, // 196: sysml.SysMLService.ExecuteState:output_type -> sysml.ExecuteStateResponse + 46, // 197: sysml.SysMLService.Convert:output_type -> sysml.ConvertResponse + 58, // 198: sysml.SysMLService.ApplyEdits:output_type -> sysml.ApplyEditsResponse + 7, // 199: sysml.SysMLService.VerifyConstraint:output_type -> sysml.VerifyConstraintResponse + 10, // 200: sysml.SysMLService.VerifyRequirement:output_type -> sysml.VerifyRequirementResponse + 12, // 201: sysml.SysMLService.VerifySatisfaction:output_type -> sysml.VerifySatisfactionResponse + 14, // 202: sysml.SysMLService.ValidateInstance:output_type -> sysml.ValidateInstanceResponse + 16, // 203: sysml.SysMLService.EvaluateCalc:output_type -> sysml.EvaluateCalcResponse + 20, // 204: sysml.SysMLService.RunAnalysis:output_type -> sysml.RunAnalysisResponse + 97, // 205: sysml.SysMLService.RunSweep:output_type -> sysml.RunSweepResponse + 25, // 206: sysml.SysMLService.ListEngines:output_type -> sysml.ListEnginesResponse + 88, // 207: sysml.SysMLService.Query:output_type -> sysml.QueryResponse + 108, // 208: sysml.SysMLService.RunDocumentQuery:output_type -> sysml.RunDocumentQueryResponse + 110, // 209: sysml.SysMLService.RenderDocument:output_type -> sysml.RenderDocumentResponse + 188, // [188:210] is the sub-list for method output_type + 166, // [166:188] is the sub-list for method input_type + 166, // [166:166] is the sub-list for extension type_name + 166, // [166:166] is the sub-list for extension extendee + 0, // [0:166] is the sub-list for field type_name } func init() { file_sysml_proto_init() } @@ -10493,8 +10630,9 @@ func file_sysml_proto_init() { (*EditOperation_AddConnection)(nil), (*EditOperation_AddSatisfy)(nil), (*EditOperation_AddRequirementConstraint)(nil), + (*EditOperation_AddTransition)(nil), } - file_sysml_proto_msgTypes[62].OneofWrappers = []any{ + file_sysml_proto_msgTypes[63].OneofWrappers = []any{ (*Value_IntValue)(nil), (*Value_RealValue)(nil), (*Value_BoolValue)(nil), @@ -10517,15 +10655,15 @@ func file_sysml_proto_init() { (*Value_Metaobject)(nil), (*Value_Undetermined)(nil), } - file_sysml_proto_msgTypes[74].OneofWrappers = []any{ + file_sysml_proto_msgTypes[75].OneofWrappers = []any{ (*Quantity_IntMagnitude)(nil), (*Quantity_RealMagnitude)(nil), } - file_sysml_proto_msgTypes[85].OneofWrappers = []any{ + file_sysml_proto_msgTypes[86].OneofWrappers = []any{ (*Constraint_Primitive)(nil), (*Constraint_Composite)(nil), } - file_sysml_proto_msgTypes[95].OneofWrappers = []any{ + file_sysml_proto_msgTypes[96].OneofWrappers = []any{ (*DocumentValue_ElementId)(nil), (*DocumentValue_StringValue)(nil), (*DocumentValue_IntValue)(nil), @@ -10544,7 +10682,7 @@ func file_sysml_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_sysml_proto_rawDesc), len(file_sysml_proto_rawDesc)), NumEnums: 4, - NumMessages: 115, + NumMessages: 116, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/sysml.proto b/api/proto/sysml.proto index fec77ddeee..0c1cd86e77 100644 --- a/api/proto/sysml.proto +++ b/api/proto/sysml.proto @@ -841,6 +841,7 @@ message EditOperation { AddConnectionEdit add_connection = 6; AddSatisfyEdit add_satisfy = 7; AddRequirementConstraintEdit add_requirement_constraint = 8; + AddTransitionEdit add_transition = 9; } } @@ -870,9 +871,9 @@ message AddMemberEdit { string direction = 11; } -// AddSatisfyEdit inserts a satisfy usage into a body that admits behavior usages. +// AddSatisfyEdit inserts a satisfy usage into any package or body that admits behavior usages. message AddSatisfyEdit { - // Namespace FQN receiving the usage. + // Body receiving the usage. string owner = 1; // Requirement feature reference. string requirement = 2; @@ -896,6 +897,26 @@ message AddRequirementConstraintEdit { string name = 4; } +// AddTransitionEdit inserts a transition usage, or an entry transition, into a state body. +message AddTransitionEdit { + // State body receiving the transition. + string owner = 1; + // Optional transition name. + string name = 2; + // Source feature reference; empty only for an entry transition. + string source = 3; + // Target feature reference. + string target = 4; + // Optional text after `accept`. + string trigger = 5; + // Optional boolean expression after `if`. + string guard = 6; + // Optional effect text after `do`. + string effect = 7; + // Write `entry; then ;` instead of a regular transition. + bool initial = 8; +} + // AddConnectionEdit inserts a usage whose ends connect two features. message AddConnectionEdit { // Namespace FQN receiving the usage; empty means the document root. diff --git a/changes/unreleased/authoring-transitions.added.md b/changes/unreleased/authoring-transitions.added.md new file mode 100644 index 0000000000..98e76cf583 --- /dev/null +++ b/changes/unreleased/authoring-transitions.added.md @@ -0,0 +1 @@ +- **Source-preserving authoring now supports state transitions and behavior parameters.** Add regular or entry transitions with validated trigger, guard and effect clauses, and create calculations or actions with their parameters in one edit batch. diff --git a/client/java/README.md b/client/java/README.md index 2c2ebd948b..c4808c238e 100644 --- a/client/java/README.md +++ b/client/java/README.md @@ -395,9 +395,11 @@ and `SuiteTest.aCorruptedAnswerIsCaught` asserts each corruption is caught: | `rewrite-strings` | replaces each string | 70 | `Edit.AddMember` exposes `withAbstract`, `withRedefines`, `withDefault` and -`withDirection`; `Edit.AddSatisfy` and `Edit.AddRequirementConstraint` expose -requirement authoring. The client checks `member_modifiers`, `satisfy_authoring` -or `requirement_constraint_authoring` before sending those additions. +`withDirection`; `Edit.AddSatisfy`, `Edit.AddRequirementConstraint` and +`Edit.AddTransition` expose requirement and state-transition authoring. +`Edit.AddTransition.entry` constructs an entry transition. The client checks +`member_modifiers`, `satisfy_authoring`, `requirement_constraint_authoring` or +`transition_authoring` before sending those additions. ## Running the tests diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java index e9a171a4a7..8400222e86 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java @@ -92,6 +92,9 @@ public final class Capabilities { /** {@code ApplyEdits} accepts additional member modifiers and kinds. */ public static final String MEMBER_MODIFIERS = "member_modifiers"; + /** {@code ApplyEdits} can add transitions to state bodies. */ + public static final String TRANSITION_AUTHORING = "transition_authoring"; + /** {@code ApplyEdits} edits a model of several documents as one batch, answering each edited document by name. */ public static final String EDIT_DOCUMENTS = "edit_documents"; diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Edit.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Edit.java index 36c94914c6..45b983c52a 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Edit.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Edit.java @@ -264,6 +264,57 @@ public AddRequirementConstraint withName(String name) { } } + /** Inserts a transition or entry transition into a state body. */ + record AddTransition( + String owner, + Optional name, + Optional source, + String target, + Optional trigger, + Optional guard, + Optional effect, + boolean initial) + implements Edit { + + public AddTransition { + Objects.requireNonNull(owner, "owner"); + Objects.requireNonNull(name, "name"); + Objects.requireNonNull(source, "source"); + Objects.requireNonNull(target, "target"); + Objects.requireNonNull(trigger, "trigger"); + Objects.requireNonNull(guard, "guard"); + Objects.requireNonNull(effect, "effect"); + } + + public static AddTransition of(String owner, String source, String target) { + return new AddTransition( + owner, Optional.empty(), Optional.of(source), target, + Optional.empty(), Optional.empty(), Optional.empty(), false); + } + + public static AddTransition entry(String owner, String target) { + return new AddTransition( + owner, Optional.empty(), Optional.empty(), target, + Optional.empty(), Optional.empty(), Optional.empty(), true); + } + + public AddTransition withName(String name) { + return new AddTransition(owner, Optional.of(name), source, target, trigger, guard, effect, initial); + } + + public AddTransition withTrigger(String trigger) { + return new AddTransition(owner, name, source, target, Optional.of(trigger), guard, effect, initial); + } + + public AddTransition withGuard(String guard) { + return new AddTransition(owner, name, source, target, trigger, Optional.of(guard), effect, initial); + } + + public AddTransition withEffect(String effect) { + return new AddTransition(owner, name, source, target, trigger, guard, Optional.of(effect), initial); + } + } + /** * Inserts a connection-like usage between two feature references. * diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java index d2e4171304..880da6772c 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java @@ -879,11 +879,13 @@ public EditResult applyEdits(List edits, EditOptions options) { boolean requestsMemberModifiers = false; boolean requestsSatisfyAuthoring = false; boolean requestsRequirementConstraintAuthoring = false; + boolean requestsTransitionAuthoring = false; for (Edit edit : edits) { if (edit instanceof Edit.AddMember || edit instanceof Edit.AddConnection || edit instanceof Edit.AddSatisfy || edit instanceof Edit.AddRequirementConstraint + || edit instanceof Edit.AddTransition || edit instanceof Edit.Delete || edit instanceof Edit.Move) { requestsAuthoring = true; @@ -906,6 +908,9 @@ public EditResult applyEdits(List edits, EditOptions options) { if (edit instanceof Edit.AddRequirementConstraint) { requestsRequirementConstraintAuthoring = true; } + if (edit instanceof Edit.AddTransition) { + requestsTransitionAuthoring = true; + } } if (requestsAuthoring) { connection.capabilities().require(Capabilities.AUTHORING); @@ -922,6 +927,9 @@ public EditResult applyEdits(List edits, EditOptions options) { if (requestsRequirementConstraintAuthoring) { connection.capabilities().require(Capabilities.REQUIREMENT_CONSTRAINT_AUTHORING); } + if (requestsTransitionAuthoring) { + connection.capabilities().require(Capabilities.TRANSITION_AUTHORING); + } options.document().ifPresent(document -> connection.capabilities().require(Capabilities.EDIT_DOCUMENTS)); ApplyEditsRequest.Builder request = ApplyEditsRequest.newBuilder() diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/internal/Protos.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/internal/Protos.java index 2467c4dbea..29de16c455 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/internal/Protos.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/internal/Protos.java @@ -1046,6 +1046,18 @@ public static org.openmbee.opensysml.proto.EditOperation proto(Edit edit) { .setExpression(addConstraint.expression()); addConstraint.name().ifPresent(add::setName); builder.setAddRequirementConstraint(add); + } else if (edit instanceof Edit.AddTransition addTransition) { + org.openmbee.opensysml.proto.AddTransitionEdit.Builder add = + org.openmbee.opensysml.proto.AddTransitionEdit.newBuilder() + .setOwner(addTransition.owner()) + .setTarget(addTransition.target()) + .setInitial(addTransition.initial()); + addTransition.name().ifPresent(add::setName); + addTransition.source().ifPresent(add::setSource); + addTransition.trigger().ifPresent(add::setTrigger); + addTransition.guard().ifPresent(add::setGuard); + addTransition.effect().ifPresent(add::setEffect); + builder.setAddTransition(add); } else if (edit instanceof Edit.AddConnection addConnection) { org.openmbee.opensysml.proto.AddConnectionEdit.Builder add = org.openmbee.opensysml.proto.AddConnectionEdit.newBuilder() diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEdit.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEdit.java index 697541ab5e..8504ce1d73 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEdit.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEdit.java @@ -7,7 +7,7 @@ /** *
- * AddSatisfyEdit inserts a satisfy usage into a body that admits behavior usages.
+ * AddSatisfyEdit inserts a satisfy usage into any package or body that admits behavior usages.
  * 
* * Protobuf type {@code sysml.AddSatisfyEdit} @@ -55,7 +55,7 @@ private AddSatisfyEdit() { private volatile java.lang.Object owner_ = ""; /** *
-   * Namespace FQN receiving the usage.
+   * Body receiving the usage.
    * 
* * string owner = 1 [json_name = "owner"]; @@ -76,7 +76,7 @@ public java.lang.String getOwner() { } /** *
-   * Namespace FQN receiving the usage.
+   * Body receiving the usage.
    * 
* * string owner = 1 [json_name = "owner"]; @@ -423,7 +423,7 @@ protected Builder newBuilderForType( } /** *
-   * AddSatisfyEdit inserts a satisfy usage into a body that admits behavior usages.
+   * AddSatisfyEdit inserts a satisfy usage into any package or body that admits behavior usages.
    * 
* * Protobuf type {@code sysml.AddSatisfyEdit} @@ -618,7 +618,7 @@ public Builder mergeFrom( private java.lang.Object owner_ = ""; /** *
-     * Namespace FQN receiving the usage.
+     * Body receiving the usage.
      * 
* * string owner = 1 [json_name = "owner"]; @@ -638,7 +638,7 @@ public java.lang.String getOwner() { } /** *
-     * Namespace FQN receiving the usage.
+     * Body receiving the usage.
      * 
* * string owner = 1 [json_name = "owner"]; @@ -659,7 +659,7 @@ public java.lang.String getOwner() { } /** *
-     * Namespace FQN receiving the usage.
+     * Body receiving the usage.
      * 
* * string owner = 1 [json_name = "owner"]; @@ -676,7 +676,7 @@ public Builder setOwner( } /** *
-     * Namespace FQN receiving the usage.
+     * Body receiving the usage.
      * 
* * string owner = 1 [json_name = "owner"]; @@ -690,7 +690,7 @@ public Builder clearOwner() { } /** *
-     * Namespace FQN receiving the usage.
+     * Body receiving the usage.
      * 
* * string owner = 1 [json_name = "owner"]; diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEditOrBuilder.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEditOrBuilder.java index 3d8cf541ff..45baee1c40 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEditOrBuilder.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddSatisfyEditOrBuilder.java @@ -12,7 +12,7 @@ public interface AddSatisfyEditOrBuilder extends /** *
-   * Namespace FQN receiving the usage.
+   * Body receiving the usage.
    * 
* * string owner = 1 [json_name = "owner"]; @@ -21,7 +21,7 @@ public interface AddSatisfyEditOrBuilder extends java.lang.String getOwner(); /** *
-   * Namespace FQN receiving the usage.
+   * Body receiving the usage.
    * 
* * string owner = 1 [json_name = "owner"]; diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEdit.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEdit.java new file mode 100644 index 0000000000..1e9fb3b1c2 --- /dev/null +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEdit.java @@ -0,0 +1,1605 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: sysml.proto +// Protobuf Java Version: 4.33.1 + +package org.openmbee.opensysml.proto; + +/** + *
+ * AddTransitionEdit inserts a transition usage, or an entry transition, into a state body.
+ * 
+ * + * Protobuf type {@code sysml.AddTransitionEdit} + */ +@com.google.protobuf.Generated +public final class AddTransitionEdit extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:sysml.AddTransitionEdit) + AddTransitionEditOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 33, + /* patch= */ 1, + /* suffix= */ "", + "AddTransitionEdit"); + } + // Use AddTransitionEdit.newBuilder() to construct. + private AddTransitionEdit(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private AddTransitionEdit() { + owner_ = ""; + name_ = ""; + source_ = ""; + target_ = ""; + trigger_ = ""; + guard_ = ""; + effect_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_AddTransitionEdit_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_AddTransitionEdit_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.openmbee.opensysml.proto.AddTransitionEdit.class, org.openmbee.opensysml.proto.AddTransitionEdit.Builder.class); + } + + public static final int OWNER_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object owner_ = ""; + /** + *
+   * State body receiving the transition.
+   * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return The owner. + */ + @java.lang.Override + public java.lang.String getOwner() { + java.lang.Object ref = owner_; + 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(); + owner_ = s; + return s; + } + } + /** + *
+   * State body receiving the transition.
+   * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return The bytes for owner. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getOwnerBytes() { + java.lang.Object ref = owner_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + owner_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + /** + *
+   * Optional transition name.
+   * 
+ * + * string name = 2 [json_name = "name"]; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + 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(); + name_ = s; + return s; + } + } + /** + *
+   * Optional transition name.
+   * 
+ * + * string name = 2 [json_name = "name"]; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SOURCE_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object source_ = ""; + /** + *
+   * Source feature reference; empty only for an entry transition.
+   * 
+ * + * string source = 3 [json_name = "source"]; + * @return The source. + */ + @java.lang.Override + public java.lang.String getSource() { + java.lang.Object ref = source_; + 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(); + source_ = s; + return s; + } + } + /** + *
+   * Source feature reference; empty only for an entry transition.
+   * 
+ * + * string source = 3 [json_name = "source"]; + * @return The bytes for source. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSourceBytes() { + java.lang.Object ref = source_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + source_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TARGET_FIELD_NUMBER = 4; + @SuppressWarnings("serial") + private volatile java.lang.Object target_ = ""; + /** + *
+   * Target feature reference.
+   * 
+ * + * string target = 4 [json_name = "target"]; + * @return The target. + */ + @java.lang.Override + public java.lang.String getTarget() { + java.lang.Object ref = target_; + 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(); + target_ = s; + return s; + } + } + /** + *
+   * Target feature reference.
+   * 
+ * + * string target = 4 [json_name = "target"]; + * @return The bytes for target. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTargetBytes() { + java.lang.Object ref = target_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + target_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TRIGGER_FIELD_NUMBER = 5; + @SuppressWarnings("serial") + private volatile java.lang.Object trigger_ = ""; + /** + *
+   * Optional text after `accept`.
+   * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return The trigger. + */ + @java.lang.Override + public java.lang.String getTrigger() { + java.lang.Object ref = trigger_; + 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(); + trigger_ = s; + return s; + } + } + /** + *
+   * Optional text after `accept`.
+   * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return The bytes for trigger. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTriggerBytes() { + java.lang.Object ref = trigger_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + trigger_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int GUARD_FIELD_NUMBER = 6; + @SuppressWarnings("serial") + private volatile java.lang.Object guard_ = ""; + /** + *
+   * Optional boolean expression after `if`.
+   * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return The guard. + */ + @java.lang.Override + public java.lang.String getGuard() { + java.lang.Object ref = guard_; + 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(); + guard_ = s; + return s; + } + } + /** + *
+   * Optional boolean expression after `if`.
+   * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return The bytes for guard. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getGuardBytes() { + java.lang.Object ref = guard_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + guard_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EFFECT_FIELD_NUMBER = 7; + @SuppressWarnings("serial") + private volatile java.lang.Object effect_ = ""; + /** + *
+   * Optional effect text after `do`.
+   * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return The effect. + */ + @java.lang.Override + public java.lang.String getEffect() { + java.lang.Object ref = effect_; + 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(); + effect_ = s; + return s; + } + } + /** + *
+   * Optional effect text after `do`.
+   * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return The bytes for effect. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getEffectBytes() { + java.lang.Object ref = effect_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + effect_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int INITIAL_FIELD_NUMBER = 8; + private boolean initial_ = false; + /** + *
+   * Write `entry; then <target>;` instead of a regular transition.
+   * 
+ * + * bool initial = 8 [json_name = "initial"]; + * @return The initial. + */ + @java.lang.Override + public boolean getInitial() { + return initial_; + } + + 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.GeneratedMessage.isStringEmpty(owner_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, owner_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(source_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, source_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(target_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, target_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(trigger_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 5, trigger_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(guard_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 6, guard_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(effect_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 7, effect_); + } + if (initial_ != false) { + output.writeBool(8, initial_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(owner_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, owner_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, name_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(source_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, source_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(target_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, target_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(trigger_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(5, trigger_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(guard_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(6, guard_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(effect_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(7, effect_); + } + if (initial_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(8, initial_); + } + 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 org.openmbee.opensysml.proto.AddTransitionEdit)) { + return super.equals(obj); + } + org.openmbee.opensysml.proto.AddTransitionEdit other = (org.openmbee.opensysml.proto.AddTransitionEdit) obj; + + if (!getOwner() + .equals(other.getOwner())) return false; + if (!getName() + .equals(other.getName())) return false; + if (!getSource() + .equals(other.getSource())) return false; + if (!getTarget() + .equals(other.getTarget())) return false; + if (!getTrigger() + .equals(other.getTrigger())) return false; + if (!getGuard() + .equals(other.getGuard())) return false; + if (!getEffect() + .equals(other.getEffect())) return false; + if (getInitial() + != other.getInitial()) 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) + OWNER_FIELD_NUMBER; + hash = (53 * hash) + getOwner().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + SOURCE_FIELD_NUMBER; + hash = (53 * hash) + getSource().hashCode(); + hash = (37 * hash) + TARGET_FIELD_NUMBER; + hash = (53 * hash) + getTarget().hashCode(); + hash = (37 * hash) + TRIGGER_FIELD_NUMBER; + hash = (53 * hash) + getTrigger().hashCode(); + hash = (37 * hash) + GUARD_FIELD_NUMBER; + hash = (53 * hash) + getGuard().hashCode(); + hash = (37 * hash) + EFFECT_FIELD_NUMBER; + hash = (53 * hash) + getEffect().hashCode(); + hash = (37 * hash) + INITIAL_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getInitial()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static org.openmbee.opensysml.proto.AddTransitionEdit parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static org.openmbee.opensysml.proto.AddTransitionEdit parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.openmbee.opensysml.proto.AddTransitionEdit parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.openmbee.opensysml.proto.AddTransitionEdit 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.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+   * AddTransitionEdit inserts a transition usage, or an entry transition, into a state body.
+   * 
+ * + * Protobuf type {@code sysml.AddTransitionEdit} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:sysml.AddTransitionEdit) + org.openmbee.opensysml.proto.AddTransitionEditOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_AddTransitionEdit_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_AddTransitionEdit_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.openmbee.opensysml.proto.AddTransitionEdit.class, org.openmbee.opensysml.proto.AddTransitionEdit.Builder.class); + } + + // Construct using org.openmbee.opensysml.proto.AddTransitionEdit.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + owner_ = ""; + name_ = ""; + source_ = ""; + target_ = ""; + trigger_ = ""; + guard_ = ""; + effect_ = ""; + initial_ = false; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_AddTransitionEdit_descriptor; + } + + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEdit getDefaultInstanceForType() { + return org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } + + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEdit build() { + org.openmbee.opensysml.proto.AddTransitionEdit result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEdit buildPartial() { + org.openmbee.opensysml.proto.AddTransitionEdit result = new org.openmbee.opensysml.proto.AddTransitionEdit(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(org.openmbee.opensysml.proto.AddTransitionEdit result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.owner_ = owner_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.source_ = source_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.target_ = target_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.trigger_ = trigger_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.guard_ = guard_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.effect_ = effect_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.initial_ = initial_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.openmbee.opensysml.proto.AddTransitionEdit) { + return mergeFrom((org.openmbee.opensysml.proto.AddTransitionEdit)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.openmbee.opensysml.proto.AddTransitionEdit other) { + if (other == org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance()) return this; + if (!other.getOwner().isEmpty()) { + owner_ = other.owner_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getSource().isEmpty()) { + source_ = other.source_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getTarget().isEmpty()) { + target_ = other.target_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (!other.getTrigger().isEmpty()) { + trigger_ = other.trigger_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (!other.getGuard().isEmpty()) { + guard_ = other.guard_; + bitField0_ |= 0x00000020; + onChanged(); + } + if (!other.getEffect().isEmpty()) { + effect_ = other.effect_; + bitField0_ |= 0x00000040; + onChanged(); + } + if (other.getInitial() != false) { + setInitial(other.getInitial()); + } + 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: { + owner_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + source_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: { + target_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: { + trigger_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 50: { + guard_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000020; + break; + } // case 50 + case 58: { + effect_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000040; + break; + } // case 58 + case 64: { + initial_ = input.readBool(); + bitField0_ |= 0x00000080; + break; + } // case 64 + 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 java.lang.Object owner_ = ""; + /** + *
+     * State body receiving the transition.
+     * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return The owner. + */ + public java.lang.String getOwner() { + java.lang.Object ref = owner_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + owner_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * State body receiving the transition.
+     * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return The bytes for owner. + */ + public com.google.protobuf.ByteString + getOwnerBytes() { + java.lang.Object ref = owner_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + owner_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * State body receiving the transition.
+     * 
+ * + * string owner = 1 [json_name = "owner"]; + * @param value The owner to set. + * @return This builder for chaining. + */ + public Builder setOwner( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + owner_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+     * State body receiving the transition.
+     * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return This builder for chaining. + */ + public Builder clearOwner() { + owner_ = getDefaultInstance().getOwner(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + *
+     * State body receiving the transition.
+     * 
+ * + * string owner = 1 [json_name = "owner"]; + * @param value The bytes for owner to set. + * @return This builder for chaining. + */ + public Builder setOwnerBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + owner_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + /** + *
+     * Optional transition name.
+     * 
+ * + * string name = 2 [json_name = "name"]; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Optional transition name.
+     * 
+ * + * string name = 2 [json_name = "name"]; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Optional transition name.
+     * 
+ * + * string name = 2 [json_name = "name"]; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + name_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+     * Optional transition name.
+     * 
+ * + * string name = 2 [json_name = "name"]; + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + *
+     * Optional transition name.
+     * 
+ * + * string name = 2 [json_name = "name"]; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object source_ = ""; + /** + *
+     * Source feature reference; empty only for an entry transition.
+     * 
+ * + * string source = 3 [json_name = "source"]; + * @return The source. + */ + public java.lang.String getSource() { + java.lang.Object ref = source_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + source_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Source feature reference; empty only for an entry transition.
+     * 
+ * + * string source = 3 [json_name = "source"]; + * @return The bytes for source. + */ + public com.google.protobuf.ByteString + getSourceBytes() { + java.lang.Object ref = source_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + source_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Source feature reference; empty only for an entry transition.
+     * 
+ * + * string source = 3 [json_name = "source"]; + * @param value The source to set. + * @return This builder for chaining. + */ + public Builder setSource( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + source_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+     * Source feature reference; empty only for an entry transition.
+     * 
+ * + * string source = 3 [json_name = "source"]; + * @return This builder for chaining. + */ + public Builder clearSource() { + source_ = getDefaultInstance().getSource(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + *
+     * Source feature reference; empty only for an entry transition.
+     * 
+ * + * string source = 3 [json_name = "source"]; + * @param value The bytes for source to set. + * @return This builder for chaining. + */ + public Builder setSourceBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + source_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object target_ = ""; + /** + *
+     * Target feature reference.
+     * 
+ * + * string target = 4 [json_name = "target"]; + * @return The target. + */ + public java.lang.String getTarget() { + java.lang.Object ref = target_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + target_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Target feature reference.
+     * 
+ * + * string target = 4 [json_name = "target"]; + * @return The bytes for target. + */ + public com.google.protobuf.ByteString + getTargetBytes() { + java.lang.Object ref = target_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + target_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Target feature reference.
+     * 
+ * + * string target = 4 [json_name = "target"]; + * @param value The target to set. + * @return This builder for chaining. + */ + public Builder setTarget( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + target_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+     * Target feature reference.
+     * 
+ * + * string target = 4 [json_name = "target"]; + * @return This builder for chaining. + */ + public Builder clearTarget() { + target_ = getDefaultInstance().getTarget(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + /** + *
+     * Target feature reference.
+     * 
+ * + * string target = 4 [json_name = "target"]; + * @param value The bytes for target to set. + * @return This builder for chaining. + */ + public Builder setTargetBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + target_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private java.lang.Object trigger_ = ""; + /** + *
+     * Optional text after `accept`.
+     * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return The trigger. + */ + public java.lang.String getTrigger() { + java.lang.Object ref = trigger_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + trigger_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Optional text after `accept`.
+     * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return The bytes for trigger. + */ + public com.google.protobuf.ByteString + getTriggerBytes() { + java.lang.Object ref = trigger_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + trigger_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Optional text after `accept`.
+     * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @param value The trigger to set. + * @return This builder for chaining. + */ + public Builder setTrigger( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + trigger_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + *
+     * Optional text after `accept`.
+     * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return This builder for chaining. + */ + public Builder clearTrigger() { + trigger_ = getDefaultInstance().getTrigger(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + /** + *
+     * Optional text after `accept`.
+     * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @param value The bytes for trigger to set. + * @return This builder for chaining. + */ + public Builder setTriggerBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + trigger_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private java.lang.Object guard_ = ""; + /** + *
+     * Optional boolean expression after `if`.
+     * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return The guard. + */ + public java.lang.String getGuard() { + java.lang.Object ref = guard_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + guard_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Optional boolean expression after `if`.
+     * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return The bytes for guard. + */ + public com.google.protobuf.ByteString + getGuardBytes() { + java.lang.Object ref = guard_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + guard_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Optional boolean expression after `if`.
+     * 
+ * + * string guard = 6 [json_name = "guard"]; + * @param value The guard to set. + * @return This builder for chaining. + */ + public Builder setGuard( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + guard_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + *
+     * Optional boolean expression after `if`.
+     * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return This builder for chaining. + */ + public Builder clearGuard() { + guard_ = getDefaultInstance().getGuard(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + return this; + } + /** + *
+     * Optional boolean expression after `if`.
+     * 
+ * + * string guard = 6 [json_name = "guard"]; + * @param value The bytes for guard to set. + * @return This builder for chaining. + */ + public Builder setGuardBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + guard_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + private java.lang.Object effect_ = ""; + /** + *
+     * Optional effect text after `do`.
+     * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return The effect. + */ + public java.lang.String getEffect() { + java.lang.Object ref = effect_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + effect_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * Optional effect text after `do`.
+     * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return The bytes for effect. + */ + public com.google.protobuf.ByteString + getEffectBytes() { + java.lang.Object ref = effect_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + effect_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * Optional effect text after `do`.
+     * 
+ * + * string effect = 7 [json_name = "effect"]; + * @param value The effect to set. + * @return This builder for chaining. + */ + public Builder setEffect( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + effect_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + *
+     * Optional effect text after `do`.
+     * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return This builder for chaining. + */ + public Builder clearEffect() { + effect_ = getDefaultInstance().getEffect(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + /** + *
+     * Optional effect text after `do`.
+     * 
+ * + * string effect = 7 [json_name = "effect"]; + * @param value The bytes for effect to set. + * @return This builder for chaining. + */ + public Builder setEffectBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + effect_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + private boolean initial_ ; + /** + *
+     * Write `entry; then <target>;` instead of a regular transition.
+     * 
+ * + * bool initial = 8 [json_name = "initial"]; + * @return The initial. + */ + @java.lang.Override + public boolean getInitial() { + return initial_; + } + /** + *
+     * Write `entry; then <target>;` instead of a regular transition.
+     * 
+ * + * bool initial = 8 [json_name = "initial"]; + * @param value The initial to set. + * @return This builder for chaining. + */ + public Builder setInitial(boolean value) { + + initial_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + /** + *
+     * Write `entry; then <target>;` instead of a regular transition.
+     * 
+ * + * bool initial = 8 [json_name = "initial"]; + * @return This builder for chaining. + */ + public Builder clearInitial() { + bitField0_ = (bitField0_ & ~0x00000080); + initial_ = false; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:sysml.AddTransitionEdit) + } + + // @@protoc_insertion_point(class_scope:sysml.AddTransitionEdit) + private static final org.openmbee.opensysml.proto.AddTransitionEdit DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.openmbee.opensysml.proto.AddTransitionEdit(); + } + + public static org.openmbee.opensysml.proto.AddTransitionEdit getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AddTransitionEdit 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 org.openmbee.opensysml.proto.AddTransitionEdit getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEditOrBuilder.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEditOrBuilder.java new file mode 100644 index 0000000000..8d3e652074 --- /dev/null +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/AddTransitionEditOrBuilder.java @@ -0,0 +1,162 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: sysml.proto +// Protobuf Java Version: 4.33.1 + +package org.openmbee.opensysml.proto; + +@com.google.protobuf.Generated +public interface AddTransitionEditOrBuilder extends + // @@protoc_insertion_point(interface_extends:sysml.AddTransitionEdit) + com.google.protobuf.MessageOrBuilder { + + /** + *
+   * State body receiving the transition.
+   * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return The owner. + */ + java.lang.String getOwner(); + /** + *
+   * State body receiving the transition.
+   * 
+ * + * string owner = 1 [json_name = "owner"]; + * @return The bytes for owner. + */ + com.google.protobuf.ByteString + getOwnerBytes(); + + /** + *
+   * Optional transition name.
+   * 
+ * + * string name = 2 [json_name = "name"]; + * @return The name. + */ + java.lang.String getName(); + /** + *
+   * Optional transition name.
+   * 
+ * + * string name = 2 [json_name = "name"]; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+   * Source feature reference; empty only for an entry transition.
+   * 
+ * + * string source = 3 [json_name = "source"]; + * @return The source. + */ + java.lang.String getSource(); + /** + *
+   * Source feature reference; empty only for an entry transition.
+   * 
+ * + * string source = 3 [json_name = "source"]; + * @return The bytes for source. + */ + com.google.protobuf.ByteString + getSourceBytes(); + + /** + *
+   * Target feature reference.
+   * 
+ * + * string target = 4 [json_name = "target"]; + * @return The target. + */ + java.lang.String getTarget(); + /** + *
+   * Target feature reference.
+   * 
+ * + * string target = 4 [json_name = "target"]; + * @return The bytes for target. + */ + com.google.protobuf.ByteString + getTargetBytes(); + + /** + *
+   * Optional text after `accept`.
+   * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return The trigger. + */ + java.lang.String getTrigger(); + /** + *
+   * Optional text after `accept`.
+   * 
+ * + * string trigger = 5 [json_name = "trigger"]; + * @return The bytes for trigger. + */ + com.google.protobuf.ByteString + getTriggerBytes(); + + /** + *
+   * Optional boolean expression after `if`.
+   * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return The guard. + */ + java.lang.String getGuard(); + /** + *
+   * Optional boolean expression after `if`.
+   * 
+ * + * string guard = 6 [json_name = "guard"]; + * @return The bytes for guard. + */ + com.google.protobuf.ByteString + getGuardBytes(); + + /** + *
+   * Optional effect text after `do`.
+   * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return The effect. + */ + java.lang.String getEffect(); + /** + *
+   * Optional effect text after `do`.
+   * 
+ * + * string effect = 7 [json_name = "effect"]; + * @return The bytes for effect. + */ + com.google.protobuf.ByteString + getEffectBytes(); + + /** + *
+   * Write `entry; then <target>;` instead of a regular transition.
+   * 
+ * + * bool initial = 8 [json_name = "initial"]; + * @return The initial. + */ + boolean getInitial(); +} diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperation.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperation.java index af4588b484..c6fc403915 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperation.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperation.java @@ -61,6 +61,7 @@ public enum OperationCase ADD_CONNECTION(6), ADD_SATISFY(7), ADD_REQUIREMENT_CONSTRAINT(8), + ADD_TRANSITION(9), OPERATION_NOT_SET(0); private final int value; private OperationCase(int value) { @@ -86,6 +87,7 @@ public static OperationCase forNumber(int value) { case 6: return ADD_CONNECTION; case 7: return ADD_SATISFY; case 8: return ADD_REQUIREMENT_CONSTRAINT; + case 9: return ADD_TRANSITION; case 0: return OPERATION_NOT_SET; default: return null; } @@ -349,6 +351,37 @@ public org.openmbee.opensysml.proto.AddRequirementConstraintEditOrBuilder getAdd return org.openmbee.opensysml.proto.AddRequirementConstraintEdit.getDefaultInstance(); } + public static final int ADD_TRANSITION_FIELD_NUMBER = 9; + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + * @return Whether the addTransition field is set. + */ + @java.lang.Override + public boolean hasAddTransition() { + return operationCase_ == 9; + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + * @return The addTransition. + */ + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEdit getAddTransition() { + if (operationCase_ == 9) { + return (org.openmbee.opensysml.proto.AddTransitionEdit) operation_; + } + return org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEditOrBuilder getAddTransitionOrBuilder() { + if (operationCase_ == 9) { + return (org.openmbee.opensysml.proto.AddTransitionEdit) operation_; + } + return org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -387,6 +420,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (operationCase_ == 8) { output.writeMessage(8, (org.openmbee.opensysml.proto.AddRequirementConstraintEdit) operation_); } + if (operationCase_ == 9) { + output.writeMessage(9, (org.openmbee.opensysml.proto.AddTransitionEdit) operation_); + } getUnknownFields().writeTo(output); } @@ -428,6 +464,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(8, (org.openmbee.opensysml.proto.AddRequirementConstraintEdit) operation_); } + if (operationCase_ == 9) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, (org.openmbee.opensysml.proto.AddTransitionEdit) operation_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -477,6 +517,10 @@ public boolean equals(final java.lang.Object obj) { if (!getAddRequirementConstraint() .equals(other.getAddRequirementConstraint())) return false; break; + case 9: + if (!getAddTransition() + .equals(other.getAddTransition())) return false; + break; case 0: default: } @@ -524,6 +568,10 @@ public int hashCode() { hash = (37 * hash) + ADD_REQUIREMENT_CONSTRAINT_FIELD_NUMBER; hash = (53 * hash) + getAddRequirementConstraint().hashCode(); break; + case 9: + hash = (37 * hash) + ADD_TRANSITION_FIELD_NUMBER; + hash = (53 * hash) + getAddTransition().hashCode(); + break; case 0: default: } @@ -686,6 +734,9 @@ public Builder clear() { if (addRequirementConstraintBuilder_ != null) { addRequirementConstraintBuilder_.clear(); } + if (addTransitionBuilder_ != null) { + addTransitionBuilder_.clear(); + } operationCase_ = 0; operation_ = null; return this; @@ -759,6 +810,10 @@ private void buildPartialOneofs(org.openmbee.opensysml.proto.EditOperation resul addRequirementConstraintBuilder_ != null) { result.operation_ = addRequirementConstraintBuilder_.build(); } + if (operationCase_ == 9 && + addTransitionBuilder_ != null) { + result.operation_ = addTransitionBuilder_.build(); + } } @java.lang.Override @@ -806,6 +861,10 @@ public Builder mergeFrom(org.openmbee.opensysml.proto.EditOperation other) { mergeAddRequirementConstraint(other.getAddRequirementConstraint()); break; } + case ADD_TRANSITION: { + mergeAddTransition(other.getAddTransition()); + break; + } case OPERATION_NOT_SET: { break; } @@ -892,6 +951,13 @@ public Builder mergeFrom( operationCase_ = 8; break; } // case 66 + case 74: { + input.readMessage( + internalGetAddTransitionFieldBuilder().getBuilder(), + extensionRegistry); + operationCase_ = 9; + break; + } // case 74 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -2060,6 +2126,148 @@ public org.openmbee.opensysml.proto.AddRequirementConstraintEditOrBuilder getAdd return addRequirementConstraintBuilder_; } + private com.google.protobuf.SingleFieldBuilder< + org.openmbee.opensysml.proto.AddTransitionEdit, org.openmbee.opensysml.proto.AddTransitionEdit.Builder, org.openmbee.opensysml.proto.AddTransitionEditOrBuilder> addTransitionBuilder_; + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + * @return Whether the addTransition field is set. + */ + @java.lang.Override + public boolean hasAddTransition() { + return operationCase_ == 9; + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + * @return The addTransition. + */ + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEdit getAddTransition() { + if (addTransitionBuilder_ == null) { + if (operationCase_ == 9) { + return (org.openmbee.opensysml.proto.AddTransitionEdit) operation_; + } + return org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } else { + if (operationCase_ == 9) { + return addTransitionBuilder_.getMessage(); + } + return org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + public Builder setAddTransition(org.openmbee.opensysml.proto.AddTransitionEdit value) { + if (addTransitionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + operation_ = value; + onChanged(); + } else { + addTransitionBuilder_.setMessage(value); + } + operationCase_ = 9; + return this; + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + public Builder setAddTransition( + org.openmbee.opensysml.proto.AddTransitionEdit.Builder builderForValue) { + if (addTransitionBuilder_ == null) { + operation_ = builderForValue.build(); + onChanged(); + } else { + addTransitionBuilder_.setMessage(builderForValue.build()); + } + operationCase_ = 9; + return this; + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + public Builder mergeAddTransition(org.openmbee.opensysml.proto.AddTransitionEdit value) { + if (addTransitionBuilder_ == null) { + if (operationCase_ == 9 && + operation_ != org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance()) { + operation_ = org.openmbee.opensysml.proto.AddTransitionEdit.newBuilder((org.openmbee.opensysml.proto.AddTransitionEdit) operation_) + .mergeFrom(value).buildPartial(); + } else { + operation_ = value; + } + onChanged(); + } else { + if (operationCase_ == 9) { + addTransitionBuilder_.mergeFrom(value); + } else { + addTransitionBuilder_.setMessage(value); + } + } + operationCase_ = 9; + return this; + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + public Builder clearAddTransition() { + if (addTransitionBuilder_ == null) { + if (operationCase_ == 9) { + operationCase_ = 0; + operation_ = null; + onChanged(); + } + } else { + if (operationCase_ == 9) { + operationCase_ = 0; + operation_ = null; + } + addTransitionBuilder_.clear(); + } + return this; + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + public org.openmbee.opensysml.proto.AddTransitionEdit.Builder getAddTransitionBuilder() { + return internalGetAddTransitionFieldBuilder().getBuilder(); + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.AddTransitionEditOrBuilder getAddTransitionOrBuilder() { + if ((operationCase_ == 9) && (addTransitionBuilder_ != null)) { + return addTransitionBuilder_.getMessageOrBuilder(); + } else { + if (operationCase_ == 9) { + return (org.openmbee.opensysml.proto.AddTransitionEdit) operation_; + } + return org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } + } + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + private com.google.protobuf.SingleFieldBuilder< + org.openmbee.opensysml.proto.AddTransitionEdit, org.openmbee.opensysml.proto.AddTransitionEdit.Builder, org.openmbee.opensysml.proto.AddTransitionEditOrBuilder> + internalGetAddTransitionFieldBuilder() { + if (addTransitionBuilder_ == null) { + if (!(operationCase_ == 9)) { + operation_ = org.openmbee.opensysml.proto.AddTransitionEdit.getDefaultInstance(); + } + addTransitionBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.openmbee.opensysml.proto.AddTransitionEdit, org.openmbee.opensysml.proto.AddTransitionEdit.Builder, org.openmbee.opensysml.proto.AddTransitionEditOrBuilder>( + (org.openmbee.opensysml.proto.AddTransitionEdit) operation_, + getParentForChildren(), + isClean()); + operation_ = null; + } + operationCase_ = 9; + onChanged(); + return addTransitionBuilder_; + } + // @@protoc_insertion_point(builder_scope:sysml.EditOperation) } diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperationOrBuilder.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperationOrBuilder.java index 8d5b7442a4..85296f2572 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperationOrBuilder.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/EditOperationOrBuilder.java @@ -130,5 +130,20 @@ public interface EditOperationOrBuilder extends */ org.openmbee.opensysml.proto.AddRequirementConstraintEditOrBuilder getAddRequirementConstraintOrBuilder(); + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + * @return Whether the addTransition field is set. + */ + boolean hasAddTransition(); + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + * @return The addTransition. + */ + org.openmbee.opensysml.proto.AddTransitionEdit getAddTransition(); + /** + * .sysml.AddTransitionEdit add_transition = 9 [json_name = "addTransition"]; + */ + org.openmbee.opensysml.proto.AddTransitionEditOrBuilder getAddTransitionOrBuilder(); + org.openmbee.opensysml.proto.EditOperation.OperationCase getOperationCase(); } diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java index 343211eeaf..f09765c6d0 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java @@ -296,6 +296,11 @@ public static void registerAllExtensions( static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_sysml_AddRequirementConstraintEdit_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_sysml_AddTransitionEdit_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_sysml_AddTransitionEdit_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_sysml_AddConnectionEdit_descriptor; static final @@ -847,7 +852,7 @@ public static void registerAllExtensions( "operations\030\002 \003(\0132\024.sysml.EditOperationR\n" + "operations\022\032\n\010document\030\003 \001(\tR\010document\022)" + "\n\020accept_documents\030\004 \001(\010R\017acceptDocument" + - "s\"\352\003\n\rEditOperation\0222\n\tset_value\030\001 \001(\0132\023" + + "s\"\255\004\n\rEditOperation\0222\n\tset_value\030\001 \001(\0132\023" + ".sysml.SetValueEditH\000R\010setValue\022+\n\006renam" + "e\030\002 \001(\0132\021.sysml.RenameEditH\000R\006rename\0225\n\n" + "add_member\030\003 \001(\0132\024.sysml.AddMemberEditH\000" + @@ -859,323 +864,330 @@ public static void registerAllExtensions( "fyEditH\000R\naddSatisfy\022c\n\032add_requirement_" + "constraint\030\010 \001(\0132#.sysml.AddRequirementC" + "onstraintEditH\000R\030addRequirementConstrain" + - "tB\013\n\toperation\"\271\002\n\rAddMemberEdit\022\024\n\005owne" + - "r\030\001 \001(\tR\005owner\022\022\n\004kind\030\002 \001(\tR\004kind\022\022\n\004na" + - "me\030\003 \001(\tR\004name\022\022\n\004type\030\004 \001(\tR\004type\022\"\n\014mu" + - "ltiplicity\030\005 \001(\tR\014multiplicity\022\024\n\005value\030" + - "\006 \001(\tR\005value\022 \n\013specializes\030\007 \003(\tR\013speci" + - "alizes\022\037\n\013is_abstract\030\010 \001(\010R\nisAbstract\022" + - "\034\n\tredefines\030\t \003(\tR\tredefines\022\035\n\nis_defa" + - "ult\030\n \001(\010R\tisDefault\022\034\n\tdirection\030\013 \001(\tR" + - "\tdirection\"\267\001\n\016AddSatisfyEdit\022\024\n\005owner\030\001" + - " \001(\tR\005owner\022 \n\013requirement\030\002 \001(\tR\013requir" + - "ement\022-\n\022satisfying_feature\030\003 \001(\tR\021satis" + - "fyingFeature\022\037\n\013is_asserted\030\004 \001(\010R\nisAss" + - "erted\022\035\n\nis_negated\030\005 \001(\010R\tisNegated\"|\n\034" + - "AddRequirementConstraintEdit\022\024\n\005owner\030\001 " + - "\001(\tR\005owner\022\022\n\004kind\030\002 \001(\tR\004kind\022\036\n\nexpres" + - "sion\030\003 \001(\tR\nexpression\022\022\n\004name\030\004 \001(\tR\004na" + - "me\"\227\001\n\021AddConnectionEdit\022\024\n\005owner\030\001 \001(\tR" + - "\005owner\022\022\n\004kind\030\002 \001(\tR\004kind\022\031\n\010from_end\030\003" + - " \001(\tR\007fromEnd\022\025\n\006to_end\030\004 \001(\tR\005toEnd\022\022\n\004" + - "name\030\005 \001(\tR\004name\022\022\n\004type\030\006 \001(\tR\004type\">\n\n" + - "DeleteEdit\022\026\n\006target\030\001 \001(\tR\006target\022\030\n\007ca" + - "scade\030\002 \001(\010R\007cascade\"8\n\010MoveEdit\022\026\n\006targ" + - "et\030\001 \001(\tR\006target\022\024\n\005owner\030\002 \001(\tR\005owner\"<" + - "\n\014SetValueEdit\022\026\n\006target\030\001 \001(\tR\006target\022\024" + - "\n\005value\030\002 \001(\tR\005value\"?\n\nRenameEdit\022\026\n\006ta" + - "rget\030\001 \001(\tR\006target\022\031\n\010new_name\030\002 \001(\tR\007ne" + - "wName\"\350\002\n\022ApplyEditsResponse\022\030\n\007content\030" + - "\001 \001(\tR\007content\022,\n\007applied\030\002 \003(\0132\022.sysml." + - "AppliedEditR\007applied\022\024\n\005error\030\003 \001(\tR\005err" + - "or\022,\n\007failure\030\004 \001(\0162\022.sysml.EditFailureR" + - "\007failure\0223\n\013diagnostics\030\005 \003(\0132\021.sysml.Di" + - "agnosticR\013diagnostics\022-\n\022referring_eleme" + - "nts\030\006 \003(\tR\021referringElements\0223\n\tdocument" + - "s\030\007 \003(\0132\025.sysml.EditedDocumentR\tdocument" + - "s\022-\n\treferrers\030\010 \003(\0132\017.sysml.ReferrerR\tr" + - "eferrers\">\n\016EditedDocument\022\022\n\004name\030\001 \001(\t" + - "R\004name\022\030\n\007content\030\002 \001(\tR\007content\":\n\010Refe" + - "rrer\022\022\n\004name\030\001 \001(\tR\004name\022\032\n\010document\030\002 \001" + - "(\tR\010document\"\320\001\n\013AppliedEdit\022\'\n\017operatio" + - "n_index\030\001 \001(\005R\016operationIndex\022\026\n\006target\030" + - "\002 \001(\tR\006target\022\026\n\006offset\030\003 \001(\005R\006offset\022\026\n" + - "\006length\030\004 \001(\005R\006length\022\031\n\010old_text\030\005 \001(\tR" + - "\007oldText\022\031\n\010new_text\030\006 \001(\tR\007newText\022\032\n\010d" + - "ocument\030\007 \001(\tR\010document\"\375\003\n\nSymbolInfo\022\016" + - "\n\002id\030\001 \001(\tR\002id\022\022\n\004name\030\002 \001(\tR\004name\022\022\n\004ki" + - "nd\030\003 \001(\tR\004kind\022;\n\010metadata\030\004 \003(\0132\037.sysml" + - ".SymbolInfo.MetadataEntryR\010metadata\022\033\n\tc" + - "hild_ids\030\005 \003(\tR\010childIds\0224\n\nattributes\030\006" + - " \003(\0132\024.sysml.AttributeInfoR\nattributes\022," + - "\n\ttype_info\030\007 \001(\0132\017.sysml.TypeInfoR\010type" + - "Info\022;\n\014multiplicity\030\010 \001(\0132\027.sysml.Multi" + - "plicityInfoR\014multiplicity\022?\n\017specializat" + - "ions\030\t \003(\0132\025.sysml.SpecializationR\017speci" + - "alizations\022>\n\033withheld_library_attribute" + - "s\030\n \001(\005R\031withheldLibraryAttributes\032;\n\rMe" + - "tadataEntry\022\020\n\003key\030\001 \001(\tR\003key\022\024\n\005value\030\002" + - " \001(\tR\005value:\0028\001\"~\n\016Specialization\022\022\n\004kin" + - "d\030\001 \001(\tR\004kind\022\032\n\010declared\030\002 \001(\tR\010declare" + - "d\022\033\n\ttarget_id\030\003 \001(\tR\010targetId\022\037\n\013target" + - "_kind\030\004 \001(\tR\ntargetKind\"\345\001\n\010TypeInfo\022\032\n\010" + - "declared\030\001 \001(\tR\010declared\022\037\n\013resolved_id\030" + - "\002 \001(\tR\nresolvedId\022#\n\rresolved_kind\030\003 \001(\t" + - "R\014resolvedKind\022\034\n\tprimitive\030\004 \001(\tR\tprimi" + - "tive\022)\n\020primitive_source\030\005 \001(\tR\017primitiv" + - "eSource\022\032\n\010quantity\030\006 \001(\010R\010quantity\022\022\n\004u" + - "nit\030\007 \001(\tR\004unit\">\n\020MultiplicityInfo\022\024\n\005l" + - "ower\030\001 \001(\tR\005lower\022\024\n\005upper\030\002 \001(\tR\005upper\"" + - "o\n\rAttributeInfo\022\022\n\004name\030\001 \001(\tR\004name\022\022\n\004" + - "type\030\002 \001(\tR\004type\022\"\n\005value\030\003 \001(\0132\014.sysml." + - "ValueR\005value\022\022\n\004unit\030\004 \001(\tR\004unit\"\245\007\n\005Val" + - "ue\022\035\n\tint_value\030\001 \001(\003H\000R\010intValue\022\037\n\nrea" + - "l_value\030\002 \001(\001H\000R\trealValue\022\037\n\nbool_value" + - "\030\003 \001(\010H\000R\tboolValue\022#\n\014string_value\030\004 \001(" + - "\tH\000R\013stringValue\022!\n\013instance_id\030\005 \001(\003H\000R" + - "\ninstanceId\0222\n\010sequence\030\006 \001(\0132\024.sysml.Va" + - "lueSequenceH\000R\010sequence\022\024\n\004null\030\007 \001(\tH\000R" + - "\004null\022-\n\010quantity\030\010 \001(\0132\017.sysml.Quantity" + - "H\000R\010quantity\0227\n\014enum_literal\030\t \001(\0132\022.sys" + - "ml.EnumLiteralH\000R\013enumLiteral\022\026\n\005unset\030\n" + - " \001(\010H\000R\005unset\022*\n\007complex\030\013 \001(\0132\016.sysml.C" + - "omplexH\000R\007complex\022$\n\005array\030\014 \001(\0132\014.sysml" + - ".ArrayH\000R\005array\022\'\n\006vector\030\r \001(\0132\r.sysml." + - "VectorH\000R\006vector\022@\n\017vector_quantity\030\016 \001(" + - "\0132\025.sysml.VectorQuantityH\000R\016vectorQuanti" + - "ty\022@\n\017measurement_ref\030\017 \001(\0132\025.sysml.Meas" + - "urementRefH\000R\016measurementRef\022\034\n\010infinity" + - "\030\020 \001(\010H\000R\010infinity\022-\n\010function\030\021 \001(\0132\017.s" + - "ysml.FunctionH\000R\010function\022#\n\003set\030\022 \001(\0132\017" + - ".sysml.ValueSetH\000R\003set\022@\n\017tensor_quantit" + - "y\030\023 \001(\0132\025.sysml.TensorQuantityH\000R\016tensor" + - "Quantity\0223\n\nmetaobject\030\024 \001(\0132\021.sysml.Met" + - "aobjectH\000R\nmetaobject\0229\n\014undetermined\030\025 " + - "\001(\0132\023.sysml.UndeterminedH\000R\014undetermined" + - "B\006\n\004kind\"N\n\nMetaobject\022\035\n\nelement_id\030\001 \001" + - "(\tR\telementId\022!\n\014metaclass_id\030\002 \001(\tR\013met" + - "aclassId\"U\n\014Undetermined\022\026\n\006reason\030\001 \001(\t" + - "R\006reason\022-\n\005count\030\002 \001(\0132\027.sysml.Multipli" + - "cityInfoR\005count\"<\n\010Function\022\027\n\007calc_id\030\001" + - " \001(\tR\006calcId\022\027\n\007self_id\030\002 \001(\003R\006selfId\"4\n" + - "\010ValueSet\022(\n\010elements\030\001 \003(\0132\014.sysml.Valu" + - "eR\010elements\"a\n\016TensorQuantity\022\036\n\ndimensi" + - "ons\030\001 \003(\003R\ndimensions\022/\n\ncomponents\030\002 \003(" + - "\0132\017.sysml.QuantityR\ncomponents\"Q\n\005Array\022" + - "\036\n\ndimensions\030\001 \003(\003R\ndimensions\022(\n\010eleme" + - "nts\030\002 \003(\0132\014.sysml.ValueR\010elements\"6\n\006Vec" + - "tor\022,\n\ncomponents\030\001 \003(\0132\014.sysml.ValueR\nc" + - "omponents\"A\n\016VectorQuantity\022/\n\ncomponent" + - "s\030\001 \003(\0132\017.sysml.QuantityR\ncomponents\";\n\007" + - "Complex\022\022\n\004real\030\001 \001(\001R\004real\022\034\n\timaginary" + - "\030\002 \001(\001R\timaginary\"\213\001\n\013EnumLiteral\022\035\n\nlit" + - "eral_id\030\001 \001(\tR\tliteralId\022%\n\016enumeration_" + - "id\030\002 \001(\tR\renumerationId\022\022\n\004name\030\003 \001(\tR\004n" + - "ame\022\"\n\005value\030\004 \001(\0132\014.sysml.ValueR\005value\"" + - "9\n\rValueSequence\022(\n\010elements\030\001 \003(\0132\014.sys" + - "ml.ValueR\010elements\"\251\001\n\010Quantity\022%\n\rint_m" + - "agnitude\030\001 \001(\003H\000R\014intMagnitude\022\'\n\016real_m" + - "agnitude\030\002 \001(\001H\000R\rrealMagnitude\022\022\n\004unit\030" + - "\003 \001(\tR\004unit\022,\n\tunit_term\030\004 \001(\0132\017.sysml.U" + - "nitTermR\010unitTermB\013\n\tmagnitude\"k\n\016Measur" + - "ementRef\022\022\n\004unit\030\001 \001(\tR\004unit\022,\n\tunit_ter" + - "m\030\002 \001(\0132\017.sysml.UnitTermR\010unitTerm\022\027\n\007un" + - "it_id\030\003 \001(\tR\006unitId\"q\n\010UnitTerm\022\033\n\tscale" + - "_num\030\001 \001(\001R\010scaleNum\022\033\n\tscale_den\030\002 \001(\001R" + - "\010scaleDen\022+\n\007factors\030\003 \003(\0132\021.sysml.UnitF" + - "actorR\007factors\"A\n\nUnitFactor\022\027\n\007unit_id\030" + - "\001 \001(\tR\006unitId\022\032\n\010exponent\030\002 \001(\001R\010exponen" + - "t\"w\n\nDiagnostic\022\032\n\010severity\030\001 \001(\tR\010sever" + - "ity\022\030\n\007message\030\002 \001(\tR\007message\022\037\n\004span\030\003 " + - "\001(\0132\013.sysml.SpanR\004span\022\022\n\004code\030\004 \001(\tR\004co" + - "de\"\212\001\n\004Span\022\022\n\004file\030\001 \001(\tR\004file\022\035\n\nstart" + - "_line\030\002 \001(\005R\tstartLine\022\033\n\tstart_col\030\003 \001(" + - "\005R\010startCol\022\031\n\010end_line\030\004 \001(\005R\007endLine\022\027" + - "\n\007end_col\030\005 \001(\005R\006endCol\"\023\n\021ServerInfoReq" + - "uest\"R\n\022ServerInfoResponse\022\030\n\007version\030\001 " + - "\001(\tR\007version\022\"\n\014capabilities\030\002 \003(\tR\014capa" + - "bilities\"p\n\014QueryRequest\022\035\n\nmodel_hash\030\001" + - " \001(\tR\tmodelHash\022\"\n\005query\030\002 \001(\0132\014.sysml.Q" + - "ueryR\005query\022\035\n\noslc_query\030\003 \001(\tR\toslcQue" + - "ry\"F\n\rQueryResponse\0225\n\010elements\030\001 \003(\0132\031." + - "sysml.QueryResultElementR\010elements\"^\n\005Qu" + - "ery\022\024\n\005scope\030\001 \003(\tR\005scope\022\026\n\006select\030\002 \003(" + - "\tR\006select\022\'\n\005where\030\003 \001(\0132\021.sysml.Constra" + - "intR\005where\"\222\001\n\nConstraint\022:\n\tprimitive\030\001" + - " \001(\0132\032.sysml.PrimitiveConstraintH\000R\tprim" + - "itive\022:\n\tcomposite\030\002 \001(\0132\032.sysml.Composi" + - "teConstraintH\000R\tcompositeB\014\n\nconstraint\"" + - "\227\001\n\023PrimitiveConstraint\022\030\n\007inverse\030\001 \001(\010" + - "R\007inverse\022\032\n\010property\030\002 \001(\tR\010property\0224\n" + - "\010operator\030\003 \001(\0162\030.sysml.PrimitiveOperato" + - "rR\010operator\022\024\n\005value\030\004 \003(\tR\005value\"~\n\023Com" + - "positeConstraint\0224\n\010operator\030\001 \001(\0162\030.sys", - "ml.CompositeOperatorR\010operator\0221\n\nconstr" + - "aint\030\002 \003(\0132\021.sysml.ConstraintR\nconstrain" + - "t\"\302\001\n\022QueryResultElement\022\016\n\002id\030\001 \001(\tR\002id" + - "\022\022\n\004type\030\002 \001(\tR\004type\022I\n\nproperties\030\003 \003(\013" + - "2).sysml.QueryResultElement.PropertiesEn" + - "tryR\nproperties\032=\n\017PropertiesEntry\022\020\n\003ke" + - "y\030\001 \001(\tR\003key\022\024\n\005value\030\002 \001(\tR\005value:\0028\001\"\220" + - "\001\n\nSweepRange\022\034\n\tparameter\030\001 \001(\tR\tparame" + - "ter\022\"\n\005start\030\002 \001(\0132\014.sysml.ValueR\005start\022" + - "\036\n\003end\030\003 \001(\0132\014.sysml.ValueR\003end\022 \n\004step\030" + - "\004 \001(\0132\014.sysml.ValueR\004step\"\274\003\n\017RunSweepRe" + - "quest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\t" + - "symbol_id\030\002 \001(\tR\010symbolId\022*\n\021subject_sym" + - "bol_id\030\003 \001(\tR\017subjectSymbolId\022*\n\targumen" + - "ts\030\004 \003(\0132\014.sysml.ValueR\targuments\022S\n\017nam" + - "ed_arguments\030\005 \003(\0132*.sysml.RunSweepReque" + - "st.NamedArgumentsEntryR\016namedArguments\022)" + - "\n\006ranges\030\006 \003(\0132\021.sysml.SweepRangeR\006range" + - "s\022\030\n\007samples\030\007 \001(\003R\007samples\022\022\n\004seed\030\010 \001(" + - "\004R\004seed\022\026\n\006engine\030\t \001(\tR\006engine\032O\n\023Named" + - "ArgumentsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005valu" + - "e\030\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\301\002\n\010Swe" + - "epRow\022)\n\006inputs\030\001 \003(\0132\021.sysml.CalcOutput" + - "R\006inputs\022+\n\007outputs\030\002 \003(\0132\021.sysml.CalcOu" + - "tputR\007outputs\022*\n\010verdicts\030\003 \003(\0132\016.sysml." + - "VerdictR\010verdicts\022%\n\016elapsed_micros\030\004 \001(" + - "\003R\relapsedMicros\022\024\n\005error\030\005 \001(\tR\005error\022;" + - "\n\016failure_reason\030\006 \001(\0162\024.sysml.FailureRe" + - "asonR\rfailureReason\0227\n\013evaluations\030\007 \003(\013" + - "2\025.sysml.CaseEvaluationR\013evaluations\"\226\003\n" + - "\020RunSweepResponse\022#\n\004rows\030\001 \003(\0132\017.sysml." + - "SweepRowR\004rows\022\036\n\nparameters\030\002 \003(\tR\npara" + - "meters\022\030\n\007sampled\030\003 \001(\010R\007sampled\022\022\n\004seed" + - "\030\004 \001(\004R\004seed\022\024\n\005error\030\005 \001(\tR\005error\0223\n\013di" + - "agnostics\030\006 \003(\0132\021.sysml.DiagnosticR\013diag" + - "nostics\022;\n\016failure_reason\030\007 \001(\0162\024.sysml." + - "FailureReasonR\rfailureReason\022-\n\tinstance" + - "s\030\010 \003(\0132\017.sysml.InstanceR\tinstances\022\026\n\006e" + - "ngine\030\t \001(\tR\006engine\022\032\n\010strength\030\n \001(\tR\010s" + - "trength\022$\n\006bounds\030\013 \003(\0132\014.sysml.BoundR\006b" + - "ounds\"\214\001\n\027RunDocumentQueryRequest\022\035\n\nmod" + - "el_hash\030\001 \001(\tR\tmodelHash\022\031\n\010query_id\030\002 \001" + - "(\tR\007queryId\0227\n\010bindings\030\003 \003(\0132\033.sysml.Do" + - "cumentQueryBindingR\010bindings\"b\n\024Document" + - "QueryBinding\022\034\n\tparameter\030\001 \001(\tR\tparamet" + - "er\022,\n\006values\030\002 \003(\0132\024.sysml.DocumentValue" + - "R\006values\"\357\003\n\rDocumentValue\022\037\n\nelement_id" + - "\030\001 \001(\tH\000R\telementId\022#\n\014string_value\030\002 \001(" + - "\tH\000R\013stringValue\022\035\n\tint_value\030\003 \001(\003H\000R\010i" + - "ntValue\022\037\n\nreal_value\030\004 \001(\001H\000R\trealValue" + - "\022\037\n\nbool_value\030\005 \001(\010H\000R\tboolValue\022\034\n\010inf" + - "inity\030\006 \001(\010H\000R\010infinity\022-\n\010quantity\030\010 \001(" + - "\0132\017.sysml.QuantityH\000R\010quantity\0222\n\007verdic" + - "t\030\t \001(\0132\026.sysml.DocumentVerdictH\000R\007verdi" + - "ct\022/\n\006object\030\n \001(\0132\025.sysml.DocumentObjec" + - "tH\000R\006object\022,\n\005state\030\013 \001(\0132\024.sysml.Docum" + - "entStateH\000R\005state\022,\n\005event\030\014 \001(\0132\024.sysml" + - ".DocumentEventH\000R\005event\022!\n\014element_type\030" + - "\007 \001(\tR\013elementTypeB\006\n\004kind\"u\n\016DocumentOb" + - "ject\022\037\n\013instance_id\030\001 \001(\003R\ninstanceId\022\022\n" + - "\004path\030\002 \001(\tR\004path\022.\n\007element\030\003 \001(\0132\024.sys" + - "ml.DocumentValueR\007element\"\365\001\n\017DocumentVe" + - "rdict\0222\n\tassertion\030\001 \001(\0132\024.sysml.Documen" + - "tValueR\tassertion\022\022\n\004kind\030\002 \001(\tR\004kind\022\022\n" + - "\004text\030\003 \001(\tR\004text\022\022\n\004path\030\004 \001(\tR\004path\022\030\n" + - "\007verdict\030\005 \001(\tR\007verdict\022\034\n\tcondition\030\006 \001" + - "(\tR\tcondition\022\026\n\006reason\030\007 \001(\tR\006reason\022\"\n" + - "\014verification\030\010 \003(\tR\014verification\"\355\001\n\rDo" + - "cumentState\022-\n\006object\030\001 \001(\0132\025.sysml.Docu" + - "mentObjectR\006object\022\030\n\007machine\030\002 \001(\tR\007mac" + - "hine\022\022\n\004name\030\003 \001(\tR\004name\022\035\n\nstate_path\030\004" + - " \001(\tR\tstatePath\022*\n\005state\030\005 \001(\0132\024.sysml.D" + - "ocumentValueR\005state\022\026\n\006region\030\006 \001(\tR\006reg" + - "ion\022\034\n\tenclosing\030\007 \003(\tR\tenclosing\"\375\002\n\rDo" + - "cumentEvent\022\022\n\004kind\030\001 \001(\tR\004kind\022(\n\004time\030" + - "\002 \001(\0132\024.sysml.DocumentValueR\004time\022-\n\006obj" + - "ect\030\003 \001(\0132\025.sysml.DocumentObjectR\006object" + - "\022\030\n\007machine\030\004 \001(\tR\007machine\022\024\n\005state\030\005 \001(" + - "\tR\005state\022\022\n\004from\030\006 \001(\tR\004from\022\016\n\002to\030\007 \001(\t" + - "R\002to\022-\n\006target\030\010 \001(\0132\025.sysml.DocumentObj" + - "ectR\006target\022\024\n\005event\030\t \001(\tR\005event\022\030\n\007pay" + - "load\030\n \003(\tR\007payload\022\"\n\014alternatives\030\013 \003(" + - "\tR\014alternatives\022\024\n\005taken\030\014 \001(\tR\005taken\022\022\n" + - "\004text\030\r \001(\tR\004text\")\n\023DocumentQueryColumn" + - "\022\022\n\004name\030\001 \001(\tR\004name\"A\n\021DocumentQueryCel" + - "l\022,\n\006values\030\001 \003(\0132\024.sysml.DocumentValueR" + - "\006values\"r\n\020DocumentQueryRow\022.\n\007element\030\001" + - " \001(\0132\024.sysml.DocumentValueR\007element\022.\n\005c" + - "ells\030\002 \003(\0132\030.sysml.DocumentQueryCellR\005ce" + - "lls\"}\n\030RunDocumentQueryResponse\0224\n\007colum" + - "ns\030\001 \003(\0132\032.sysml.DocumentQueryColumnR\007co" + - "lumns\022+\n\004rows\030\002 \003(\0132\027.sysml.DocumentQuer" + - "yRowR\004rows\"k\n\025RenderDocumentRequest\022\035\n\nm" + - "odel_hash\030\001 \001(\tR\tmodelHash\022\037\n\013document_i" + - "d\030\002 \001(\tR\ndocumentId\022\022\n\004form\030\003 \001(\tR\004form\"" + - "H\n\026RenderDocumentResponse\022\032\n\010markdown\030\001 " + - "\001(\tR\010markdown\022\022\n\004html\030\002 \001(\tR\004html*\223\001\n\rFa" + - "ilureReason\022\036\n\032FAILURE_REASON_UNSPECIFIE" + - "D\020\000\022\035\n\031FAILURE_REASON_EVALUATION\020\001\022\035\n\031FA" + - "ILURE_REASON_WRONG_KIND\020\002\022$\n FAILURE_REA" + - "SON_AMBIGUOUS_SUBJECT\020\003*\214\005\n\013EditFailure\022" + - "\034\n\030EDIT_FAILURE_UNSPECIFIED\020\000\022\036\n\032EDIT_FA" + - "ILURE_NO_OPERATIONS\020\001\022\037\n\033EDIT_FAILURE_UN" + - "KNOWN_TARGET\020\002\022!\n\035EDIT_FAILURE_AMBIGUOUS" + - "_TARGET\020\003\022\033\n\027EDIT_FAILURE_NOT_VALUED\020\004\022\036" + - "\n\032EDIT_FAILURE_INVALID_VALUE\020\005\022\035\n\031EDIT_F" + - "AILURE_INVALID_NAME\020\006\022\032\n\026EDIT_FAILURE_NO" + - "T_NAMED\020\007\022\"\n\036EDIT_FAILURE_RENAME_REFEREN" + - "CED\020\010\022\"\n\036EDIT_FAILURE_OVERLAPPING_EDITS\020" + - "\t\022\037\n\033EDIT_FAILURE_RESULT_INVALID\020\n\022\036\n\032ED" + - "IT_FAILURE_OWNER_UNKNOWN\020\013\022$\n EDIT_FAILU" + - "RE_OWNER_NOT_NAMESPACE\020\014\022\035\n\031EDIT_FAILURE" + - "_ILLEGAL_KIND\020\r\022\"\n\036EDIT_FAILURE_MEMBER_N" + - "AME_TAKEN\020\016\022\"\n\036EDIT_FAILURE_DELETE_REFER" + - "ENCED\020\017\022$\n EDIT_FAILURE_OWNER_INSIDE_TAR" + - "GET\020\020\022 \n\034EDIT_FAILURE_MOVE_REFERENCED\020\021\022" + - "%\n!EDIT_FAILURE_REFERENCED_ELSEWHERE\020\022*\222" + - "\001\n\021PrimitiveOperator\022\"\n\036PRIMITIVE_OPERAT" + - "OR_UNSPECIFIED\020\000\022\034\n\030PRIMITIVE_OPERATOR_E" + - "QUAL\020\001\022\036\n\032PRIMITIVE_OPERATOR_GREATER\020\002\022\033" + - "\n\027PRIMITIVE_OPERATOR_LESS\020\003*n\n\021Composite" + - "Operator\022\"\n\036COMPOSITE_OPERATOR_UNSPECIFI" + - "ED\020\000\022\032\n\026COMPOSITE_OPERATOR_AND\020\001\022\031\n\025COMP" + - "OSITE_OPERATOR_OR\020\0022\277\014\n\014SysMLService\022D\n\r" + - "GetServerInfo\022\030.sysml.ServerInfoRequest\032" + - "\031.sysml.ServerInfoResponse\022>\n\tParseFile\022" + - "\027.sysml.ParseFileRequest\032\030.sysml.ParseFi" + - "leResponse\022G\n\014ParseSources\022\032.sysml.Parse" + - "SourcesRequest\032\033.sysml.ParseSourcesRespo" + - "nse\022;\n\tGetSymbol\022\027.sysml.GetSymbolReques" + - "t\032\025.sysml.SymbolResponse\022G\n\016GetDiagnosti" + - "cs\022\031.sysml.DiagnosticsRequest\032\032.sysml.Di" + - "agnosticsResponse\022;\n\010Evaluate\022\026.sysml.Ev" + - "aluateRequest\032\027.sysml.EvaluateResponse\022D" + - "\n\013Instantiate\022\031.sysml.InstantiateRequest" + - "\032\032.sysml.InstantiateResponse\022J\n\rExecuteA" + - "ction\022\033.sysml.ExecuteActionRequest\032\034.sys" + - "ml.ExecuteActionResponse\022G\n\014ExecuteState" + - "\022\032.sysml.ExecuteStateRequest\032\033.sysml.Exe" + - "cuteStateResponse\0228\n\007Convert\022\025.sysml.Con" + - "vertRequest\032\026.sysml.ConvertResponse\022A\n\nA" + - "pplyEdits\022\030.sysml.ApplyEditsRequest\032\031.sy" + - "sml.ApplyEditsResponse\022S\n\020VerifyConstrai" + - "nt\022\036.sysml.VerifyConstraintRequest\032\037.sys" + - "ml.VerifyConstraintResponse\022V\n\021VerifyReq" + - "uirement\022\037.sysml.VerifyRequirementReques" + - "t\032 .sysml.VerifyRequirementResponse\022Y\n\022V" + - "erifySatisfaction\022 .sysml.VerifySatisfac" + - "tionRequest\032!.sysml.VerifySatisfactionRe" + - "sponse\022S\n\020ValidateInstance\022\036.sysml.Valid" + - "ateInstanceRequest\032\037.sysml.ValidateInsta" + - "nceResponse\022G\n\014EvaluateCalc\022\032.sysml.Eval" + - "uateCalcRequest\032\033.sysml.EvaluateCalcResp" + - "onse\022D\n\013RunAnalysis\022\031.sysml.RunAnalysisR" + - "equest\032\032.sysml.RunAnalysisResponse\022;\n\010Ru" + - "nSweep\022\026.sysml.RunSweepRequest\032\027.sysml.R" + - "unSweepResponse\022D\n\013ListEngines\022\031.sysml.L" + - "istEnginesRequest\032\032.sysml.ListEnginesRes" + - "ponse\0222\n\005Query\022\023.sysml.QueryRequest\032\024.sy" + - "sml.QueryResponse\022S\n\020RunDocumentQuery\022\036." + - "sysml.RunDocumentQueryRequest\032\037.sysml.Ru" + - "nDocumentQueryResponse\022M\n\016RenderDocument" + - "\022\034.sysml.RenderDocumentRequest\032\035.sysml.R" + - "enderDocumentResponseBJ\n\034org.openmbee.op" + - "ensysml.protoP\001Z(github.com/Open-MBEE/Op" + - "enSysML/api/protob\006proto3" + "t\022A\n\016add_transition\030\t \001(\0132\030.sysml.AddTra" + + "nsitionEditH\000R\raddTransitionB\013\n\toperatio" + + "n\"\271\002\n\rAddMemberEdit\022\024\n\005owner\030\001 \001(\tR\005owne" + + "r\022\022\n\004kind\030\002 \001(\tR\004kind\022\022\n\004name\030\003 \001(\tR\004nam" + + "e\022\022\n\004type\030\004 \001(\tR\004type\022\"\n\014multiplicity\030\005 " + + "\001(\tR\014multiplicity\022\024\n\005value\030\006 \001(\tR\005value\022" + + " \n\013specializes\030\007 \003(\tR\013specializes\022\037\n\013is_" + + "abstract\030\010 \001(\010R\nisAbstract\022\034\n\tredefines\030" + + "\t \003(\tR\tredefines\022\035\n\nis_default\030\n \001(\010R\tis" + + "Default\022\034\n\tdirection\030\013 \001(\tR\tdirection\"\267\001" + + "\n\016AddSatisfyEdit\022\024\n\005owner\030\001 \001(\tR\005owner\022 " + + "\n\013requirement\030\002 \001(\tR\013requirement\022-\n\022sati" + + "sfying_feature\030\003 \001(\tR\021satisfyingFeature\022" + + "\037\n\013is_asserted\030\004 \001(\010R\nisAsserted\022\035\n\nis_n" + + "egated\030\005 \001(\010R\tisNegated\"|\n\034AddRequiremen" + + "tConstraintEdit\022\024\n\005owner\030\001 \001(\tR\005owner\022\022\n" + + "\004kind\030\002 \001(\tR\004kind\022\036\n\nexpression\030\003 \001(\tR\ne" + + "xpression\022\022\n\004name\030\004 \001(\tR\004name\"\317\001\n\021AddTra" + + "nsitionEdit\022\024\n\005owner\030\001 \001(\tR\005owner\022\022\n\004nam" + + "e\030\002 \001(\tR\004name\022\026\n\006source\030\003 \001(\tR\006source\022\026\n" + + "\006target\030\004 \001(\tR\006target\022\030\n\007trigger\030\005 \001(\tR\007" + + "trigger\022\024\n\005guard\030\006 \001(\tR\005guard\022\026\n\006effect\030" + + "\007 \001(\tR\006effect\022\030\n\007initial\030\010 \001(\010R\007initial\"" + + "\227\001\n\021AddConnectionEdit\022\024\n\005owner\030\001 \001(\tR\005ow" + + "ner\022\022\n\004kind\030\002 \001(\tR\004kind\022\031\n\010from_end\030\003 \001(" + + "\tR\007fromEnd\022\025\n\006to_end\030\004 \001(\tR\005toEnd\022\022\n\004nam" + + "e\030\005 \001(\tR\004name\022\022\n\004type\030\006 \001(\tR\004type\">\n\nDel" + + "eteEdit\022\026\n\006target\030\001 \001(\tR\006target\022\030\n\007casca" + + "de\030\002 \001(\010R\007cascade\"8\n\010MoveEdit\022\026\n\006target\030" + + "\001 \001(\tR\006target\022\024\n\005owner\030\002 \001(\tR\005owner\"<\n\014S" + + "etValueEdit\022\026\n\006target\030\001 \001(\tR\006target\022\024\n\005v" + + "alue\030\002 \001(\tR\005value\"?\n\nRenameEdit\022\026\n\006targe" + + "t\030\001 \001(\tR\006target\022\031\n\010new_name\030\002 \001(\tR\007newNa" + + "me\"\350\002\n\022ApplyEditsResponse\022\030\n\007content\030\001 \001" + + "(\tR\007content\022,\n\007applied\030\002 \003(\0132\022.sysml.App" + + "liedEditR\007applied\022\024\n\005error\030\003 \001(\tR\005error\022" + + ",\n\007failure\030\004 \001(\0162\022.sysml.EditFailureR\007fa" + + "ilure\0223\n\013diagnostics\030\005 \003(\0132\021.sysml.Diagn" + + "osticR\013diagnostics\022-\n\022referring_elements" + + "\030\006 \003(\tR\021referringElements\0223\n\tdocuments\030\007" + + " \003(\0132\025.sysml.EditedDocumentR\tdocuments\022-" + + "\n\treferrers\030\010 \003(\0132\017.sysml.ReferrerR\trefe" + + "rrers\">\n\016EditedDocument\022\022\n\004name\030\001 \001(\tR\004n" + + "ame\022\030\n\007content\030\002 \001(\tR\007content\":\n\010Referre" + + "r\022\022\n\004name\030\001 \001(\tR\004name\022\032\n\010document\030\002 \001(\tR" + + "\010document\"\320\001\n\013AppliedEdit\022\'\n\017operation_i" + + "ndex\030\001 \001(\005R\016operationIndex\022\026\n\006target\030\002 \001" + + "(\tR\006target\022\026\n\006offset\030\003 \001(\005R\006offset\022\026\n\006le" + + "ngth\030\004 \001(\005R\006length\022\031\n\010old_text\030\005 \001(\tR\007ol" + + "dText\022\031\n\010new_text\030\006 \001(\tR\007newText\022\032\n\010docu" + + "ment\030\007 \001(\tR\010document\"\375\003\n\nSymbolInfo\022\016\n\002i" + + "d\030\001 \001(\tR\002id\022\022\n\004name\030\002 \001(\tR\004name\022\022\n\004kind\030" + + "\003 \001(\tR\004kind\022;\n\010metadata\030\004 \003(\0132\037.sysml.Sy" + + "mbolInfo.MetadataEntryR\010metadata\022\033\n\tchil" + + "d_ids\030\005 \003(\tR\010childIds\0224\n\nattributes\030\006 \003(" + + "\0132\024.sysml.AttributeInfoR\nattributes\022,\n\tt" + + "ype_info\030\007 \001(\0132\017.sysml.TypeInfoR\010typeInf" + + "o\022;\n\014multiplicity\030\010 \001(\0132\027.sysml.Multipli" + + "cityInfoR\014multiplicity\022?\n\017specialization" + + "s\030\t \003(\0132\025.sysml.SpecializationR\017speciali" + + "zations\022>\n\033withheld_library_attributes\030\n" + + " \001(\005R\031withheldLibraryAttributes\032;\n\rMetad" + + "ataEntry\022\020\n\003key\030\001 \001(\tR\003key\022\024\n\005value\030\002 \001(" + + "\tR\005value:\0028\001\"~\n\016Specialization\022\022\n\004kind\030\001" + + " \001(\tR\004kind\022\032\n\010declared\030\002 \001(\tR\010declared\022\033" + + "\n\ttarget_id\030\003 \001(\tR\010targetId\022\037\n\013target_ki" + + "nd\030\004 \001(\tR\ntargetKind\"\345\001\n\010TypeInfo\022\032\n\010dec" + + "lared\030\001 \001(\tR\010declared\022\037\n\013resolved_id\030\002 \001" + + "(\tR\nresolvedId\022#\n\rresolved_kind\030\003 \001(\tR\014r" + + "esolvedKind\022\034\n\tprimitive\030\004 \001(\tR\tprimitiv" + + "e\022)\n\020primitive_source\030\005 \001(\tR\017primitiveSo" + + "urce\022\032\n\010quantity\030\006 \001(\010R\010quantity\022\022\n\004unit" + + "\030\007 \001(\tR\004unit\">\n\020MultiplicityInfo\022\024\n\005lowe" + + "r\030\001 \001(\tR\005lower\022\024\n\005upper\030\002 \001(\tR\005upper\"o\n\r" + + "AttributeInfo\022\022\n\004name\030\001 \001(\tR\004name\022\022\n\004typ" + + "e\030\002 \001(\tR\004type\022\"\n\005value\030\003 \001(\0132\014.sysml.Val" + + "ueR\005value\022\022\n\004unit\030\004 \001(\tR\004unit\"\245\007\n\005Value\022" + + "\035\n\tint_value\030\001 \001(\003H\000R\010intValue\022\037\n\nreal_v" + + "alue\030\002 \001(\001H\000R\trealValue\022\037\n\nbool_value\030\003 " + + "\001(\010H\000R\tboolValue\022#\n\014string_value\030\004 \001(\tH\000" + + "R\013stringValue\022!\n\013instance_id\030\005 \001(\003H\000R\nin" + + "stanceId\0222\n\010sequence\030\006 \001(\0132\024.sysml.Value" + + "SequenceH\000R\010sequence\022\024\n\004null\030\007 \001(\tH\000R\004nu" + + "ll\022-\n\010quantity\030\010 \001(\0132\017.sysml.QuantityH\000R" + + "\010quantity\0227\n\014enum_literal\030\t \001(\0132\022.sysml." + + "EnumLiteralH\000R\013enumLiteral\022\026\n\005unset\030\n \001(" + + "\010H\000R\005unset\022*\n\007complex\030\013 \001(\0132\016.sysml.Comp" + + "lexH\000R\007complex\022$\n\005array\030\014 \001(\0132\014.sysml.Ar" + + "rayH\000R\005array\022\'\n\006vector\030\r \001(\0132\r.sysml.Vec" + + "torH\000R\006vector\022@\n\017vector_quantity\030\016 \001(\0132\025" + + ".sysml.VectorQuantityH\000R\016vectorQuantity\022" + + "@\n\017measurement_ref\030\017 \001(\0132\025.sysml.Measure" + + "mentRefH\000R\016measurementRef\022\034\n\010infinity\030\020 " + + "\001(\010H\000R\010infinity\022-\n\010function\030\021 \001(\0132\017.sysm" + + "l.FunctionH\000R\010function\022#\n\003set\030\022 \001(\0132\017.sy" + + "sml.ValueSetH\000R\003set\022@\n\017tensor_quantity\030\023" + + " \001(\0132\025.sysml.TensorQuantityH\000R\016tensorQua" + + "ntity\0223\n\nmetaobject\030\024 \001(\0132\021.sysml.Metaob" + + "jectH\000R\nmetaobject\0229\n\014undetermined\030\025 \001(\013" + + "2\023.sysml.UndeterminedH\000R\014undeterminedB\006\n" + + "\004kind\"N\n\nMetaobject\022\035\n\nelement_id\030\001 \001(\tR" + + "\telementId\022!\n\014metaclass_id\030\002 \001(\tR\013metacl" + + "assId\"U\n\014Undetermined\022\026\n\006reason\030\001 \001(\tR\006r" + + "eason\022-\n\005count\030\002 \001(\0132\027.sysml.Multiplicit" + + "yInfoR\005count\"<\n\010Function\022\027\n\007calc_id\030\001 \001(" + + "\tR\006calcId\022\027\n\007self_id\030\002 \001(\003R\006selfId\"4\n\010Va" + + "lueSet\022(\n\010elements\030\001 \003(\0132\014.sysml.ValueR\010" + + "elements\"a\n\016TensorQuantity\022\036\n\ndimensions" + + "\030\001 \003(\003R\ndimensions\022/\n\ncomponents\030\002 \003(\0132\017" + + ".sysml.QuantityR\ncomponents\"Q\n\005Array\022\036\n\n" + + "dimensions\030\001 \003(\003R\ndimensions\022(\n\010elements" + + "\030\002 \003(\0132\014.sysml.ValueR\010elements\"6\n\006Vector" + + "\022,\n\ncomponents\030\001 \003(\0132\014.sysml.ValueR\ncomp" + + "onents\"A\n\016VectorQuantity\022/\n\ncomponents\030\001" + + " \003(\0132\017.sysml.QuantityR\ncomponents\";\n\007Com" + + "plex\022\022\n\004real\030\001 \001(\001R\004real\022\034\n\timaginary\030\002 " + + "\001(\001R\timaginary\"\213\001\n\013EnumLiteral\022\035\n\nlitera" + + "l_id\030\001 \001(\tR\tliteralId\022%\n\016enumeration_id\030" + + "\002 \001(\tR\renumerationId\022\022\n\004name\030\003 \001(\tR\004name" + + "\022\"\n\005value\030\004 \001(\0132\014.sysml.ValueR\005value\"9\n\r" + + "ValueSequence\022(\n\010elements\030\001 \003(\0132\014.sysml." + + "ValueR\010elements\"\251\001\n\010Quantity\022%\n\rint_magn" + + "itude\030\001 \001(\003H\000R\014intMagnitude\022\'\n\016real_magn" + + "itude\030\002 \001(\001H\000R\rrealMagnitude\022\022\n\004unit\030\003 \001" + + "(\tR\004unit\022,\n\tunit_term\030\004 \001(\0132\017.sysml.Unit" + + "TermR\010unitTermB\013\n\tmagnitude\"k\n\016Measureme" + + "ntRef\022\022\n\004unit\030\001 \001(\tR\004unit\022,\n\tunit_term\030\002" + + " \001(\0132\017.sysml.UnitTermR\010unitTerm\022\027\n\007unit_" + + "id\030\003 \001(\tR\006unitId\"q\n\010UnitTerm\022\033\n\tscale_nu" + + "m\030\001 \001(\001R\010scaleNum\022\033\n\tscale_den\030\002 \001(\001R\010sc" + + "aleDen\022+\n\007factors\030\003 \003(\0132\021.sysml.UnitFact" + + "orR\007factors\"A\n\nUnitFactor\022\027\n\007unit_id\030\001 \001" + + "(\tR\006unitId\022\032\n\010exponent\030\002 \001(\001R\010exponent\"w" + + "\n\nDiagnostic\022\032\n\010severity\030\001 \001(\tR\010severity" + + "\022\030\n\007message\030\002 \001(\tR\007message\022\037\n\004span\030\003 \001(\013" + + "2\013.sysml.SpanR\004span\022\022\n\004code\030\004 \001(\tR\004code\"" + + "\212\001\n\004Span\022\022\n\004file\030\001 \001(\tR\004file\022\035\n\nstart_li" + + "ne\030\002 \001(\005R\tstartLine\022\033\n\tstart_col\030\003 \001(\005R\010" + + "startCol\022\031\n\010end_line\030\004 \001(\005R\007endLine\022\027\n\007e" + + "nd_col\030\005 \001(\005R\006endCol\"\023\n\021ServerInfoReques" + + "t\"R\n\022ServerInfoResponse\022\030\n\007version\030\001 \001(\t" + + "R\007version\022\"\n\014capabilities\030\002 \003(\tR\014capabil" + + "ities\"p\n\014QueryRequest\022\035\n\nmodel_hash\030\001 \001(" + + "\tR\tmodelHash\022\"\n\005query\030\002 \001(\0132\014.sysml.Quer" + + "yR\005query\022\035\n\noslc_query\030\003 \001(\tR\toslcQuery\"" + + "F\n\rQueryResponse\0225\n\010elements\030\001 \003(\0132\031.sys" + + "ml.QueryResultElementR\010elements\"^\n\005Query" + + "\022\024\n\005scope\030\001 \003(\tR\005scope\022\026\n\006select\030\002 \003(\tR\006" + + "select\022\'\n\005where\030\003 \001(\0132\021.sysml.Constraint" + + "R\005where\"\222\001\n\nConstraint\022:\n\tprimitive\030\001 \001(" + + "\0132\032.sysml.PrimitiveConstraintH\000R\tprimiti", + "ve\022:\n\tcomposite\030\002 \001(\0132\032.sysml.CompositeC" + + "onstraintH\000R\tcompositeB\014\n\nconstraint\"\227\001\n" + + "\023PrimitiveConstraint\022\030\n\007inverse\030\001 \001(\010R\007i" + + "nverse\022\032\n\010property\030\002 \001(\tR\010property\0224\n\010op" + + "erator\030\003 \001(\0162\030.sysml.PrimitiveOperatorR\010" + + "operator\022\024\n\005value\030\004 \003(\tR\005value\"~\n\023Compos" + + "iteConstraint\0224\n\010operator\030\001 \001(\0162\030.sysml." + + "CompositeOperatorR\010operator\0221\n\nconstrain" + + "t\030\002 \003(\0132\021.sysml.ConstraintR\nconstraint\"\302" + + "\001\n\022QueryResultElement\022\016\n\002id\030\001 \001(\tR\002id\022\022\n" + + "\004type\030\002 \001(\tR\004type\022I\n\nproperties\030\003 \003(\0132)." + + "sysml.QueryResultElement.PropertiesEntry" + + "R\nproperties\032=\n\017PropertiesEntry\022\020\n\003key\030\001" + + " \001(\tR\003key\022\024\n\005value\030\002 \001(\tR\005value:\0028\001\"\220\001\n\n" + + "SweepRange\022\034\n\tparameter\030\001 \001(\tR\tparameter" + + "\022\"\n\005start\030\002 \001(\0132\014.sysml.ValueR\005start\022\036\n\003" + + "end\030\003 \001(\0132\014.sysml.ValueR\003end\022 \n\004step\030\004 \001" + + "(\0132\014.sysml.ValueR\004step\"\274\003\n\017RunSweepReque" + + "st\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\tsym" + + "bol_id\030\002 \001(\tR\010symbolId\022*\n\021subject_symbol" + + "_id\030\003 \001(\tR\017subjectSymbolId\022*\n\targuments\030" + + "\004 \003(\0132\014.sysml.ValueR\targuments\022S\n\017named_" + + "arguments\030\005 \003(\0132*.sysml.RunSweepRequest." + + "NamedArgumentsEntryR\016namedArguments\022)\n\006r" + + "anges\030\006 \003(\0132\021.sysml.SweepRangeR\006ranges\022\030" + + "\n\007samples\030\007 \001(\003R\007samples\022\022\n\004seed\030\010 \001(\004R\004" + + "seed\022\026\n\006engine\030\t \001(\tR\006engine\032O\n\023NamedArg" + + "umentsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002" + + " \001(\0132\014.sysml.ValueR\005value:\0028\001\"\301\002\n\010SweepR" + + "ow\022)\n\006inputs\030\001 \003(\0132\021.sysml.CalcOutputR\006i" + + "nputs\022+\n\007outputs\030\002 \003(\0132\021.sysml.CalcOutpu" + + "tR\007outputs\022*\n\010verdicts\030\003 \003(\0132\016.sysml.Ver" + + "dictR\010verdicts\022%\n\016elapsed_micros\030\004 \001(\003R\r" + + "elapsedMicros\022\024\n\005error\030\005 \001(\tR\005error\022;\n\016f" + + "ailure_reason\030\006 \001(\0162\024.sysml.FailureReaso" + + "nR\rfailureReason\0227\n\013evaluations\030\007 \003(\0132\025." + + "sysml.CaseEvaluationR\013evaluations\"\226\003\n\020Ru" + + "nSweepResponse\022#\n\004rows\030\001 \003(\0132\017.sysml.Swe" + + "epRowR\004rows\022\036\n\nparameters\030\002 \003(\tR\nparamet" + + "ers\022\030\n\007sampled\030\003 \001(\010R\007sampled\022\022\n\004seed\030\004 " + + "\001(\004R\004seed\022\024\n\005error\030\005 \001(\tR\005error\0223\n\013diagn" + + "ostics\030\006 \003(\0132\021.sysml.DiagnosticR\013diagnos" + + "tics\022;\n\016failure_reason\030\007 \001(\0162\024.sysml.Fai" + + "lureReasonR\rfailureReason\022-\n\tinstances\030\010" + + " \003(\0132\017.sysml.InstanceR\tinstances\022\026\n\006engi" + + "ne\030\t \001(\tR\006engine\022\032\n\010strength\030\n \001(\tR\010stre" + + "ngth\022$\n\006bounds\030\013 \003(\0132\014.sysml.BoundR\006boun" + + "ds\"\214\001\n\027RunDocumentQueryRequest\022\035\n\nmodel_" + + "hash\030\001 \001(\tR\tmodelHash\022\031\n\010query_id\030\002 \001(\tR" + + "\007queryId\0227\n\010bindings\030\003 \003(\0132\033.sysml.Docum" + + "entQueryBindingR\010bindings\"b\n\024DocumentQue" + + "ryBinding\022\034\n\tparameter\030\001 \001(\tR\tparameter\022" + + ",\n\006values\030\002 \003(\0132\024.sysml.DocumentValueR\006v" + + "alues\"\357\003\n\rDocumentValue\022\037\n\nelement_id\030\001 " + + "\001(\tH\000R\telementId\022#\n\014string_value\030\002 \001(\tH\000" + + "R\013stringValue\022\035\n\tint_value\030\003 \001(\003H\000R\010intV" + + "alue\022\037\n\nreal_value\030\004 \001(\001H\000R\trealValue\022\037\n" + + "\nbool_value\030\005 \001(\010H\000R\tboolValue\022\034\n\010infini" + + "ty\030\006 \001(\010H\000R\010infinity\022-\n\010quantity\030\010 \001(\0132\017" + + ".sysml.QuantityH\000R\010quantity\0222\n\007verdict\030\t" + + " \001(\0132\026.sysml.DocumentVerdictH\000R\007verdict\022" + + "/\n\006object\030\n \001(\0132\025.sysml.DocumentObjectH\000" + + "R\006object\022,\n\005state\030\013 \001(\0132\024.sysml.Document" + + "StateH\000R\005state\022,\n\005event\030\014 \001(\0132\024.sysml.Do" + + "cumentEventH\000R\005event\022!\n\014element_type\030\007 \001" + + "(\tR\013elementTypeB\006\n\004kind\"u\n\016DocumentObjec" + + "t\022\037\n\013instance_id\030\001 \001(\003R\ninstanceId\022\022\n\004pa" + + "th\030\002 \001(\tR\004path\022.\n\007element\030\003 \001(\0132\024.sysml." + + "DocumentValueR\007element\"\365\001\n\017DocumentVerdi" + + "ct\0222\n\tassertion\030\001 \001(\0132\024.sysml.DocumentVa" + + "lueR\tassertion\022\022\n\004kind\030\002 \001(\tR\004kind\022\022\n\004te" + + "xt\030\003 \001(\tR\004text\022\022\n\004path\030\004 \001(\tR\004path\022\030\n\007ve" + + "rdict\030\005 \001(\tR\007verdict\022\034\n\tcondition\030\006 \001(\tR" + + "\tcondition\022\026\n\006reason\030\007 \001(\tR\006reason\022\"\n\014ve" + + "rification\030\010 \003(\tR\014verification\"\355\001\n\rDocum" + + "entState\022-\n\006object\030\001 \001(\0132\025.sysml.Documen" + + "tObjectR\006object\022\030\n\007machine\030\002 \001(\tR\007machin" + + "e\022\022\n\004name\030\003 \001(\tR\004name\022\035\n\nstate_path\030\004 \001(" + + "\tR\tstatePath\022*\n\005state\030\005 \001(\0132\024.sysml.Docu" + + "mentValueR\005state\022\026\n\006region\030\006 \001(\tR\006region" + + "\022\034\n\tenclosing\030\007 \003(\tR\tenclosing\"\375\002\n\rDocum" + + "entEvent\022\022\n\004kind\030\001 \001(\tR\004kind\022(\n\004time\030\002 \001" + + "(\0132\024.sysml.DocumentValueR\004time\022-\n\006object" + + "\030\003 \001(\0132\025.sysml.DocumentObjectR\006object\022\030\n" + + "\007machine\030\004 \001(\tR\007machine\022\024\n\005state\030\005 \001(\tR\005" + + "state\022\022\n\004from\030\006 \001(\tR\004from\022\016\n\002to\030\007 \001(\tR\002t" + + "o\022-\n\006target\030\010 \001(\0132\025.sysml.DocumentObject" + + "R\006target\022\024\n\005event\030\t \001(\tR\005event\022\030\n\007payloa" + + "d\030\n \003(\tR\007payload\022\"\n\014alternatives\030\013 \003(\tR\014" + + "alternatives\022\024\n\005taken\030\014 \001(\tR\005taken\022\022\n\004te" + + "xt\030\r \001(\tR\004text\")\n\023DocumentQueryColumn\022\022\n" + + "\004name\030\001 \001(\tR\004name\"A\n\021DocumentQueryCell\022," + + "\n\006values\030\001 \003(\0132\024.sysml.DocumentValueR\006va" + + "lues\"r\n\020DocumentQueryRow\022.\n\007element\030\001 \001(" + + "\0132\024.sysml.DocumentValueR\007element\022.\n\005cell" + + "s\030\002 \003(\0132\030.sysml.DocumentQueryCellR\005cells" + + "\"}\n\030RunDocumentQueryResponse\0224\n\007columns\030" + + "\001 \003(\0132\032.sysml.DocumentQueryColumnR\007colum" + + "ns\022+\n\004rows\030\002 \003(\0132\027.sysml.DocumentQueryRo" + + "wR\004rows\"k\n\025RenderDocumentRequest\022\035\n\nmode" + + "l_hash\030\001 \001(\tR\tmodelHash\022\037\n\013document_id\030\002" + + " \001(\tR\ndocumentId\022\022\n\004form\030\003 \001(\tR\004form\"H\n\026" + + "RenderDocumentResponse\022\032\n\010markdown\030\001 \001(\t" + + "R\010markdown\022\022\n\004html\030\002 \001(\tR\004html*\223\001\n\rFailu" + + "reReason\022\036\n\032FAILURE_REASON_UNSPECIFIED\020\000" + + "\022\035\n\031FAILURE_REASON_EVALUATION\020\001\022\035\n\031FAILU" + + "RE_REASON_WRONG_KIND\020\002\022$\n FAILURE_REASON" + + "_AMBIGUOUS_SUBJECT\020\003*\214\005\n\013EditFailure\022\034\n\030" + + "EDIT_FAILURE_UNSPECIFIED\020\000\022\036\n\032EDIT_FAILU" + + "RE_NO_OPERATIONS\020\001\022\037\n\033EDIT_FAILURE_UNKNO" + + "WN_TARGET\020\002\022!\n\035EDIT_FAILURE_AMBIGUOUS_TA" + + "RGET\020\003\022\033\n\027EDIT_FAILURE_NOT_VALUED\020\004\022\036\n\032E" + + "DIT_FAILURE_INVALID_VALUE\020\005\022\035\n\031EDIT_FAIL" + + "URE_INVALID_NAME\020\006\022\032\n\026EDIT_FAILURE_NOT_N" + + "AMED\020\007\022\"\n\036EDIT_FAILURE_RENAME_REFERENCED" + + "\020\010\022\"\n\036EDIT_FAILURE_OVERLAPPING_EDITS\020\t\022\037" + + "\n\033EDIT_FAILURE_RESULT_INVALID\020\n\022\036\n\032EDIT_" + + "FAILURE_OWNER_UNKNOWN\020\013\022$\n EDIT_FAILURE_" + + "OWNER_NOT_NAMESPACE\020\014\022\035\n\031EDIT_FAILURE_IL" + + "LEGAL_KIND\020\r\022\"\n\036EDIT_FAILURE_MEMBER_NAME" + + "_TAKEN\020\016\022\"\n\036EDIT_FAILURE_DELETE_REFERENC" + + "ED\020\017\022$\n EDIT_FAILURE_OWNER_INSIDE_TARGET" + + "\020\020\022 \n\034EDIT_FAILURE_MOVE_REFERENCED\020\021\022%\n!" + + "EDIT_FAILURE_REFERENCED_ELSEWHERE\020\022*\222\001\n\021" + + "PrimitiveOperator\022\"\n\036PRIMITIVE_OPERATOR_" + + "UNSPECIFIED\020\000\022\034\n\030PRIMITIVE_OPERATOR_EQUA" + + "L\020\001\022\036\n\032PRIMITIVE_OPERATOR_GREATER\020\002\022\033\n\027P" + + "RIMITIVE_OPERATOR_LESS\020\003*n\n\021CompositeOpe" + + "rator\022\"\n\036COMPOSITE_OPERATOR_UNSPECIFIED\020" + + "\000\022\032\n\026COMPOSITE_OPERATOR_AND\020\001\022\031\n\025COMPOSI" + + "TE_OPERATOR_OR\020\0022\277\014\n\014SysMLService\022D\n\rGet" + + "ServerInfo\022\030.sysml.ServerInfoRequest\032\031.s" + + "ysml.ServerInfoResponse\022>\n\tParseFile\022\027.s" + + "ysml.ParseFileRequest\032\030.sysml.ParseFileR" + + "esponse\022G\n\014ParseSources\022\032.sysml.ParseSou" + + "rcesRequest\032\033.sysml.ParseSourcesResponse" + + "\022;\n\tGetSymbol\022\027.sysml.GetSymbolRequest\032\025" + + ".sysml.SymbolResponse\022G\n\016GetDiagnostics\022" + + "\031.sysml.DiagnosticsRequest\032\032.sysml.Diagn" + + "osticsResponse\022;\n\010Evaluate\022\026.sysml.Evalu" + + "ateRequest\032\027.sysml.EvaluateResponse\022D\n\013I" + + "nstantiate\022\031.sysml.InstantiateRequest\032\032." + + "sysml.InstantiateResponse\022J\n\rExecuteActi" + + "on\022\033.sysml.ExecuteActionRequest\032\034.sysml." + + "ExecuteActionResponse\022G\n\014ExecuteState\022\032." + + "sysml.ExecuteStateRequest\032\033.sysml.Execut" + + "eStateResponse\0228\n\007Convert\022\025.sysml.Conver" + + "tRequest\032\026.sysml.ConvertResponse\022A\n\nAppl" + + "yEdits\022\030.sysml.ApplyEditsRequest\032\031.sysml" + + ".ApplyEditsResponse\022S\n\020VerifyConstraint\022" + + "\036.sysml.VerifyConstraintRequest\032\037.sysml." + + "VerifyConstraintResponse\022V\n\021VerifyRequir" + + "ement\022\037.sysml.VerifyRequirementRequest\032 " + + ".sysml.VerifyRequirementResponse\022Y\n\022Veri" + + "fySatisfaction\022 .sysml.VerifySatisfactio" + + "nRequest\032!.sysml.VerifySatisfactionRespo" + + "nse\022S\n\020ValidateInstance\022\036.sysml.Validate" + + "InstanceRequest\032\037.sysml.ValidateInstance" + + "Response\022G\n\014EvaluateCalc\022\032.sysml.Evaluat" + + "eCalcRequest\032\033.sysml.EvaluateCalcRespons" + + "e\022D\n\013RunAnalysis\022\031.sysml.RunAnalysisRequ" + + "est\032\032.sysml.RunAnalysisResponse\022;\n\010RunSw" + + "eep\022\026.sysml.RunSweepRequest\032\027.sysml.RunS" + + "weepResponse\022D\n\013ListEngines\022\031.sysml.List" + + "EnginesRequest\032\032.sysml.ListEnginesRespon" + + "se\0222\n\005Query\022\023.sysml.QueryRequest\032\024.sysml" + + ".QueryResponse\022S\n\020RunDocumentQuery\022\036.sys" + + "ml.RunDocumentQueryRequest\032\037.sysml.RunDo" + + "cumentQueryResponse\022M\n\016RenderDocument\022\034." + + "sysml.RenderDocumentRequest\032\035.sysml.Rend" + + "erDocumentResponseBJ\n\034org.openmbee.opens" + + "ysml.protoP\001Z(github.com/Open-MBEE/OpenS" + + "ysML/api/protob\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -1486,7 +1498,7 @@ public static void registerAllExtensions( internal_static_sysml_EditOperation_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_EditOperation_descriptor, - new java.lang.String[] { "SetValue", "Rename", "AddMember", "Delete", "Move", "AddConnection", "AddSatisfy", "AddRequirementConstraint", "Operation", }); + new java.lang.String[] { "SetValue", "Rename", "AddMember", "Delete", "Move", "AddConnection", "AddSatisfy", "AddRequirementConstraint", "AddTransition", "Operation", }); internal_static_sysml_AddMemberEdit_descriptor = getDescriptor().getMessageType(45); internal_static_sysml_AddMemberEdit_fieldAccessorTable = new @@ -1505,62 +1517,68 @@ public static void registerAllExtensions( com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_AddRequirementConstraintEdit_descriptor, new java.lang.String[] { "Owner", "Kind", "Expression", "Name", }); - internal_static_sysml_AddConnectionEdit_descriptor = + internal_static_sysml_AddTransitionEdit_descriptor = getDescriptor().getMessageType(48); + internal_static_sysml_AddTransitionEdit_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_sysml_AddTransitionEdit_descriptor, + new java.lang.String[] { "Owner", "Name", "Source", "Target", "Trigger", "Guard", "Effect", "Initial", }); + internal_static_sysml_AddConnectionEdit_descriptor = + getDescriptor().getMessageType(49); internal_static_sysml_AddConnectionEdit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_AddConnectionEdit_descriptor, new java.lang.String[] { "Owner", "Kind", "FromEnd", "ToEnd", "Name", "Type", }); internal_static_sysml_DeleteEdit_descriptor = - getDescriptor().getMessageType(49); + getDescriptor().getMessageType(50); internal_static_sysml_DeleteEdit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DeleteEdit_descriptor, new java.lang.String[] { "Target", "Cascade", }); internal_static_sysml_MoveEdit_descriptor = - getDescriptor().getMessageType(50); + getDescriptor().getMessageType(51); internal_static_sysml_MoveEdit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_MoveEdit_descriptor, new java.lang.String[] { "Target", "Owner", }); internal_static_sysml_SetValueEdit_descriptor = - getDescriptor().getMessageType(51); + getDescriptor().getMessageType(52); internal_static_sysml_SetValueEdit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_SetValueEdit_descriptor, new java.lang.String[] { "Target", "Value", }); internal_static_sysml_RenameEdit_descriptor = - getDescriptor().getMessageType(52); + getDescriptor().getMessageType(53); internal_static_sysml_RenameEdit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RenameEdit_descriptor, new java.lang.String[] { "Target", "NewName", }); internal_static_sysml_ApplyEditsResponse_descriptor = - getDescriptor().getMessageType(53); + getDescriptor().getMessageType(54); internal_static_sysml_ApplyEditsResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_ApplyEditsResponse_descriptor, new java.lang.String[] { "Content", "Applied", "Error", "Failure", "Diagnostics", "ReferringElements", "Documents", "Referrers", }); internal_static_sysml_EditedDocument_descriptor = - getDescriptor().getMessageType(54); + getDescriptor().getMessageType(55); internal_static_sysml_EditedDocument_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_EditedDocument_descriptor, new java.lang.String[] { "Name", "Content", }); internal_static_sysml_Referrer_descriptor = - getDescriptor().getMessageType(55); + getDescriptor().getMessageType(56); internal_static_sysml_Referrer_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Referrer_descriptor, new java.lang.String[] { "Name", "Document", }); internal_static_sysml_AppliedEdit_descriptor = - getDescriptor().getMessageType(56); + getDescriptor().getMessageType(57); internal_static_sysml_AppliedEdit_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_AppliedEdit_descriptor, new java.lang.String[] { "OperationIndex", "Target", "Offset", "Length", "OldText", "NewText", "Document", }); internal_static_sysml_SymbolInfo_descriptor = - getDescriptor().getMessageType(57); + getDescriptor().getMessageType(58); internal_static_sysml_SymbolInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_SymbolInfo_descriptor, @@ -1572,187 +1590,187 @@ public static void registerAllExtensions( internal_static_sysml_SymbolInfo_MetadataEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_sysml_Specialization_descriptor = - getDescriptor().getMessageType(58); + getDescriptor().getMessageType(59); internal_static_sysml_Specialization_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Specialization_descriptor, new java.lang.String[] { "Kind", "Declared", "TargetId", "TargetKind", }); internal_static_sysml_TypeInfo_descriptor = - getDescriptor().getMessageType(59); + getDescriptor().getMessageType(60); internal_static_sysml_TypeInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_TypeInfo_descriptor, new java.lang.String[] { "Declared", "ResolvedId", "ResolvedKind", "Primitive", "PrimitiveSource", "Quantity", "Unit", }); internal_static_sysml_MultiplicityInfo_descriptor = - getDescriptor().getMessageType(60); + getDescriptor().getMessageType(61); internal_static_sysml_MultiplicityInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_MultiplicityInfo_descriptor, new java.lang.String[] { "Lower", "Upper", }); internal_static_sysml_AttributeInfo_descriptor = - getDescriptor().getMessageType(61); + getDescriptor().getMessageType(62); internal_static_sysml_AttributeInfo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_AttributeInfo_descriptor, new java.lang.String[] { "Name", "Type", "Value", "Unit", }); internal_static_sysml_Value_descriptor = - getDescriptor().getMessageType(62); + getDescriptor().getMessageType(63); internal_static_sysml_Value_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Value_descriptor, new java.lang.String[] { "IntValue", "RealValue", "BoolValue", "StringValue", "InstanceId", "Sequence", "Null", "Quantity", "EnumLiteral", "Unset", "Complex", "Array", "Vector", "VectorQuantity", "MeasurementRef", "Infinity", "Function", "Set", "TensorQuantity", "Metaobject", "Undetermined", "Kind", }); internal_static_sysml_Metaobject_descriptor = - getDescriptor().getMessageType(63); + getDescriptor().getMessageType(64); internal_static_sysml_Metaobject_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Metaobject_descriptor, new java.lang.String[] { "ElementId", "MetaclassId", }); internal_static_sysml_Undetermined_descriptor = - getDescriptor().getMessageType(64); + getDescriptor().getMessageType(65); internal_static_sysml_Undetermined_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Undetermined_descriptor, new java.lang.String[] { "Reason", "Count", }); internal_static_sysml_Function_descriptor = - getDescriptor().getMessageType(65); + getDescriptor().getMessageType(66); internal_static_sysml_Function_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Function_descriptor, new java.lang.String[] { "CalcId", "SelfId", }); internal_static_sysml_ValueSet_descriptor = - getDescriptor().getMessageType(66); + getDescriptor().getMessageType(67); internal_static_sysml_ValueSet_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_ValueSet_descriptor, new java.lang.String[] { "Elements", }); internal_static_sysml_TensorQuantity_descriptor = - getDescriptor().getMessageType(67); + getDescriptor().getMessageType(68); internal_static_sysml_TensorQuantity_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_TensorQuantity_descriptor, new java.lang.String[] { "Dimensions", "Components", }); internal_static_sysml_Array_descriptor = - getDescriptor().getMessageType(68); + getDescriptor().getMessageType(69); internal_static_sysml_Array_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Array_descriptor, new java.lang.String[] { "Dimensions", "Elements", }); internal_static_sysml_Vector_descriptor = - getDescriptor().getMessageType(69); + getDescriptor().getMessageType(70); internal_static_sysml_Vector_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Vector_descriptor, new java.lang.String[] { "Components", }); internal_static_sysml_VectorQuantity_descriptor = - getDescriptor().getMessageType(70); + getDescriptor().getMessageType(71); internal_static_sysml_VectorQuantity_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_VectorQuantity_descriptor, new java.lang.String[] { "Components", }); internal_static_sysml_Complex_descriptor = - getDescriptor().getMessageType(71); + getDescriptor().getMessageType(72); internal_static_sysml_Complex_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Complex_descriptor, new java.lang.String[] { "Real", "Imaginary", }); internal_static_sysml_EnumLiteral_descriptor = - getDescriptor().getMessageType(72); + getDescriptor().getMessageType(73); internal_static_sysml_EnumLiteral_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_EnumLiteral_descriptor, new java.lang.String[] { "LiteralId", "EnumerationId", "Name", "Value", }); internal_static_sysml_ValueSequence_descriptor = - getDescriptor().getMessageType(73); + getDescriptor().getMessageType(74); internal_static_sysml_ValueSequence_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_ValueSequence_descriptor, new java.lang.String[] { "Elements", }); internal_static_sysml_Quantity_descriptor = - getDescriptor().getMessageType(74); + getDescriptor().getMessageType(75); internal_static_sysml_Quantity_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Quantity_descriptor, new java.lang.String[] { "IntMagnitude", "RealMagnitude", "Unit", "UnitTerm", "Magnitude", }); internal_static_sysml_MeasurementRef_descriptor = - getDescriptor().getMessageType(75); + getDescriptor().getMessageType(76); internal_static_sysml_MeasurementRef_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_MeasurementRef_descriptor, new java.lang.String[] { "Unit", "UnitTerm", "UnitId", }); internal_static_sysml_UnitTerm_descriptor = - getDescriptor().getMessageType(76); + getDescriptor().getMessageType(77); internal_static_sysml_UnitTerm_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_UnitTerm_descriptor, new java.lang.String[] { "ScaleNum", "ScaleDen", "Factors", }); internal_static_sysml_UnitFactor_descriptor = - getDescriptor().getMessageType(77); + getDescriptor().getMessageType(78); internal_static_sysml_UnitFactor_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_UnitFactor_descriptor, new java.lang.String[] { "UnitId", "Exponent", }); internal_static_sysml_Diagnostic_descriptor = - getDescriptor().getMessageType(78); + getDescriptor().getMessageType(79); internal_static_sysml_Diagnostic_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Diagnostic_descriptor, new java.lang.String[] { "Severity", "Message", "Span", "Code", }); internal_static_sysml_Span_descriptor = - getDescriptor().getMessageType(79); + getDescriptor().getMessageType(80); internal_static_sysml_Span_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Span_descriptor, new java.lang.String[] { "File", "StartLine", "StartCol", "EndLine", "EndCol", }); internal_static_sysml_ServerInfoRequest_descriptor = - getDescriptor().getMessageType(80); + getDescriptor().getMessageType(81); internal_static_sysml_ServerInfoRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_ServerInfoRequest_descriptor, new java.lang.String[] { }); internal_static_sysml_ServerInfoResponse_descriptor = - getDescriptor().getMessageType(81); + getDescriptor().getMessageType(82); internal_static_sysml_ServerInfoResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_ServerInfoResponse_descriptor, new java.lang.String[] { "Version", "Capabilities", }); internal_static_sysml_QueryRequest_descriptor = - getDescriptor().getMessageType(82); + getDescriptor().getMessageType(83); internal_static_sysml_QueryRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_QueryRequest_descriptor, new java.lang.String[] { "ModelHash", "Query", "OslcQuery", }); internal_static_sysml_QueryResponse_descriptor = - getDescriptor().getMessageType(83); + getDescriptor().getMessageType(84); internal_static_sysml_QueryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_QueryResponse_descriptor, new java.lang.String[] { "Elements", }); internal_static_sysml_Query_descriptor = - getDescriptor().getMessageType(84); + getDescriptor().getMessageType(85); internal_static_sysml_Query_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Query_descriptor, new java.lang.String[] { "Scope", "Select", "Where", }); internal_static_sysml_Constraint_descriptor = - getDescriptor().getMessageType(85); + getDescriptor().getMessageType(86); internal_static_sysml_Constraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_Constraint_descriptor, new java.lang.String[] { "Primitive", "Composite", "Constraint", }); internal_static_sysml_PrimitiveConstraint_descriptor = - getDescriptor().getMessageType(86); + getDescriptor().getMessageType(87); internal_static_sysml_PrimitiveConstraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_PrimitiveConstraint_descriptor, new java.lang.String[] { "Inverse", "Property", "Operator", "Value", }); internal_static_sysml_CompositeConstraint_descriptor = - getDescriptor().getMessageType(87); + getDescriptor().getMessageType(88); internal_static_sysml_CompositeConstraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_CompositeConstraint_descriptor, new java.lang.String[] { "Operator", "Constraint", }); internal_static_sysml_QueryResultElement_descriptor = - getDescriptor().getMessageType(88); + getDescriptor().getMessageType(89); internal_static_sysml_QueryResultElement_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_QueryResultElement_descriptor, @@ -1764,13 +1782,13 @@ public static void registerAllExtensions( internal_static_sysml_QueryResultElement_PropertiesEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_sysml_SweepRange_descriptor = - getDescriptor().getMessageType(89); + getDescriptor().getMessageType(90); internal_static_sysml_SweepRange_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_SweepRange_descriptor, new java.lang.String[] { "Parameter", "Start", "End", "Step", }); internal_static_sysml_RunSweepRequest_descriptor = - getDescriptor().getMessageType(90); + getDescriptor().getMessageType(91); internal_static_sysml_RunSweepRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RunSweepRequest_descriptor, @@ -1782,91 +1800,91 @@ public static void registerAllExtensions( internal_static_sysml_RunSweepRequest_NamedArgumentsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); internal_static_sysml_SweepRow_descriptor = - getDescriptor().getMessageType(91); + getDescriptor().getMessageType(92); internal_static_sysml_SweepRow_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_SweepRow_descriptor, new java.lang.String[] { "Inputs", "Outputs", "Verdicts", "ElapsedMicros", "Error", "FailureReason", "Evaluations", }); internal_static_sysml_RunSweepResponse_descriptor = - getDescriptor().getMessageType(92); + getDescriptor().getMessageType(93); internal_static_sysml_RunSweepResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RunSweepResponse_descriptor, new java.lang.String[] { "Rows", "Parameters", "Sampled", "Seed", "Error", "Diagnostics", "FailureReason", "Instances", "Engine", "Strength", "Bounds", }); internal_static_sysml_RunDocumentQueryRequest_descriptor = - getDescriptor().getMessageType(93); + getDescriptor().getMessageType(94); internal_static_sysml_RunDocumentQueryRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RunDocumentQueryRequest_descriptor, new java.lang.String[] { "ModelHash", "QueryId", "Bindings", }); internal_static_sysml_DocumentQueryBinding_descriptor = - getDescriptor().getMessageType(94); + getDescriptor().getMessageType(95); internal_static_sysml_DocumentQueryBinding_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentQueryBinding_descriptor, new java.lang.String[] { "Parameter", "Values", }); internal_static_sysml_DocumentValue_descriptor = - getDescriptor().getMessageType(95); + getDescriptor().getMessageType(96); internal_static_sysml_DocumentValue_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentValue_descriptor, new java.lang.String[] { "ElementId", "StringValue", "IntValue", "RealValue", "BoolValue", "Infinity", "Quantity", "Verdict", "Object", "State", "Event", "ElementType", "Kind", }); internal_static_sysml_DocumentObject_descriptor = - getDescriptor().getMessageType(96); + getDescriptor().getMessageType(97); internal_static_sysml_DocumentObject_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentObject_descriptor, new java.lang.String[] { "InstanceId", "Path", "Element", }); internal_static_sysml_DocumentVerdict_descriptor = - getDescriptor().getMessageType(97); + getDescriptor().getMessageType(98); internal_static_sysml_DocumentVerdict_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentVerdict_descriptor, new java.lang.String[] { "Assertion", "Kind", "Text", "Path", "Verdict", "Condition", "Reason", "Verification", }); internal_static_sysml_DocumentState_descriptor = - getDescriptor().getMessageType(98); + getDescriptor().getMessageType(99); internal_static_sysml_DocumentState_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentState_descriptor, new java.lang.String[] { "Object", "Machine", "Name", "StatePath", "State", "Region", "Enclosing", }); internal_static_sysml_DocumentEvent_descriptor = - getDescriptor().getMessageType(99); + getDescriptor().getMessageType(100); internal_static_sysml_DocumentEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentEvent_descriptor, new java.lang.String[] { "Kind", "Time", "Object", "Machine", "State", "From", "To", "Target", "Event", "Payload", "Alternatives", "Taken", "Text", }); internal_static_sysml_DocumentQueryColumn_descriptor = - getDescriptor().getMessageType(100); + getDescriptor().getMessageType(101); internal_static_sysml_DocumentQueryColumn_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentQueryColumn_descriptor, new java.lang.String[] { "Name", }); internal_static_sysml_DocumentQueryCell_descriptor = - getDescriptor().getMessageType(101); + getDescriptor().getMessageType(102); internal_static_sysml_DocumentQueryCell_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentQueryCell_descriptor, new java.lang.String[] { "Values", }); internal_static_sysml_DocumentQueryRow_descriptor = - getDescriptor().getMessageType(102); + getDescriptor().getMessageType(103); internal_static_sysml_DocumentQueryRow_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_DocumentQueryRow_descriptor, new java.lang.String[] { "Element", "Cells", }); internal_static_sysml_RunDocumentQueryResponse_descriptor = - getDescriptor().getMessageType(103); + getDescriptor().getMessageType(104); internal_static_sysml_RunDocumentQueryResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RunDocumentQueryResponse_descriptor, new java.lang.String[] { "Columns", "Rows", }); internal_static_sysml_RenderDocumentRequest_descriptor = - getDescriptor().getMessageType(104); + getDescriptor().getMessageType(105); internal_static_sysml_RenderDocumentRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RenderDocumentRequest_descriptor, new java.lang.String[] { "ModelHash", "DocumentId", "Form", }); internal_static_sysml_RenderDocumentResponse_descriptor = - getDescriptor().getMessageType(105); + getDescriptor().getMessageType(106); internal_static_sysml_RenderDocumentResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_RenderDocumentResponse_descriptor, diff --git a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java index bb4641fc17..148da0ece8 100644 --- a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java +++ b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java @@ -61,6 +61,7 @@ void theServiceAdvertisesTheCapabilitiesTheClientNegotiatesOn() { assertTrue(capabilities.has(Capabilities.EVALUATE_SUBJECT)); assertTrue(capabilities.has(Capabilities.TYPE_FACTS)); assertTrue(capabilities.has(Capabilities.CONNECTION_AUTHORING)); + assertTrue(capabilities.has(Capabilities.TRANSITION_AUTHORING)); } @Test diff --git a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/PublicTypesTest.java b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/PublicTypesTest.java index b4fb463ebd..605d4c6087 100644 --- a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/PublicTypesTest.java +++ b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/PublicTypesTest.java @@ -728,6 +728,27 @@ void newAuthoringOperationsRequireTheirCapabilitiesBeforeRpc() { assertEditCapability( Edit.AddRequirementConstraint.of("Demo::r", "require", "true"), Capabilities.REQUIREMENT_CONSTRAINT_AUTHORING); + assertEditCapability( + Edit.AddTransition.of("Demo::S", "idle", "toasting"), + Capabilities.TRANSITION_AUTHORING); + } + + @Test + void addingATransitionAlsoRequiresAuthoring() { + try (Connection limited = + new Connection( + new ConnectTransport("127.0.0.1:1", Encoding.PROTOBUF, Duration.ofSeconds(1)), + new Capabilities( + "dev", java.util.Set.of(Capabilities.APPLY_EDITS, Capabilities.TRANSITION_AUTHORING)))) { + Model model = new Model(limited, "hash", List.of(), List.of()); + CapabilityException refused = + assertThrows( + CapabilityException.class, + () -> + model.applyEdits( + List.of(Edit.AddTransition.of("Demo::S", "idle", "toasting")))); + assertEquals(Capabilities.AUTHORING, refused.capability()); + } } private static void assertEditCapability(Edit edit, String capability) { diff --git a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/internal/EditProtosTest.java b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/internal/EditProtosTest.java index 66624ec587..ef0e603262 100644 --- a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/internal/EditProtosTest.java +++ b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/internal/EditProtosTest.java @@ -110,6 +110,29 @@ void anAddRequirementConstraintEditCarriesItsExpressionAndName() { assertEquals("valid", operation.getAddRequirementConstraint().getName()); } + @Test + void anAddTransitionEditCarriesClausesAndEntryFlag() { + var operation = + Protos.proto( + Edit.AddTransition.of("Demo::S", "idle", "toasting") + .withName("go") + .withTrigger("CycleStart") + .withGuard("ready") + .withEffect("action cool")); + assertEquals("Demo::S", operation.getAddTransition().getOwner()); + assertEquals("go", operation.getAddTransition().getName()); + assertEquals("idle", operation.getAddTransition().getSource()); + assertEquals("toasting", operation.getAddTransition().getTarget()); + assertEquals("CycleStart", operation.getAddTransition().getTrigger()); + assertEquals("ready", operation.getAddTransition().getGuard()); + assertEquals("action cool", operation.getAddTransition().getEffect()); + assertFalse(operation.getAddTransition().getInitial()); + + var entry = Protos.proto(Edit.AddTransition.entry("Demo::S", "idle")); + assertEquals("idle", entry.getAddTransition().getTarget()); + assertTrue(entry.getAddTransition().getInitial()); + } + @Test void anAddConnectionEditCarriesItsEndsAndOptionalFields() { var minimal = Protos.proto(Edit.AddConnection.of("Demo::System", "flow", "a.out", "b.in")); diff --git a/client/java/opensysml-conformance/src/main/java/org/openmbee/opensysml/conformance/Api.java b/client/java/opensysml-conformance/src/main/java/org/openmbee/opensysml/conformance/Api.java index f920a06479..27b7f3bfb8 100644 --- a/client/java/opensysml-conformance/src/main/java/org/openmbee/opensysml/conformance/Api.java +++ b/client/java/opensysml-conformance/src/main/java/org/openmbee/opensysml/conformance/Api.java @@ -779,6 +779,25 @@ private static Edit edit(org.openmbee.opensysml.proto.EditOperation operation) { } yield constraint; } + case ADD_TRANSITION -> { + org.openmbee.opensysml.proto.AddTransitionEdit add = operation.getAddTransition(); + Edit.AddTransition transition = add.getInitial() + ? Edit.AddTransition.entry(add.getOwner(), add.getTarget()) + : Edit.AddTransition.of(add.getOwner(), add.getSource(), add.getTarget()); + if (!add.getName().isEmpty()) { + transition = transition.withName(add.getName()); + } + if (!add.getTrigger().isEmpty()) { + transition = transition.withTrigger(add.getTrigger()); + } + if (!add.getGuard().isEmpty()) { + transition = transition.withGuard(add.getGuard()); + } + if (!add.getEffect().isEmpty()) { + transition = transition.withEffect(add.getEffect()); + } + yield transition; + } case DELETE -> new Edit.Delete(operation.getDelete().getTarget(), operation.getDelete().getCascade()); case MOVE -> diff --git a/client/node/src/generated/sysml_pb.ts b/client/node/src/generated/sysml_pb.ts index c67cec69ce..e4b38773ea 100644 --- a/client/node/src/generated/sysml_pb.ts +++ b/client/node/src/generated/sysml_pb.ts @@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file sysml.proto. */ export const file_sysml: GenFile = /*@__PURE__*/ - fileDesc("CgtzeXNtbC5wcm90bxIFc3lzbWwiuQIKB1ZlcmRpY3QSDAoEa2luZBgBIAEoCRISCgplbGVtZW50X2lkGAIgASgJEg8KB2VsZW1lbnQYAyABKAkSDQoFaG9sZHMYBCABKAgSEQoJY29uZGl0aW9uGAUgASgJEhMKC2luc3RhbmNlX2lkGAYgASgDEhgKEGluc3RhbmNlX3R5cGVfaWQYByABKAkSDQoFZXJyb3IYCCABKAkSLAoOZmFpbHVyZV9yZWFzb24YCSABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEhYKDnJlcXVpcmVtZW50X2lkGAogASgJEg4KBmVuZ2luZRgLIAEoCRIQCghzdHJlbmd0aBgMIAEoCRIcCgZib3VuZHMYDSADKAsyDC5zeXNtbC5Cb3VuZBIVCg1pbnN0YW5jZV9wYXRoGA4gASgJIjUKBUJvdW5kEgwKBG5hbWUYASABKAkSDQoFbGltaXQYAiABKAMSDwoHcmVhY2hlZBgDIAEoCCJrChdWZXJpZnlDb25zdHJhaW50UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgDIAEoCRIOCgZlbmdpbmUYBCABKAkilgEKGFZlcmlmeUNvbnN0cmFpbnRSZXNwb25zZRIfCgd2ZXJkaWN0GAEgASgLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAiADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgDIAEoCRImCgtkaWFnbm9zdGljcxgEIAMoCzIRLnN5c21sLkRpYWdub3N0aWMibAoYVmVyaWZ5UmVxdWlyZW1lbnRSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEhkKEXN1YmplY3Rfc3ltYm9sX2lkGAMgASgJEg4KBmVuZ2luZRgEIAEoCSJtChNWZXJpZmljYXRpb25WZXJkaWN0Eg8KB2Nhc2VfaWQYASABKAkSDAoEa2luZBgCIAEoCRIOCgZkZXRhaWwYAyABKAkSDwoHc3ViY2FzZRgEIAEoCBIWCg5yZXF1aXJlbWVudF9pZBgFIAEoCSLSAQoZVmVyaWZ5UmVxdWlyZW1lbnRSZXNwb25zZRIfCgd2ZXJkaWN0GAEgASgLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAiADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgDIAEoCRImCgtkaWFnbm9zdGljcxgEIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAUgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdCJSChlWZXJpZnlTYXRpc2ZhY3Rpb25SZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEg4KBmVuZ2luZRgDIAEoCSKCAgoaVmVyaWZ5U2F0aXNmYWN0aW9uUmVzcG9uc2USIAoIdmVyZGljdHMYASADKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgCIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgFIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAYgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdCJQChdWYWxpZGF0ZUluc3RhbmNlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIOCgZlbmdpbmUYAyABKAkisgIKGFZhbGlkYXRlSW5zdGFuY2VSZXNwb25zZRIgCgh2ZXJkaWN0cxgBIAMoCzIOLnN5c21sLlZlcmRpY3QSHwoHc3VtbWFyeRgCIAEoCzIOLnN5c21sLlZlcmRpY3QSIgoJaW5zdGFuY2VzGAMgAygLMg8uc3lzbWwuSW5zdGFuY2USDQoFZXJyb3IYBCABKAkSJgoLZGlhZ25vc3RpY3MYBSADKAsyES5zeXNtbC5EaWFnbm9zdGljEiwKDmZhaWx1cmVfcmVhc29uGAYgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhI5ChV2ZXJpZmljYXRpb25fdmVyZGljdHMYByADKAsyGi5zeXNtbC5WZXJpZmljYXRpb25WZXJkaWN0Eg8KB2JvdW5kZWQYCCABKAgibQoTRXZhbHVhdGVDYWxjUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIfCglhcmd1bWVudHMYAyADKAsyDC5zeXNtbC5WYWx1ZRIOCgZlbmdpbmUYBCABKAki/QEKFEV2YWx1YXRlQ2FsY1Jlc3BvbnNlEhwKBnJlc3VsdBgBIAEoCzIMLnN5c21sLlZhbHVlEiIKB291dHB1dHMYAiADKAsyES5zeXNtbC5DYWxjT3V0cHV0Eg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgFIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SDgoGZW5naW5lGAYgASgJEhAKCHN0cmVuZ3RoGAcgASgJEhwKBmJvdW5kcxgIIAMoCzIMLnN5c21sLkJvdW5kIjcKCkNhbGNPdXRwdXQSDAoEbmFtZRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlIpMBCg5DYXNlRXZhbHVhdGlvbhITCgtmdW5jdGlvbl9pZBgBIAEoCRIfCglhcmd1bWVudHMYAiADKAsyDC5zeXNtbC5WYWx1ZRIcCgZyZXN1bHQYAyABKAsyDC5zeXNtbC5WYWx1ZRINCgVlcnJvchgEIAEoCRIQCghzZWxlY3RlZBgFIAEoCBIMCgR0aWVkGAYgASgIIqYCChJSdW5BbmFseXNpc1JlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkSGQoRc3ViamVjdF9zeW1ib2xfaWQYAyABKAkSHwoJYXJndW1lbnRzGAQgAygLMgwuc3lzbWwuVmFsdWUSRgoPbmFtZWRfYXJndW1lbnRzGAUgAygLMi0uc3lzbWwuUnVuQW5hbHlzaXNSZXF1ZXN0Lk5hbWVkQXJndW1lbnRzRW50cnkSEAoIc2NoZWR1bGUYBiABKAkSDgoGZW5naW5lGAcgASgJGkMKE05hbWVkQXJndW1lbnRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBItwDChNSdW5BbmFseXNpc1Jlc3BvbnNlEiIKB291dHB1dHMYASADKAsyES5zeXNtbC5DYWxjT3V0cHV0EiAKCHZlcmRpY3RzGAIgAygLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAyADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgEIAEoCRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSLAoOZmFpbHVyZV9yZWFzb24YBiABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEjkKFXZlcmlmaWNhdGlvbl92ZXJkaWN0cxgHIAMoCzIaLnN5c21sLlZlcmlmaWNhdGlvblZlcmRpY3QSIAoIb3V0Y29tZXMYCCADKAsyDi5zeXNtbC5PdXRjb21lEi0KC2V4cGxvcmF0aW9uGAkgASgLMhguc3lzbWwuRXhwbG9yYXRpb25TdGF0dXMSKgoLZXZhbHVhdGlvbnMYCiADKAsyFS5zeXNtbC5DYXNlRXZhbHVhdGlvbhIOCgZlbmdpbmUYCyABKAkSEAoIc3RyZW5ndGgYDCABKAkSHAoGYm91bmRzGA0gAygLMgwuc3lzbWwuQm91bmQilwIKB091dGNvbWUSLAoHb3V0cHV0cxgBIAMoCzIbLnN5c21sLk91dGNvbWUuT3V0cHV0c0VudHJ5EhMKC2ZpbmFsX3N0YXRlGAIgASgJEhYKDnN0YXRlc192aXNpdGVkGAMgAygJEg0KBWVycm9yGAQgASgJEhYKDmxpbmVhcml6YXRpb25zGAUgASgFEg8KB3dpdG5lc3MYBiADKAkSJgoLZGlhZ25vc3RpY3MYByADKAsyES5zeXNtbC5EaWFnbm9zdGljEhMKC3Byb2JhYmlsaXR5GAggASgBGjwKDE91dHB1dHNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEilgEKEUV4cGxvcmF0aW9uU3RhdHVzEhAKCGNvbXBsZXRlGAEgASgIEgwKBHJ1bnMYAiABKAUSEwoLYnVkZ2V0c19oaXQYAyADKAkSEwoLcnVuc19idWRnZXQYBCABKAUSFAoMZGVwdGhfYnVkZ2V0GAUgASgFEiEKGXByb2JhYmlsaXRpZXNfbG93ZXJfYm91bmQYBiABKAgiFAoSTGlzdEVuZ2luZXNSZXF1ZXN0IvwBCgpFbmdpbmVJbmZvEgwKBG5hbWUYASABKAkSEQoJYXV0aG9yaXR5GAIgASgJEg8KB2Fuc3dlcnMYAyADKAkSDgoGYm91bmRzGAQgAygJEg8KB3Byb2Nlc3MYBSABKAkSFQoNcHJvY2Vzc19mb3VuZBgGIAEoCRINCgVyZWFkeRgHIAEoCBITCgt1bmF2YWlsYWJsZRgIIAEoCRIMCgRraW5kGAkgASgJEhAKCHByb3RvY29sGAogASgJEg4KBnNvdXJjZRgLIAEoCRIPCgdjb21tYW5kGAwgASgJEg8KB3ZlcnNpb24YDSABKAkSDgoGc2VydmVkGA4gASgIIjkKE0xpc3RFbmdpbmVzUmVzcG9uc2USIgoHZW5naW5lcxgBIAMoCzIRLnN5c21sLkVuZ2luZUluZm8ijAEKEFBhcnNlRmlsZVJlcXVlc3QSEwoJZmlsZV9wYXRoGAEgASgJSAASEQoHY29udGVudBgCIAEoCUgAEhgKDGNvbnRlbnRfaGFzaBgDIAEoCUICGAESEAoIbGFuZ3VhZ2UYBCABKAkSGgoSc3RyaWN0X2NvbmZvcm1hbmNlGAUgASgIQggKBnNvdXJjZSJiCg5Tb3VyY2VEb2N1bWVudBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASEAoIbGFuZ3VhZ2UYAyABKAkSDAoEbmFtZRgEIAEoCUIICgZzb3VyY2UiWwoTUGFyc2VTb3VyY2VzUmVxdWVzdBIoCglkb2N1bWVudHMYASADKAsyFS5zeXNtbC5Tb3VyY2VEb2N1bWVudBIaChJzdHJpY3RfY29uZm9ybWFuY2UYAiABKAgigwEKFFBhcnNlU291cmNlc1Jlc3BvbnNlEhIKCm1vZGVsX2hhc2gYASABKAkSIAoFcm9vdHMYAiADKAsyES5zeXNtbC5TeW1ib2xJbmZvEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxINCgVlcnJvchgEIAEoCSJ/ChFQYXJzZUZpbGVSZXNwb25zZRISCgptb2RlbF9oYXNoGAEgASgJEh8KBHJvb3QYAiABKAsyES5zeXNtbC5TeW1ib2xJbmZvEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxINCgVlcnJvchgEIAEoCSI5ChBHZXRTeW1ib2xSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJIkIKDlN5bWJvbFJlc3BvbnNlEiEKBnN5bWJvbBgBIAEoCzIRLnN5c21sLlN5bWJvbEluZm8SDQoFZXJyb3IYAiABKAkiKAoSRGlhZ25vc3RpY3NSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkiTAoTRGlhZ25vc3RpY3NSZXNwb25zZRImCgtkaWFnbm9zdGljcxgBIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSDQoFZXJyb3IYAiABKAkibwoPRXZhbHVhdGVSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEgoKZXhwcmVzc2lvbhgCIAEoCRIZChFjb250ZXh0X3N5bWJvbF9pZBgDIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgEIAEoCSJnChBFdmFsdWF0ZVJlc3BvbnNlEhwKBnJlc3VsdBgBIAEoCzIMLnN5c21sLlZhbHVlEg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYyLCAQoISW5zdGFuY2USCgoCaWQYASABKAMSFgoOdHlwZV9zeW1ib2xfaWQYAiABKAkSOgoOZmVhdHVyZV92YWx1ZXMYBCADKAsyIi5zeXNtbC5JbnN0YW5jZS5GZWF0dXJlVmFsdWVzRW50cnkaSQoSRmVhdHVyZVZhbHVlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnN5c21sLkZlYXR1cmVWYWx1ZToCOAFKBAgDEARSBXNsb3RzIoQBCgxGZWF0dXJlVmFsdWUSFAoMZmVhdHVyZV9uYW1lGAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWUSHAoGdmFsdWVzGAMgAygLMgwuc3lzbWwuVmFsdWUSFAoMbWF0ZXJpYWxpemVkGAQgASgIEg0KBWVycm9yGAUgASgJIjsKEkluc3RhbnRpYXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCSKTAQoTSW5zdGFudGlhdGVSZXNwb25zZRIhCghpbnN0YW5jZRgBIAEoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIiCglpbnN0YW5jZXMYBCADKAsyDy5zeXNtbC5JbnN0YW5jZSLpAQoURXhlY3V0ZUFjdGlvblJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIYChBhY3Rpb25fc3ltYm9sX2lkGAIgASgJEjcKBmlucHV0cxgDIAMoCzInLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXF1ZXN0LklucHV0c0VudHJ5EhAKCHNjaGVkdWxlGAQgASgJEhsKE3BlcmZvcm1lcl9zeW1ib2xfaWQYBSABKAkaOwoLSW5wdXRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIq0CChVFeGVjdXRlQWN0aW9uUmVzcG9uc2USOgoHb3V0cHV0cxgBIAMoCzIpLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXNwb25zZS5PdXRwdXRzRW50cnkSDQoFZXJyb3IYAiABKAkSJgoLZGlhZ25vc3RpY3MYAyADKAsyES5zeXNtbC5EaWFnbm9zdGljEiAKCG91dGNvbWVzGAQgAygLMg4uc3lzbWwuT3V0Y29tZRItCgtleHBsb3JhdGlvbhgFIAEoCzIYLnN5c21sLkV4cGxvcmF0aW9uU3RhdHVzEhIKCmZpbmFsX3RpbWUYBiABKAEaPAoMT3V0cHV0c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASKJAQoTRXhlY3V0ZVN0YXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEh8KF3N0YXRlX21hY2hpbmVfc3ltYm9sX2lkGAIgASgJEg4KBmV2ZW50cxgDIAMoCRIQCghzY2hlZHVsZRgEIAEoCRIbChNwZXJmb3JtZXJfc3ltYm9sX2lkGAUgASgJItMCChRFeGVjdXRlU3RhdGVSZXNwb25zZRIWCg5zdGF0ZXNfdmlzaXRlZBgBIAMoCRJECg1maW5hbF9jb250ZXh0GAIgAygLMi0uc3lzbWwuRXhlY3V0ZVN0YXRlUmVzcG9uc2UuRmluYWxDb250ZXh0RW50cnkSDQoFZXJyb3IYAyABKAkSJgoLZGlhZ25vc3RpY3MYBCADKAsyES5zeXNtbC5EaWFnbm9zdGljEiAKCG91dGNvbWVzGAUgAygLMg4uc3lzbWwuT3V0Y29tZRItCgtleHBsb3JhdGlvbhgGIAEoCzIYLnN5c21sLkV4cGxvcmF0aW9uU3RhdHVzEhIKCmZpbmFsX3RpbWUYByABKAEaQQoRRmluYWxDb250ZXh0RW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIqABCg5Db252ZXJ0UmVxdWVzdBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASFAoKbW9kZWxfaGFzaBgGIAEoCUgAEhMKC2Zyb21fZm9ybWF0GAMgASgJEhEKCXRvX2Zvcm1hdBgEIAEoCRIeChZ0b2xlcmF0ZV9zeW50YXhfZXJyb3JzGAUgASgIQggKBnNvdXJjZSK0AQoPQ29udmVydFJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSEwoLZnJvbV9mb3JtYXQYAiABKAkSEQoJdG9fZm9ybWF0GAMgASgJEg0KBWVycm9yGAQgASgJEiYKC2RpYWdub3N0aWNzGAUgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIUCgxleHBlcmltZW50YWwYBiABKAgSGwoTZXhwZXJpbWVudGFsX25vdGljZRgHIAEoCSJ9ChFBcHBseUVkaXRzUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEigKCm9wZXJhdGlvbnMYAiADKAsyFC5zeXNtbC5FZGl0T3BlcmF0aW9uEhAKCGRvY3VtZW50GAMgASgJEhgKEGFjY2VwdF9kb2N1bWVudHMYBCABKAgiigMKDUVkaXRPcGVyYXRpb24SKAoJc2V0X3ZhbHVlGAEgASgLMhMuc3lzbWwuU2V0VmFsdWVFZGl0SAASIwoGcmVuYW1lGAIgASgLMhEuc3lzbWwuUmVuYW1lRWRpdEgAEioKCmFkZF9tZW1iZXIYAyABKAsyFC5zeXNtbC5BZGRNZW1iZXJFZGl0SAASIwoGZGVsZXRlGAQgASgLMhEuc3lzbWwuRGVsZXRlRWRpdEgAEh8KBG1vdmUYBSABKAsyDy5zeXNtbC5Nb3ZlRWRpdEgAEjIKDmFkZF9jb25uZWN0aW9uGAYgASgLMhguc3lzbWwuQWRkQ29ubmVjdGlvbkVkaXRIABIsCgthZGRfc2F0aXNmeRgHIAEoCzIVLnN5c21sLkFkZFNhdGlzZnlFZGl0SAASSQoaYWRkX3JlcXVpcmVtZW50X2NvbnN0cmFpbnQYCCABKAsyIy5zeXNtbC5BZGRSZXF1aXJlbWVudENvbnN0cmFpbnRFZGl0SABCCwoJb3BlcmF0aW9uItEBCg1BZGRNZW1iZXJFZGl0Eg0KBW93bmVyGAEgASgJEgwKBGtpbmQYAiABKAkSDAoEbmFtZRgDIAEoCRIMCgR0eXBlGAQgASgJEhQKDG11bHRpcGxpY2l0eRgFIAEoCRINCgV2YWx1ZRgGIAEoCRITCgtzcGVjaWFsaXplcxgHIAMoCRITCgtpc19hYnN0cmFjdBgIIAEoCBIRCglyZWRlZmluZXMYCSADKAkSEgoKaXNfZGVmYXVsdBgKIAEoCBIRCglkaXJlY3Rpb24YCyABKAkieQoOQWRkU2F0aXNmeUVkaXQSDQoFb3duZXIYASABKAkSEwoLcmVxdWlyZW1lbnQYAiABKAkSGgoSc2F0aXNmeWluZ19mZWF0dXJlGAMgASgJEhMKC2lzX2Fzc2VydGVkGAQgASgIEhIKCmlzX25lZ2F0ZWQYBSABKAgiXQocQWRkUmVxdWlyZW1lbnRDb25zdHJhaW50RWRpdBINCgVvd25lchgBIAEoCRIMCgRraW5kGAIgASgJEhIKCmV4cHJlc3Npb24YAyABKAkSDAoEbmFtZRgEIAEoCSJuChFBZGRDb25uZWN0aW9uRWRpdBINCgVvd25lchgBIAEoCRIMCgRraW5kGAIgASgJEhAKCGZyb21fZW5kGAMgASgJEg4KBnRvX2VuZBgEIAEoCRIMCgRuYW1lGAUgASgJEgwKBHR5cGUYBiABKAkiLQoKRGVsZXRlRWRpdBIOCgZ0YXJnZXQYASABKAkSDwoHY2FzY2FkZRgCIAEoCCIpCghNb3ZlRWRpdBIOCgZ0YXJnZXQYASABKAkSDQoFb3duZXIYAiABKAkiLQoMU2V0VmFsdWVFZGl0Eg4KBnRhcmdldBgBIAEoCRINCgV2YWx1ZRgCIAEoCSIuCgpSZW5hbWVFZGl0Eg4KBnRhcmdldBgBIAEoCRIQCghuZXdfbmFtZRgCIAEoCSKQAgoSQXBwbHlFZGl0c1Jlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSIwoHYXBwbGllZBgCIAMoCzISLnN5c21sLkFwcGxpZWRFZGl0Eg0KBWVycm9yGAMgASgJEiMKB2ZhaWx1cmUYBCABKA4yEi5zeXNtbC5FZGl0RmFpbHVyZRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSGgoScmVmZXJyaW5nX2VsZW1lbnRzGAYgAygJEigKCWRvY3VtZW50cxgHIAMoCzIVLnN5c21sLkVkaXRlZERvY3VtZW50EiIKCXJlZmVycmVycxgIIAMoCzIPLnN5c21sLlJlZmVycmVyIi8KDkVkaXRlZERvY3VtZW50EgwKBG5hbWUYASABKAkSDwoHY29udGVudBgCIAEoCSIqCghSZWZlcnJlchIMCgRuYW1lGAEgASgJEhAKCGRvY3VtZW50GAIgASgJIowBCgtBcHBsaWVkRWRpdBIXCg9vcGVyYXRpb25faW5kZXgYASABKAUSDgoGdGFyZ2V0GAIgASgJEg4KBm9mZnNldBgDIAEoBRIOCgZsZW5ndGgYBCABKAUSEAoIb2xkX3RleHQYBSABKAkSEAoIbmV3X3RleHQYBiABKAkSEAoIZG9jdW1lbnQYByABKAki/QIKClN5bWJvbEluZm8SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIMCgRraW5kGAMgASgJEjEKCG1ldGFkYXRhGAQgAygLMh8uc3lzbWwuU3ltYm9sSW5mby5NZXRhZGF0YUVudHJ5EhEKCWNoaWxkX2lkcxgFIAMoCRIoCgphdHRyaWJ1dGVzGAYgAygLMhQuc3lzbWwuQXR0cmlidXRlSW5mbxIiCgl0eXBlX2luZm8YByABKAsyDy5zeXNtbC5UeXBlSW5mbxItCgxtdWx0aXBsaWNpdHkYCCABKAsyFy5zeXNtbC5NdWx0aXBsaWNpdHlJbmZvEi4KD3NwZWNpYWxpemF0aW9ucxgJIAMoCzIVLnN5c21sLlNwZWNpYWxpemF0aW9uEiMKG3dpdGhoZWxkX2xpYnJhcnlfYXR0cmlidXRlcxgKIAEoBRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiWAoOU3BlY2lhbGl6YXRpb24SDAoEa2luZBgBIAEoCRIQCghkZWNsYXJlZBgCIAEoCRIRCgl0YXJnZXRfaWQYAyABKAkSEwoLdGFyZ2V0X2tpbmQYBCABKAkilQEKCFR5cGVJbmZvEhAKCGRlY2xhcmVkGAEgASgJEhMKC3Jlc29sdmVkX2lkGAIgASgJEhUKDXJlc29sdmVkX2tpbmQYAyABKAkSEQoJcHJpbWl0aXZlGAQgASgJEhgKEHByaW1pdGl2ZV9zb3VyY2UYBSABKAkSEAoIcXVhbnRpdHkYBiABKAgSDAoEdW5pdBgHIAEoCSIwChBNdWx0aXBsaWNpdHlJbmZvEg0KBWxvd2VyGAEgASgJEg0KBXVwcGVyGAIgASgJIlYKDUF0dHJpYnV0ZUluZm8SDAoEbmFtZRgBIAEoCRIMCgR0eXBlGAIgASgJEhsKBXZhbHVlGAMgASgLMgwuc3lzbWwuVmFsdWUSDAoEdW5pdBgEIAEoCSLDBQoFVmFsdWUSEwoJaW50X3ZhbHVlGAEgASgDSAASFAoKcmVhbF92YWx1ZRgCIAEoAUgAEhQKCmJvb2xfdmFsdWUYAyABKAhIABIWCgxzdHJpbmdfdmFsdWUYBCABKAlIABIVCgtpbnN0YW5jZV9pZBgFIAEoA0gAEigKCHNlcXVlbmNlGAYgASgLMhQuc3lzbWwuVmFsdWVTZXF1ZW5jZUgAEg4KBG51bGwYByABKAlIABIjCghxdWFudGl0eRgIIAEoCzIPLnN5c21sLlF1YW50aXR5SAASKgoMZW51bV9saXRlcmFsGAkgASgLMhIuc3lzbWwuRW51bUxpdGVyYWxIABIPCgV1bnNldBgKIAEoCEgAEiEKB2NvbXBsZXgYCyABKAsyDi5zeXNtbC5Db21wbGV4SAASHQoFYXJyYXkYDCABKAsyDC5zeXNtbC5BcnJheUgAEh8KBnZlY3RvchgNIAEoCzINLnN5c21sLlZlY3RvckgAEjAKD3ZlY3Rvcl9xdWFudGl0eRgOIAEoCzIVLnN5c21sLlZlY3RvclF1YW50aXR5SAASMAoPbWVhc3VyZW1lbnRfcmVmGA8gASgLMhUuc3lzbWwuTWVhc3VyZW1lbnRSZWZIABISCghpbmZpbml0eRgQIAEoCEgAEiMKCGZ1bmN0aW9uGBEgASgLMg8uc3lzbWwuRnVuY3Rpb25IABIeCgNzZXQYEiABKAsyDy5zeXNtbC5WYWx1ZVNldEgAEjAKD3RlbnNvcl9xdWFudGl0eRgTIAEoCzIVLnN5c21sLlRlbnNvclF1YW50aXR5SAASJwoKbWV0YW9iamVjdBgUIAEoCzIRLnN5c21sLk1ldGFvYmplY3RIABIrCgx1bmRldGVybWluZWQYFSABKAsyEy5zeXNtbC5VbmRldGVybWluZWRIAEIGCgRraW5kIjYKCk1ldGFvYmplY3QSEgoKZWxlbWVudF9pZBgBIAEoCRIUCgxtZXRhY2xhc3NfaWQYAiABKAkiRgoMVW5kZXRlcm1pbmVkEg4KBnJlYXNvbhgBIAEoCRImCgVjb3VudBgCIAEoCzIXLnN5c21sLk11bHRpcGxpY2l0eUluZm8iLAoIRnVuY3Rpb24SDwoHY2FsY19pZBgBIAEoCRIPCgdzZWxmX2lkGAIgASgDIioKCFZhbHVlU2V0Eh4KCGVsZW1lbnRzGAEgAygLMgwuc3lzbWwuVmFsdWUiSQoOVGVuc29yUXVhbnRpdHkSEgoKZGltZW5zaW9ucxgBIAMoAxIjCgpjb21wb25lbnRzGAIgAygLMg8uc3lzbWwuUXVhbnRpdHkiOwoFQXJyYXkSEgoKZGltZW5zaW9ucxgBIAMoAxIeCghlbGVtZW50cxgCIAMoCzIMLnN5c21sLlZhbHVlIioKBlZlY3RvchIgCgpjb21wb25lbnRzGAEgAygLMgwuc3lzbWwuVmFsdWUiNQoOVmVjdG9yUXVhbnRpdHkSIwoKY29tcG9uZW50cxgBIAMoCzIPLnN5c21sLlF1YW50aXR5IioKB0NvbXBsZXgSDAoEcmVhbBgBIAEoARIRCglpbWFnaW5hcnkYAiABKAEiZAoLRW51bUxpdGVyYWwSEgoKbGl0ZXJhbF9pZBgBIAEoCRIWCg5lbnVtZXJhdGlvbl9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhsKBXZhbHVlGAQgASgLMgwuc3lzbWwuVmFsdWUiLwoNVmFsdWVTZXF1ZW5jZRIeCghlbGVtZW50cxgBIAMoCzIMLnN5c21sLlZhbHVlInwKCFF1YW50aXR5EhcKDWludF9tYWduaXR1ZGUYASABKANIABIYCg5yZWFsX21hZ25pdHVkZRgCIAEoAUgAEgwKBHVuaXQYAyABKAkSIgoJdW5pdF90ZXJtGAQgASgLMg8uc3lzbWwuVW5pdFRlcm1CCwoJbWFnbml0dWRlIlMKDk1lYXN1cmVtZW50UmVmEgwKBHVuaXQYASABKAkSIgoJdW5pdF90ZXJtGAIgASgLMg8uc3lzbWwuVW5pdFRlcm0SDwoHdW5pdF9pZBgDIAEoCSJUCghVbml0VGVybRIRCglzY2FsZV9udW0YASABKAESEQoJc2NhbGVfZGVuGAIgASgBEiIKB2ZhY3RvcnMYAyADKAsyES5zeXNtbC5Vbml0RmFjdG9yIi8KClVuaXRGYWN0b3ISDwoHdW5pdF9pZBgBIAEoCRIQCghleHBvbmVudBgCIAEoASJYCgpEaWFnbm9zdGljEhAKCHNldmVyaXR5GAEgASgJEg8KB21lc3NhZ2UYAiABKAkSGQoEc3BhbhgDIAEoCzILLnN5c21sLlNwYW4SDAoEY29kZRgEIAEoCSJeCgRTcGFuEgwKBGZpbGUYASABKAkSEgoKc3RhcnRfbGluZRgCIAEoBRIRCglzdGFydF9jb2wYAyABKAUSEAoIZW5kX2xpbmUYBCABKAUSDwoHZW5kX2NvbBgFIAEoBSITChFTZXJ2ZXJJbmZvUmVxdWVzdCI7ChJTZXJ2ZXJJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCRIUCgxjYXBhYmlsaXRpZXMYAiADKAkiUwoMUXVlcnlSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSGwoFcXVlcnkYAiABKAsyDC5zeXNtbC5RdWVyeRISCgpvc2xjX3F1ZXJ5GAMgASgJIjwKDVF1ZXJ5UmVzcG9uc2USKwoIZWxlbWVudHMYASADKAsyGS5zeXNtbC5RdWVyeVJlc3VsdEVsZW1lbnQiSAoFUXVlcnkSDQoFc2NvcGUYASADKAkSDgoGc2VsZWN0GAIgAygJEiAKBXdoZXJlGAMgASgLMhEuc3lzbWwuQ29uc3RyYWludCJ8CgpDb25zdHJhaW50Ei8KCXByaW1pdGl2ZRgBIAEoCzIaLnN5c21sLlByaW1pdGl2ZUNvbnN0cmFpbnRIABIvCgljb21wb3NpdGUYAiABKAsyGi5zeXNtbC5Db21wb3NpdGVDb25zdHJhaW50SABCDAoKY29uc3RyYWludCJzChNQcmltaXRpdmVDb25zdHJhaW50Eg8KB2ludmVyc2UYASABKAgSEAoIcHJvcGVydHkYAiABKAkSKgoIb3BlcmF0b3IYAyABKA4yGC5zeXNtbC5QcmltaXRpdmVPcGVyYXRvchINCgV2YWx1ZRgEIAMoCSJoChNDb21wb3NpdGVDb25zdHJhaW50EioKCG9wZXJhdG9yGAEgASgOMhguc3lzbWwuQ29tcG9zaXRlT3BlcmF0b3ISJQoKY29uc3RyYWludBgCIAMoCzIRLnN5c21sLkNvbnN0cmFpbnQioAEKElF1ZXJ5UmVzdWx0RWxlbWVudBIKCgJpZBgBIAEoCRIMCgR0eXBlGAIgASgJEj0KCnByb3BlcnRpZXMYAyADKAsyKS5zeXNtbC5RdWVyeVJlc3VsdEVsZW1lbnQuUHJvcGVydGllc0VudHJ5GjEKD1Byb3BlcnRpZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBInMKClN3ZWVwUmFuZ2USEQoJcGFyYW1ldGVyGAEgASgJEhsKBXN0YXJ0GAIgASgLMgwuc3lzbWwuVmFsdWUSGQoDZW5kGAMgASgLMgwuc3lzbWwuVmFsdWUSGgoEc3RlcBgEIAEoCzIMLnN5c21sLlZhbHVlItACCg9SdW5Td2VlcFJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkSGQoRc3ViamVjdF9zeW1ib2xfaWQYAyABKAkSHwoJYXJndW1lbnRzGAQgAygLMgwuc3lzbWwuVmFsdWUSQwoPbmFtZWRfYXJndW1lbnRzGAUgAygLMiouc3lzbWwuUnVuU3dlZXBSZXF1ZXN0Lk5hbWVkQXJndW1lbnRzRW50cnkSIQoGcmFuZ2VzGAYgAygLMhEuc3lzbWwuU3dlZXBSYW5nZRIPCgdzYW1wbGVzGAcgASgDEgwKBHNlZWQYCCABKAQSDgoGZW5naW5lGAkgASgJGkMKE05hbWVkQXJndW1lbnRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIvQBCghTd2VlcFJvdxIhCgZpbnB1dHMYASADKAsyES5zeXNtbC5DYWxjT3V0cHV0EiIKB291dHB1dHMYAiADKAsyES5zeXNtbC5DYWxjT3V0cHV0EiAKCHZlcmRpY3RzGAMgAygLMg4uc3lzbWwuVmVyZGljdBIWCg5lbGFwc2VkX21pY3JvcxgEIAEoAxINCgVlcnJvchgFIAEoCRIsCg5mYWlsdXJlX3JlYXNvbhgGIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SKgoLZXZhbHVhdGlvbnMYByADKAsyFS5zeXNtbC5DYXNlRXZhbHVhdGlvbiKtAgoQUnVuU3dlZXBSZXNwb25zZRIdCgRyb3dzGAEgAygLMg8uc3lzbWwuU3dlZXBSb3cSEgoKcGFyYW1ldGVycxgCIAMoCRIPCgdzYW1wbGVkGAMgASgIEgwKBHNlZWQYBCABKAQSDQoFZXJyb3IYBSABKAkSJgoLZGlhZ25vc3RpY3MYBiADKAsyES5zeXNtbC5EaWFnbm9zdGljEiwKDmZhaWx1cmVfcmVhc29uGAcgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhIiCglpbnN0YW5jZXMYCCADKAsyDy5zeXNtbC5JbnN0YW5jZRIOCgZlbmdpbmUYCSABKAkSEAoIc3RyZW5ndGgYCiABKAkSHAoGYm91bmRzGAsgAygLMgwuc3lzbWwuQm91bmQibgoXUnVuRG9jdW1lbnRRdWVyeVJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIQCghxdWVyeV9pZBgCIAEoCRItCghiaW5kaW5ncxgDIAMoCzIbLnN5c21sLkRvY3VtZW50UXVlcnlCaW5kaW5nIk8KFERvY3VtZW50UXVlcnlCaW5kaW5nEhEKCXBhcmFtZXRlchgBIAEoCRIkCgZ2YWx1ZXMYAiADKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlIvcCCg1Eb2N1bWVudFZhbHVlEhQKCmVsZW1lbnRfaWQYASABKAlIABIWCgxzdHJpbmdfdmFsdWUYAiABKAlIABITCglpbnRfdmFsdWUYAyABKANIABIUCgpyZWFsX3ZhbHVlGAQgASgBSAASFAoKYm9vbF92YWx1ZRgFIAEoCEgAEhIKCGluZmluaXR5GAYgASgISAASIwoIcXVhbnRpdHkYCCABKAsyDy5zeXNtbC5RdWFudGl0eUgAEikKB3ZlcmRpY3QYCSABKAsyFi5zeXNtbC5Eb2N1bWVudFZlcmRpY3RIABInCgZvYmplY3QYCiABKAsyFS5zeXNtbC5Eb2N1bWVudE9iamVjdEgAEiUKBXN0YXRlGAsgASgLMhQuc3lzbWwuRG9jdW1lbnRTdGF0ZUgAEiUKBWV2ZW50GAwgASgLMhQuc3lzbWwuRG9jdW1lbnRFdmVudEgAEhQKDGVsZW1lbnRfdHlwZRgHIAEoCUIGCgRraW5kIloKDkRvY3VtZW50T2JqZWN0EhMKC2luc3RhbmNlX2lkGAEgASgDEgwKBHBhdGgYAiABKAkSJQoHZWxlbWVudBgDIAEoCzIULnN5c21sLkRvY3VtZW50VmFsdWUirgEKD0RvY3VtZW50VmVyZGljdBInCglhc3NlcnRpb24YASABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEgwKBGtpbmQYAiABKAkSDAoEdGV4dBgDIAEoCRIMCgRwYXRoGAQgASgJEg8KB3ZlcmRpY3QYBSABKAkSEQoJY29uZGl0aW9uGAYgASgJEg4KBnJlYXNvbhgHIAEoCRIUCgx2ZXJpZmljYXRpb24YCCADKAkisQEKDURvY3VtZW50U3RhdGUSJQoGb2JqZWN0GAEgASgLMhUuc3lzbWwuRG9jdW1lbnRPYmplY3QSDwoHbWFjaGluZRgCIAEoCRIMCgRuYW1lGAMgASgJEhIKCnN0YXRlX3BhdGgYBCABKAkSIwoFc3RhdGUYBSABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEg4KBnJlZ2lvbhgGIAEoCRIRCgllbmNsb3NpbmcYByADKAkinAIKDURvY3VtZW50RXZlbnQSDAoEa2luZBgBIAEoCRIiCgR0aW1lGAIgASgLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZRIlCgZvYmplY3QYAyABKAsyFS5zeXNtbC5Eb2N1bWVudE9iamVjdBIPCgdtYWNoaW5lGAQgASgJEg0KBXN0YXRlGAUgASgJEgwKBGZyb20YBiABKAkSCgoCdG8YByABKAkSJQoGdGFyZ2V0GAggASgLMhUuc3lzbWwuRG9jdW1lbnRPYmplY3QSDQoFZXZlbnQYCSABKAkSDwoHcGF5bG9hZBgKIAMoCRIUCgxhbHRlcm5hdGl2ZXMYCyADKAkSDQoFdGFrZW4YDCABKAkSDAoEdGV4dBgNIAEoCSIjChNEb2N1bWVudFF1ZXJ5Q29sdW1uEgwKBG5hbWUYASABKAkiOQoRRG9jdW1lbnRRdWVyeUNlbGwSJAoGdmFsdWVzGAEgAygLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZSJiChBEb2N1bWVudFF1ZXJ5Um93EiUKB2VsZW1lbnQYASABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEicKBWNlbGxzGAIgAygLMhguc3lzbWwuRG9jdW1lbnRRdWVyeUNlbGwibgoYUnVuRG9jdW1lbnRRdWVyeVJlc3BvbnNlEisKB2NvbHVtbnMYASADKAsyGi5zeXNtbC5Eb2N1bWVudFF1ZXJ5Q29sdW1uEiUKBHJvd3MYAiADKAsyFy5zeXNtbC5Eb2N1bWVudFF1ZXJ5Um93Ik4KFVJlbmRlckRvY3VtZW50UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEgwKBGZvcm0YAyABKAkiOAoWUmVuZGVyRG9jdW1lbnRSZXNwb25zZRIQCghtYXJrZG93bhgBIAEoCRIMCgRodG1sGAIgASgJKpMBCg1GYWlsdXJlUmVhc29uEh4KGkZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASHQoZRkFJTFVSRV9SRUFTT05fRVZBTFVBVElPThABEh0KGUZBSUxVUkVfUkVBU09OX1dST05HX0tJTkQQAhIkCiBGQUlMVVJFX1JFQVNPTl9BTUJJR1VPVVNfU1VCSkVDVBADKowFCgtFZGl0RmFpbHVyZRIcChhFRElUX0ZBSUxVUkVfVU5TUEVDSUZJRUQQABIeChpFRElUX0ZBSUxVUkVfTk9fT1BFUkFUSU9OUxABEh8KG0VESVRfRkFJTFVSRV9VTktOT1dOX1RBUkdFVBACEiEKHUVESVRfRkFJTFVSRV9BTUJJR1VPVVNfVEFSR0VUEAMSGwoXRURJVF9GQUlMVVJFX05PVF9WQUxVRUQQBBIeChpFRElUX0ZBSUxVUkVfSU5WQUxJRF9WQUxVRRAFEh0KGUVESVRfRkFJTFVSRV9JTlZBTElEX05BTUUQBhIaChZFRElUX0ZBSUxVUkVfTk9UX05BTUVEEAcSIgoeRURJVF9GQUlMVVJFX1JFTkFNRV9SRUZFUkVOQ0VEEAgSIgoeRURJVF9GQUlMVVJFX09WRVJMQVBQSU5HX0VESVRTEAkSHwobRURJVF9GQUlMVVJFX1JFU1VMVF9JTlZBTElEEAoSHgoaRURJVF9GQUlMVVJFX09XTkVSX1VOS05PV04QCxIkCiBFRElUX0ZBSUxVUkVfT1dORVJfTk9UX05BTUVTUEFDRRAMEh0KGUVESVRfRkFJTFVSRV9JTExFR0FMX0tJTkQQDRIiCh5FRElUX0ZBSUxVUkVfTUVNQkVSX05BTUVfVEFLRU4QDhIiCh5FRElUX0ZBSUxVUkVfREVMRVRFX1JFRkVSRU5DRUQQDxIkCiBFRElUX0ZBSUxVUkVfT1dORVJfSU5TSURFX1RBUkdFVBAQEiAKHEVESVRfRkFJTFVSRV9NT1ZFX1JFRkVSRU5DRUQQERIlCiFFRElUX0ZBSUxVUkVfUkVGRVJFTkNFRF9FTFNFV0hFUkUQEiqSAQoRUHJpbWl0aXZlT3BlcmF0b3ISIgoeUFJJTUlUSVZFX09QRVJBVE9SX1VOU1BFQ0lGSUVEEAASHAoYUFJJTUlUSVZFX09QRVJBVE9SX0VRVUFMEAESHgoaUFJJTUlUSVZFX09QRVJBVE9SX0dSRUFURVIQAhIbChdQUklNSVRJVkVfT1BFUkFUT1JfTEVTUxADKm4KEUNvbXBvc2l0ZU9wZXJhdG9yEiIKHkNPTVBPU0lURV9PUEVSQVRPUl9VTlNQRUNJRklFRBAAEhoKFkNPTVBPU0lURV9PUEVSQVRPUl9BTkQQARIZChVDT01QT1NJVEVfT1BFUkFUT1JfT1IQAjK/DAoMU3lzTUxTZXJ2aWNlEkQKDUdldFNlcnZlckluZm8SGC5zeXNtbC5TZXJ2ZXJJbmZvUmVxdWVzdBoZLnN5c21sLlNlcnZlckluZm9SZXNwb25zZRI+CglQYXJzZUZpbGUSFy5zeXNtbC5QYXJzZUZpbGVSZXF1ZXN0Ghguc3lzbWwuUGFyc2VGaWxlUmVzcG9uc2USRwoMUGFyc2VTb3VyY2VzEhouc3lzbWwuUGFyc2VTb3VyY2VzUmVxdWVzdBobLnN5c21sLlBhcnNlU291cmNlc1Jlc3BvbnNlEjsKCUdldFN5bWJvbBIXLnN5c21sLkdldFN5bWJvbFJlcXVlc3QaFS5zeXNtbC5TeW1ib2xSZXNwb25zZRJHCg5HZXREaWFnbm9zdGljcxIZLnN5c21sLkRpYWdub3N0aWNzUmVxdWVzdBoaLnN5c21sLkRpYWdub3N0aWNzUmVzcG9uc2USOwoIRXZhbHVhdGUSFi5zeXNtbC5FdmFsdWF0ZVJlcXVlc3QaFy5zeXNtbC5FdmFsdWF0ZVJlc3BvbnNlEkQKC0luc3RhbnRpYXRlEhkuc3lzbWwuSW5zdGFudGlhdGVSZXF1ZXN0Ghouc3lzbWwuSW5zdGFudGlhdGVSZXNwb25zZRJKCg1FeGVjdXRlQWN0aW9uEhsuc3lzbWwuRXhlY3V0ZUFjdGlvblJlcXVlc3QaHC5zeXNtbC5FeGVjdXRlQWN0aW9uUmVzcG9uc2USRwoMRXhlY3V0ZVN0YXRlEhouc3lzbWwuRXhlY3V0ZVN0YXRlUmVxdWVzdBobLnN5c21sLkV4ZWN1dGVTdGF0ZVJlc3BvbnNlEjgKB0NvbnZlcnQSFS5zeXNtbC5Db252ZXJ0UmVxdWVzdBoWLnN5c21sLkNvbnZlcnRSZXNwb25zZRJBCgpBcHBseUVkaXRzEhguc3lzbWwuQXBwbHlFZGl0c1JlcXVlc3QaGS5zeXNtbC5BcHBseUVkaXRzUmVzcG9uc2USUwoQVmVyaWZ5Q29uc3RyYWludBIeLnN5c21sLlZlcmlmeUNvbnN0cmFpbnRSZXF1ZXN0Gh8uc3lzbWwuVmVyaWZ5Q29uc3RyYWludFJlc3BvbnNlElYKEVZlcmlmeVJlcXVpcmVtZW50Eh8uc3lzbWwuVmVyaWZ5UmVxdWlyZW1lbnRSZXF1ZXN0GiAuc3lzbWwuVmVyaWZ5UmVxdWlyZW1lbnRSZXNwb25zZRJZChJWZXJpZnlTYXRpc2ZhY3Rpb24SIC5zeXNtbC5WZXJpZnlTYXRpc2ZhY3Rpb25SZXF1ZXN0GiEuc3lzbWwuVmVyaWZ5U2F0aXNmYWN0aW9uUmVzcG9uc2USUwoQVmFsaWRhdGVJbnN0YW5jZRIeLnN5c21sLlZhbGlkYXRlSW5zdGFuY2VSZXF1ZXN0Gh8uc3lzbWwuVmFsaWRhdGVJbnN0YW5jZVJlc3BvbnNlEkcKDEV2YWx1YXRlQ2FsYxIaLnN5c21sLkV2YWx1YXRlQ2FsY1JlcXVlc3QaGy5zeXNtbC5FdmFsdWF0ZUNhbGNSZXNwb25zZRJECgtSdW5BbmFseXNpcxIZLnN5c21sLlJ1bkFuYWx5c2lzUmVxdWVzdBoaLnN5c21sLlJ1bkFuYWx5c2lzUmVzcG9uc2USOwoIUnVuU3dlZXASFi5zeXNtbC5SdW5Td2VlcFJlcXVlc3QaFy5zeXNtbC5SdW5Td2VlcFJlc3BvbnNlEkQKC0xpc3RFbmdpbmVzEhkuc3lzbWwuTGlzdEVuZ2luZXNSZXF1ZXN0Ghouc3lzbWwuTGlzdEVuZ2luZXNSZXNwb25zZRIyCgVRdWVyeRITLnN5c21sLlF1ZXJ5UmVxdWVzdBoULnN5c21sLlF1ZXJ5UmVzcG9uc2USUwoQUnVuRG9jdW1lbnRRdWVyeRIeLnN5c21sLlJ1bkRvY3VtZW50UXVlcnlSZXF1ZXN0Gh8uc3lzbWwuUnVuRG9jdW1lbnRRdWVyeVJlc3BvbnNlEk0KDlJlbmRlckRvY3VtZW50Ehwuc3lzbWwuUmVuZGVyRG9jdW1lbnRSZXF1ZXN0Gh0uc3lzbWwuUmVuZGVyRG9jdW1lbnRSZXNwb25zZUIqWihnaXRodWIuY29tL09wZW4tTUJFRS9PcGVuU3lzTUwvYXBpL3Byb3RvYgZwcm90bzM"); + fileDesc("CgtzeXNtbC5wcm90bxIFc3lzbWwiuQIKB1ZlcmRpY3QSDAoEa2luZBgBIAEoCRISCgplbGVtZW50X2lkGAIgASgJEg8KB2VsZW1lbnQYAyABKAkSDQoFaG9sZHMYBCABKAgSEQoJY29uZGl0aW9uGAUgASgJEhMKC2luc3RhbmNlX2lkGAYgASgDEhgKEGluc3RhbmNlX3R5cGVfaWQYByABKAkSDQoFZXJyb3IYCCABKAkSLAoOZmFpbHVyZV9yZWFzb24YCSABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEhYKDnJlcXVpcmVtZW50X2lkGAogASgJEg4KBmVuZ2luZRgLIAEoCRIQCghzdHJlbmd0aBgMIAEoCRIcCgZib3VuZHMYDSADKAsyDC5zeXNtbC5Cb3VuZBIVCg1pbnN0YW5jZV9wYXRoGA4gASgJIjUKBUJvdW5kEgwKBG5hbWUYASABKAkSDQoFbGltaXQYAiABKAMSDwoHcmVhY2hlZBgDIAEoCCJrChdWZXJpZnlDb25zdHJhaW50UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgDIAEoCRIOCgZlbmdpbmUYBCABKAkilgEKGFZlcmlmeUNvbnN0cmFpbnRSZXNwb25zZRIfCgd2ZXJkaWN0GAEgASgLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAiADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgDIAEoCRImCgtkaWFnbm9zdGljcxgEIAMoCzIRLnN5c21sLkRpYWdub3N0aWMibAoYVmVyaWZ5UmVxdWlyZW1lbnRSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEhkKEXN1YmplY3Rfc3ltYm9sX2lkGAMgASgJEg4KBmVuZ2luZRgEIAEoCSJtChNWZXJpZmljYXRpb25WZXJkaWN0Eg8KB2Nhc2VfaWQYASABKAkSDAoEa2luZBgCIAEoCRIOCgZkZXRhaWwYAyABKAkSDwoHc3ViY2FzZRgEIAEoCBIWCg5yZXF1aXJlbWVudF9pZBgFIAEoCSLSAQoZVmVyaWZ5UmVxdWlyZW1lbnRSZXNwb25zZRIfCgd2ZXJkaWN0GAEgASgLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAiADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgDIAEoCRImCgtkaWFnbm9zdGljcxgEIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAUgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdCJSChlWZXJpZnlTYXRpc2ZhY3Rpb25SZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEg4KBmVuZ2luZRgDIAEoCSKCAgoaVmVyaWZ5U2F0aXNmYWN0aW9uUmVzcG9uc2USIAoIdmVyZGljdHMYASADKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgCIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgFIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAYgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdCJQChdWYWxpZGF0ZUluc3RhbmNlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIOCgZlbmdpbmUYAyABKAkisgIKGFZhbGlkYXRlSW5zdGFuY2VSZXNwb25zZRIgCgh2ZXJkaWN0cxgBIAMoCzIOLnN5c21sLlZlcmRpY3QSHwoHc3VtbWFyeRgCIAEoCzIOLnN5c21sLlZlcmRpY3QSIgoJaW5zdGFuY2VzGAMgAygLMg8uc3lzbWwuSW5zdGFuY2USDQoFZXJyb3IYBCABKAkSJgoLZGlhZ25vc3RpY3MYBSADKAsyES5zeXNtbC5EaWFnbm9zdGljEiwKDmZhaWx1cmVfcmVhc29uGAYgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhI5ChV2ZXJpZmljYXRpb25fdmVyZGljdHMYByADKAsyGi5zeXNtbC5WZXJpZmljYXRpb25WZXJkaWN0Eg8KB2JvdW5kZWQYCCABKAgibQoTRXZhbHVhdGVDYWxjUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIfCglhcmd1bWVudHMYAyADKAsyDC5zeXNtbC5WYWx1ZRIOCgZlbmdpbmUYBCABKAki/QEKFEV2YWx1YXRlQ2FsY1Jlc3BvbnNlEhwKBnJlc3VsdBgBIAEoCzIMLnN5c21sLlZhbHVlEiIKB291dHB1dHMYAiADKAsyES5zeXNtbC5DYWxjT3V0cHV0Eg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgFIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SDgoGZW5naW5lGAYgASgJEhAKCHN0cmVuZ3RoGAcgASgJEhwKBmJvdW5kcxgIIAMoCzIMLnN5c21sLkJvdW5kIjcKCkNhbGNPdXRwdXQSDAoEbmFtZRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlIpMBCg5DYXNlRXZhbHVhdGlvbhITCgtmdW5jdGlvbl9pZBgBIAEoCRIfCglhcmd1bWVudHMYAiADKAsyDC5zeXNtbC5WYWx1ZRIcCgZyZXN1bHQYAyABKAsyDC5zeXNtbC5WYWx1ZRINCgVlcnJvchgEIAEoCRIQCghzZWxlY3RlZBgFIAEoCBIMCgR0aWVkGAYgASgIIqYCChJSdW5BbmFseXNpc1JlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkSGQoRc3ViamVjdF9zeW1ib2xfaWQYAyABKAkSHwoJYXJndW1lbnRzGAQgAygLMgwuc3lzbWwuVmFsdWUSRgoPbmFtZWRfYXJndW1lbnRzGAUgAygLMi0uc3lzbWwuUnVuQW5hbHlzaXNSZXF1ZXN0Lk5hbWVkQXJndW1lbnRzRW50cnkSEAoIc2NoZWR1bGUYBiABKAkSDgoGZW5naW5lGAcgASgJGkMKE05hbWVkQXJndW1lbnRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBItwDChNSdW5BbmFseXNpc1Jlc3BvbnNlEiIKB291dHB1dHMYASADKAsyES5zeXNtbC5DYWxjT3V0cHV0EiAKCHZlcmRpY3RzGAIgAygLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAyADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgEIAEoCRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSLAoOZmFpbHVyZV9yZWFzb24YBiABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEjkKFXZlcmlmaWNhdGlvbl92ZXJkaWN0cxgHIAMoCzIaLnN5c21sLlZlcmlmaWNhdGlvblZlcmRpY3QSIAoIb3V0Y29tZXMYCCADKAsyDi5zeXNtbC5PdXRjb21lEi0KC2V4cGxvcmF0aW9uGAkgASgLMhguc3lzbWwuRXhwbG9yYXRpb25TdGF0dXMSKgoLZXZhbHVhdGlvbnMYCiADKAsyFS5zeXNtbC5DYXNlRXZhbHVhdGlvbhIOCgZlbmdpbmUYCyABKAkSEAoIc3RyZW5ndGgYDCABKAkSHAoGYm91bmRzGA0gAygLMgwuc3lzbWwuQm91bmQilwIKB091dGNvbWUSLAoHb3V0cHV0cxgBIAMoCzIbLnN5c21sLk91dGNvbWUuT3V0cHV0c0VudHJ5EhMKC2ZpbmFsX3N0YXRlGAIgASgJEhYKDnN0YXRlc192aXNpdGVkGAMgAygJEg0KBWVycm9yGAQgASgJEhYKDmxpbmVhcml6YXRpb25zGAUgASgFEg8KB3dpdG5lc3MYBiADKAkSJgoLZGlhZ25vc3RpY3MYByADKAsyES5zeXNtbC5EaWFnbm9zdGljEhMKC3Byb2JhYmlsaXR5GAggASgBGjwKDE91dHB1dHNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEilgEKEUV4cGxvcmF0aW9uU3RhdHVzEhAKCGNvbXBsZXRlGAEgASgIEgwKBHJ1bnMYAiABKAUSEwoLYnVkZ2V0c19oaXQYAyADKAkSEwoLcnVuc19idWRnZXQYBCABKAUSFAoMZGVwdGhfYnVkZ2V0GAUgASgFEiEKGXByb2JhYmlsaXRpZXNfbG93ZXJfYm91bmQYBiABKAgiFAoSTGlzdEVuZ2luZXNSZXF1ZXN0IvwBCgpFbmdpbmVJbmZvEgwKBG5hbWUYASABKAkSEQoJYXV0aG9yaXR5GAIgASgJEg8KB2Fuc3dlcnMYAyADKAkSDgoGYm91bmRzGAQgAygJEg8KB3Byb2Nlc3MYBSABKAkSFQoNcHJvY2Vzc19mb3VuZBgGIAEoCRINCgVyZWFkeRgHIAEoCBITCgt1bmF2YWlsYWJsZRgIIAEoCRIMCgRraW5kGAkgASgJEhAKCHByb3RvY29sGAogASgJEg4KBnNvdXJjZRgLIAEoCRIPCgdjb21tYW5kGAwgASgJEg8KB3ZlcnNpb24YDSABKAkSDgoGc2VydmVkGA4gASgIIjkKE0xpc3RFbmdpbmVzUmVzcG9uc2USIgoHZW5naW5lcxgBIAMoCzIRLnN5c21sLkVuZ2luZUluZm8ijAEKEFBhcnNlRmlsZVJlcXVlc3QSEwoJZmlsZV9wYXRoGAEgASgJSAASEQoHY29udGVudBgCIAEoCUgAEhgKDGNvbnRlbnRfaGFzaBgDIAEoCUICGAESEAoIbGFuZ3VhZ2UYBCABKAkSGgoSc3RyaWN0X2NvbmZvcm1hbmNlGAUgASgIQggKBnNvdXJjZSJiCg5Tb3VyY2VEb2N1bWVudBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASEAoIbGFuZ3VhZ2UYAyABKAkSDAoEbmFtZRgEIAEoCUIICgZzb3VyY2UiWwoTUGFyc2VTb3VyY2VzUmVxdWVzdBIoCglkb2N1bWVudHMYASADKAsyFS5zeXNtbC5Tb3VyY2VEb2N1bWVudBIaChJzdHJpY3RfY29uZm9ybWFuY2UYAiABKAgigwEKFFBhcnNlU291cmNlc1Jlc3BvbnNlEhIKCm1vZGVsX2hhc2gYASABKAkSIAoFcm9vdHMYAiADKAsyES5zeXNtbC5TeW1ib2xJbmZvEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxINCgVlcnJvchgEIAEoCSJ/ChFQYXJzZUZpbGVSZXNwb25zZRISCgptb2RlbF9oYXNoGAEgASgJEh8KBHJvb3QYAiABKAsyES5zeXNtbC5TeW1ib2xJbmZvEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxINCgVlcnJvchgEIAEoCSI5ChBHZXRTeW1ib2xSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJIkIKDlN5bWJvbFJlc3BvbnNlEiEKBnN5bWJvbBgBIAEoCzIRLnN5c21sLlN5bWJvbEluZm8SDQoFZXJyb3IYAiABKAkiKAoSRGlhZ25vc3RpY3NSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkiTAoTRGlhZ25vc3RpY3NSZXNwb25zZRImCgtkaWFnbm9zdGljcxgBIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSDQoFZXJyb3IYAiABKAkibwoPRXZhbHVhdGVSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEgoKZXhwcmVzc2lvbhgCIAEoCRIZChFjb250ZXh0X3N5bWJvbF9pZBgDIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgEIAEoCSJnChBFdmFsdWF0ZVJlc3BvbnNlEhwKBnJlc3VsdBgBIAEoCzIMLnN5c21sLlZhbHVlEg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYyLCAQoISW5zdGFuY2USCgoCaWQYASABKAMSFgoOdHlwZV9zeW1ib2xfaWQYAiABKAkSOgoOZmVhdHVyZV92YWx1ZXMYBCADKAsyIi5zeXNtbC5JbnN0YW5jZS5GZWF0dXJlVmFsdWVzRW50cnkaSQoSRmVhdHVyZVZhbHVlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnN5c21sLkZlYXR1cmVWYWx1ZToCOAFKBAgDEARSBXNsb3RzIoQBCgxGZWF0dXJlVmFsdWUSFAoMZmVhdHVyZV9uYW1lGAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWUSHAoGdmFsdWVzGAMgAygLMgwuc3lzbWwuVmFsdWUSFAoMbWF0ZXJpYWxpemVkGAQgASgIEg0KBWVycm9yGAUgASgJIjsKEkluc3RhbnRpYXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCSKTAQoTSW5zdGFudGlhdGVSZXNwb25zZRIhCghpbnN0YW5jZRgBIAEoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIiCglpbnN0YW5jZXMYBCADKAsyDy5zeXNtbC5JbnN0YW5jZSLpAQoURXhlY3V0ZUFjdGlvblJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIYChBhY3Rpb25fc3ltYm9sX2lkGAIgASgJEjcKBmlucHV0cxgDIAMoCzInLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXF1ZXN0LklucHV0c0VudHJ5EhAKCHNjaGVkdWxlGAQgASgJEhsKE3BlcmZvcm1lcl9zeW1ib2xfaWQYBSABKAkaOwoLSW5wdXRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIq0CChVFeGVjdXRlQWN0aW9uUmVzcG9uc2USOgoHb3V0cHV0cxgBIAMoCzIpLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXNwb25zZS5PdXRwdXRzRW50cnkSDQoFZXJyb3IYAiABKAkSJgoLZGlhZ25vc3RpY3MYAyADKAsyES5zeXNtbC5EaWFnbm9zdGljEiAKCG91dGNvbWVzGAQgAygLMg4uc3lzbWwuT3V0Y29tZRItCgtleHBsb3JhdGlvbhgFIAEoCzIYLnN5c21sLkV4cGxvcmF0aW9uU3RhdHVzEhIKCmZpbmFsX3RpbWUYBiABKAEaPAoMT3V0cHV0c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASKJAQoTRXhlY3V0ZVN0YXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEh8KF3N0YXRlX21hY2hpbmVfc3ltYm9sX2lkGAIgASgJEg4KBmV2ZW50cxgDIAMoCRIQCghzY2hlZHVsZRgEIAEoCRIbChNwZXJmb3JtZXJfc3ltYm9sX2lkGAUgASgJItMCChRFeGVjdXRlU3RhdGVSZXNwb25zZRIWCg5zdGF0ZXNfdmlzaXRlZBgBIAMoCRJECg1maW5hbF9jb250ZXh0GAIgAygLMi0uc3lzbWwuRXhlY3V0ZVN0YXRlUmVzcG9uc2UuRmluYWxDb250ZXh0RW50cnkSDQoFZXJyb3IYAyABKAkSJgoLZGlhZ25vc3RpY3MYBCADKAsyES5zeXNtbC5EaWFnbm9zdGljEiAKCG91dGNvbWVzGAUgAygLMg4uc3lzbWwuT3V0Y29tZRItCgtleHBsb3JhdGlvbhgGIAEoCzIYLnN5c21sLkV4cGxvcmF0aW9uU3RhdHVzEhIKCmZpbmFsX3RpbWUYByABKAEaQQoRRmluYWxDb250ZXh0RW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIqABCg5Db252ZXJ0UmVxdWVzdBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASFAoKbW9kZWxfaGFzaBgGIAEoCUgAEhMKC2Zyb21fZm9ybWF0GAMgASgJEhEKCXRvX2Zvcm1hdBgEIAEoCRIeChZ0b2xlcmF0ZV9zeW50YXhfZXJyb3JzGAUgASgIQggKBnNvdXJjZSK0AQoPQ29udmVydFJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSEwoLZnJvbV9mb3JtYXQYAiABKAkSEQoJdG9fZm9ybWF0GAMgASgJEg0KBWVycm9yGAQgASgJEiYKC2RpYWdub3N0aWNzGAUgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIUCgxleHBlcmltZW50YWwYBiABKAgSGwoTZXhwZXJpbWVudGFsX25vdGljZRgHIAEoCSJ9ChFBcHBseUVkaXRzUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEigKCm9wZXJhdGlvbnMYAiADKAsyFC5zeXNtbC5FZGl0T3BlcmF0aW9uEhAKCGRvY3VtZW50GAMgASgJEhgKEGFjY2VwdF9kb2N1bWVudHMYBCABKAgivgMKDUVkaXRPcGVyYXRpb24SKAoJc2V0X3ZhbHVlGAEgASgLMhMuc3lzbWwuU2V0VmFsdWVFZGl0SAASIwoGcmVuYW1lGAIgASgLMhEuc3lzbWwuUmVuYW1lRWRpdEgAEioKCmFkZF9tZW1iZXIYAyABKAsyFC5zeXNtbC5BZGRNZW1iZXJFZGl0SAASIwoGZGVsZXRlGAQgASgLMhEuc3lzbWwuRGVsZXRlRWRpdEgAEh8KBG1vdmUYBSABKAsyDy5zeXNtbC5Nb3ZlRWRpdEgAEjIKDmFkZF9jb25uZWN0aW9uGAYgASgLMhguc3lzbWwuQWRkQ29ubmVjdGlvbkVkaXRIABIsCgthZGRfc2F0aXNmeRgHIAEoCzIVLnN5c21sLkFkZFNhdGlzZnlFZGl0SAASSQoaYWRkX3JlcXVpcmVtZW50X2NvbnN0cmFpbnQYCCABKAsyIy5zeXNtbC5BZGRSZXF1aXJlbWVudENvbnN0cmFpbnRFZGl0SAASMgoOYWRkX3RyYW5zaXRpb24YCSABKAsyGC5zeXNtbC5BZGRUcmFuc2l0aW9uRWRpdEgAQgsKCW9wZXJhdGlvbiLRAQoNQWRkTWVtYmVyRWRpdBINCgVvd25lchgBIAEoCRIMCgRraW5kGAIgASgJEgwKBG5hbWUYAyABKAkSDAoEdHlwZRgEIAEoCRIUCgxtdWx0aXBsaWNpdHkYBSABKAkSDQoFdmFsdWUYBiABKAkSEwoLc3BlY2lhbGl6ZXMYByADKAkSEwoLaXNfYWJzdHJhY3QYCCABKAgSEQoJcmVkZWZpbmVzGAkgAygJEhIKCmlzX2RlZmF1bHQYCiABKAgSEQoJZGlyZWN0aW9uGAsgASgJInkKDkFkZFNhdGlzZnlFZGl0Eg0KBW93bmVyGAEgASgJEhMKC3JlcXVpcmVtZW50GAIgASgJEhoKEnNhdGlzZnlpbmdfZmVhdHVyZRgDIAEoCRITCgtpc19hc3NlcnRlZBgEIAEoCBISCgppc19uZWdhdGVkGAUgASgIIl0KHEFkZFJlcXVpcmVtZW50Q29uc3RyYWludEVkaXQSDQoFb3duZXIYASABKAkSDAoEa2luZBgCIAEoCRISCgpleHByZXNzaW9uGAMgASgJEgwKBG5hbWUYBCABKAkikQEKEUFkZFRyYW5zaXRpb25FZGl0Eg0KBW93bmVyGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGc291cmNlGAMgASgJEg4KBnRhcmdldBgEIAEoCRIPCgd0cmlnZ2VyGAUgASgJEg0KBWd1YXJkGAYgASgJEg4KBmVmZmVjdBgHIAEoCRIPCgdpbml0aWFsGAggASgIIm4KEUFkZENvbm5lY3Rpb25FZGl0Eg0KBW93bmVyGAEgASgJEgwKBGtpbmQYAiABKAkSEAoIZnJvbV9lbmQYAyABKAkSDgoGdG9fZW5kGAQgASgJEgwKBG5hbWUYBSABKAkSDAoEdHlwZRgGIAEoCSItCgpEZWxldGVFZGl0Eg4KBnRhcmdldBgBIAEoCRIPCgdjYXNjYWRlGAIgASgIIikKCE1vdmVFZGl0Eg4KBnRhcmdldBgBIAEoCRINCgVvd25lchgCIAEoCSItCgxTZXRWYWx1ZUVkaXQSDgoGdGFyZ2V0GAEgASgJEg0KBXZhbHVlGAIgASgJIi4KClJlbmFtZUVkaXQSDgoGdGFyZ2V0GAEgASgJEhAKCG5ld19uYW1lGAIgASgJIpACChJBcHBseUVkaXRzUmVzcG9uc2USDwoHY29udGVudBgBIAEoCRIjCgdhcHBsaWVkGAIgAygLMhIuc3lzbWwuQXBwbGllZEVkaXQSDQoFZXJyb3IYAyABKAkSIwoHZmFpbHVyZRgEIAEoDjISLnN5c21sLkVkaXRGYWlsdXJlEiYKC2RpYWdub3N0aWNzGAUgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIaChJyZWZlcnJpbmdfZWxlbWVudHMYBiADKAkSKAoJZG9jdW1lbnRzGAcgAygLMhUuc3lzbWwuRWRpdGVkRG9jdW1lbnQSIgoJcmVmZXJyZXJzGAggAygLMg8uc3lzbWwuUmVmZXJyZXIiLwoORWRpdGVkRG9jdW1lbnQSDAoEbmFtZRgBIAEoCRIPCgdjb250ZW50GAIgASgJIioKCFJlZmVycmVyEgwKBG5hbWUYASABKAkSEAoIZG9jdW1lbnQYAiABKAkijAEKC0FwcGxpZWRFZGl0EhcKD29wZXJhdGlvbl9pbmRleBgBIAEoBRIOCgZ0YXJnZXQYAiABKAkSDgoGb2Zmc2V0GAMgASgFEg4KBmxlbmd0aBgEIAEoBRIQCghvbGRfdGV4dBgFIAEoCRIQCghuZXdfdGV4dBgGIAEoCRIQCghkb2N1bWVudBgHIAEoCSL9AgoKU3ltYm9sSW5mbxIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEgwKBGtpbmQYAyABKAkSMQoIbWV0YWRhdGEYBCADKAsyHy5zeXNtbC5TeW1ib2xJbmZvLk1ldGFkYXRhRW50cnkSEQoJY2hpbGRfaWRzGAUgAygJEigKCmF0dHJpYnV0ZXMYBiADKAsyFC5zeXNtbC5BdHRyaWJ1dGVJbmZvEiIKCXR5cGVfaW5mbxgHIAEoCzIPLnN5c21sLlR5cGVJbmZvEi0KDG11bHRpcGxpY2l0eRgIIAEoCzIXLnN5c21sLk11bHRpcGxpY2l0eUluZm8SLgoPc3BlY2lhbGl6YXRpb25zGAkgAygLMhUuc3lzbWwuU3BlY2lhbGl6YXRpb24SIwobd2l0aGhlbGRfbGlicmFyeV9hdHRyaWJ1dGVzGAogASgFGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJYCg5TcGVjaWFsaXphdGlvbhIMCgRraW5kGAEgASgJEhAKCGRlY2xhcmVkGAIgASgJEhEKCXRhcmdldF9pZBgDIAEoCRITCgt0YXJnZXRfa2luZBgEIAEoCSKVAQoIVHlwZUluZm8SEAoIZGVjbGFyZWQYASABKAkSEwoLcmVzb2x2ZWRfaWQYAiABKAkSFQoNcmVzb2x2ZWRfa2luZBgDIAEoCRIRCglwcmltaXRpdmUYBCABKAkSGAoQcHJpbWl0aXZlX3NvdXJjZRgFIAEoCRIQCghxdWFudGl0eRgGIAEoCBIMCgR1bml0GAcgASgJIjAKEE11bHRpcGxpY2l0eUluZm8SDQoFbG93ZXIYASABKAkSDQoFdXBwZXIYAiABKAkiVgoNQXR0cmlidXRlSW5mbxIMCgRuYW1lGAEgASgJEgwKBHR5cGUYAiABKAkSGwoFdmFsdWUYAyABKAsyDC5zeXNtbC5WYWx1ZRIMCgR1bml0GAQgASgJIsMFCgVWYWx1ZRITCglpbnRfdmFsdWUYASABKANIABIUCgpyZWFsX3ZhbHVlGAIgASgBSAASFAoKYm9vbF92YWx1ZRgDIAEoCEgAEhYKDHN0cmluZ192YWx1ZRgEIAEoCUgAEhUKC2luc3RhbmNlX2lkGAUgASgDSAASKAoIc2VxdWVuY2UYBiABKAsyFC5zeXNtbC5WYWx1ZVNlcXVlbmNlSAASDgoEbnVsbBgHIAEoCUgAEiMKCHF1YW50aXR5GAggASgLMg8uc3lzbWwuUXVhbnRpdHlIABIqCgxlbnVtX2xpdGVyYWwYCSABKAsyEi5zeXNtbC5FbnVtTGl0ZXJhbEgAEg8KBXVuc2V0GAogASgISAASIQoHY29tcGxleBgLIAEoCzIOLnN5c21sLkNvbXBsZXhIABIdCgVhcnJheRgMIAEoCzIMLnN5c21sLkFycmF5SAASHwoGdmVjdG9yGA0gASgLMg0uc3lzbWwuVmVjdG9ySAASMAoPdmVjdG9yX3F1YW50aXR5GA4gASgLMhUuc3lzbWwuVmVjdG9yUXVhbnRpdHlIABIwCg9tZWFzdXJlbWVudF9yZWYYDyABKAsyFS5zeXNtbC5NZWFzdXJlbWVudFJlZkgAEhIKCGluZmluaXR5GBAgASgISAASIwoIZnVuY3Rpb24YESABKAsyDy5zeXNtbC5GdW5jdGlvbkgAEh4KA3NldBgSIAEoCzIPLnN5c21sLlZhbHVlU2V0SAASMAoPdGVuc29yX3F1YW50aXR5GBMgASgLMhUuc3lzbWwuVGVuc29yUXVhbnRpdHlIABInCgptZXRhb2JqZWN0GBQgASgLMhEuc3lzbWwuTWV0YW9iamVjdEgAEisKDHVuZGV0ZXJtaW5lZBgVIAEoCzITLnN5c21sLlVuZGV0ZXJtaW5lZEgAQgYKBGtpbmQiNgoKTWV0YW9iamVjdBISCgplbGVtZW50X2lkGAEgASgJEhQKDG1ldGFjbGFzc19pZBgCIAEoCSJGCgxVbmRldGVybWluZWQSDgoGcmVhc29uGAEgASgJEiYKBWNvdW50GAIgASgLMhcuc3lzbWwuTXVsdGlwbGljaXR5SW5mbyIsCghGdW5jdGlvbhIPCgdjYWxjX2lkGAEgASgJEg8KB3NlbGZfaWQYAiABKAMiKgoIVmFsdWVTZXQSHgoIZWxlbWVudHMYASADKAsyDC5zeXNtbC5WYWx1ZSJJCg5UZW5zb3JRdWFudGl0eRISCgpkaW1lbnNpb25zGAEgAygDEiMKCmNvbXBvbmVudHMYAiADKAsyDy5zeXNtbC5RdWFudGl0eSI7CgVBcnJheRISCgpkaW1lbnNpb25zGAEgAygDEh4KCGVsZW1lbnRzGAIgAygLMgwuc3lzbWwuVmFsdWUiKgoGVmVjdG9yEiAKCmNvbXBvbmVudHMYASADKAsyDC5zeXNtbC5WYWx1ZSI1Cg5WZWN0b3JRdWFudGl0eRIjCgpjb21wb25lbnRzGAEgAygLMg8uc3lzbWwuUXVhbnRpdHkiKgoHQ29tcGxleBIMCgRyZWFsGAEgASgBEhEKCWltYWdpbmFyeRgCIAEoASJkCgtFbnVtTGl0ZXJhbBISCgpsaXRlcmFsX2lkGAEgASgJEhYKDmVudW1lcmF0aW9uX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGwoFdmFsdWUYBCABKAsyDC5zeXNtbC5WYWx1ZSIvCg1WYWx1ZVNlcXVlbmNlEh4KCGVsZW1lbnRzGAEgAygLMgwuc3lzbWwuVmFsdWUifAoIUXVhbnRpdHkSFwoNaW50X21hZ25pdHVkZRgBIAEoA0gAEhgKDnJlYWxfbWFnbml0dWRlGAIgASgBSAASDAoEdW5pdBgDIAEoCRIiCgl1bml0X3Rlcm0YBCABKAsyDy5zeXNtbC5Vbml0VGVybUILCgltYWduaXR1ZGUiUwoOTWVhc3VyZW1lbnRSZWYSDAoEdW5pdBgBIAEoCRIiCgl1bml0X3Rlcm0YAiABKAsyDy5zeXNtbC5Vbml0VGVybRIPCgd1bml0X2lkGAMgASgJIlQKCFVuaXRUZXJtEhEKCXNjYWxlX251bRgBIAEoARIRCglzY2FsZV9kZW4YAiABKAESIgoHZmFjdG9ycxgDIAMoCzIRLnN5c21sLlVuaXRGYWN0b3IiLwoKVW5pdEZhY3RvchIPCgd1bml0X2lkGAEgASgJEhAKCGV4cG9uZW50GAIgASgBIlgKCkRpYWdub3N0aWMSEAoIc2V2ZXJpdHkYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIZCgRzcGFuGAMgASgLMgsuc3lzbWwuU3BhbhIMCgRjb2RlGAQgASgJIl4KBFNwYW4SDAoEZmlsZRgBIAEoCRISCgpzdGFydF9saW5lGAIgASgFEhEKCXN0YXJ0X2NvbBgDIAEoBRIQCghlbmRfbGluZRgEIAEoBRIPCgdlbmRfY29sGAUgASgFIhMKEVNlcnZlckluZm9SZXF1ZXN0IjsKElNlcnZlckluZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEhQKDGNhcGFiaWxpdGllcxgCIAMoCSJTCgxRdWVyeVJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIbCgVxdWVyeRgCIAEoCzIMLnN5c21sLlF1ZXJ5EhIKCm9zbGNfcXVlcnkYAyABKAkiPAoNUXVlcnlSZXNwb25zZRIrCghlbGVtZW50cxgBIAMoCzIZLnN5c21sLlF1ZXJ5UmVzdWx0RWxlbWVudCJICgVRdWVyeRINCgVzY29wZRgBIAMoCRIOCgZzZWxlY3QYAiADKAkSIAoFd2hlcmUYAyABKAsyES5zeXNtbC5Db25zdHJhaW50InwKCkNvbnN0cmFpbnQSLwoJcHJpbWl0aXZlGAEgASgLMhouc3lzbWwuUHJpbWl0aXZlQ29uc3RyYWludEgAEi8KCWNvbXBvc2l0ZRgCIAEoCzIaLnN5c21sLkNvbXBvc2l0ZUNvbnN0cmFpbnRIAEIMCgpjb25zdHJhaW50InMKE1ByaW1pdGl2ZUNvbnN0cmFpbnQSDwoHaW52ZXJzZRgBIAEoCBIQCghwcm9wZXJ0eRgCIAEoCRIqCghvcGVyYXRvchgDIAEoDjIYLnN5c21sLlByaW1pdGl2ZU9wZXJhdG9yEg0KBXZhbHVlGAQgAygJImgKE0NvbXBvc2l0ZUNvbnN0cmFpbnQSKgoIb3BlcmF0b3IYASABKA4yGC5zeXNtbC5Db21wb3NpdGVPcGVyYXRvchIlCgpjb25zdHJhaW50GAIgAygLMhEuc3lzbWwuQ29uc3RyYWludCKgAQoSUXVlcnlSZXN1bHRFbGVtZW50EgoKAmlkGAEgASgJEgwKBHR5cGUYAiABKAkSPQoKcHJvcGVydGllcxgDIAMoCzIpLnN5c21sLlF1ZXJ5UmVzdWx0RWxlbWVudC5Qcm9wZXJ0aWVzRW50cnkaMQoPUHJvcGVydGllc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicwoKU3dlZXBSYW5nZRIRCglwYXJhbWV0ZXIYASABKAkSGwoFc3RhcnQYAiABKAsyDC5zeXNtbC5WYWx1ZRIZCgNlbmQYAyABKAsyDC5zeXNtbC5WYWx1ZRIaCgRzdGVwGAQgASgLMgwuc3lzbWwuVmFsdWUi0AIKD1J1blN3ZWVwUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgDIAEoCRIfCglhcmd1bWVudHMYBCADKAsyDC5zeXNtbC5WYWx1ZRJDCg9uYW1lZF9hcmd1bWVudHMYBSADKAsyKi5zeXNtbC5SdW5Td2VlcFJlcXVlc3QuTmFtZWRBcmd1bWVudHNFbnRyeRIhCgZyYW5nZXMYBiADKAsyES5zeXNtbC5Td2VlcFJhbmdlEg8KB3NhbXBsZXMYByABKAMSDAoEc2VlZBgIIAEoBBIOCgZlbmdpbmUYCSABKAkaQwoTTmFtZWRBcmd1bWVudHNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEi9AEKCFN3ZWVwUm93EiEKBmlucHV0cxgBIAMoCzIRLnN5c21sLkNhbGNPdXRwdXQSIgoHb3V0cHV0cxgCIAMoCzIRLnN5c21sLkNhbGNPdXRwdXQSIAoIdmVyZGljdHMYAyADKAsyDi5zeXNtbC5WZXJkaWN0EhYKDmVsYXBzZWRfbWljcm9zGAQgASgDEg0KBWVycm9yGAUgASgJEiwKDmZhaWx1cmVfcmVhc29uGAYgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhIqCgtldmFsdWF0aW9ucxgHIAMoCzIVLnN5c21sLkNhc2VFdmFsdWF0aW9uIq0CChBSdW5Td2VlcFJlc3BvbnNlEh0KBHJvd3MYASADKAsyDy5zeXNtbC5Td2VlcFJvdxISCgpwYXJhbWV0ZXJzGAIgAygJEg8KB3NhbXBsZWQYAyABKAgSDAoEc2VlZBgEIAEoBBINCgVlcnJvchgFIAEoCRImCgtkaWFnbm9zdGljcxgGIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSLAoOZmFpbHVyZV9yZWFzb24YByABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEiIKCWluc3RhbmNlcxgIIAMoCzIPLnN5c21sLkluc3RhbmNlEg4KBmVuZ2luZRgJIAEoCRIQCghzdHJlbmd0aBgKIAEoCRIcCgZib3VuZHMYCyADKAsyDC5zeXNtbC5Cb3VuZCJuChdSdW5Eb2N1bWVudFF1ZXJ5UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhAKCHF1ZXJ5X2lkGAIgASgJEi0KCGJpbmRpbmdzGAMgAygLMhsuc3lzbWwuRG9jdW1lbnRRdWVyeUJpbmRpbmciTwoURG9jdW1lbnRRdWVyeUJpbmRpbmcSEQoJcGFyYW1ldGVyGAEgASgJEiQKBnZhbHVlcxgCIAMoCzIULnN5c21sLkRvY3VtZW50VmFsdWUi9wIKDURvY3VtZW50VmFsdWUSFAoKZWxlbWVudF9pZBgBIAEoCUgAEhYKDHN0cmluZ192YWx1ZRgCIAEoCUgAEhMKCWludF92YWx1ZRgDIAEoA0gAEhQKCnJlYWxfdmFsdWUYBCABKAFIABIUCgpib29sX3ZhbHVlGAUgASgISAASEgoIaW5maW5pdHkYBiABKAhIABIjCghxdWFudGl0eRgIIAEoCzIPLnN5c21sLlF1YW50aXR5SAASKQoHdmVyZGljdBgJIAEoCzIWLnN5c21sLkRvY3VtZW50VmVyZGljdEgAEicKBm9iamVjdBgKIAEoCzIVLnN5c21sLkRvY3VtZW50T2JqZWN0SAASJQoFc3RhdGUYCyABKAsyFC5zeXNtbC5Eb2N1bWVudFN0YXRlSAASJQoFZXZlbnQYDCABKAsyFC5zeXNtbC5Eb2N1bWVudEV2ZW50SAASFAoMZWxlbWVudF90eXBlGAcgASgJQgYKBGtpbmQiWgoORG9jdW1lbnRPYmplY3QSEwoLaW5zdGFuY2VfaWQYASABKAMSDAoEcGF0aBgCIAEoCRIlCgdlbGVtZW50GAMgASgLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZSKuAQoPRG9jdW1lbnRWZXJkaWN0EicKCWFzc2VydGlvbhgBIAEoCzIULnN5c21sLkRvY3VtZW50VmFsdWUSDAoEa2luZBgCIAEoCRIMCgR0ZXh0GAMgASgJEgwKBHBhdGgYBCABKAkSDwoHdmVyZGljdBgFIAEoCRIRCgljb25kaXRpb24YBiABKAkSDgoGcmVhc29uGAcgASgJEhQKDHZlcmlmaWNhdGlvbhgIIAMoCSKxAQoNRG9jdW1lbnRTdGF0ZRIlCgZvYmplY3QYASABKAsyFS5zeXNtbC5Eb2N1bWVudE9iamVjdBIPCgdtYWNoaW5lGAIgASgJEgwKBG5hbWUYAyABKAkSEgoKc3RhdGVfcGF0aBgEIAEoCRIjCgVzdGF0ZRgFIAEoCzIULnN5c21sLkRvY3VtZW50VmFsdWUSDgoGcmVnaW9uGAYgASgJEhEKCWVuY2xvc2luZxgHIAMoCSKcAgoNRG9jdW1lbnRFdmVudBIMCgRraW5kGAEgASgJEiIKBHRpbWUYAiABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEiUKBm9iamVjdBgDIAEoCzIVLnN5c21sLkRvY3VtZW50T2JqZWN0Eg8KB21hY2hpbmUYBCABKAkSDQoFc3RhdGUYBSABKAkSDAoEZnJvbRgGIAEoCRIKCgJ0bxgHIAEoCRIlCgZ0YXJnZXQYCCABKAsyFS5zeXNtbC5Eb2N1bWVudE9iamVjdBINCgVldmVudBgJIAEoCRIPCgdwYXlsb2FkGAogAygJEhQKDGFsdGVybmF0aXZlcxgLIAMoCRINCgV0YWtlbhgMIAEoCRIMCgR0ZXh0GA0gASgJIiMKE0RvY3VtZW50UXVlcnlDb2x1bW4SDAoEbmFtZRgBIAEoCSI5ChFEb2N1bWVudFF1ZXJ5Q2VsbBIkCgZ2YWx1ZXMYASADKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlImIKEERvY3VtZW50UXVlcnlSb3cSJQoHZWxlbWVudBgBIAEoCzIULnN5c21sLkRvY3VtZW50VmFsdWUSJwoFY2VsbHMYAiADKAsyGC5zeXNtbC5Eb2N1bWVudFF1ZXJ5Q2VsbCJuChhSdW5Eb2N1bWVudFF1ZXJ5UmVzcG9uc2USKwoHY29sdW1ucxgBIAMoCzIaLnN5c21sLkRvY3VtZW50UXVlcnlDb2x1bW4SJQoEcm93cxgCIAMoCzIXLnN5c21sLkRvY3VtZW50UXVlcnlSb3ciTgoVUmVuZGVyRG9jdW1lbnRSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSDAoEZm9ybRgDIAEoCSI4ChZSZW5kZXJEb2N1bWVudFJlc3BvbnNlEhAKCG1hcmtkb3duGAEgASgJEgwKBGh0bWwYAiABKAkqkwEKDUZhaWx1cmVSZWFzb24SHgoaRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABIdChlGQUlMVVJFX1JFQVNPTl9FVkFMVUFUSU9OEAESHQoZRkFJTFVSRV9SRUFTT05fV1JPTkdfS0lORBACEiQKIEZBSUxVUkVfUkVBU09OX0FNQklHVU9VU19TVUJKRUNUEAMqjAUKC0VkaXRGYWlsdXJlEhwKGEVESVRfRkFJTFVSRV9VTlNQRUNJRklFRBAAEh4KGkVESVRfRkFJTFVSRV9OT19PUEVSQVRJT05TEAESHwobRURJVF9GQUlMVVJFX1VOS05PV05fVEFSR0VUEAISIQodRURJVF9GQUlMVVJFX0FNQklHVU9VU19UQVJHRVQQAxIbChdFRElUX0ZBSUxVUkVfTk9UX1ZBTFVFRBAEEh4KGkVESVRfRkFJTFVSRV9JTlZBTElEX1ZBTFVFEAUSHQoZRURJVF9GQUlMVVJFX0lOVkFMSURfTkFNRRAGEhoKFkVESVRfRkFJTFVSRV9OT1RfTkFNRUQQBxIiCh5FRElUX0ZBSUxVUkVfUkVOQU1FX1JFRkVSRU5DRUQQCBIiCh5FRElUX0ZBSUxVUkVfT1ZFUkxBUFBJTkdfRURJVFMQCRIfChtFRElUX0ZBSUxVUkVfUkVTVUxUX0lOVkFMSUQQChIeChpFRElUX0ZBSUxVUkVfT1dORVJfVU5LTk9XThALEiQKIEVESVRfRkFJTFVSRV9PV05FUl9OT1RfTkFNRVNQQUNFEAwSHQoZRURJVF9GQUlMVVJFX0lMTEVHQUxfS0lORBANEiIKHkVESVRfRkFJTFVSRV9NRU1CRVJfTkFNRV9UQUtFThAOEiIKHkVESVRfRkFJTFVSRV9ERUxFVEVfUkVGRVJFTkNFRBAPEiQKIEVESVRfRkFJTFVSRV9PV05FUl9JTlNJREVfVEFSR0VUEBASIAocRURJVF9GQUlMVVJFX01PVkVfUkVGRVJFTkNFRBAREiUKIUVESVRfRkFJTFVSRV9SRUZFUkVOQ0VEX0VMU0VXSEVSRRASKpIBChFQcmltaXRpdmVPcGVyYXRvchIiCh5QUklNSVRJVkVfT1BFUkFUT1JfVU5TUEVDSUZJRUQQABIcChhQUklNSVRJVkVfT1BFUkFUT1JfRVFVQUwQARIeChpQUklNSVRJVkVfT1BFUkFUT1JfR1JFQVRFUhACEhsKF1BSSU1JVElWRV9PUEVSQVRPUl9MRVNTEAMqbgoRQ29tcG9zaXRlT3BlcmF0b3ISIgoeQ09NUE9TSVRFX09QRVJBVE9SX1VOU1BFQ0lGSUVEEAASGgoWQ09NUE9TSVRFX09QRVJBVE9SX0FORBABEhkKFUNPTVBPU0lURV9PUEVSQVRPUl9PUhACMr8MCgxTeXNNTFNlcnZpY2USRAoNR2V0U2VydmVySW5mbxIYLnN5c21sLlNlcnZlckluZm9SZXF1ZXN0Ghkuc3lzbWwuU2VydmVySW5mb1Jlc3BvbnNlEj4KCVBhcnNlRmlsZRIXLnN5c21sLlBhcnNlRmlsZVJlcXVlc3QaGC5zeXNtbC5QYXJzZUZpbGVSZXNwb25zZRJHCgxQYXJzZVNvdXJjZXMSGi5zeXNtbC5QYXJzZVNvdXJjZXNSZXF1ZXN0Ghsuc3lzbWwuUGFyc2VTb3VyY2VzUmVzcG9uc2USOwoJR2V0U3ltYm9sEhcuc3lzbWwuR2V0U3ltYm9sUmVxdWVzdBoVLnN5c21sLlN5bWJvbFJlc3BvbnNlEkcKDkdldERpYWdub3N0aWNzEhkuc3lzbWwuRGlhZ25vc3RpY3NSZXF1ZXN0Ghouc3lzbWwuRGlhZ25vc3RpY3NSZXNwb25zZRI7CghFdmFsdWF0ZRIWLnN5c21sLkV2YWx1YXRlUmVxdWVzdBoXLnN5c21sLkV2YWx1YXRlUmVzcG9uc2USRAoLSW5zdGFudGlhdGUSGS5zeXNtbC5JbnN0YW50aWF0ZVJlcXVlc3QaGi5zeXNtbC5JbnN0YW50aWF0ZVJlc3BvbnNlEkoKDUV4ZWN1dGVBY3Rpb24SGy5zeXNtbC5FeGVjdXRlQWN0aW9uUmVxdWVzdBocLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXNwb25zZRJHCgxFeGVjdXRlU3RhdGUSGi5zeXNtbC5FeGVjdXRlU3RhdGVSZXF1ZXN0Ghsuc3lzbWwuRXhlY3V0ZVN0YXRlUmVzcG9uc2USOAoHQ29udmVydBIVLnN5c21sLkNvbnZlcnRSZXF1ZXN0GhYuc3lzbWwuQ29udmVydFJlc3BvbnNlEkEKCkFwcGx5RWRpdHMSGC5zeXNtbC5BcHBseUVkaXRzUmVxdWVzdBoZLnN5c21sLkFwcGx5RWRpdHNSZXNwb25zZRJTChBWZXJpZnlDb25zdHJhaW50Eh4uc3lzbWwuVmVyaWZ5Q29uc3RyYWludFJlcXVlc3QaHy5zeXNtbC5WZXJpZnlDb25zdHJhaW50UmVzcG9uc2USVgoRVmVyaWZ5UmVxdWlyZW1lbnQSHy5zeXNtbC5WZXJpZnlSZXF1aXJlbWVudFJlcXVlc3QaIC5zeXNtbC5WZXJpZnlSZXF1aXJlbWVudFJlc3BvbnNlElkKElZlcmlmeVNhdGlzZmFjdGlvbhIgLnN5c21sLlZlcmlmeVNhdGlzZmFjdGlvblJlcXVlc3QaIS5zeXNtbC5WZXJpZnlTYXRpc2ZhY3Rpb25SZXNwb25zZRJTChBWYWxpZGF0ZUluc3RhbmNlEh4uc3lzbWwuVmFsaWRhdGVJbnN0YW5jZVJlcXVlc3QaHy5zeXNtbC5WYWxpZGF0ZUluc3RhbmNlUmVzcG9uc2USRwoMRXZhbHVhdGVDYWxjEhouc3lzbWwuRXZhbHVhdGVDYWxjUmVxdWVzdBobLnN5c21sLkV2YWx1YXRlQ2FsY1Jlc3BvbnNlEkQKC1J1bkFuYWx5c2lzEhkuc3lzbWwuUnVuQW5hbHlzaXNSZXF1ZXN0Ghouc3lzbWwuUnVuQW5hbHlzaXNSZXNwb25zZRI7CghSdW5Td2VlcBIWLnN5c21sLlJ1blN3ZWVwUmVxdWVzdBoXLnN5c21sLlJ1blN3ZWVwUmVzcG9uc2USRAoLTGlzdEVuZ2luZXMSGS5zeXNtbC5MaXN0RW5naW5lc1JlcXVlc3QaGi5zeXNtbC5MaXN0RW5naW5lc1Jlc3BvbnNlEjIKBVF1ZXJ5EhMuc3lzbWwuUXVlcnlSZXF1ZXN0GhQuc3lzbWwuUXVlcnlSZXNwb25zZRJTChBSdW5Eb2N1bWVudFF1ZXJ5Eh4uc3lzbWwuUnVuRG9jdW1lbnRRdWVyeVJlcXVlc3QaHy5zeXNtbC5SdW5Eb2N1bWVudFF1ZXJ5UmVzcG9uc2USTQoOUmVuZGVyRG9jdW1lbnQSHC5zeXNtbC5SZW5kZXJEb2N1bWVudFJlcXVlc3QaHS5zeXNtbC5SZW5kZXJEb2N1bWVudFJlc3BvbnNlQipaKGdpdGh1Yi5jb20vT3Blbi1NQkVFL09wZW5TeXNNTC9hcGkvcHJvdG9iBnByb3RvMw"); /** * Verdict is one verification's answer: whether the condition held, and, when @@ -2277,6 +2277,12 @@ export type EditOperation = Message<"sysml.EditOperation"> & { */ value: AddRequirementConstraintEdit; case: "addRequirementConstraint"; + } | { + /** + * @generated from field: sysml.AddTransitionEdit add_transition = 9; + */ + value: AddTransitionEdit; + case: "addTransition"; } | { case: undefined; value?: undefined }; }; @@ -2379,13 +2385,13 @@ export const AddMemberEditSchema: GenMessage = /*@__PURE__*/ messageDesc(file_sysml, 45); /** - * AddSatisfyEdit inserts a satisfy usage into a body that admits behavior usages. + * AddSatisfyEdit inserts a satisfy usage into any package or body that admits behavior usages. * * @generated from message sysml.AddSatisfyEdit */ export type AddSatisfyEdit = Message<"sysml.AddSatisfyEdit"> & { /** - * Namespace FQN receiving the usage. + * Body receiving the usage. * * @generated from field: string owner = 1; */ @@ -2469,6 +2475,76 @@ export type AddRequirementConstraintEdit = Message<"sysml.AddRequirementConstrai export const AddRequirementConstraintEditSchema: GenMessage = /*@__PURE__*/ messageDesc(file_sysml, 47); +/** + * AddTransitionEdit inserts a transition usage, or an entry transition, into a state body. + * + * @generated from message sysml.AddTransitionEdit + */ +export type AddTransitionEdit = Message<"sysml.AddTransitionEdit"> & { + /** + * State body receiving the transition. + * + * @generated from field: string owner = 1; + */ + owner: string; + + /** + * Optional transition name. + * + * @generated from field: string name = 2; + */ + name: string; + + /** + * Source feature reference; empty only for an entry transition. + * + * @generated from field: string source = 3; + */ + source: string; + + /** + * Target feature reference. + * + * @generated from field: string target = 4; + */ + target: string; + + /** + * Optional text after `accept`. + * + * @generated from field: string trigger = 5; + */ + trigger: string; + + /** + * Optional boolean expression after `if`. + * + * @generated from field: string guard = 6; + */ + guard: string; + + /** + * Optional effect text after `do`. + * + * @generated from field: string effect = 7; + */ + effect: string; + + /** + * Write `entry; then ;` instead of a regular transition. + * + * @generated from field: bool initial = 8; + */ + initial: boolean; +}; + +/** + * Describes the message sysml.AddTransitionEdit. + * Use `create(AddTransitionEditSchema)` to create a new message. + */ +export const AddTransitionEditSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sysml, 48); + /** * AddConnectionEdit inserts a usage whose ends connect two features. * @@ -2524,7 +2600,7 @@ export type AddConnectionEdit = Message<"sysml.AddConnectionEdit"> & { * Use `create(AddConnectionEditSchema)` to create a new message. */ export const AddConnectionEditSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 48); + messageDesc(file_sysml, 49); /** * DeleteEdit removes a declaration and its owned trivia. @@ -2552,7 +2628,7 @@ export type DeleteEdit = Message<"sysml.DeleteEdit"> & { * Use `create(DeleteEditSchema)` to create a new message. */ export const DeleteEditSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 49); + messageDesc(file_sysml, 50); /** * MoveEdit re-parents a declaration: the span DeleteEdit would remove is @@ -2583,7 +2659,7 @@ export type MoveEdit = Message<"sysml.MoveEdit"> & { * Use `create(MoveEditSchema)` to create a new message. */ export const MoveEditSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 50); + messageDesc(file_sysml, 51); /** * SetValueEdit sets the value of a feature that already exists, replacing the @@ -2613,7 +2689,7 @@ export type SetValueEdit = Message<"sysml.SetValueEdit"> & { * Use `create(SetValueEditSchema)` to create a new message. */ export const SetValueEditSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 51); + messageDesc(file_sysml, 52); /** * RenameEdit rewrites the name token of a declaration and every reference to @@ -2644,7 +2720,7 @@ export type RenameEdit = Message<"sysml.RenameEdit"> & { * Use `create(RenameEditSchema)` to create a new message. */ export const RenameEditSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 52); + messageDesc(file_sysml, 53); /** * ApplyEditsResponse carries the edited source, or says why nothing was edited. @@ -2735,7 +2811,7 @@ export type ApplyEditsResponse = Message<"sysml.ApplyEditsResponse"> & { * Use `create(ApplyEditsResponseSchema)` to create a new message. */ export const ApplyEditsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 53); + messageDesc(file_sysml, 54); /** * EditedDocument is the edited notation of one document of the model. @@ -2765,7 +2841,7 @@ export type EditedDocument = Message<"sysml.EditedDocument"> & { * Use `create(EditedDocumentSchema)` to create a new message. */ export const EditedDocumentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 54); + messageDesc(file_sysml, 55); /** * Referrer is one declaration referring to the target of a refused edit. @@ -2794,7 +2870,7 @@ export type Referrer = Message<"sysml.Referrer"> & { * Use `create(ReferrerSchema)` to create a new message. */ export const ReferrerSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 55); + messageDesc(file_sysml, 56); /** * AppliedEdit is one byte range of the original source that an operation @@ -2860,7 +2936,7 @@ export type AppliedEdit = Message<"sysml.AppliedEdit"> & { * Use `create(AppliedEditSchema)` to create a new message. */ export const AppliedEditSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 56); + messageDesc(file_sysml, 57); /** * SymbolInfo represents any SysML element @@ -2942,7 +3018,7 @@ export type SymbolInfo = Message<"sysml.SymbolInfo"> & { * Use `create(SymbolInfoSchema)` to create a new message. */ export const SymbolInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 57); + messageDesc(file_sysml, 58); /** * Specialization is one generalization edge an element declares. @@ -2984,7 +3060,7 @@ export type Specialization = Message<"sysml.Specialization"> & { * Use `create(SpecializationSchema)` to create a new message. */ export const SpecializationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 58); + messageDesc(file_sysml, 59); /** * TypeInfo is the static type of a usage, or the classification of a @@ -3050,7 +3126,7 @@ export type TypeInfo = Message<"sysml.TypeInfo"> & { * Use `create(TypeInfoSchema)` to create a new message. */ export const TypeInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 59); + messageDesc(file_sysml, 60); /** * MultiplicityInfo is a declared multiplicity range. A bound the service cannot @@ -3079,7 +3155,7 @@ export type MultiplicityInfo = Message<"sysml.MultiplicityInfo"> & { * Use `create(MultiplicityInfoSchema)` to create a new message. */ export const MultiplicityInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 60); + messageDesc(file_sysml, 61); /** * AttributeInfo represents an attribute with its value @@ -3113,7 +3189,7 @@ export type AttributeInfo = Message<"sysml.AttributeInfo"> & { * Use `create(AttributeInfoSchema)` to create a new message. */ export const AttributeInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 61); + messageDesc(file_sysml, 62); /** * Value represents a runtime-evaluable value @@ -3292,7 +3368,7 @@ export type Value = Message<"sysml.Value"> & { * Use `create(ValueSchema)` to create a new message. */ export const ValueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 62); + messageDesc(file_sysml, 63); /** * Metaobject is an element of the model held as an instance of its reflective @@ -3329,7 +3405,7 @@ export type Metaobject = Message<"sysml.Metaobject"> & { * Use `create(MetaobjectSchema)` to create a new message. */ export const MetaobjectSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 63); + messageDesc(file_sysml, 64); /** * Undetermined is the model-level result of an expression the model does not @@ -3364,7 +3440,7 @@ export type Undetermined = Message<"sysml.Undetermined"> & { * Use `create(UndeterminedSchema)` to create a new message. */ export const UndeterminedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 64); + messageDesc(file_sysml, 65); /** * Function is a calc held as a value: a calc definition, or a calc usage with @@ -3401,7 +3477,7 @@ export type Function = Message<"sysml.Function"> & { * Use `create(FunctionSchema)` to create a new message. */ export const FunctionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 65); + messageDesc(file_sysml, 66); /** * ValueSet is a unique, unordered collection — a Collections::Set's elements — @@ -3427,7 +3503,7 @@ export type ValueSet = Message<"sysml.ValueSet"> & { * Use `create(ValueSetSchema)` to create a new message. */ export const ValueSetSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 66); + messageDesc(file_sysml, 67); /** * TensorQuantity is a Quantities::TensorQuantityValue of any rank: its @@ -3459,7 +3535,7 @@ export type TensorQuantity = Message<"sysml.TensorQuantity"> & { * Use `create(TensorQuantitySchema)` to create a new message. */ export const TensorQuantitySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 67); + messageDesc(file_sysml, 68); /** * Array is a Collections::Array: its elements flattened in row-major order @@ -3489,7 +3565,7 @@ export type Array = Message<"sysml.Array"> & { * Use `create(ArraySchema)` to create a new message. */ export const ArraySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 68); + messageDesc(file_sysml, 69); /** * Vector is a VectorValues::NumericalVectorValue: its components in order, @@ -3512,7 +3588,7 @@ export type Vector = Message<"sysml.Vector"> & { * Use `create(VectorSchema)` to create a new message. */ export const VectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 69); + messageDesc(file_sysml, 70); /** * VectorQuantity is a Quantities::VectorQuantityValue: one Quantity per axis, @@ -3535,7 +3611,7 @@ export type VectorQuantity = Message<"sysml.VectorQuantity"> & { * Use `create(VectorQuantitySchema)` to create a new message. */ export const VectorQuantitySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 70); + messageDesc(file_sysml, 71); /** * Complex is one complex number in rectangular form. It crosses as one value @@ -3560,7 +3636,7 @@ export type Complex = Message<"sysml.Complex"> & { * Use `create(ComplexSchema)` to create a new message. */ export const ComplexSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 71); + messageDesc(file_sysml, 72); /** * EnumLiteral is one literal of an enumeration definition. A literal is its own @@ -3605,7 +3681,7 @@ export type EnumLiteral = Message<"sysml.EnumLiteral"> & { * Use `create(EnumLiteralSchema)` to create a new message. */ export const EnumLiteralSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 72); + messageDesc(file_sysml, 73); /** * @generated from message sysml.ValueSequence @@ -3622,7 +3698,7 @@ export type ValueSequence = Message<"sysml.ValueSequence"> & { * Use `create(ValueSequenceSchema)` to create a new message. */ export const ValueSequenceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 73); + messageDesc(file_sysml, 74); /** * Quantity is a magnitude and the measurement reference it is expressed in, sent @@ -3673,7 +3749,7 @@ export type Quantity = Message<"sysml.Quantity"> & { * Use `create(QuantitySchema)` to create a new message. */ export const QuantitySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 74); + messageDesc(file_sysml, 75); /** * MeasurementRef is a MeasurementReferences::ScalarMeasurementReference held as @@ -3721,7 +3797,7 @@ export type MeasurementRef = Message<"sysml.MeasurementRef"> & { * Use `create(MeasurementRefSchema)` to create a new message. */ export const MeasurementRefSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 75); + messageDesc(file_sysml, 76); /** * UnitTerm is a unit reduced to a scale factor over base units: `km/h` reduces @@ -3755,7 +3831,7 @@ export type UnitTerm = Message<"sysml.UnitTerm"> & { * Use `create(UnitTermSchema)` to create a new message. */ export const UnitTermSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 76); + messageDesc(file_sysml, 77); /** * UnitFactor is one base unit raised to an exponent. @@ -3781,7 +3857,7 @@ export type UnitFactor = Message<"sysml.UnitFactor"> & { * Use `create(UnitFactorSchema)` to create a new message. */ export const UnitFactorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 77); + messageDesc(file_sysml, 78); /** * Diagnostic represents a parse/semantic error or warning @@ -3820,7 +3896,7 @@ export type Diagnostic = Message<"sysml.Diagnostic"> & { * Use `create(DiagnosticSchema)` to create a new message. */ export const DiagnosticSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 78); + messageDesc(file_sysml, 79); /** * Span represents a source location @@ -3859,7 +3935,7 @@ export type Span = Message<"sysml.Span"> & { * Use `create(SpanSchema)` to create a new message. */ export const SpanSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 79); + messageDesc(file_sysml, 80); /** * ServerInfoRequest asks the service to describe itself. It carries no fields; @@ -3875,7 +3951,7 @@ export type ServerInfoRequest = Message<"sysml.ServerInfoRequest"> & { * Use `create(ServerInfoRequestSchema)` to create a new message. */ export const ServerInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 80); + messageDesc(file_sysml, 81); /** * ServerInfoResponse describes the running service. @@ -4017,7 +4093,7 @@ export type ServerInfoResponse = Message<"sysml.ServerInfoResponse"> & { * Use `create(ServerInfoResponseSchema)` to create a new message. */ export const ServerInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 81); + messageDesc(file_sysml, 82); /** * QueryRequest runs a Query against a model the service already parsed. @@ -4050,7 +4126,7 @@ export type QueryRequest = Message<"sysml.QueryRequest"> & { * Use `create(QueryRequestSchema)` to create a new message. */ export const QueryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 82); + messageDesc(file_sysml, 83); /** * QueryResponse contains the elements the query selected, in the order they are @@ -4072,7 +4148,7 @@ export type QueryResponse = Message<"sysml.QueryResponse"> & { * Use `create(QueryResponseSchema)` to create a new message. */ export const QueryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 83); + messageDesc(file_sysml, 84); /** * Query is the standard's Query resource (SysML v2 API & Services). Its `@type` @@ -4112,7 +4188,7 @@ export type Query = Message<"sysml.Query"> & { * Use `create(QuerySchema)` to create a new message. */ export const QuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 84); + messageDesc(file_sysml, 85); /** * Constraint is the standard's Constraint, whose `@type` discriminates between @@ -4144,7 +4220,7 @@ export type Constraint = Message<"sysml.Constraint"> & { * Use `create(ConstraintSchema)` to create a new message. */ export const ConstraintSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 85); + messageDesc(file_sysml, 86); /** * PrimitiveConstraint compares one property of an element against a value. @@ -4187,7 +4263,7 @@ export type PrimitiveConstraint = Message<"sysml.PrimitiveConstraint"> & { * Use `create(PrimitiveConstraintSchema)` to create a new message. */ export const PrimitiveConstraintSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 86); + messageDesc(file_sysml, 87); /** * CompositeConstraint combines constraints. An empty constraint list fails the @@ -4212,7 +4288,7 @@ export type CompositeConstraint = Message<"sysml.CompositeConstraint"> & { * Use `create(CompositeConstraintSchema)` to create a new message. */ export const CompositeConstraintSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 87); + messageDesc(file_sysml, 88); /** * QueryResultElement is one matched element. `id` and `type` are always @@ -4248,7 +4324,7 @@ export type QueryResultElement = Message<"sysml.QueryResultElement"> & { * Use `create(QueryResultElementSchema)` to create a new message. */ export const QueryResultElementSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 88); + messageDesc(file_sysml, 89); /** * SweepRange is one parameter's range: the endpoints a swept run advances @@ -4292,7 +4368,7 @@ export type SweepRange = Message<"sysml.SweepRange"> & { * Use `create(SweepRangeSchema)` to create a new message. */ export const SweepRangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 89); + messageDesc(file_sysml, 90); /** * RunSweepRequest runs one analysis case or calc once per row of a sweep. Every @@ -4375,7 +4451,7 @@ export type RunSweepRequest = Message<"sysml.RunSweepRequest"> & { * Use `create(RunSweepRequestSchema)` to create a new message. */ export const RunSweepRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 90); + messageDesc(file_sysml, 91); /** * SweepRow is one run of a sweep: what it bound, what it produced, how long it @@ -4443,7 +4519,7 @@ export type SweepRow = Message<"sysml.SweepRow"> & { * Use `create(SweepRowSchema)` to create a new message. */ export const SweepRowSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 91); + messageDesc(file_sysml, 92); /** * RunSweepResponse carries the table, one row per run, in the order the runs @@ -4533,7 +4609,7 @@ export type RunSweepResponse = Message<"sysml.RunSweepResponse"> & { * Use `create(RunSweepResponseSchema)` to create a new message. */ export const RunSweepResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 92); + messageDesc(file_sysml, 93); /** * RunDocumentQueryRequest runs a named document query — a calc def @@ -4575,7 +4651,7 @@ export type RunDocumentQueryRequest = Message<"sysml.RunDocumentQueryRequest"> & * Use `create(RunDocumentQueryRequestSchema)` to create a new message. */ export const RunDocumentQueryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 93); + messageDesc(file_sysml, 94); /** * DocumentQueryBinding binds one entry parameter of a document query. @@ -4599,7 +4675,7 @@ export type DocumentQueryBinding = Message<"sysml.DocumentQueryBinding"> & { * Use `create(DocumentQueryBindingSchema)` to create a new message. */ export const DocumentQueryBindingSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 94); + messageDesc(file_sysml, 95); /** * DocumentValue is one typed document-query value. A request binds a model @@ -4706,7 +4782,7 @@ export type DocumentValue = Message<"sysml.DocumentValue"> & { * Use `create(DocumentValueSchema)` to create a new message. */ export const DocumentValueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 95); + messageDesc(file_sysml, 96); /** * DocumentObject is an object the service holds for the model, created by @@ -4753,7 +4829,7 @@ export type DocumentObject = Message<"sysml.DocumentObject"> & { * Use `create(DocumentObjectSchema)` to create a new message. */ export const DocumentObjectSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 96); + messageDesc(file_sysml, 97); /** * DocumentVerdict is one row a `Verdicts` query answered: an assertion checked @@ -4829,7 +4905,7 @@ export type DocumentVerdict = Message<"sysml.DocumentVerdict"> & { * Use `create(DocumentVerdictSchema)` to create a new message. */ export const DocumentVerdictSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 97); + messageDesc(file_sysml, 98); /** * DocumentState is one row a `States` query answered: an active leaf state of @@ -4896,7 +4972,7 @@ export type DocumentState = Message<"sysml.DocumentState"> & { * Use `create(DocumentStateSchema)` to create a new message. */ export const DocumentStateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 98); + messageDesc(file_sysml, 99); /** * DocumentEvent is one row an `Events` query answered: one record of the @@ -5002,7 +5078,7 @@ export type DocumentEvent = Message<"sysml.DocumentEvent"> & { * Use `create(DocumentEventSchema)` to create a new message. */ export const DocumentEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 99); + messageDesc(file_sysml, 100); /** * DocumentQueryColumn is one projected property, in projection order. @@ -5021,7 +5097,7 @@ export type DocumentQueryColumn = Message<"sysml.DocumentQueryColumn"> & { * Use `create(DocumentQueryColumnSchema)` to create a new message. */ export const DocumentQueryColumnSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 100); + messageDesc(file_sysml, 101); /** * DocumentQueryCell is one row's values for one column, in the query's order. @@ -5040,7 +5116,7 @@ export type DocumentQueryCell = Message<"sysml.DocumentQueryCell"> & { * Use `create(DocumentQueryCellSchema)` to create a new message. */ export const DocumentQueryCellSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 101); + messageDesc(file_sysml, 102); /** * DocumentQueryRow is one selected element and its projected cells, one per @@ -5070,7 +5146,7 @@ export type DocumentQueryRow = Message<"sysml.DocumentQueryRow"> & { * Use `create(DocumentQueryRowSchema)` to create a new message. */ export const DocumentQueryRowSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 102); + messageDesc(file_sysml, 103); /** * RunDocumentQueryResponse is the query's answer: its projected columns and its @@ -5097,7 +5173,7 @@ export type RunDocumentQueryResponse = Message<"sysml.RunDocumentQueryResponse"> * Use `create(RunDocumentQueryResponseSchema)` to create a new message. */ export const RunDocumentQueryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 103); + messageDesc(file_sysml, 104); /** * RenderDocumentRequest renders a named document — a part def specializing @@ -5138,7 +5214,7 @@ export type RenderDocumentRequest = Message<"sysml.RenderDocumentRequest"> & { * Use `create(RenderDocumentRequestSchema)` to create a new message. */ export const RenderDocumentRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 104); + messageDesc(file_sysml, 105); /** * RenderDocumentResponse carries the rendered document in the form requested, @@ -5164,7 +5240,7 @@ export type RenderDocumentResponse = Message<"sysml.RenderDocumentResponse"> & { * Use `create(RenderDocumentResponseSchema)` to create a new message. */ export const RenderDocumentResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_sysml, 105); + messageDesc(file_sysml, 106); /** * FailureReason says what kind of failure an `error` reports, so a client acts diff --git a/client/opensysml/README.md b/client/opensysml/README.md index 0b0281eae9..f364576d92 100644 --- a/client/opensysml/README.md +++ b/client/opensysml/README.md @@ -235,7 +235,7 @@ elements, err := client.Query(ctx, model, opensysml.Query{ ``` Edits are typed the same way — `SetValue`, `Rename`, `AddMember`, `AddConnection`, -`AddSatisfy`, `AddRequirementConstraint`, `Delete`, `Move` — and either all apply, answering the edited source, or none do and the +`AddSatisfy`, `AddRequirementConstraint`, `AddTransition`, `Delete`, `Move` — and either all apply, answering the edited source, or none do and the refusal arrives as an `*EditError` naming its kind: ```go @@ -266,6 +266,8 @@ if errors.As(err, &refused) && refused.Failure == opensysml.EditFailureDeleteRef The new member modifiers and `ref`/`return` kinds require `member_modifiers`; `AddSatisfy` and `AddRequirementConstraint` require `satisfy_authoring` and `requirement_constraint_authoring`, respectively, alongside `authoring`. +`AddTransition` also requires `authoring` and `transition_authoring`; use +`AddEntryTransition` to construct its entry-transition form. The edited source is `result.Documents`, one `EditedDocument` per document the batch reached, under the name the model was parsed with; `result.Content` is the diff --git a/client/opensysml/authoring.go b/client/opensysml/authoring.go index 1010275073..0fdcf4d4b3 100644 --- a/client/opensysml/authoring.go +++ b/client/opensysml/authoring.go @@ -146,8 +146,8 @@ func (c *client) convert(ctx context.Context, req *pb.ConvertRequest) (*Conversi }, nil } -// Edit is one source-preserving change to a model's notation: SetValue, Rename, -// AddMember, AddConnection, Delete or Move. A type switch over them is exhaustive. +// Edit is one source-preserving change to a model's notation. A type switch +// over the supported edit operations is exhaustive. type Edit interface { isEdit() } @@ -196,9 +196,9 @@ type AddMember struct { Direction string } -// AddSatisfy inserts a satisfy usage into a body that admits behavior usages. +// AddSatisfy inserts a satisfy usage into any package or body that admits behavior usages. type AddSatisfy struct { - // Owner is the namespace receiving the usage. + // Owner is the package or body receiving the usage. Owner string // Requirement is the requirement feature reference. Requirement string @@ -222,6 +222,31 @@ type AddRequirementConstraint struct { Name string } +// AddTransition inserts a state transition or entry transition into a state body. +type AddTransition struct { + // Owner is the state definition or usage receiving the transition. + Owner string + // Name is the optional transition name. + Name string + // Source is the source feature reference; empty only for an entry transition. + Source string + // Target is the target feature reference. + Target string + // Trigger is optional text after `accept`. + Trigger string + // Guard is an optional boolean expression after `if`. + Guard string + // Effect is optional effect text after `do`. + Effect string + // Initial writes an entry transition instead of a regular transition. + Initial bool +} + +// AddEntryTransition constructs an entry transition to target in owner. +func AddEntryTransition(owner, target string) AddTransition { + return AddTransition{Owner: owner, Target: target, Initial: true} +} + // AddConnection inserts a connection-like usage into a namespace or document root. type AddConnection struct { // Owner is the namespace to receive the usage; empty is the document root. @@ -262,6 +287,7 @@ func (AddSatisfy) isEdit() { /* marker: closed Edit set */ } func (AddRequirementConstraint) isEdit() { /* marker: closed Edit set */ } +func (AddTransition) isEdit() { /* marker: closed Edit set */ } func (AddConnection) isEdit() { /* marker: closed Edit set */ } func (Delete) isEdit() { /* marker: closed Edit set */ } func (Move) isEdit() { /* marker: closed Edit set */ } @@ -424,6 +450,9 @@ func (c *client) ApplyDocumentEdits(ctx context.Context, model *Model, document case AddRequirementConstraint: required[CapabilityAuthoring] = true required[CapabilityRequirementConstraintAuthoring] = true + case AddTransition: + required[CapabilityAuthoring] = true + required[CapabilityTransitionAuthoring] = true case Delete, Move: required[CapabilityAuthoring] = true } @@ -433,7 +462,7 @@ func (c *client) ApplyDocumentEdits(ctx context.Context, model *Model, document for _, capability := range []string{ CapabilityAuthoring, CapabilityConnectionAuthoring, CapabilitySatisfyAuthoring, CapabilityRequirementConstraintAuthoring, - CapabilityMemberModifiers, + CapabilityMemberModifiers, CapabilityTransitionAuthoring, } { if required[capability] { names = append(names, capability) @@ -535,6 +564,14 @@ func editToProto(edit Edit) (*pb.EditOperation, error) { Expression: operation.Expression, Name: operation.Name, }, }}, nil + case AddTransition: + return &pb.EditOperation{Operation: &pb.EditOperation_AddTransition{ + AddTransition: &pb.AddTransitionEdit{ + Owner: operation.Owner, Name: operation.Name, Source: operation.Source, + Target: operation.Target, Trigger: operation.Trigger, Guard: operation.Guard, + Effect: operation.Effect, Initial: operation.Initial, + }, + }}, nil case AddConnection: return &pb.EditOperation{Operation: &pb.EditOperation_AddConnection{ AddConnection: &pb.AddConnectionEdit{ diff --git a/client/opensysml/authoring_internal_test.go b/client/opensysml/authoring_internal_test.go index d60c369c8e..2127c33995 100644 --- a/client/opensysml/authoring_internal_test.go +++ b/client/opensysml/authoring_internal_test.go @@ -108,6 +108,18 @@ func TestNewAuthoringOperationsAreNotSentWithoutTheirCapabilities(t *testing.T) capabilities: []string{CapabilityApplyEdits, CapabilityAuthoring}, missing: CapabilityRequirementConstraintAuthoring, }, + { + name: "transition operation", + operation: AddTransition{Owner: "Demo::S", Source: "idle", Target: "toasting"}, + capabilities: []string{CapabilityApplyEdits, CapabilityAuthoring}, + missing: CapabilityTransitionAuthoring, + }, + { + name: "transition requires authoring", + operation: AddTransition{Owner: "Demo::S", Source: "idle", Target: "toasting"}, + capabilities: []string{CapabilityApplyEdits, CapabilityTransitionAuthoring}, + missing: CapabilityAuthoring, + }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { @@ -162,4 +174,27 @@ func TestNewAuthoringOperationsMapToProto(t *testing.T) { got.GetExpression() != "true" || got.GetName() != "valid" { t.Fatalf("AddRequirementConstraint mapping = %+v", got) } + + transitionOperation, err := editToProto(AddTransition{ + Owner: "Demo::S", Name: "go", Source: "idle", Target: "toasting", + Trigger: "CycleStart", Guard: "ready", Effect: "action cool", + }) + if err != nil { + t.Fatal(err) + } + if got := transitionOperation.GetAddTransition(); got == nil || + got.GetOwner() != "Demo::S" || got.GetName() != "go" || + got.GetSource() != "idle" || got.GetTarget() != "toasting" || + got.GetTrigger() != "CycleStart" || got.GetGuard() != "ready" || + got.GetEffect() != "action cool" || got.GetInitial() { + t.Fatalf("AddTransition mapping = %+v", got) + } + entryOperation, err := editToProto(AddEntryTransition("Demo::S", "idle")) + if err != nil { + t.Fatal(err) + } + if got := entryOperation.GetAddTransition(); got == nil || + got.GetOwner() != "Demo::S" || got.GetTarget() != "idle" || !got.GetInitial() { + t.Fatalf("AddEntryTransition mapping = %+v", got) + } } diff --git a/client/opensysml/types.go b/client/opensysml/types.go index adeb29952f..b8d9b43530 100644 --- a/client/opensysml/types.go +++ b/client/opensysml/types.go @@ -29,6 +29,7 @@ const ( CapabilitySatisfyAuthoring = sysmlgrpc.CapabilitySatisfyAuthoring CapabilityRequirementConstraintAuthoring = sysmlgrpc.CapabilityRequirementConstraintAuthoring CapabilityMemberModifiers = sysmlgrpc.CapabilityMemberModifiers + CapabilityTransitionAuthoring = sysmlgrpc.CapabilityTransitionAuthoring CapabilityEditDocuments = sysmlgrpc.CapabilityEditDocuments CapabilityInlineLanguage = sysmlgrpc.CapabilityInlineLanguage CapabilityStrictConformance = sysmlgrpc.CapabilityStrictConformance diff --git a/client/python/README.md b/client/python/README.md index ed29f8bc00..036e5427c9 100644 --- a/client/python/README.md +++ b/client/python/README.md @@ -48,11 +48,16 @@ model.edit().add_allocation("Demo::System", "a", "b", name="alloc1").apply() connection-like usages; `add_allocation` and `add_flow` are typed helpers. `Editor.add_member` also accepts `abstract`, `redefines`, `default` and `direction` options, and supports the SysML `ref` and `return` kinds where they are admitted. -Use `add_satisfy`, `add_requirement_constraint`, `add_require_constraint` or -`add_assume_constraint` -to author requirement statements. These operations preflight their dedicated -`member_modifiers`, `satisfy_authoring` or `requirement_constraint_authoring` -capability as applicable. +Use `add_satisfy`, `add_requirement_constraint`, `add_require_constraint`, +`add_assume_constraint`, `add_transition` or `add_entry_transition` to author +requirement statements and state transitions. These operations preflight their +dedicated `member_modifiers`, `satisfy_authoring`, +`requirement_constraint_authoring` or `transition_authoring` capability as +applicable. +`add_calc_def` and `add_calc` accept input pairs, `return_type` and +`return_expression`; that expression is bound to the result parameter rather than +written as `return ;`. `add_action_def` and `add_action` accept input and +output pairs. Use `opensysml.loads(text, language="kerml")` for inline KerML content. diff --git a/client/python/opensysml/capabilities.py b/client/python/opensysml/capabilities.py index 510804a605..6de8c5e806 100644 --- a/client/python/opensysml/capabilities.py +++ b/client/python/opensysml/capabilities.py @@ -86,6 +86,8 @@ CAPABILITY_SATISFY_AUTHORING = "satisfy_authoring" #: The ``ApplyEdits`` ``add_requirement_constraint`` operation. CAPABILITY_REQUIREMENT_CONSTRAINT_AUTHORING = "requirement_constraint_authoring" +#: The ``ApplyEdits`` ``add_transition`` operation. +CAPABILITY_TRANSITION_AUTHORING = "transition_authoring" #: The additional ``AddMemberEdit`` modifiers and ``ref``/``return`` kinds. CAPABILITY_MEMBER_MODIFIERS = "member_modifiers" #: ``ApplyEdits`` edits a model of several documents as one batch and answers diff --git a/client/python/opensysml/connection.py b/client/python/opensysml/connection.py index 516e24857d..2156085e8f 100644 --- a/client/python/opensysml/connection.py +++ b/client/python/opensysml/connection.py @@ -19,6 +19,7 @@ CAPABILITY_MEMBER_MODIFIERS, CAPABILITY_REQUIREMENT_CONSTRAINT_AUTHORING, CAPABILITY_SATISFY_AUTHORING, + CAPABILITY_TRANSITION_AUTHORING, CAPABILITY_INLINE_LANGUAGE, CAPABILITY_STRICT_CONFORMANCE, CAPABILITY_COMPLEX_VALUES, @@ -977,6 +978,7 @@ def apply_edits(self, model_hash, operations): requests_member_modifiers = False requests_satisfy_authoring = False requests_requirement_constraint_authoring = False + requests_transition_authoring = False for operation_data in operations: operation = request.operations.add() kind = operation_data[0] @@ -1078,6 +1080,28 @@ def apply_edits(self, model_hash, operations): add = operation.add_requirement_constraint add.owner, add.kind = owner, constraint_kind add.expression, add.name = expression, name + elif kind == 'add_transition': + if len(operation_data) != 9: + raise ValueError("malformed add_transition operation: expected 9 fields") + ( + _, owner, name, source, target, trigger, guard, effect, initial + ) = operation_data + if not all(isinstance(text, str) for text in ( + owner, name, source, target, trigger, guard, effect + )) or not isinstance(initial, bool): + raise ValueError("malformed add_transition operation: text fields and initial must be valid") + require(info, CAPABILITY_AUTHORING, upgrade_remedy(CAPABILITY_AUTHORING)) + require( + info, + CAPABILITY_TRANSITION_AUTHORING, + upgrade_remedy(CAPABILITY_TRANSITION_AUTHORING), + ) + requests_authoring = True + requests_transition_authoring = True + add = operation.add_transition + add.owner, add.name, add.source, add.target = owner, name, source, target + add.trigger, add.guard, add.effect = trigger, guard, effect + add.initial = initial elif kind == 'delete': if len(operation_data) != 3 or not isinstance(operation_data[2], bool): raise ValueError( @@ -1100,7 +1124,7 @@ def apply_edits(self, model_hash, operations): raise ValueError( f"unknown edit operation {kind!r}: expected set_value, rename, " f"add_member, add_connection, add_satisfy, " - f"add_requirement_constraint, delete or move" + f"add_requirement_constraint, add_transition, delete or move" ) requested_capabilities = [CAPABILITY_APPLY_EDITS] @@ -1112,6 +1136,8 @@ def apply_edits(self, model_hash, operations): requested_capabilities.append(CAPABILITY_SATISFY_AUTHORING) if requests_requirement_constraint_authoring: requested_capabilities.append(CAPABILITY_REQUIREMENT_CONSTRAINT_AUTHORING) + if requests_transition_authoring: + requested_capabilities.append(CAPABILITY_TRANSITION_AUTHORING) if requests_member_modifiers: require( info, CAPABILITY_MEMBER_MODIFIERS, diff --git a/client/python/opensysml/edit.py b/client/python/opensysml/edit.py index 53c0ccef87..299870d8ba 100644 --- a/client/python/opensysml/edit.py +++ b/client/python/opensysml/edit.py @@ -8,7 +8,8 @@ before returning it. Operations include setting a feature's value, renaming a declaration, adding a -member or connection, deleting a declaration, and moving one into another namespace. +member, connection or transition, deleting a declaration, and moving one into +another namespace. Renaming rewrites the declaration's name token only and is refused for an element that is referenced — see :class:`~opensysml.errors.RenameReferencedError`. """ @@ -349,6 +350,32 @@ def add_requirement_constraint(self, owner, kind, expression, name=None): self._add(("add_requirement_constraint", owner, kind, expression, name)) return self + def add_transition(self, owner, source, target, name=None, trigger=None, + guard=None, effect=None): + """Add a transition with optional trigger, guard and effect clauses.""" + if not isinstance(source, str): + raise TypeError(f"source must be notation text, not {source.__class__.__name__}") + if not isinstance(target, str): + raise TypeError(f"target must be notation text, not {target.__class__.__name__}") + for label, text in (("name", name), ("trigger", trigger), + ("guard", guard), ("effect", effect)): + if text is not None and not isinstance(text, str): + raise TypeError(f"{label} must be notation text, not {text.__class__.__name__}") + owner = owner if isinstance(owner, str) else _target_id(owner) + self._add(( + "add_transition", owner, name or "", source, target, + trigger or "", guard or "", effect or "", False, + )) + return self + + def add_entry_transition(self, owner, target): + """Add an entry transition to target in a state body.""" + if not isinstance(target, str): + raise TypeError(f"target must be notation text, not {target.__class__.__name__}") + owner = owner if isinstance(owner, str) else _target_id(owner) + self._add(("add_transition", owner, "", "", target, "", "", "", True)) + return self + def add_require_constraint(self, owner, expression, name=None): """Add a ``require constraint`` to a requirement-like body.""" return self.add_requirement_constraint(owner, "require", expression, name) @@ -538,13 +565,53 @@ def add_metaclass(self, owner, name, **kwargs): """Add a ``metaclass`` declaration.""" return self.add_member(owner, "metaclass", name, **kwargs) - def add_calc_def(self, owner, name, **kwargs): - """Add a ``calc def`` declaration.""" - return self.add_member(owner, "calc def", name, **kwargs) + def add_calc_def( + self, owner, name, inputs=None, return_type=None, return_expression=None, **kwargs + ): + """Add a ``calc def`` with input parameters and an optional result. - def add_calc(self, owner, name, **kwargs): - """Add a ``calc`` declaration.""" - return self.add_member(owner, "calc", name, **kwargs) + ``return_expression`` is bound to the result parameter; it does not + write a ``return ;`` statement. + """ + inputs = _parameter_pairs(inputs, "inputs") + _optional_text(return_type, "return_type") + _optional_text(return_expression, "return_expression") + owner = _owner_id(owner) + self.add_member(owner, "calc def", name, **kwargs) + qualified_name = name if owner == "" else owner + "::" + name + for parameter_name, parameter_type in inputs: + self.add_parameter( + qualified_name, "in", parameter_name, type=parameter_type + ) + if return_type is not None or return_expression is not None: + self.add_return( + qualified_name, type=return_type, value=return_expression + ) + return self + + def add_calc( + self, owner, name, inputs=None, return_type=None, return_expression=None, **kwargs + ): + """Add a ``calc`` with input parameters and an optional result. + + ``return_expression`` is bound to the result parameter; it does not + write a ``return ;`` statement. + """ + inputs = _parameter_pairs(inputs, "inputs") + _optional_text(return_type, "return_type") + _optional_text(return_expression, "return_expression") + owner = _owner_id(owner) + self.add_member(owner, "calc", name, **kwargs) + qualified_name = name if owner == "" else owner + "::" + name + for parameter_name, parameter_type in inputs: + self.add_parameter( + qualified_name, "in", parameter_name, type=parameter_type + ) + if return_type is not None or return_expression is not None: + self.add_return( + qualified_name, type=return_type, value=return_expression + ) + return self def add_parameter(self, owner, direction, name, type=None, kind="ref", **kwargs): """Add a directional parameter usage.""" @@ -556,13 +623,39 @@ def add_return(self, owner, name="", **kwargs): """Add a return parameter member.""" return self.add_member(owner, "return", name, **kwargs) - def add_action_def(self, owner, name, **kwargs): - """Add an ``action def`` declaration.""" - return self.add_member(owner, "action def", name, **kwargs) + def add_action_def(self, owner, name, inputs=None, outputs=None, **kwargs): + """Add an ``action def`` with input and output parameters.""" + inputs = _parameter_pairs(inputs, "inputs") + outputs = _parameter_pairs(outputs, "outputs") + owner = _owner_id(owner) + self.add_member(owner, "action def", name, **kwargs) + qualified_name = name if owner == "" else owner + "::" + name + for parameter_name, parameter_type in inputs: + self.add_parameter( + qualified_name, "in", parameter_name, type=parameter_type + ) + for parameter_name, parameter_type in outputs: + self.add_parameter( + qualified_name, "out", parameter_name, type=parameter_type + ) + return self - def add_action(self, owner, name, **kwargs): - """Add an ``action`` declaration.""" - return self.add_member(owner, "action", name, **kwargs) + def add_action(self, owner, name, inputs=None, outputs=None, **kwargs): + """Add an ``action`` with input and output parameters.""" + inputs = _parameter_pairs(inputs, "inputs") + outputs = _parameter_pairs(outputs, "outputs") + owner = _owner_id(owner) + self.add_member(owner, "action", name, **kwargs) + qualified_name = name if owner == "" else owner + "::" + name + for parameter_name, parameter_type in inputs: + self.add_parameter( + qualified_name, "in", parameter_name, type=parameter_type + ) + for parameter_name, parameter_type in outputs: + self.add_parameter( + qualified_name, "out", parameter_name, type=parameter_type + ) + return self def add_state_def(self, owner, name, **kwargs): """Add a ``state def`` declaration.""" @@ -602,6 +695,36 @@ def _target_id(target): ) +def _owner_id(owner): + return owner if isinstance(owner, str) else _target_id(owner) + + +def _parameter_pairs(parameters, argument): + if parameters is None: + return [] + if not isinstance(parameters, list): + raise TypeError( + f"{argument} must be a list of 2-tuples of strings, " + f"not {parameters.__class__.__name__}" + ) + pairs = [] + for index, pair in enumerate(parameters): + if not isinstance(pair, tuple) or len(pair) != 2: + raise TypeError(f"{argument}[{index}] must be a 2-tuple of strings") + if not all(isinstance(value, str) for value in pair): + raise TypeError(f"{argument}[{index}] name and type must be strings") + pairs.append(pair) + return pairs + + +def _optional_text(value, argument): + if value is not None and not isinstance(value, str): + raise TypeError( + f"{argument} must be notation text or None, " + f"not {value.__class__.__name__}" + ) + + def _notation_references(label, values): """Normalize one feature-reference string or a sequence of them.""" if values is None: diff --git a/client/python/opensysml/proto/sysml_pb2.py b/client/python/opensysml/proto/sysml_pb2.py index 11b35fd1be..8ec9819da8 100644 --- a/client/python/opensysml/proto/sysml_pb2.py +++ b/client/python/opensysml/proto/sysml_pb2.py @@ -24,7 +24,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bsysml.proto\x12\x05sysml\"\xb9\x02\n\x07Verdict\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x12\n\nelement_id\x18\x02 \x01(\t\x12\x0f\n\x07\x65lement\x18\x03 \x01(\t\x12\r\n\x05holds\x18\x04 \x01(\x08\x12\x11\n\tcondition\x18\x05 \x01(\t\x12\x13\n\x0binstance_id\x18\x06 \x01(\x03\x12\x18\n\x10instance_type_id\x18\x07 \x01(\t\x12\r\n\x05\x65rror\x18\x08 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\t \x01(\x0e\x32\x14.sysml.FailureReason\x12\x16\n\x0erequirement_id\x18\n \x01(\t\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\x12\x15\n\rinstance_path\x18\x0e \x01(\t\"5\n\x05\x42ound\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0f\n\x07reached\x18\x03 \x01(\x08\"k\n\x17VerifyConstraintRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"\x96\x01\n\x18VerifyConstraintResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\"l\n\x18VerifyRequirementRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"m\n\x13VerificationVerdict\x12\x0f\n\x07\x63\x61se_id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x03 \x01(\t\x12\x0f\n\x07subcase\x18\x04 \x01(\x08\x12\x16\n\x0erequirement_id\x18\x05 \x01(\t\"\xd2\x01\n\x19VerifyRequirementResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x39\n\x15verification_verdicts\x18\x05 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"R\n\x19VerifySatisfactionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\"\x82\x02\n\x1aVerifySatisfactionResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x06 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"P\n\x17ValidateInstanceRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\"\xb2\x02\n\x18ValidateInstanceResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x1f\n\x07summary\x18\x02 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12\x0f\n\x07\x62ounded\x18\x08 \x01(\x08\"m\n\x13\x45valuateCalcRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x1f\n\targuments\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"\xfd\x01\n\x14\x45valuateCalcResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x0e\n\x06\x65ngine\x18\x06 \x01(\t\x12\x10\n\x08strength\x18\x07 \x01(\t\x12\x1c\n\x06\x62ounds\x18\x08 \x03(\x0b\x32\x0c.sysml.Bound\"7\n\nCalcOutput\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\"\x93\x01\n\x0e\x43\x61seEvaluation\x12\x13\n\x0b\x66unction_id\x18\x01 \x01(\t\x12\x1f\n\targuments\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06result\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x10\n\x08selected\x18\x05 \x01(\x08\x12\x0c\n\x04tied\x18\x06 \x01(\x08\"\xa6\x02\n\x12RunAnalysisRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x46\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32-.sysml.RunAnalysisRequest.NamedArgumentsEntry\x12\x10\n\x08schedule\x18\x06 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x07 \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xdc\x03\n\x13RunAnalysisResponse\x12\"\n\x07outputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x02 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12 \n\x08outcomes\x18\x08 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\t \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12*\n\x0b\x65valuations\x18\n \x03(\x0b\x32\x15.sysml.CaseEvaluation\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\"\x97\x02\n\x07Outcome\x12,\n\x07outputs\x18\x01 \x03(\x0b\x32\x1b.sysml.Outcome.OutputsEntry\x12\x13\n\x0b\x66inal_state\x18\x02 \x01(\t\x12\x16\n\x0estates_visited\x18\x03 \x03(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x16\n\x0elinearizations\x18\x05 \x01(\x05\x12\x0f\n\x07witness\x18\x06 \x03(\t\x12&\n\x0b\x64iagnostics\x18\x07 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x13\n\x0bprobability\x18\x08 \x01(\x01\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x96\x01\n\x11\x45xplorationStatus\x12\x10\n\x08\x63omplete\x18\x01 \x01(\x08\x12\x0c\n\x04runs\x18\x02 \x01(\x05\x12\x13\n\x0b\x62udgets_hit\x18\x03 \x03(\t\x12\x13\n\x0bruns_budget\x18\x04 \x01(\x05\x12\x14\n\x0c\x64\x65pth_budget\x18\x05 \x01(\x05\x12!\n\x19probabilities_lower_bound\x18\x06 \x01(\x08\"\x14\n\x12ListEnginesRequest\"\xfc\x01\n\nEngineInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tauthority\x18\x02 \x01(\t\x12\x0f\n\x07\x61nswers\x18\x03 \x03(\t\x12\x0e\n\x06\x62ounds\x18\x04 \x03(\t\x12\x0f\n\x07process\x18\x05 \x01(\t\x12\x15\n\rprocess_found\x18\x06 \x01(\t\x12\r\n\x05ready\x18\x07 \x01(\x08\x12\x13\n\x0bunavailable\x18\x08 \x01(\t\x12\x0c\n\x04kind\x18\t \x01(\t\x12\x10\n\x08protocol\x18\n \x01(\t\x12\x0e\n\x06source\x18\x0b \x01(\t\x12\x0f\n\x07\x63ommand\x18\x0c \x01(\t\x12\x0f\n\x07version\x18\r \x01(\t\x12\x0e\n\x06served\x18\x0e \x01(\x08\"9\n\x13ListEnginesResponse\x12\"\n\x07\x65ngines\x18\x01 \x03(\x0b\x32\x11.sysml.EngineInfo\"\x8c\x01\n\x10ParseFileRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x18\n\x0c\x63ontent_hash\x18\x03 \x01(\tB\x02\x18\x01\x12\x10\n\x08language\x18\x04 \x01(\t\x12\x1a\n\x12strict_conformance\x18\x05 \x01(\x08\x42\x08\n\x06source\"b\n\x0eSourceDocument\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x10\n\x08language\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\tB\x08\n\x06source\"[\n\x13ParseSourcesRequest\x12(\n\tdocuments\x18\x01 \x03(\x0b\x32\x15.sysml.SourceDocument\x12\x1a\n\x12strict_conformance\x18\x02 \x01(\x08\"\x83\x01\n\x14ParseSourcesResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12 \n\x05roots\x18\x02 \x03(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x7f\n\x11ParseFileResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x04root\x18\x02 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"9\n\x10GetSymbolRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"B\n\x0eSymbolResponse\x12!\n\x06symbol\x18\x01 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"(\n\x12\x44iagnosticsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\"L\n\x13\x44iagnosticsResponse\x12&\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"o\n\x0f\x45valuateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x12\n\nexpression\x18\x02 \x01(\t\x12\x19\n\x11\x63ontext_symbol_id\x18\x03 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x04 \x01(\t\"g\n\x10\x45valuateResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\"\xc2\x01\n\x08Instance\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x16\n\x0etype_symbol_id\x18\x02 \x01(\t\x12:\n\x0e\x66\x65\x61ture_values\x18\x04 \x03(\x0b\x32\".sysml.Instance.FeatureValuesEntry\x1aI\n\x12\x46\x65\x61tureValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.sysml.FeatureValue:\x02\x38\x01J\x04\x08\x03\x10\x04R\x05slots\"\x84\x01\n\x0c\x46\x65\x61tureValue\x12\x14\n\x0c\x66\x65\x61ture_name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x14\n\x0cmaterialized\x18\x04 \x01(\x08\x12\r\n\x05\x65rror\x18\x05 \x01(\t\";\n\x12InstantiateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"\x93\x01\n\x13InstantiateResponse\x12!\n\x08instance\x18\x01 \x01(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\"\n\tinstances\x18\x04 \x03(\x0b\x32\x0f.sysml.Instance\"\xe9\x01\n\x14\x45xecuteActionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x18\n\x10\x61\x63tion_symbol_id\x18\x02 \x01(\t\x12\x37\n\x06inputs\x18\x03 \x03(\x0b\x32\'.sysml.ExecuteActionRequest.InputsEntry\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\x1a;\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xad\x02\n\x15\x45xecuteActionResponse\x12:\n\x07outputs\x18\x01 \x03(\x0b\x32).sysml.ExecuteActionResponse.OutputsEntry\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x04 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x05 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x06 \x01(\x01\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x89\x01\n\x13\x45xecuteStateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x17state_machine_symbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65vents\x18\x03 \x03(\t\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\"\xd3\x02\n\x14\x45xecuteStateResponse\x12\x16\n\x0estates_visited\x18\x01 \x03(\t\x12\x44\n\rfinal_context\x18\x02 \x03(\x0b\x32-.sysml.ExecuteStateResponse.FinalContextEntry\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x05 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x06 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x07 \x01(\x01\x1a\x41\n\x11\x46inalContextEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xa0\x01\n\x0e\x43onvertRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x14\n\nmodel_hash\x18\x06 \x01(\tH\x00\x12\x13\n\x0b\x66rom_format\x18\x03 \x01(\t\x12\x11\n\tto_format\x18\x04 \x01(\t\x12\x1e\n\x16tolerate_syntax_errors\x18\x05 \x01(\x08\x42\x08\n\x06source\"\xb4\x01\n\x0f\x43onvertResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x13\n\x0b\x66rom_format\x18\x02 \x01(\t\x12\x11\n\tto_format\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x14\n\x0c\x65xperimental\x18\x06 \x01(\x08\x12\x1b\n\x13\x65xperimental_notice\x18\x07 \x01(\t\"}\n\x11\x41pplyEditsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12(\n\noperations\x18\x02 \x03(\x0b\x32\x14.sysml.EditOperation\x12\x10\n\x08\x64ocument\x18\x03 \x01(\t\x12\x18\n\x10\x61\x63\x63\x65pt_documents\x18\x04 \x01(\x08\"\x8a\x03\n\rEditOperation\x12(\n\tset_value\x18\x01 \x01(\x0b\x32\x13.sysml.SetValueEditH\x00\x12#\n\x06rename\x18\x02 \x01(\x0b\x32\x11.sysml.RenameEditH\x00\x12*\n\nadd_member\x18\x03 \x01(\x0b\x32\x14.sysml.AddMemberEditH\x00\x12#\n\x06\x64\x65lete\x18\x04 \x01(\x0b\x32\x11.sysml.DeleteEditH\x00\x12\x1f\n\x04move\x18\x05 \x01(\x0b\x32\x0f.sysml.MoveEditH\x00\x12\x32\n\x0e\x61\x64\x64_connection\x18\x06 \x01(\x0b\x32\x18.sysml.AddConnectionEditH\x00\x12,\n\x0b\x61\x64\x64_satisfy\x18\x07 \x01(\x0b\x32\x15.sysml.AddSatisfyEditH\x00\x12I\n\x1a\x61\x64\x64_requirement_constraint\x18\x08 \x01(\x0b\x32#.sysml.AddRequirementConstraintEditH\x00\x42\x0b\n\toperation\"\xd1\x01\n\rAddMemberEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x14\n\x0cmultiplicity\x18\x05 \x01(\t\x12\r\n\x05value\x18\x06 \x01(\t\x12\x13\n\x0bspecializes\x18\x07 \x03(\t\x12\x13\n\x0bis_abstract\x18\x08 \x01(\x08\x12\x11\n\tredefines\x18\t \x03(\t\x12\x12\n\nis_default\x18\n \x01(\x08\x12\x11\n\tdirection\x18\x0b \x01(\t\"y\n\x0e\x41\x64\x64SatisfyEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x13\n\x0brequirement\x18\x02 \x01(\t\x12\x1a\n\x12satisfying_feature\x18\x03 \x01(\t\x12\x13\n\x0bis_asserted\x18\x04 \x01(\x08\x12\x12\n\nis_negated\x18\x05 \x01(\x08\"]\n\x1c\x41\x64\x64RequirementConstraintEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x12\n\nexpression\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\"n\n\x11\x41\x64\x64\x43onnectionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x10\n\x08\x66rom_end\x18\x03 \x01(\t\x12\x0e\n\x06to_end\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x0c\n\x04type\x18\x06 \x01(\t\"-\n\nDeleteEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0f\n\x07\x63\x61scade\x18\x02 \x01(\x08\")\n\x08MoveEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\"-\n\x0cSetValueEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\".\n\nRenameEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"\x90\x02\n\x12\x41pplyEditsResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12#\n\x07\x61pplied\x18\x02 \x03(\x0b\x32\x12.sysml.AppliedEdit\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12#\n\x07\x66\x61ilure\x18\x04 \x01(\x0e\x32\x12.sysml.EditFailure\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x1a\n\x12referring_elements\x18\x06 \x03(\t\x12(\n\tdocuments\x18\x07 \x03(\x0b\x32\x15.sysml.EditedDocument\x12\"\n\treferrers\x18\x08 \x03(\x0b\x32\x0f.sysml.Referrer\"/\n\x0e\x45\x64itedDocument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\"*\n\x08Referrer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocument\x18\x02 \x01(\t\"\x8c\x01\n\x0b\x41ppliedEdit\x12\x17\n\x0foperation_index\x18\x01 \x01(\x05\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x05\x12\x0e\n\x06length\x18\x04 \x01(\x05\x12\x10\n\x08old_text\x18\x05 \x01(\t\x12\x10\n\x08new_text\x18\x06 \x01(\t\x12\x10\n\x08\x64ocument\x18\x07 \x01(\t\"\xfd\x02\n\nSymbolInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04kind\x18\x03 \x01(\t\x12\x31\n\x08metadata\x18\x04 \x03(\x0b\x32\x1f.sysml.SymbolInfo.MetadataEntry\x12\x11\n\tchild_ids\x18\x05 \x03(\t\x12(\n\nattributes\x18\x06 \x03(\x0b\x32\x14.sysml.AttributeInfo\x12\"\n\ttype_info\x18\x07 \x01(\x0b\x32\x0f.sysml.TypeInfo\x12-\n\x0cmultiplicity\x18\x08 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\x12.\n\x0fspecializations\x18\t \x03(\x0b\x32\x15.sysml.Specialization\x12#\n\x1bwithheld_library_attributes\x18\n \x01(\x05\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"X\n\x0eSpecialization\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x10\n\x08\x64\x65\x63lared\x18\x02 \x01(\t\x12\x11\n\ttarget_id\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\"\x95\x01\n\x08TypeInfo\x12\x10\n\x08\x64\x65\x63lared\x18\x01 \x01(\t\x12\x13\n\x0bresolved_id\x18\x02 \x01(\t\x12\x15\n\rresolved_kind\x18\x03 \x01(\t\x12\x11\n\tprimitive\x18\x04 \x01(\t\x12\x18\n\x10primitive_source\x18\x05 \x01(\t\x12\x10\n\x08quantity\x18\x06 \x01(\x08\x12\x0c\n\x04unit\x18\x07 \x01(\t\"0\n\x10MultiplicityInfo\x12\r\n\x05lower\x18\x01 \x01(\t\x12\r\n\x05upper\x18\x02 \x01(\t\"V\n\rAttributeInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x1b\n\x05value\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x0c\n\x04unit\x18\x04 \x01(\t\"\xc3\x05\n\x05Value\x12\x13\n\tint_value\x18\x01 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x02 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x12\x16\n\x0cstring_value\x18\x04 \x01(\tH\x00\x12\x15\n\x0binstance_id\x18\x05 \x01(\x03H\x00\x12(\n\x08sequence\x18\x06 \x01(\x0b\x32\x14.sysml.ValueSequenceH\x00\x12\x0e\n\x04null\x18\x07 \x01(\tH\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12*\n\x0c\x65num_literal\x18\t \x01(\x0b\x32\x12.sysml.EnumLiteralH\x00\x12\x0f\n\x05unset\x18\n \x01(\x08H\x00\x12!\n\x07\x63omplex\x18\x0b \x01(\x0b\x32\x0e.sysml.ComplexH\x00\x12\x1d\n\x05\x61rray\x18\x0c \x01(\x0b\x32\x0c.sysml.ArrayH\x00\x12\x1f\n\x06vector\x18\r \x01(\x0b\x32\r.sysml.VectorH\x00\x12\x30\n\x0fvector_quantity\x18\x0e \x01(\x0b\x32\x15.sysml.VectorQuantityH\x00\x12\x30\n\x0fmeasurement_ref\x18\x0f \x01(\x0b\x32\x15.sysml.MeasurementRefH\x00\x12\x12\n\x08infinity\x18\x10 \x01(\x08H\x00\x12#\n\x08\x66unction\x18\x11 \x01(\x0b\x32\x0f.sysml.FunctionH\x00\x12\x1e\n\x03set\x18\x12 \x01(\x0b\x32\x0f.sysml.ValueSetH\x00\x12\x30\n\x0ftensor_quantity\x18\x13 \x01(\x0b\x32\x15.sysml.TensorQuantityH\x00\x12\'\n\nmetaobject\x18\x14 \x01(\x0b\x32\x11.sysml.MetaobjectH\x00\x12+\n\x0cundetermined\x18\x15 \x01(\x0b\x32\x13.sysml.UndeterminedH\x00\x42\x06\n\x04kind\"6\n\nMetaobject\x12\x12\n\nelement_id\x18\x01 \x01(\t\x12\x14\n\x0cmetaclass_id\x18\x02 \x01(\t\"F\n\x0cUndetermined\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12&\n\x05\x63ount\x18\x02 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\",\n\x08\x46unction\x12\x0f\n\x07\x63\x61lc_id\x18\x01 \x01(\t\x12\x0f\n\x07self_id\x18\x02 \x01(\x03\"*\n\x08ValueSet\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"I\n\x0eTensorQuantity\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12#\n\ncomponents\x18\x02 \x03(\x0b\x32\x0f.sysml.Quantity\";\n\x05\x41rray\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12\x1e\n\x08\x65lements\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\"*\n\x06Vector\x12 \n\ncomponents\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"5\n\x0eVectorQuantity\x12#\n\ncomponents\x18\x01 \x03(\x0b\x32\x0f.sysml.Quantity\"*\n\x07\x43omplex\x12\x0c\n\x04real\x18\x01 \x01(\x01\x12\x11\n\timaginary\x18\x02 \x01(\x01\"d\n\x0b\x45numLiteral\x12\x12\n\nliteral_id\x18\x01 \x01(\t\x12\x16\n\x0e\x65numeration_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1b\n\x05value\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"/\n\rValueSequence\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"|\n\x08Quantity\x12\x17\n\rint_magnitude\x18\x01 \x01(\x03H\x00\x12\x18\n\x0ereal_magnitude\x18\x02 \x01(\x01H\x00\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\"\n\tunit_term\x18\x04 \x01(\x0b\x32\x0f.sysml.UnitTermB\x0b\n\tmagnitude\"S\n\x0eMeasurementRef\x12\x0c\n\x04unit\x18\x01 \x01(\t\x12\"\n\tunit_term\x18\x02 \x01(\x0b\x32\x0f.sysml.UnitTerm\x12\x0f\n\x07unit_id\x18\x03 \x01(\t\"T\n\x08UnitTerm\x12\x11\n\tscale_num\x18\x01 \x01(\x01\x12\x11\n\tscale_den\x18\x02 \x01(\x01\x12\"\n\x07\x66\x61\x63tors\x18\x03 \x03(\x0b\x32\x11.sysml.UnitFactor\"/\n\nUnitFactor\x12\x0f\n\x07unit_id\x18\x01 \x01(\t\x12\x10\n\x08\x65xponent\x18\x02 \x01(\x01\"X\n\nDiagnostic\x12\x10\n\x08severity\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x19\n\x04span\x18\x03 \x01(\x0b\x32\x0b.sysml.Span\x12\x0c\n\x04\x63ode\x18\x04 \x01(\t\"^\n\x04Span\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x12\n\nstart_line\x18\x02 \x01(\x05\x12\x11\n\tstart_col\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_line\x18\x04 \x01(\x05\x12\x0f\n\x07\x65nd_col\x18\x05 \x01(\x05\"\x13\n\x11ServerInfoRequest\";\n\x12ServerInfoResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x03(\t\"S\n\x0cQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1b\n\x05query\x18\x02 \x01(\x0b\x32\x0c.sysml.Query\x12\x12\n\noslc_query\x18\x03 \x01(\t\"<\n\rQueryResponse\x12+\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x19.sysml.QueryResultElement\"H\n\x05Query\x12\r\n\x05scope\x18\x01 \x03(\t\x12\x0e\n\x06select\x18\x02 \x03(\t\x12 \n\x05where\x18\x03 \x01(\x0b\x32\x11.sysml.Constraint\"|\n\nConstraint\x12/\n\tprimitive\x18\x01 \x01(\x0b\x32\x1a.sysml.PrimitiveConstraintH\x00\x12/\n\tcomposite\x18\x02 \x01(\x0b\x32\x1a.sysml.CompositeConstraintH\x00\x42\x0c\n\nconstraint\"s\n\x13PrimitiveConstraint\x12\x0f\n\x07inverse\x18\x01 \x01(\x08\x12\x10\n\x08property\x18\x02 \x01(\t\x12*\n\x08operator\x18\x03 \x01(\x0e\x32\x18.sysml.PrimitiveOperator\x12\r\n\x05value\x18\x04 \x03(\t\"h\n\x13\x43ompositeConstraint\x12*\n\x08operator\x18\x01 \x01(\x0e\x32\x18.sysml.CompositeOperator\x12%\n\nconstraint\x18\x02 \x03(\x0b\x32\x11.sysml.Constraint\"\xa0\x01\n\x12QueryResultElement\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12=\n\nproperties\x18\x03 \x03(\x0b\x32).sysml.QueryResultElement.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"s\n\nSweepRange\x12\x11\n\tparameter\x18\x01 \x01(\t\x12\x1b\n\x05start\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x19\n\x03\x65nd\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x1a\n\x04step\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"\xd0\x02\n\x0fRunSweepRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x43\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32*.sysml.RunSweepRequest.NamedArgumentsEntry\x12!\n\x06ranges\x18\x06 \x03(\x0b\x32\x11.sysml.SweepRange\x12\x0f\n\x07samples\x18\x07 \x01(\x03\x12\x0c\n\x04seed\x18\x08 \x01(\x04\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xf4\x01\n\x08SweepRow\x12!\n\x06inputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x03 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x16\n\x0e\x65lapsed_micros\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12*\n\x0b\x65valuations\x18\x07 \x03(\x0b\x32\x15.sysml.CaseEvaluation\"\xad\x02\n\x10RunSweepResponse\x12\x1d\n\x04rows\x18\x01 \x03(\x0b\x32\x0f.sysml.SweepRow\x12\x12\n\nparameters\x18\x02 \x03(\t\x12\x0f\n\x07sampled\x18\x03 \x01(\x08\x12\x0c\n\x04seed\x18\x04 \x01(\x04\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x06 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x07 \x01(\x0e\x32\x14.sysml.FailureReason\x12\"\n\tinstances\x18\x08 \x03(\x0b\x32\x0f.sysml.Instance\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x12\x10\n\x08strength\x18\n \x01(\t\x12\x1c\n\x06\x62ounds\x18\x0b \x03(\x0b\x32\x0c.sysml.Bound\"n\n\x17RunDocumentQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x10\n\x08query_id\x18\x02 \x01(\t\x12-\n\x08\x62indings\x18\x03 \x03(\x0b\x32\x1b.sysml.DocumentQueryBinding\"O\n\x14\x44ocumentQueryBinding\x12\x11\n\tparameter\x18\x01 \x01(\t\x12$\n\x06values\x18\x02 \x03(\x0b\x32\x14.sysml.DocumentValue\"\xf7\x02\n\rDocumentValue\x12\x14\n\nelement_id\x18\x01 \x01(\tH\x00\x12\x16\n\x0cstring_value\x18\x02 \x01(\tH\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x04 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x05 \x01(\x08H\x00\x12\x12\n\x08infinity\x18\x06 \x01(\x08H\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12)\n\x07verdict\x18\t \x01(\x0b\x32\x16.sysml.DocumentVerdictH\x00\x12\'\n\x06object\x18\n \x01(\x0b\x32\x15.sysml.DocumentObjectH\x00\x12%\n\x05state\x18\x0b \x01(\x0b\x32\x14.sysml.DocumentStateH\x00\x12%\n\x05\x65vent\x18\x0c \x01(\x0b\x32\x14.sysml.DocumentEventH\x00\x12\x14\n\x0c\x65lement_type\x18\x07 \x01(\tB\x06\n\x04kind\"Z\n\x0e\x44ocumentObject\x12\x13\n\x0binstance_id\x18\x01 \x01(\x03\x12\x0c\n\x04path\x18\x02 \x01(\t\x12%\n\x07\x65lement\x18\x03 \x01(\x0b\x32\x14.sysml.DocumentValue\"\xae\x01\n\x0f\x44ocumentVerdict\x12\'\n\tassertion\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0f\n\x07verdict\x18\x05 \x01(\t\x12\x11\n\tcondition\x18\x06 \x01(\t\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x14\n\x0cverification\x18\x08 \x03(\t\"\xb1\x01\n\rDocumentState\x12%\n\x06object\x18\x01 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x12\n\nstate_path\x18\x04 \x01(\t\x12#\n\x05state\x18\x05 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0e\n\x06region\x18\x06 \x01(\t\x12\x11\n\tenclosing\x18\x07 \x03(\t\"\x9c\x02\n\rDocumentEvent\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\"\n\x04time\x18\x02 \x01(\x0b\x32\x14.sysml.DocumentValue\x12%\n\x06object\x18\x03 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0c\n\x04\x66rom\x18\x06 \x01(\t\x12\n\n\x02to\x18\x07 \x01(\t\x12%\n\x06target\x18\x08 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\r\n\x05\x65vent\x18\t \x01(\t\x12\x0f\n\x07payload\x18\n \x03(\t\x12\x14\n\x0c\x61lternatives\x18\x0b \x03(\t\x12\r\n\x05taken\x18\x0c \x01(\t\x12\x0c\n\x04text\x18\r \x01(\t\"#\n\x13\x44ocumentQueryColumn\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x11\x44ocumentQueryCell\x12$\n\x06values\x18\x01 \x03(\x0b\x32\x14.sysml.DocumentValue\"b\n\x10\x44ocumentQueryRow\x12%\n\x07\x65lement\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\'\n\x05\x63\x65lls\x18\x02 \x03(\x0b\x32\x18.sysml.DocumentQueryCell\"n\n\x18RunDocumentQueryResponse\x12+\n\x07\x63olumns\x18\x01 \x03(\x0b\x32\x1a.sysml.DocumentQueryColumn\x12%\n\x04rows\x18\x02 \x03(\x0b\x32\x17.sysml.DocumentQueryRow\"N\n\x15RenderDocumentRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x13\n\x0b\x64ocument_id\x18\x02 \x01(\t\x12\x0c\n\x04\x66orm\x18\x03 \x01(\t\"8\n\x16RenderDocumentResponse\x12\x10\n\x08markdown\x18\x01 \x01(\t\x12\x0c\n\x04html\x18\x02 \x01(\t*\x93\x01\n\rFailureReason\x12\x1e\n\x1a\x46\x41ILURE_REASON_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x46\x41ILURE_REASON_EVALUATION\x10\x01\x12\x1d\n\x19\x46\x41ILURE_REASON_WRONG_KIND\x10\x02\x12$\n FAILURE_REASON_AMBIGUOUS_SUBJECT\x10\x03*\x8c\x05\n\x0b\x45\x64itFailure\x12\x1c\n\x18\x45\x44IT_FAILURE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x45\x44IT_FAILURE_NO_OPERATIONS\x10\x01\x12\x1f\n\x1b\x45\x44IT_FAILURE_UNKNOWN_TARGET\x10\x02\x12!\n\x1d\x45\x44IT_FAILURE_AMBIGUOUS_TARGET\x10\x03\x12\x1b\n\x17\x45\x44IT_FAILURE_NOT_VALUED\x10\x04\x12\x1e\n\x1a\x45\x44IT_FAILURE_INVALID_VALUE\x10\x05\x12\x1d\n\x19\x45\x44IT_FAILURE_INVALID_NAME\x10\x06\x12\x1a\n\x16\x45\x44IT_FAILURE_NOT_NAMED\x10\x07\x12\"\n\x1e\x45\x44IT_FAILURE_RENAME_REFERENCED\x10\x08\x12\"\n\x1e\x45\x44IT_FAILURE_OVERLAPPING_EDITS\x10\t\x12\x1f\n\x1b\x45\x44IT_FAILURE_RESULT_INVALID\x10\n\x12\x1e\n\x1a\x45\x44IT_FAILURE_OWNER_UNKNOWN\x10\x0b\x12$\n EDIT_FAILURE_OWNER_NOT_NAMESPACE\x10\x0c\x12\x1d\n\x19\x45\x44IT_FAILURE_ILLEGAL_KIND\x10\r\x12\"\n\x1e\x45\x44IT_FAILURE_MEMBER_NAME_TAKEN\x10\x0e\x12\"\n\x1e\x45\x44IT_FAILURE_DELETE_REFERENCED\x10\x0f\x12$\n EDIT_FAILURE_OWNER_INSIDE_TARGET\x10\x10\x12 \n\x1c\x45\x44IT_FAILURE_MOVE_REFERENCED\x10\x11\x12%\n!EDIT_FAILURE_REFERENCED_ELSEWHERE\x10\x12*\x92\x01\n\x11PrimitiveOperator\x12\"\n\x1ePRIMITIVE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1c\n\x18PRIMITIVE_OPERATOR_EQUAL\x10\x01\x12\x1e\n\x1aPRIMITIVE_OPERATOR_GREATER\x10\x02\x12\x1b\n\x17PRIMITIVE_OPERATOR_LESS\x10\x03*n\n\x11\x43ompositeOperator\x12\"\n\x1e\x43OMPOSITE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43OMPOSITE_OPERATOR_AND\x10\x01\x12\x19\n\x15\x43OMPOSITE_OPERATOR_OR\x10\x02\x32\xbf\x0c\n\x0cSysMLService\x12\x44\n\rGetServerInfo\x12\x18.sysml.ServerInfoRequest\x1a\x19.sysml.ServerInfoResponse\x12>\n\tParseFile\x12\x17.sysml.ParseFileRequest\x1a\x18.sysml.ParseFileResponse\x12G\n\x0cParseSources\x12\x1a.sysml.ParseSourcesRequest\x1a\x1b.sysml.ParseSourcesResponse\x12;\n\tGetSymbol\x12\x17.sysml.GetSymbolRequest\x1a\x15.sysml.SymbolResponse\x12G\n\x0eGetDiagnostics\x12\x19.sysml.DiagnosticsRequest\x1a\x1a.sysml.DiagnosticsResponse\x12;\n\x08\x45valuate\x12\x16.sysml.EvaluateRequest\x1a\x17.sysml.EvaluateResponse\x12\x44\n\x0bInstantiate\x12\x19.sysml.InstantiateRequest\x1a\x1a.sysml.InstantiateResponse\x12J\n\rExecuteAction\x12\x1b.sysml.ExecuteActionRequest\x1a\x1c.sysml.ExecuteActionResponse\x12G\n\x0c\x45xecuteState\x12\x1a.sysml.ExecuteStateRequest\x1a\x1b.sysml.ExecuteStateResponse\x12\x38\n\x07\x43onvert\x12\x15.sysml.ConvertRequest\x1a\x16.sysml.ConvertResponse\x12\x41\n\nApplyEdits\x12\x18.sysml.ApplyEditsRequest\x1a\x19.sysml.ApplyEditsResponse\x12S\n\x10VerifyConstraint\x12\x1e.sysml.VerifyConstraintRequest\x1a\x1f.sysml.VerifyConstraintResponse\x12V\n\x11VerifyRequirement\x12\x1f.sysml.VerifyRequirementRequest\x1a .sysml.VerifyRequirementResponse\x12Y\n\x12VerifySatisfaction\x12 .sysml.VerifySatisfactionRequest\x1a!.sysml.VerifySatisfactionResponse\x12S\n\x10ValidateInstance\x12\x1e.sysml.ValidateInstanceRequest\x1a\x1f.sysml.ValidateInstanceResponse\x12G\n\x0c\x45valuateCalc\x12\x1a.sysml.EvaluateCalcRequest\x1a\x1b.sysml.EvaluateCalcResponse\x12\x44\n\x0bRunAnalysis\x12\x19.sysml.RunAnalysisRequest\x1a\x1a.sysml.RunAnalysisResponse\x12;\n\x08RunSweep\x12\x16.sysml.RunSweepRequest\x1a\x17.sysml.RunSweepResponse\x12\x44\n\x0bListEngines\x12\x19.sysml.ListEnginesRequest\x1a\x1a.sysml.ListEnginesResponse\x12\x32\n\x05Query\x12\x13.sysml.QueryRequest\x1a\x14.sysml.QueryResponse\x12S\n\x10RunDocumentQuery\x12\x1e.sysml.RunDocumentQueryRequest\x1a\x1f.sysml.RunDocumentQueryResponse\x12M\n\x0eRenderDocument\x12\x1c.sysml.RenderDocumentRequest\x1a\x1d.sysml.RenderDocumentResponseB*Z(github.com/Open-MBEE/OpenSysML/api/protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bsysml.proto\x12\x05sysml\"\xb9\x02\n\x07Verdict\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x12\n\nelement_id\x18\x02 \x01(\t\x12\x0f\n\x07\x65lement\x18\x03 \x01(\t\x12\r\n\x05holds\x18\x04 \x01(\x08\x12\x11\n\tcondition\x18\x05 \x01(\t\x12\x13\n\x0binstance_id\x18\x06 \x01(\x03\x12\x18\n\x10instance_type_id\x18\x07 \x01(\t\x12\r\n\x05\x65rror\x18\x08 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\t \x01(\x0e\x32\x14.sysml.FailureReason\x12\x16\n\x0erequirement_id\x18\n \x01(\t\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\x12\x15\n\rinstance_path\x18\x0e \x01(\t\"5\n\x05\x42ound\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0f\n\x07reached\x18\x03 \x01(\x08\"k\n\x17VerifyConstraintRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"\x96\x01\n\x18VerifyConstraintResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\"l\n\x18VerifyRequirementRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"m\n\x13VerificationVerdict\x12\x0f\n\x07\x63\x61se_id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x03 \x01(\t\x12\x0f\n\x07subcase\x18\x04 \x01(\x08\x12\x16\n\x0erequirement_id\x18\x05 \x01(\t\"\xd2\x01\n\x19VerifyRequirementResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x39\n\x15verification_verdicts\x18\x05 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"R\n\x19VerifySatisfactionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\"\x82\x02\n\x1aVerifySatisfactionResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x06 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"P\n\x17ValidateInstanceRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\"\xb2\x02\n\x18ValidateInstanceResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x1f\n\x07summary\x18\x02 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12\x0f\n\x07\x62ounded\x18\x08 \x01(\x08\"m\n\x13\x45valuateCalcRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x1f\n\targuments\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"\xfd\x01\n\x14\x45valuateCalcResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x0e\n\x06\x65ngine\x18\x06 \x01(\t\x12\x10\n\x08strength\x18\x07 \x01(\t\x12\x1c\n\x06\x62ounds\x18\x08 \x03(\x0b\x32\x0c.sysml.Bound\"7\n\nCalcOutput\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\"\x93\x01\n\x0e\x43\x61seEvaluation\x12\x13\n\x0b\x66unction_id\x18\x01 \x01(\t\x12\x1f\n\targuments\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06result\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x10\n\x08selected\x18\x05 \x01(\x08\x12\x0c\n\x04tied\x18\x06 \x01(\x08\"\xa6\x02\n\x12RunAnalysisRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x46\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32-.sysml.RunAnalysisRequest.NamedArgumentsEntry\x12\x10\n\x08schedule\x18\x06 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x07 \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xdc\x03\n\x13RunAnalysisResponse\x12\"\n\x07outputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x02 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12 \n\x08outcomes\x18\x08 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\t \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12*\n\x0b\x65valuations\x18\n \x03(\x0b\x32\x15.sysml.CaseEvaluation\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\"\x97\x02\n\x07Outcome\x12,\n\x07outputs\x18\x01 \x03(\x0b\x32\x1b.sysml.Outcome.OutputsEntry\x12\x13\n\x0b\x66inal_state\x18\x02 \x01(\t\x12\x16\n\x0estates_visited\x18\x03 \x03(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x16\n\x0elinearizations\x18\x05 \x01(\x05\x12\x0f\n\x07witness\x18\x06 \x03(\t\x12&\n\x0b\x64iagnostics\x18\x07 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x13\n\x0bprobability\x18\x08 \x01(\x01\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x96\x01\n\x11\x45xplorationStatus\x12\x10\n\x08\x63omplete\x18\x01 \x01(\x08\x12\x0c\n\x04runs\x18\x02 \x01(\x05\x12\x13\n\x0b\x62udgets_hit\x18\x03 \x03(\t\x12\x13\n\x0bruns_budget\x18\x04 \x01(\x05\x12\x14\n\x0c\x64\x65pth_budget\x18\x05 \x01(\x05\x12!\n\x19probabilities_lower_bound\x18\x06 \x01(\x08\"\x14\n\x12ListEnginesRequest\"\xfc\x01\n\nEngineInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tauthority\x18\x02 \x01(\t\x12\x0f\n\x07\x61nswers\x18\x03 \x03(\t\x12\x0e\n\x06\x62ounds\x18\x04 \x03(\t\x12\x0f\n\x07process\x18\x05 \x01(\t\x12\x15\n\rprocess_found\x18\x06 \x01(\t\x12\r\n\x05ready\x18\x07 \x01(\x08\x12\x13\n\x0bunavailable\x18\x08 \x01(\t\x12\x0c\n\x04kind\x18\t \x01(\t\x12\x10\n\x08protocol\x18\n \x01(\t\x12\x0e\n\x06source\x18\x0b \x01(\t\x12\x0f\n\x07\x63ommand\x18\x0c \x01(\t\x12\x0f\n\x07version\x18\r \x01(\t\x12\x0e\n\x06served\x18\x0e \x01(\x08\"9\n\x13ListEnginesResponse\x12\"\n\x07\x65ngines\x18\x01 \x03(\x0b\x32\x11.sysml.EngineInfo\"\x8c\x01\n\x10ParseFileRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x18\n\x0c\x63ontent_hash\x18\x03 \x01(\tB\x02\x18\x01\x12\x10\n\x08language\x18\x04 \x01(\t\x12\x1a\n\x12strict_conformance\x18\x05 \x01(\x08\x42\x08\n\x06source\"b\n\x0eSourceDocument\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x10\n\x08language\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\tB\x08\n\x06source\"[\n\x13ParseSourcesRequest\x12(\n\tdocuments\x18\x01 \x03(\x0b\x32\x15.sysml.SourceDocument\x12\x1a\n\x12strict_conformance\x18\x02 \x01(\x08\"\x83\x01\n\x14ParseSourcesResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12 \n\x05roots\x18\x02 \x03(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x7f\n\x11ParseFileResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x04root\x18\x02 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"9\n\x10GetSymbolRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"B\n\x0eSymbolResponse\x12!\n\x06symbol\x18\x01 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"(\n\x12\x44iagnosticsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\"L\n\x13\x44iagnosticsResponse\x12&\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"o\n\x0f\x45valuateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x12\n\nexpression\x18\x02 \x01(\t\x12\x19\n\x11\x63ontext_symbol_id\x18\x03 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x04 \x01(\t\"g\n\x10\x45valuateResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\"\xc2\x01\n\x08Instance\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x16\n\x0etype_symbol_id\x18\x02 \x01(\t\x12:\n\x0e\x66\x65\x61ture_values\x18\x04 \x03(\x0b\x32\".sysml.Instance.FeatureValuesEntry\x1aI\n\x12\x46\x65\x61tureValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.sysml.FeatureValue:\x02\x38\x01J\x04\x08\x03\x10\x04R\x05slots\"\x84\x01\n\x0c\x46\x65\x61tureValue\x12\x14\n\x0c\x66\x65\x61ture_name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x14\n\x0cmaterialized\x18\x04 \x01(\x08\x12\r\n\x05\x65rror\x18\x05 \x01(\t\";\n\x12InstantiateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"\x93\x01\n\x13InstantiateResponse\x12!\n\x08instance\x18\x01 \x01(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\"\n\tinstances\x18\x04 \x03(\x0b\x32\x0f.sysml.Instance\"\xe9\x01\n\x14\x45xecuteActionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x18\n\x10\x61\x63tion_symbol_id\x18\x02 \x01(\t\x12\x37\n\x06inputs\x18\x03 \x03(\x0b\x32\'.sysml.ExecuteActionRequest.InputsEntry\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\x1a;\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xad\x02\n\x15\x45xecuteActionResponse\x12:\n\x07outputs\x18\x01 \x03(\x0b\x32).sysml.ExecuteActionResponse.OutputsEntry\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x04 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x05 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x06 \x01(\x01\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x89\x01\n\x13\x45xecuteStateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x17state_machine_symbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65vents\x18\x03 \x03(\t\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\"\xd3\x02\n\x14\x45xecuteStateResponse\x12\x16\n\x0estates_visited\x18\x01 \x03(\t\x12\x44\n\rfinal_context\x18\x02 \x03(\x0b\x32-.sysml.ExecuteStateResponse.FinalContextEntry\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x05 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x06 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x07 \x01(\x01\x1a\x41\n\x11\x46inalContextEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xa0\x01\n\x0e\x43onvertRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x14\n\nmodel_hash\x18\x06 \x01(\tH\x00\x12\x13\n\x0b\x66rom_format\x18\x03 \x01(\t\x12\x11\n\tto_format\x18\x04 \x01(\t\x12\x1e\n\x16tolerate_syntax_errors\x18\x05 \x01(\x08\x42\x08\n\x06source\"\xb4\x01\n\x0f\x43onvertResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x13\n\x0b\x66rom_format\x18\x02 \x01(\t\x12\x11\n\tto_format\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x14\n\x0c\x65xperimental\x18\x06 \x01(\x08\x12\x1b\n\x13\x65xperimental_notice\x18\x07 \x01(\t\"}\n\x11\x41pplyEditsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12(\n\noperations\x18\x02 \x03(\x0b\x32\x14.sysml.EditOperation\x12\x10\n\x08\x64ocument\x18\x03 \x01(\t\x12\x18\n\x10\x61\x63\x63\x65pt_documents\x18\x04 \x01(\x08\"\xbe\x03\n\rEditOperation\x12(\n\tset_value\x18\x01 \x01(\x0b\x32\x13.sysml.SetValueEditH\x00\x12#\n\x06rename\x18\x02 \x01(\x0b\x32\x11.sysml.RenameEditH\x00\x12*\n\nadd_member\x18\x03 \x01(\x0b\x32\x14.sysml.AddMemberEditH\x00\x12#\n\x06\x64\x65lete\x18\x04 \x01(\x0b\x32\x11.sysml.DeleteEditH\x00\x12\x1f\n\x04move\x18\x05 \x01(\x0b\x32\x0f.sysml.MoveEditH\x00\x12\x32\n\x0e\x61\x64\x64_connection\x18\x06 \x01(\x0b\x32\x18.sysml.AddConnectionEditH\x00\x12,\n\x0b\x61\x64\x64_satisfy\x18\x07 \x01(\x0b\x32\x15.sysml.AddSatisfyEditH\x00\x12I\n\x1a\x61\x64\x64_requirement_constraint\x18\x08 \x01(\x0b\x32#.sysml.AddRequirementConstraintEditH\x00\x12\x32\n\x0e\x61\x64\x64_transition\x18\t \x01(\x0b\x32\x18.sysml.AddTransitionEditH\x00\x42\x0b\n\toperation\"\xd1\x01\n\rAddMemberEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x14\n\x0cmultiplicity\x18\x05 \x01(\t\x12\r\n\x05value\x18\x06 \x01(\t\x12\x13\n\x0bspecializes\x18\x07 \x03(\t\x12\x13\n\x0bis_abstract\x18\x08 \x01(\x08\x12\x11\n\tredefines\x18\t \x03(\t\x12\x12\n\nis_default\x18\n \x01(\x08\x12\x11\n\tdirection\x18\x0b \x01(\t\"y\n\x0e\x41\x64\x64SatisfyEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x13\n\x0brequirement\x18\x02 \x01(\t\x12\x1a\n\x12satisfying_feature\x18\x03 \x01(\t\x12\x13\n\x0bis_asserted\x18\x04 \x01(\x08\x12\x12\n\nis_negated\x18\x05 \x01(\x08\"]\n\x1c\x41\x64\x64RequirementConstraintEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x12\n\nexpression\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\"\x91\x01\n\x11\x41\x64\x64TransitionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07trigger\x18\x05 \x01(\t\x12\r\n\x05guard\x18\x06 \x01(\t\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\x07 \x01(\t\x12\x0f\n\x07initial\x18\x08 \x01(\x08\"n\n\x11\x41\x64\x64\x43onnectionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x10\n\x08\x66rom_end\x18\x03 \x01(\t\x12\x0e\n\x06to_end\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x0c\n\x04type\x18\x06 \x01(\t\"-\n\nDeleteEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0f\n\x07\x63\x61scade\x18\x02 \x01(\x08\")\n\x08MoveEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\"-\n\x0cSetValueEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\".\n\nRenameEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"\x90\x02\n\x12\x41pplyEditsResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12#\n\x07\x61pplied\x18\x02 \x03(\x0b\x32\x12.sysml.AppliedEdit\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12#\n\x07\x66\x61ilure\x18\x04 \x01(\x0e\x32\x12.sysml.EditFailure\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x1a\n\x12referring_elements\x18\x06 \x03(\t\x12(\n\tdocuments\x18\x07 \x03(\x0b\x32\x15.sysml.EditedDocument\x12\"\n\treferrers\x18\x08 \x03(\x0b\x32\x0f.sysml.Referrer\"/\n\x0e\x45\x64itedDocument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\"*\n\x08Referrer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocument\x18\x02 \x01(\t\"\x8c\x01\n\x0b\x41ppliedEdit\x12\x17\n\x0foperation_index\x18\x01 \x01(\x05\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x05\x12\x0e\n\x06length\x18\x04 \x01(\x05\x12\x10\n\x08old_text\x18\x05 \x01(\t\x12\x10\n\x08new_text\x18\x06 \x01(\t\x12\x10\n\x08\x64ocument\x18\x07 \x01(\t\"\xfd\x02\n\nSymbolInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04kind\x18\x03 \x01(\t\x12\x31\n\x08metadata\x18\x04 \x03(\x0b\x32\x1f.sysml.SymbolInfo.MetadataEntry\x12\x11\n\tchild_ids\x18\x05 \x03(\t\x12(\n\nattributes\x18\x06 \x03(\x0b\x32\x14.sysml.AttributeInfo\x12\"\n\ttype_info\x18\x07 \x01(\x0b\x32\x0f.sysml.TypeInfo\x12-\n\x0cmultiplicity\x18\x08 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\x12.\n\x0fspecializations\x18\t \x03(\x0b\x32\x15.sysml.Specialization\x12#\n\x1bwithheld_library_attributes\x18\n \x01(\x05\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"X\n\x0eSpecialization\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x10\n\x08\x64\x65\x63lared\x18\x02 \x01(\t\x12\x11\n\ttarget_id\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\"\x95\x01\n\x08TypeInfo\x12\x10\n\x08\x64\x65\x63lared\x18\x01 \x01(\t\x12\x13\n\x0bresolved_id\x18\x02 \x01(\t\x12\x15\n\rresolved_kind\x18\x03 \x01(\t\x12\x11\n\tprimitive\x18\x04 \x01(\t\x12\x18\n\x10primitive_source\x18\x05 \x01(\t\x12\x10\n\x08quantity\x18\x06 \x01(\x08\x12\x0c\n\x04unit\x18\x07 \x01(\t\"0\n\x10MultiplicityInfo\x12\r\n\x05lower\x18\x01 \x01(\t\x12\r\n\x05upper\x18\x02 \x01(\t\"V\n\rAttributeInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x1b\n\x05value\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x0c\n\x04unit\x18\x04 \x01(\t\"\xc3\x05\n\x05Value\x12\x13\n\tint_value\x18\x01 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x02 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x12\x16\n\x0cstring_value\x18\x04 \x01(\tH\x00\x12\x15\n\x0binstance_id\x18\x05 \x01(\x03H\x00\x12(\n\x08sequence\x18\x06 \x01(\x0b\x32\x14.sysml.ValueSequenceH\x00\x12\x0e\n\x04null\x18\x07 \x01(\tH\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12*\n\x0c\x65num_literal\x18\t \x01(\x0b\x32\x12.sysml.EnumLiteralH\x00\x12\x0f\n\x05unset\x18\n \x01(\x08H\x00\x12!\n\x07\x63omplex\x18\x0b \x01(\x0b\x32\x0e.sysml.ComplexH\x00\x12\x1d\n\x05\x61rray\x18\x0c \x01(\x0b\x32\x0c.sysml.ArrayH\x00\x12\x1f\n\x06vector\x18\r \x01(\x0b\x32\r.sysml.VectorH\x00\x12\x30\n\x0fvector_quantity\x18\x0e \x01(\x0b\x32\x15.sysml.VectorQuantityH\x00\x12\x30\n\x0fmeasurement_ref\x18\x0f \x01(\x0b\x32\x15.sysml.MeasurementRefH\x00\x12\x12\n\x08infinity\x18\x10 \x01(\x08H\x00\x12#\n\x08\x66unction\x18\x11 \x01(\x0b\x32\x0f.sysml.FunctionH\x00\x12\x1e\n\x03set\x18\x12 \x01(\x0b\x32\x0f.sysml.ValueSetH\x00\x12\x30\n\x0ftensor_quantity\x18\x13 \x01(\x0b\x32\x15.sysml.TensorQuantityH\x00\x12\'\n\nmetaobject\x18\x14 \x01(\x0b\x32\x11.sysml.MetaobjectH\x00\x12+\n\x0cundetermined\x18\x15 \x01(\x0b\x32\x13.sysml.UndeterminedH\x00\x42\x06\n\x04kind\"6\n\nMetaobject\x12\x12\n\nelement_id\x18\x01 \x01(\t\x12\x14\n\x0cmetaclass_id\x18\x02 \x01(\t\"F\n\x0cUndetermined\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12&\n\x05\x63ount\x18\x02 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\",\n\x08\x46unction\x12\x0f\n\x07\x63\x61lc_id\x18\x01 \x01(\t\x12\x0f\n\x07self_id\x18\x02 \x01(\x03\"*\n\x08ValueSet\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"I\n\x0eTensorQuantity\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12#\n\ncomponents\x18\x02 \x03(\x0b\x32\x0f.sysml.Quantity\";\n\x05\x41rray\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12\x1e\n\x08\x65lements\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\"*\n\x06Vector\x12 \n\ncomponents\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"5\n\x0eVectorQuantity\x12#\n\ncomponents\x18\x01 \x03(\x0b\x32\x0f.sysml.Quantity\"*\n\x07\x43omplex\x12\x0c\n\x04real\x18\x01 \x01(\x01\x12\x11\n\timaginary\x18\x02 \x01(\x01\"d\n\x0b\x45numLiteral\x12\x12\n\nliteral_id\x18\x01 \x01(\t\x12\x16\n\x0e\x65numeration_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1b\n\x05value\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"/\n\rValueSequence\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"|\n\x08Quantity\x12\x17\n\rint_magnitude\x18\x01 \x01(\x03H\x00\x12\x18\n\x0ereal_magnitude\x18\x02 \x01(\x01H\x00\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\"\n\tunit_term\x18\x04 \x01(\x0b\x32\x0f.sysml.UnitTermB\x0b\n\tmagnitude\"S\n\x0eMeasurementRef\x12\x0c\n\x04unit\x18\x01 \x01(\t\x12\"\n\tunit_term\x18\x02 \x01(\x0b\x32\x0f.sysml.UnitTerm\x12\x0f\n\x07unit_id\x18\x03 \x01(\t\"T\n\x08UnitTerm\x12\x11\n\tscale_num\x18\x01 \x01(\x01\x12\x11\n\tscale_den\x18\x02 \x01(\x01\x12\"\n\x07\x66\x61\x63tors\x18\x03 \x03(\x0b\x32\x11.sysml.UnitFactor\"/\n\nUnitFactor\x12\x0f\n\x07unit_id\x18\x01 \x01(\t\x12\x10\n\x08\x65xponent\x18\x02 \x01(\x01\"X\n\nDiagnostic\x12\x10\n\x08severity\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x19\n\x04span\x18\x03 \x01(\x0b\x32\x0b.sysml.Span\x12\x0c\n\x04\x63ode\x18\x04 \x01(\t\"^\n\x04Span\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x12\n\nstart_line\x18\x02 \x01(\x05\x12\x11\n\tstart_col\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_line\x18\x04 \x01(\x05\x12\x0f\n\x07\x65nd_col\x18\x05 \x01(\x05\"\x13\n\x11ServerInfoRequest\";\n\x12ServerInfoResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x03(\t\"S\n\x0cQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1b\n\x05query\x18\x02 \x01(\x0b\x32\x0c.sysml.Query\x12\x12\n\noslc_query\x18\x03 \x01(\t\"<\n\rQueryResponse\x12+\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x19.sysml.QueryResultElement\"H\n\x05Query\x12\r\n\x05scope\x18\x01 \x03(\t\x12\x0e\n\x06select\x18\x02 \x03(\t\x12 \n\x05where\x18\x03 \x01(\x0b\x32\x11.sysml.Constraint\"|\n\nConstraint\x12/\n\tprimitive\x18\x01 \x01(\x0b\x32\x1a.sysml.PrimitiveConstraintH\x00\x12/\n\tcomposite\x18\x02 \x01(\x0b\x32\x1a.sysml.CompositeConstraintH\x00\x42\x0c\n\nconstraint\"s\n\x13PrimitiveConstraint\x12\x0f\n\x07inverse\x18\x01 \x01(\x08\x12\x10\n\x08property\x18\x02 \x01(\t\x12*\n\x08operator\x18\x03 \x01(\x0e\x32\x18.sysml.PrimitiveOperator\x12\r\n\x05value\x18\x04 \x03(\t\"h\n\x13\x43ompositeConstraint\x12*\n\x08operator\x18\x01 \x01(\x0e\x32\x18.sysml.CompositeOperator\x12%\n\nconstraint\x18\x02 \x03(\x0b\x32\x11.sysml.Constraint\"\xa0\x01\n\x12QueryResultElement\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12=\n\nproperties\x18\x03 \x03(\x0b\x32).sysml.QueryResultElement.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"s\n\nSweepRange\x12\x11\n\tparameter\x18\x01 \x01(\t\x12\x1b\n\x05start\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x19\n\x03\x65nd\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x1a\n\x04step\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"\xd0\x02\n\x0fRunSweepRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x43\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32*.sysml.RunSweepRequest.NamedArgumentsEntry\x12!\n\x06ranges\x18\x06 \x03(\x0b\x32\x11.sysml.SweepRange\x12\x0f\n\x07samples\x18\x07 \x01(\x03\x12\x0c\n\x04seed\x18\x08 \x01(\x04\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xf4\x01\n\x08SweepRow\x12!\n\x06inputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x03 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x16\n\x0e\x65lapsed_micros\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12*\n\x0b\x65valuations\x18\x07 \x03(\x0b\x32\x15.sysml.CaseEvaluation\"\xad\x02\n\x10RunSweepResponse\x12\x1d\n\x04rows\x18\x01 \x03(\x0b\x32\x0f.sysml.SweepRow\x12\x12\n\nparameters\x18\x02 \x03(\t\x12\x0f\n\x07sampled\x18\x03 \x01(\x08\x12\x0c\n\x04seed\x18\x04 \x01(\x04\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x06 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x07 \x01(\x0e\x32\x14.sysml.FailureReason\x12\"\n\tinstances\x18\x08 \x03(\x0b\x32\x0f.sysml.Instance\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x12\x10\n\x08strength\x18\n \x01(\t\x12\x1c\n\x06\x62ounds\x18\x0b \x03(\x0b\x32\x0c.sysml.Bound\"n\n\x17RunDocumentQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x10\n\x08query_id\x18\x02 \x01(\t\x12-\n\x08\x62indings\x18\x03 \x03(\x0b\x32\x1b.sysml.DocumentQueryBinding\"O\n\x14\x44ocumentQueryBinding\x12\x11\n\tparameter\x18\x01 \x01(\t\x12$\n\x06values\x18\x02 \x03(\x0b\x32\x14.sysml.DocumentValue\"\xf7\x02\n\rDocumentValue\x12\x14\n\nelement_id\x18\x01 \x01(\tH\x00\x12\x16\n\x0cstring_value\x18\x02 \x01(\tH\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x04 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x05 \x01(\x08H\x00\x12\x12\n\x08infinity\x18\x06 \x01(\x08H\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12)\n\x07verdict\x18\t \x01(\x0b\x32\x16.sysml.DocumentVerdictH\x00\x12\'\n\x06object\x18\n \x01(\x0b\x32\x15.sysml.DocumentObjectH\x00\x12%\n\x05state\x18\x0b \x01(\x0b\x32\x14.sysml.DocumentStateH\x00\x12%\n\x05\x65vent\x18\x0c \x01(\x0b\x32\x14.sysml.DocumentEventH\x00\x12\x14\n\x0c\x65lement_type\x18\x07 \x01(\tB\x06\n\x04kind\"Z\n\x0e\x44ocumentObject\x12\x13\n\x0binstance_id\x18\x01 \x01(\x03\x12\x0c\n\x04path\x18\x02 \x01(\t\x12%\n\x07\x65lement\x18\x03 \x01(\x0b\x32\x14.sysml.DocumentValue\"\xae\x01\n\x0f\x44ocumentVerdict\x12\'\n\tassertion\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0f\n\x07verdict\x18\x05 \x01(\t\x12\x11\n\tcondition\x18\x06 \x01(\t\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x14\n\x0cverification\x18\x08 \x03(\t\"\xb1\x01\n\rDocumentState\x12%\n\x06object\x18\x01 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x12\n\nstate_path\x18\x04 \x01(\t\x12#\n\x05state\x18\x05 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0e\n\x06region\x18\x06 \x01(\t\x12\x11\n\tenclosing\x18\x07 \x03(\t\"\x9c\x02\n\rDocumentEvent\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\"\n\x04time\x18\x02 \x01(\x0b\x32\x14.sysml.DocumentValue\x12%\n\x06object\x18\x03 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0c\n\x04\x66rom\x18\x06 \x01(\t\x12\n\n\x02to\x18\x07 \x01(\t\x12%\n\x06target\x18\x08 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\r\n\x05\x65vent\x18\t \x01(\t\x12\x0f\n\x07payload\x18\n \x03(\t\x12\x14\n\x0c\x61lternatives\x18\x0b \x03(\t\x12\r\n\x05taken\x18\x0c \x01(\t\x12\x0c\n\x04text\x18\r \x01(\t\"#\n\x13\x44ocumentQueryColumn\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x11\x44ocumentQueryCell\x12$\n\x06values\x18\x01 \x03(\x0b\x32\x14.sysml.DocumentValue\"b\n\x10\x44ocumentQueryRow\x12%\n\x07\x65lement\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\'\n\x05\x63\x65lls\x18\x02 \x03(\x0b\x32\x18.sysml.DocumentQueryCell\"n\n\x18RunDocumentQueryResponse\x12+\n\x07\x63olumns\x18\x01 \x03(\x0b\x32\x1a.sysml.DocumentQueryColumn\x12%\n\x04rows\x18\x02 \x03(\x0b\x32\x17.sysml.DocumentQueryRow\"N\n\x15RenderDocumentRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x13\n\x0b\x64ocument_id\x18\x02 \x01(\t\x12\x0c\n\x04\x66orm\x18\x03 \x01(\t\"8\n\x16RenderDocumentResponse\x12\x10\n\x08markdown\x18\x01 \x01(\t\x12\x0c\n\x04html\x18\x02 \x01(\t*\x93\x01\n\rFailureReason\x12\x1e\n\x1a\x46\x41ILURE_REASON_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x46\x41ILURE_REASON_EVALUATION\x10\x01\x12\x1d\n\x19\x46\x41ILURE_REASON_WRONG_KIND\x10\x02\x12$\n FAILURE_REASON_AMBIGUOUS_SUBJECT\x10\x03*\x8c\x05\n\x0b\x45\x64itFailure\x12\x1c\n\x18\x45\x44IT_FAILURE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x45\x44IT_FAILURE_NO_OPERATIONS\x10\x01\x12\x1f\n\x1b\x45\x44IT_FAILURE_UNKNOWN_TARGET\x10\x02\x12!\n\x1d\x45\x44IT_FAILURE_AMBIGUOUS_TARGET\x10\x03\x12\x1b\n\x17\x45\x44IT_FAILURE_NOT_VALUED\x10\x04\x12\x1e\n\x1a\x45\x44IT_FAILURE_INVALID_VALUE\x10\x05\x12\x1d\n\x19\x45\x44IT_FAILURE_INVALID_NAME\x10\x06\x12\x1a\n\x16\x45\x44IT_FAILURE_NOT_NAMED\x10\x07\x12\"\n\x1e\x45\x44IT_FAILURE_RENAME_REFERENCED\x10\x08\x12\"\n\x1e\x45\x44IT_FAILURE_OVERLAPPING_EDITS\x10\t\x12\x1f\n\x1b\x45\x44IT_FAILURE_RESULT_INVALID\x10\n\x12\x1e\n\x1a\x45\x44IT_FAILURE_OWNER_UNKNOWN\x10\x0b\x12$\n EDIT_FAILURE_OWNER_NOT_NAMESPACE\x10\x0c\x12\x1d\n\x19\x45\x44IT_FAILURE_ILLEGAL_KIND\x10\r\x12\"\n\x1e\x45\x44IT_FAILURE_MEMBER_NAME_TAKEN\x10\x0e\x12\"\n\x1e\x45\x44IT_FAILURE_DELETE_REFERENCED\x10\x0f\x12$\n EDIT_FAILURE_OWNER_INSIDE_TARGET\x10\x10\x12 \n\x1c\x45\x44IT_FAILURE_MOVE_REFERENCED\x10\x11\x12%\n!EDIT_FAILURE_REFERENCED_ELSEWHERE\x10\x12*\x92\x01\n\x11PrimitiveOperator\x12\"\n\x1ePRIMITIVE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1c\n\x18PRIMITIVE_OPERATOR_EQUAL\x10\x01\x12\x1e\n\x1aPRIMITIVE_OPERATOR_GREATER\x10\x02\x12\x1b\n\x17PRIMITIVE_OPERATOR_LESS\x10\x03*n\n\x11\x43ompositeOperator\x12\"\n\x1e\x43OMPOSITE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43OMPOSITE_OPERATOR_AND\x10\x01\x12\x19\n\x15\x43OMPOSITE_OPERATOR_OR\x10\x02\x32\xbf\x0c\n\x0cSysMLService\x12\x44\n\rGetServerInfo\x12\x18.sysml.ServerInfoRequest\x1a\x19.sysml.ServerInfoResponse\x12>\n\tParseFile\x12\x17.sysml.ParseFileRequest\x1a\x18.sysml.ParseFileResponse\x12G\n\x0cParseSources\x12\x1a.sysml.ParseSourcesRequest\x1a\x1b.sysml.ParseSourcesResponse\x12;\n\tGetSymbol\x12\x17.sysml.GetSymbolRequest\x1a\x15.sysml.SymbolResponse\x12G\n\x0eGetDiagnostics\x12\x19.sysml.DiagnosticsRequest\x1a\x1a.sysml.DiagnosticsResponse\x12;\n\x08\x45valuate\x12\x16.sysml.EvaluateRequest\x1a\x17.sysml.EvaluateResponse\x12\x44\n\x0bInstantiate\x12\x19.sysml.InstantiateRequest\x1a\x1a.sysml.InstantiateResponse\x12J\n\rExecuteAction\x12\x1b.sysml.ExecuteActionRequest\x1a\x1c.sysml.ExecuteActionResponse\x12G\n\x0c\x45xecuteState\x12\x1a.sysml.ExecuteStateRequest\x1a\x1b.sysml.ExecuteStateResponse\x12\x38\n\x07\x43onvert\x12\x15.sysml.ConvertRequest\x1a\x16.sysml.ConvertResponse\x12\x41\n\nApplyEdits\x12\x18.sysml.ApplyEditsRequest\x1a\x19.sysml.ApplyEditsResponse\x12S\n\x10VerifyConstraint\x12\x1e.sysml.VerifyConstraintRequest\x1a\x1f.sysml.VerifyConstraintResponse\x12V\n\x11VerifyRequirement\x12\x1f.sysml.VerifyRequirementRequest\x1a .sysml.VerifyRequirementResponse\x12Y\n\x12VerifySatisfaction\x12 .sysml.VerifySatisfactionRequest\x1a!.sysml.VerifySatisfactionResponse\x12S\n\x10ValidateInstance\x12\x1e.sysml.ValidateInstanceRequest\x1a\x1f.sysml.ValidateInstanceResponse\x12G\n\x0c\x45valuateCalc\x12\x1a.sysml.EvaluateCalcRequest\x1a\x1b.sysml.EvaluateCalcResponse\x12\x44\n\x0bRunAnalysis\x12\x19.sysml.RunAnalysisRequest\x1a\x1a.sysml.RunAnalysisResponse\x12;\n\x08RunSweep\x12\x16.sysml.RunSweepRequest\x1a\x17.sysml.RunSweepResponse\x12\x44\n\x0bListEngines\x12\x19.sysml.ListEnginesRequest\x1a\x1a.sysml.ListEnginesResponse\x12\x32\n\x05Query\x12\x13.sysml.QueryRequest\x1a\x14.sysml.QueryResponse\x12S\n\x10RunDocumentQuery\x12\x1e.sysml.RunDocumentQueryRequest\x1a\x1f.sysml.RunDocumentQueryResponse\x12M\n\x0eRenderDocument\x12\x1c.sysml.RenderDocumentRequest\x1a\x1d.sysml.RenderDocumentResponseB*Z(github.com/Open-MBEE/OpenSysML/api/protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -52,14 +52,14 @@ _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_options = b'8\001' _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._loaded_options = None _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_options = b'8\001' - _globals['_FAILUREREASON']._serialized_start=14913 - _globals['_FAILUREREASON']._serialized_end=15060 - _globals['_EDITFAILURE']._serialized_start=15063 - _globals['_EDITFAILURE']._serialized_end=15715 - _globals['_PRIMITIVEOPERATOR']._serialized_start=15718 - _globals['_PRIMITIVEOPERATOR']._serialized_end=15864 - _globals['_COMPOSITEOPERATOR']._serialized_start=15866 - _globals['_COMPOSITEOPERATOR']._serialized_end=15976 + _globals['_FAILUREREASON']._serialized_start=15113 + _globals['_FAILUREREASON']._serialized_end=15260 + _globals['_EDITFAILURE']._serialized_start=15263 + _globals['_EDITFAILURE']._serialized_end=15915 + _globals['_PRIMITIVEOPERATOR']._serialized_start=15918 + _globals['_PRIMITIVEOPERATOR']._serialized_end=16064 + _globals['_COMPOSITEOPERATOR']._serialized_start=16066 + _globals['_COMPOSITEOPERATOR']._serialized_end=16176 _globals['_VERDICT']._serialized_start=23 _globals['_VERDICT']._serialized_end=336 _globals['_BOUND']._serialized_start=338 @@ -161,135 +161,137 @@ _globals['_APPLYEDITSREQUEST']._serialized_start=6921 _globals['_APPLYEDITSREQUEST']._serialized_end=7046 _globals['_EDITOPERATION']._serialized_start=7049 - _globals['_EDITOPERATION']._serialized_end=7443 - _globals['_ADDMEMBEREDIT']._serialized_start=7446 - _globals['_ADDMEMBEREDIT']._serialized_end=7655 - _globals['_ADDSATISFYEDIT']._serialized_start=7657 - _globals['_ADDSATISFYEDIT']._serialized_end=7778 - _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_start=7780 - _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_end=7873 - _globals['_ADDCONNECTIONEDIT']._serialized_start=7875 - _globals['_ADDCONNECTIONEDIT']._serialized_end=7985 - _globals['_DELETEEDIT']._serialized_start=7987 - _globals['_DELETEEDIT']._serialized_end=8032 - _globals['_MOVEEDIT']._serialized_start=8034 - _globals['_MOVEEDIT']._serialized_end=8075 - _globals['_SETVALUEEDIT']._serialized_start=8077 - _globals['_SETVALUEEDIT']._serialized_end=8122 - _globals['_RENAMEEDIT']._serialized_start=8124 - _globals['_RENAMEEDIT']._serialized_end=8170 - _globals['_APPLYEDITSRESPONSE']._serialized_start=8173 - _globals['_APPLYEDITSRESPONSE']._serialized_end=8445 - _globals['_EDITEDDOCUMENT']._serialized_start=8447 - _globals['_EDITEDDOCUMENT']._serialized_end=8494 - _globals['_REFERRER']._serialized_start=8496 - _globals['_REFERRER']._serialized_end=8538 - _globals['_APPLIEDEDIT']._serialized_start=8541 - _globals['_APPLIEDEDIT']._serialized_end=8681 - _globals['_SYMBOLINFO']._serialized_start=8684 - _globals['_SYMBOLINFO']._serialized_end=9065 - _globals['_SYMBOLINFO_METADATAENTRY']._serialized_start=9018 - _globals['_SYMBOLINFO_METADATAENTRY']._serialized_end=9065 - _globals['_SPECIALIZATION']._serialized_start=9067 - _globals['_SPECIALIZATION']._serialized_end=9155 - _globals['_TYPEINFO']._serialized_start=9158 - _globals['_TYPEINFO']._serialized_end=9307 - _globals['_MULTIPLICITYINFO']._serialized_start=9309 - _globals['_MULTIPLICITYINFO']._serialized_end=9357 - _globals['_ATTRIBUTEINFO']._serialized_start=9359 - _globals['_ATTRIBUTEINFO']._serialized_end=9445 - _globals['_VALUE']._serialized_start=9448 - _globals['_VALUE']._serialized_end=10155 - _globals['_METAOBJECT']._serialized_start=10157 - _globals['_METAOBJECT']._serialized_end=10211 - _globals['_UNDETERMINED']._serialized_start=10213 - _globals['_UNDETERMINED']._serialized_end=10283 - _globals['_FUNCTION']._serialized_start=10285 - _globals['_FUNCTION']._serialized_end=10329 - _globals['_VALUESET']._serialized_start=10331 - _globals['_VALUESET']._serialized_end=10373 - _globals['_TENSORQUANTITY']._serialized_start=10375 - _globals['_TENSORQUANTITY']._serialized_end=10448 - _globals['_ARRAY']._serialized_start=10450 - _globals['_ARRAY']._serialized_end=10509 - _globals['_VECTOR']._serialized_start=10511 - _globals['_VECTOR']._serialized_end=10553 - _globals['_VECTORQUANTITY']._serialized_start=10555 - _globals['_VECTORQUANTITY']._serialized_end=10608 - _globals['_COMPLEX']._serialized_start=10610 - _globals['_COMPLEX']._serialized_end=10652 - _globals['_ENUMLITERAL']._serialized_start=10654 - _globals['_ENUMLITERAL']._serialized_end=10754 - _globals['_VALUESEQUENCE']._serialized_start=10756 - _globals['_VALUESEQUENCE']._serialized_end=10803 - _globals['_QUANTITY']._serialized_start=10805 - _globals['_QUANTITY']._serialized_end=10929 - _globals['_MEASUREMENTREF']._serialized_start=10931 - _globals['_MEASUREMENTREF']._serialized_end=11014 - _globals['_UNITTERM']._serialized_start=11016 - _globals['_UNITTERM']._serialized_end=11100 - _globals['_UNITFACTOR']._serialized_start=11102 - _globals['_UNITFACTOR']._serialized_end=11149 - _globals['_DIAGNOSTIC']._serialized_start=11151 - _globals['_DIAGNOSTIC']._serialized_end=11239 - _globals['_SPAN']._serialized_start=11241 - _globals['_SPAN']._serialized_end=11335 - _globals['_SERVERINFOREQUEST']._serialized_start=11337 - _globals['_SERVERINFOREQUEST']._serialized_end=11356 - _globals['_SERVERINFORESPONSE']._serialized_start=11358 - _globals['_SERVERINFORESPONSE']._serialized_end=11417 - _globals['_QUERYREQUEST']._serialized_start=11419 - _globals['_QUERYREQUEST']._serialized_end=11502 - _globals['_QUERYRESPONSE']._serialized_start=11504 - _globals['_QUERYRESPONSE']._serialized_end=11564 - _globals['_QUERY']._serialized_start=11566 - _globals['_QUERY']._serialized_end=11638 - _globals['_CONSTRAINT']._serialized_start=11640 - _globals['_CONSTRAINT']._serialized_end=11764 - _globals['_PRIMITIVECONSTRAINT']._serialized_start=11766 - _globals['_PRIMITIVECONSTRAINT']._serialized_end=11881 - _globals['_COMPOSITECONSTRAINT']._serialized_start=11883 - _globals['_COMPOSITECONSTRAINT']._serialized_end=11987 - _globals['_QUERYRESULTELEMENT']._serialized_start=11990 - _globals['_QUERYRESULTELEMENT']._serialized_end=12150 - _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_start=12101 - _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_end=12150 - _globals['_SWEEPRANGE']._serialized_start=12152 - _globals['_SWEEPRANGE']._serialized_end=12267 - _globals['_RUNSWEEPREQUEST']._serialized_start=12270 - _globals['_RUNSWEEPREQUEST']._serialized_end=12606 + _globals['_EDITOPERATION']._serialized_end=7495 + _globals['_ADDMEMBEREDIT']._serialized_start=7498 + _globals['_ADDMEMBEREDIT']._serialized_end=7707 + _globals['_ADDSATISFYEDIT']._serialized_start=7709 + _globals['_ADDSATISFYEDIT']._serialized_end=7830 + _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_start=7832 + _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_end=7925 + _globals['_ADDTRANSITIONEDIT']._serialized_start=7928 + _globals['_ADDTRANSITIONEDIT']._serialized_end=8073 + _globals['_ADDCONNECTIONEDIT']._serialized_start=8075 + _globals['_ADDCONNECTIONEDIT']._serialized_end=8185 + _globals['_DELETEEDIT']._serialized_start=8187 + _globals['_DELETEEDIT']._serialized_end=8232 + _globals['_MOVEEDIT']._serialized_start=8234 + _globals['_MOVEEDIT']._serialized_end=8275 + _globals['_SETVALUEEDIT']._serialized_start=8277 + _globals['_SETVALUEEDIT']._serialized_end=8322 + _globals['_RENAMEEDIT']._serialized_start=8324 + _globals['_RENAMEEDIT']._serialized_end=8370 + _globals['_APPLYEDITSRESPONSE']._serialized_start=8373 + _globals['_APPLYEDITSRESPONSE']._serialized_end=8645 + _globals['_EDITEDDOCUMENT']._serialized_start=8647 + _globals['_EDITEDDOCUMENT']._serialized_end=8694 + _globals['_REFERRER']._serialized_start=8696 + _globals['_REFERRER']._serialized_end=8738 + _globals['_APPLIEDEDIT']._serialized_start=8741 + _globals['_APPLIEDEDIT']._serialized_end=8881 + _globals['_SYMBOLINFO']._serialized_start=8884 + _globals['_SYMBOLINFO']._serialized_end=9265 + _globals['_SYMBOLINFO_METADATAENTRY']._serialized_start=9218 + _globals['_SYMBOLINFO_METADATAENTRY']._serialized_end=9265 + _globals['_SPECIALIZATION']._serialized_start=9267 + _globals['_SPECIALIZATION']._serialized_end=9355 + _globals['_TYPEINFO']._serialized_start=9358 + _globals['_TYPEINFO']._serialized_end=9507 + _globals['_MULTIPLICITYINFO']._serialized_start=9509 + _globals['_MULTIPLICITYINFO']._serialized_end=9557 + _globals['_ATTRIBUTEINFO']._serialized_start=9559 + _globals['_ATTRIBUTEINFO']._serialized_end=9645 + _globals['_VALUE']._serialized_start=9648 + _globals['_VALUE']._serialized_end=10355 + _globals['_METAOBJECT']._serialized_start=10357 + _globals['_METAOBJECT']._serialized_end=10411 + _globals['_UNDETERMINED']._serialized_start=10413 + _globals['_UNDETERMINED']._serialized_end=10483 + _globals['_FUNCTION']._serialized_start=10485 + _globals['_FUNCTION']._serialized_end=10529 + _globals['_VALUESET']._serialized_start=10531 + _globals['_VALUESET']._serialized_end=10573 + _globals['_TENSORQUANTITY']._serialized_start=10575 + _globals['_TENSORQUANTITY']._serialized_end=10648 + _globals['_ARRAY']._serialized_start=10650 + _globals['_ARRAY']._serialized_end=10709 + _globals['_VECTOR']._serialized_start=10711 + _globals['_VECTOR']._serialized_end=10753 + _globals['_VECTORQUANTITY']._serialized_start=10755 + _globals['_VECTORQUANTITY']._serialized_end=10808 + _globals['_COMPLEX']._serialized_start=10810 + _globals['_COMPLEX']._serialized_end=10852 + _globals['_ENUMLITERAL']._serialized_start=10854 + _globals['_ENUMLITERAL']._serialized_end=10954 + _globals['_VALUESEQUENCE']._serialized_start=10956 + _globals['_VALUESEQUENCE']._serialized_end=11003 + _globals['_QUANTITY']._serialized_start=11005 + _globals['_QUANTITY']._serialized_end=11129 + _globals['_MEASUREMENTREF']._serialized_start=11131 + _globals['_MEASUREMENTREF']._serialized_end=11214 + _globals['_UNITTERM']._serialized_start=11216 + _globals['_UNITTERM']._serialized_end=11300 + _globals['_UNITFACTOR']._serialized_start=11302 + _globals['_UNITFACTOR']._serialized_end=11349 + _globals['_DIAGNOSTIC']._serialized_start=11351 + _globals['_DIAGNOSTIC']._serialized_end=11439 + _globals['_SPAN']._serialized_start=11441 + _globals['_SPAN']._serialized_end=11535 + _globals['_SERVERINFOREQUEST']._serialized_start=11537 + _globals['_SERVERINFOREQUEST']._serialized_end=11556 + _globals['_SERVERINFORESPONSE']._serialized_start=11558 + _globals['_SERVERINFORESPONSE']._serialized_end=11617 + _globals['_QUERYREQUEST']._serialized_start=11619 + _globals['_QUERYREQUEST']._serialized_end=11702 + _globals['_QUERYRESPONSE']._serialized_start=11704 + _globals['_QUERYRESPONSE']._serialized_end=11764 + _globals['_QUERY']._serialized_start=11766 + _globals['_QUERY']._serialized_end=11838 + _globals['_CONSTRAINT']._serialized_start=11840 + _globals['_CONSTRAINT']._serialized_end=11964 + _globals['_PRIMITIVECONSTRAINT']._serialized_start=11966 + _globals['_PRIMITIVECONSTRAINT']._serialized_end=12081 + _globals['_COMPOSITECONSTRAINT']._serialized_start=12083 + _globals['_COMPOSITECONSTRAINT']._serialized_end=12187 + _globals['_QUERYRESULTELEMENT']._serialized_start=12190 + _globals['_QUERYRESULTELEMENT']._serialized_end=12350 + _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_start=12301 + _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_end=12350 + _globals['_SWEEPRANGE']._serialized_start=12352 + _globals['_SWEEPRANGE']._serialized_end=12467 + _globals['_RUNSWEEPREQUEST']._serialized_start=12470 + _globals['_RUNSWEEPREQUEST']._serialized_end=12806 _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=2627 _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=2694 - _globals['_SWEEPROW']._serialized_start=12609 - _globals['_SWEEPROW']._serialized_end=12853 - _globals['_RUNSWEEPRESPONSE']._serialized_start=12856 - _globals['_RUNSWEEPRESPONSE']._serialized_end=13157 - _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_start=13159 - _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_end=13269 - _globals['_DOCUMENTQUERYBINDING']._serialized_start=13271 - _globals['_DOCUMENTQUERYBINDING']._serialized_end=13350 - _globals['_DOCUMENTVALUE']._serialized_start=13353 - _globals['_DOCUMENTVALUE']._serialized_end=13728 - _globals['_DOCUMENTOBJECT']._serialized_start=13730 - _globals['_DOCUMENTOBJECT']._serialized_end=13820 - _globals['_DOCUMENTVERDICT']._serialized_start=13823 - _globals['_DOCUMENTVERDICT']._serialized_end=13997 - _globals['_DOCUMENTSTATE']._serialized_start=14000 - _globals['_DOCUMENTSTATE']._serialized_end=14177 - _globals['_DOCUMENTEVENT']._serialized_start=14180 - _globals['_DOCUMENTEVENT']._serialized_end=14464 - _globals['_DOCUMENTQUERYCOLUMN']._serialized_start=14466 - _globals['_DOCUMENTQUERYCOLUMN']._serialized_end=14501 - _globals['_DOCUMENTQUERYCELL']._serialized_start=14503 - _globals['_DOCUMENTQUERYCELL']._serialized_end=14560 - _globals['_DOCUMENTQUERYROW']._serialized_start=14562 - _globals['_DOCUMENTQUERYROW']._serialized_end=14660 - _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_start=14662 - _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_end=14772 - _globals['_RENDERDOCUMENTREQUEST']._serialized_start=14774 - _globals['_RENDERDOCUMENTREQUEST']._serialized_end=14852 - _globals['_RENDERDOCUMENTRESPONSE']._serialized_start=14854 - _globals['_RENDERDOCUMENTRESPONSE']._serialized_end=14910 - _globals['_SYSMLSERVICE']._serialized_start=15979 - _globals['_SYSMLSERVICE']._serialized_end=17578 + _globals['_SWEEPROW']._serialized_start=12809 + _globals['_SWEEPROW']._serialized_end=13053 + _globals['_RUNSWEEPRESPONSE']._serialized_start=13056 + _globals['_RUNSWEEPRESPONSE']._serialized_end=13357 + _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_start=13359 + _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_end=13469 + _globals['_DOCUMENTQUERYBINDING']._serialized_start=13471 + _globals['_DOCUMENTQUERYBINDING']._serialized_end=13550 + _globals['_DOCUMENTVALUE']._serialized_start=13553 + _globals['_DOCUMENTVALUE']._serialized_end=13928 + _globals['_DOCUMENTOBJECT']._serialized_start=13930 + _globals['_DOCUMENTOBJECT']._serialized_end=14020 + _globals['_DOCUMENTVERDICT']._serialized_start=14023 + _globals['_DOCUMENTVERDICT']._serialized_end=14197 + _globals['_DOCUMENTSTATE']._serialized_start=14200 + _globals['_DOCUMENTSTATE']._serialized_end=14377 + _globals['_DOCUMENTEVENT']._serialized_start=14380 + _globals['_DOCUMENTEVENT']._serialized_end=14664 + _globals['_DOCUMENTQUERYCOLUMN']._serialized_start=14666 + _globals['_DOCUMENTQUERYCOLUMN']._serialized_end=14701 + _globals['_DOCUMENTQUERYCELL']._serialized_start=14703 + _globals['_DOCUMENTQUERYCELL']._serialized_end=14760 + _globals['_DOCUMENTQUERYROW']._serialized_start=14762 + _globals['_DOCUMENTQUERYROW']._serialized_end=14860 + _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_start=14862 + _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_end=14972 + _globals['_RENDERDOCUMENTREQUEST']._serialized_start=14974 + _globals['_RENDERDOCUMENTREQUEST']._serialized_end=15052 + _globals['_RENDERDOCUMENTRESPONSE']._serialized_start=15054 + _globals['_RENDERDOCUMENTRESPONSE']._serialized_end=15110 + _globals['_SYSMLSERVICE']._serialized_start=16179 + _globals['_SYSMLSERVICE']._serialized_end=17778 # @@protoc_insertion_point(module_scope) diff --git a/client/python/opensysml/proto/sysml_pb2.pyi b/client/python/opensysml/proto/sysml_pb2.pyi index 0e640cc774..6ad2c8432b 100644 --- a/client/python/opensysml/proto/sysml_pb2.pyi +++ b/client/python/opensysml/proto/sysml_pb2.pyi @@ -728,7 +728,7 @@ class ApplyEditsRequest(_message.Message): def __init__(self, model_hash: _Optional[str] = ..., operations: _Optional[_Iterable[_Union[EditOperation, _Mapping]]] = ..., document: _Optional[str] = ..., accept_documents: _Optional[bool] = ...) -> None: ... class EditOperation(_message.Message): - __slots__ = ("set_value", "rename", "add_member", "delete", "move", "add_connection", "add_satisfy", "add_requirement_constraint") + __slots__ = ("set_value", "rename", "add_member", "delete", "move", "add_connection", "add_satisfy", "add_requirement_constraint", "add_transition") SET_VALUE_FIELD_NUMBER: _ClassVar[int] RENAME_FIELD_NUMBER: _ClassVar[int] ADD_MEMBER_FIELD_NUMBER: _ClassVar[int] @@ -737,6 +737,7 @@ class EditOperation(_message.Message): ADD_CONNECTION_FIELD_NUMBER: _ClassVar[int] ADD_SATISFY_FIELD_NUMBER: _ClassVar[int] ADD_REQUIREMENT_CONSTRAINT_FIELD_NUMBER: _ClassVar[int] + ADD_TRANSITION_FIELD_NUMBER: _ClassVar[int] set_value: SetValueEdit rename: RenameEdit add_member: AddMemberEdit @@ -745,7 +746,8 @@ class EditOperation(_message.Message): add_connection: AddConnectionEdit add_satisfy: AddSatisfyEdit add_requirement_constraint: AddRequirementConstraintEdit - def __init__(self, set_value: _Optional[_Union[SetValueEdit, _Mapping]] = ..., rename: _Optional[_Union[RenameEdit, _Mapping]] = ..., add_member: _Optional[_Union[AddMemberEdit, _Mapping]] = ..., delete: _Optional[_Union[DeleteEdit, _Mapping]] = ..., move: _Optional[_Union[MoveEdit, _Mapping]] = ..., add_connection: _Optional[_Union[AddConnectionEdit, _Mapping]] = ..., add_satisfy: _Optional[_Union[AddSatisfyEdit, _Mapping]] = ..., add_requirement_constraint: _Optional[_Union[AddRequirementConstraintEdit, _Mapping]] = ...) -> None: ... + add_transition: AddTransitionEdit + def __init__(self, set_value: _Optional[_Union[SetValueEdit, _Mapping]] = ..., rename: _Optional[_Union[RenameEdit, _Mapping]] = ..., add_member: _Optional[_Union[AddMemberEdit, _Mapping]] = ..., delete: _Optional[_Union[DeleteEdit, _Mapping]] = ..., move: _Optional[_Union[MoveEdit, _Mapping]] = ..., add_connection: _Optional[_Union[AddConnectionEdit, _Mapping]] = ..., add_satisfy: _Optional[_Union[AddSatisfyEdit, _Mapping]] = ..., add_requirement_constraint: _Optional[_Union[AddRequirementConstraintEdit, _Mapping]] = ..., add_transition: _Optional[_Union[AddTransitionEdit, _Mapping]] = ...) -> None: ... class AddMemberEdit(_message.Message): __slots__ = ("owner", "kind", "name", "type", "multiplicity", "value", "specializes", "is_abstract", "redefines", "is_default", "direction") @@ -799,6 +801,26 @@ class AddRequirementConstraintEdit(_message.Message): name: str def __init__(self, owner: _Optional[str] = ..., kind: _Optional[str] = ..., expression: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ... +class AddTransitionEdit(_message.Message): + __slots__ = ("owner", "name", "source", "target", "trigger", "guard", "effect", "initial") + OWNER_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + TARGET_FIELD_NUMBER: _ClassVar[int] + TRIGGER_FIELD_NUMBER: _ClassVar[int] + GUARD_FIELD_NUMBER: _ClassVar[int] + EFFECT_FIELD_NUMBER: _ClassVar[int] + INITIAL_FIELD_NUMBER: _ClassVar[int] + owner: str + name: str + source: str + target: str + trigger: str + guard: str + effect: str + initial: bool + def __init__(self, owner: _Optional[str] = ..., name: _Optional[str] = ..., source: _Optional[str] = ..., target: _Optional[str] = ..., trigger: _Optional[str] = ..., guard: _Optional[str] = ..., effect: _Optional[str] = ..., initial: _Optional[bool] = ...) -> None: ... + class AddConnectionEdit(_message.Message): __slots__ = ("owner", "kind", "from_end", "to_end", "name", "type") OWNER_FIELD_NUMBER: _ClassVar[int] diff --git a/client/python/tests/test_edit.py b/client/python/tests/test_edit.py index 8a615b6db9..38f1b55114 100644 --- a/client/python/tests/test_edit.py +++ b/client/python/tests/test_edit.py @@ -22,6 +22,7 @@ CAPABILITY_MEMBER_MODIFIERS, CAPABILITY_REQUIREMENT_CONSTRAINT_AUTHORING, CAPABILITY_SATISFY_AUTHORING, + CAPABILITY_TRANSITION_AUTHORING, CAPABILITY_EDIT_DOCUMENTS, CAPABILITY_INLINE_LANGUAGE, MissingCapabilityError, @@ -244,6 +245,79 @@ def test_add_member_and_delete_requests_are_exact(fake_service): assert result is not None +def test_calc_and_action_helpers_expand_into_member_edits(fake_service): + port, service = fake_service( + capabilities=( + CAPABILITY_APPLY_EDITS, + CAPABILITY_AUTHORING, + CAPABILITY_MEMBER_MODIFIERS, + ) + ) + with Connection(port=port, auto_start=False) as conn: + ( + conn.load_from_content(MODEL) + .edit() + .add_calc_def( + "Demo", "C", inputs=[("x", "ScalarValues::Real")], + return_type="ScalarValues::Real", return_expression="x * 2", + abstract=True, + ) + .add_action( + "Demo::C", "run", inputs=[("request", "Input")], + outputs=[("response", "Output")], + ) + .add_calc("", "BareCalc", inputs=[("value", "Real")]) + .apply() + ) + calc, parameter, result, action, action_input, action_output, bare_calc, bare_input = ( + operation.add_member for operation in service.requests[0].operations + ) + assert (calc.kind, calc.name, calc.is_abstract) == ("calc def", "C", True) + assert ( + parameter.owner, + parameter.kind, + parameter.name, + parameter.type, + parameter.direction, + ) == ("Demo::C", "ref", "x", "ScalarValues::Real", "in") + assert ( + result.owner, + result.kind, + result.type, + result.value, + ) == ("Demo::C", "return", "ScalarValues::Real", "x * 2") + assert (action.owner, action.kind, action.name) == ( + "Demo::C", "action", "run" + ) + assert (action_input.owner, action_input.direction, action_input.name) == ( + "Demo::C::run", "in", "request" + ) + assert (action_output.owner, action_output.direction, action_output.name) == ( + "Demo::C::run", "out", "response" + ) + assert (bare_calc.owner, bare_calc.name) == ("", "BareCalc") + assert (bare_input.owner, bare_input.name) == ("BareCalc", "value") + + +@pytest.mark.parametrize( + "method,argument,value", + [ + ("add_calc", "inputs", (("x", "Real"),)), + ("add_calc", "inputs", [("x",)]), + ("add_calc_def", "inputs", [("x", 1)]), + ("add_action", "outputs", (("result", "Real"),)), + ("add_action", "outputs", [("result", 1)]), + ], +) +def test_calc_and_action_helpers_reject_invalid_parameter_shapes( + method, argument, value +): + editor = Editor("hash", None) + with pytest.raises(TypeError, match=argument): + getattr(editor, method)("Demo", "Declaration", **{argument: value}) + assert len(editor) == 0 + + def test_new_authoring_operations_and_member_modifiers_are_exact(fake_service): port, service = fake_service( capabilities=( @@ -252,6 +326,7 @@ def test_new_authoring_operations_and_member_modifiers_are_exact(fake_service): CAPABILITY_MEMBER_MODIFIERS, CAPABILITY_SATISFY_AUTHORING, CAPABILITY_REQUIREMENT_CONSTRAINT_AUTHORING, + CAPABILITY_TRANSITION_AUTHORING, ) ) with Connection(port=port, auto_start=False) as conn: @@ -265,9 +340,14 @@ def test_new_authoring_operations_and_member_modifiers_are_exact(fake_service): .add_satisfy("Demo::SC", "Demo::SC::r", by="Demo::SC::t", asserted=True) .add_require_constraint("Demo::SC", "true", name="valid") .add_assume_constraint("Demo::SC", "true") + .add_transition( + "Demo::SC", "a", "b", name="go", trigger="CycleStart", + guard="ready", effect="action cool", + ) + .add_entry_transition("Demo::SC", "a") .apply() ) - member, satisfy, require, assume = service.requests[0].operations + member, satisfy, require, assume, transition, entry = service.requests[0].operations assert member.WhichOneof("operation") == "add_member" assert ( member.add_member.is_abstract, @@ -290,6 +370,20 @@ def test_new_authoring_operations_and_member_modifiers_are_exact(fake_service): ) == ("Demo::SC", "require", "true", "valid") assert assume.add_requirement_constraint.kind == "assume" assert assume.add_requirement_constraint.name == "" + assert transition.WhichOneof("operation") == "add_transition" + assert ( + transition.add_transition.owner, + transition.add_transition.name, + transition.add_transition.source, + transition.add_transition.target, + transition.add_transition.trigger, + transition.add_transition.guard, + transition.add_transition.effect, + transition.add_transition.initial, + ) == ("Demo::SC", "go", "a", "b", "CycleStart", "ready", "action cool", False) + assert entry.add_transition.owner == "Demo::SC" + assert entry.add_transition.target == "a" + assert entry.add_transition.initial def test_member_modifier_capability_accumulates_across_operations(fake_service): @@ -305,6 +399,18 @@ def test_member_modifier_capability_accumulates_across_operations(fake_service): assert error.value.capability == CAPABILITY_MEMBER_MODIFIERS assert service.requests == [] +def test_transition_requires_authoring_alongside_transition_capability(fake_service): + port, service = fake_service( + capabilities=(CAPABILITY_APPLY_EDITS, CAPABILITY_TRANSITION_AUTHORING) + ) + with Connection(port=port, auto_start=False) as conn: + edit = conn.load_from_content(MODEL).edit() + edit.add_transition("Demo::S", "idle", "toasting") + with pytest.raises(MissingCapabilityError) as error: + edit.apply() + assert error.value.capability == CAPABILITY_AUTHORING + assert service.requests == [] + @pytest.mark.parametrize( "name,expected", @@ -350,6 +456,8 @@ def test_add_member_rejects_invalid_direction_with_type_message(fake_service): (lambda editor: editor.add_satisfy("Demo::SC", "Demo::SC::r"), CAPABILITY_SATISFY_AUTHORING), (lambda editor: editor.add_require_constraint("Demo::SC", "true"), CAPABILITY_REQUIREMENT_CONSTRAINT_AUTHORING), + (lambda editor: editor.add_transition("Demo::SC", "a", "b"), + CAPABILITY_TRANSITION_AUTHORING), ], ) def test_new_authoring_capabilities_are_preflighted(fake_service, operation, missing): @@ -917,6 +1025,112 @@ def test_add_parameter_to_action_definition(self, real_service): again = conn.load_from_content(edited) assert again.ok, [str(d) for d in again.errors] + def test_state_transitions_round_trip(self, real_service): + source = ( + "package P {\n" + " attribute def CycleStart;\n" + " attribute def CycleEnd;\n" + " state def ToastingCycle;\n" + "}\n" + ) + with Connection(port=real_service, auto_start=False) as conn: + model = conn.load_from_content(source) + result = ( + model.edit() + .add_state("P::ToastingCycle", "idle") + .add_state("P::ToastingCycle", "toasting") + .add_state("P::ToastingCycle::toasting", "heating") + .add_entry_transition("P::ToastingCycle", "idle") + .add_transition( + "P::ToastingCycle", "idle", "toasting", + name="idle_to_toasting", trigger="CycleStart", + ) + .add_transition( + "P::ToastingCycle", "toasting", "idle", + name="toasting_to_idle", trigger="CycleEnd", + ) + .apply() + ) + edited = str(result) + assert "entry; then idle;" in edited + assert ( + "transition idle_to_toasting first idle accept CycleStart then toasting;" + in edited + ) + assert ( + "transition toasting_to_idle first toasting accept CycleEnd then idle;" + in edited + ) + again = conn.load_from_content(edited) + assert again.ok, [str(d) for d in again.errors] + + def test_calc_helper_adds_inputs_and_bound_result(self, real_service): + source = "package P {\n private import ScalarValues::*;\n}\n" + with Connection(port=real_service, auto_start=False) as conn: + model = conn.load_from_content(source) + result = model.edit().add_calc_def( + "P", + "DeliveredEnergy", + inputs=[ + ("power", "ISQ::PowerValue"), + ("duration", "ISQ::TimeValue"), + ("efficiency", "ScalarValues::Real"), + ], + return_type="ISQ::EnergyValue", + return_expression="power * duration * efficiency", + ).apply() + edited = str(result) + assert "in ref power : ISQ::PowerValue;" in edited + assert "in ref duration : ISQ::TimeValue;" in edited + assert "in ref efficiency : ScalarValues::Real;" in edited + assert ( + "return : ISQ::EnergyValue = power * duration * efficiency;" + in edited + ) + again = conn.load_from_content(edited) + assert again.ok, [str(d) for d in again.errors] + + def test_action_helpers_add_nested_parameters_and_succession(self, real_service): + source = ( + "package BreadHandling {\n" + " item def Bread;\n" + " item def Toast;\n" + "}\n" + ) + with Connection(port=real_service, auto_start=False) as conn: + model = conn.load_from_content(source) + result = ( + model.edit() + .add_action_def( + "BreadHandling", + "BreadHandling", + inputs=[("bread", "Bread")], + outputs=[("toast", "Toast")], + ) + .add_action( + "BreadHandling::BreadHandling", + "load_bread", + inputs=[("bread", "Bread")], + outputs=[("loaded", "Bread")], + ) + .add_action( + "BreadHandling::BreadHandling", + "eject_toast", + inputs=[("loaded", "Bread")], + outputs=[("toast", "Toast")], + ) + .add_succession( + "BreadHandling::BreadHandling", "load_bread", "eject_toast" + ) + .apply() + ) + edited = str(result) + assert "action load_bread" in edited + assert "action eject_toast" in edited + assert "succession first load_bread then eject_toast;" in edited + again = conn.load_from_content(edited) + assert again.ok, [str(d) for d in again.errors] + def test_authoring_adds_an_allocation(self, real_service): source = "package Demo { part def System { part a; part b; } }" with Connection(port=real_service, auto_start=False) as conn: diff --git a/client/python/tests/test_wire_compat.py b/client/python/tests/test_wire_compat.py index 99163915c3..bbe559ae09 100644 --- a/client/python/tests/test_wire_compat.py +++ b/client/python/tests/test_wire_compat.py @@ -351,6 +351,7 @@ def test_edit_messages_pin_their_field_numbers(): "EditOperation": { "set_value": 1, "rename": 2, "add_member": 3, "delete": 4, "move": 5, "add_connection": 6, "add_satisfy": 7, "add_requirement_constraint": 8, + "add_transition": 9, }, "AddMemberEdit": { "owner": 1, "kind": 2, "name": 3, "type": 4, @@ -367,6 +368,10 @@ def test_edit_messages_pin_their_field_numbers(): "AddRequirementConstraintEdit": { "owner": 1, "kind": 2, "expression": 3, "name": 4, }, + "AddTransitionEdit": { + "owner": 1, "name": 2, "source": 3, "target": 4, "trigger": 5, + "guard": 6, "effect": 7, "initial": 8, + }, "DeleteEdit": {"target": 1, "cascade": 2}, "MoveEdit": {"target": 1, "owner": 2}, "SetValueEdit": {"target": 1, "value": 2}, diff --git a/client/rust/conformance/sysml.descriptor.binpb b/client/rust/conformance/sysml.descriptor.binpb index cdbc5bb2af2979ae769cb57f9d198a9b1b436283..9e5d198e4c1a35e0b5f828d478aae64699bae13f 100644 GIT binary patch delta 19550 zcmZvkd%R86`v2EhmbvDfYt4nZH*H(C)$XK}``%l*C6{!OONee_W0Q{Pu$}6A`nHMW zxaHdDh+I>WzNe_ILZZt-x`>M0LKh01I8F!Y_kQN3dH(qQ<266)c|Om0#xtHV#xus8 z+lAf9Gl!E^?4J+6QYCd+d{ts~^~?6Dj&6H9Q#yEX|MF3#BSsG^A2xDCo|RQsq?+e7 z9{up>`-eAfKX`EO-(}Yi9#(#1tfvDb`f>H~`j5q(kCk2Hciq{KG$^bXQF?z_UL0dq z&xAa?wQOVb$T6b^mE~3OehrZPUS2wCXjyq)!vEbzZl0YiA2n>~(6Ui^RXsrn-CVos z&@rW>2Im>x?>-PaWkZIP4Jyw|^7Exu&j5;{VI$~V>F_)giP`!FmAeuZAPMj?buZX86K<|LM5=)A3|6~ z;N@4?ciQnpBiH!Eh<&GDbJQKxJ~7Oi_U#yK6py)y9lCBt-Pve|5jQ<1KVoQyVP!&y zp&dpI*S^uCAl#{!Wz@}$c19E>zZ#YkP!yD%M)ex@A3RFjO?gVqw4G)(s&R_8Zwt>|)PC(oG!HU23QnjSd=dBhX1gIcOx^5JEX<)U0K<@+ge^ zA^ma<)uzp%s8N$f4@HfdSU6<3bpi_}77iH&^@4a>ZsLfp?-I`=QKJ@=BStcG+k$e$ z$gLIh)OHi!>StWlvH7=AaBL{w8dm714dq*-=0)~!lB}_795Z77GF1LOx_XXk?2LFg z`#|ZSKb8(H%Z?nSugy^nYacVrT6P0E)mU=xM);QOLrd^wqiQnnpiG z6v@J$49kyNsIv-IaJmqW zmfinA`NP?fBZfbm9rFK=!0)ccaTR-^tK!V$q*X2Gh$Q#qq?;r2F9%nFQ>F1b+1}pH zr+eh8+InSe)u5r|a??1uJUtn&nP2a}`cn2#dA4*&dD*D!fYL#O${r{mpwHG;^=_yh zG$I*2J(-j1C1O)?XoiHmL1bd!$dSX#WE>xQU{u-Y(Znb;IBduO{b0VTSK)6xurW46 zg4@*dhqZT>I9wPR^Y_|p`G2`Jc;tZJ10oAElrSI$0htvA#K8P42}n23JPY$2@%6fj zY~NAC$fN;YssRwt`<&(|u1K1$-2s!$CG;z`QAb@{#4{#Wh9-e%t_(W? z#NeOLu%22{!ZXZG5mUU`6ncXc<|grGmISB7HMS&UA6B-^Do5p%pt?nd zstra<#GS4Bj!V=vMLc74YiJaR=GM?1AV#-}J3bNNHvKNdk`m9GZ4ptt*%oFvQi$6m z!@rlQnk1@uG}{dNPDSK0Ye^_42-cRWMj z&srd~-AT(|LV+}}Tb9si5~vmusJ;5O%hX>x@XWl}n+yt1AWP!jWU7|8_yR>Wc~L%Ng>sR*kKay)7ko}M-k6>urKmJ+SnHc94W+o67Vq|5p+;5t*`!s>s4s+U^4Dk z`ap;WlNrCh28wEu`uZK;b-X>IZ@gTs@7N-q5D>YZz|fIoDrCx}K9a0;N#MFn>LbZN zTxP!-_gui;qm?&ap&BbJRmIZL$db(RqsgH9MvA4QN!LFI0kL#6$vJ4NZ;574R=&|d zbrwqomQF^N3=t+%wF4()yEvK5zchqcI+?70x&6N1IrfWFy2Dj!6NZu)Iu#j8V(3&d z<=0I}F?1@K>mLY!7&?{YK+uZ>y4p4Vos3=3H#Ah;a<4}5-$_d34bsHbl0fJ5iiYaV zBA)5yxp2sUsGbWKGaxq4$zpbwM@0CmeyWk`TXMCR&c8-PNs?c~Y(on1SIM?MICG6_ zj5A|Tn7XjB>QVC=G{>1NJX6G*Ys8xgrhcNanph0Loe5@;!$5Q=m_fw{#OeeSce;B_ zgcD8OzKOcI(Z2vV36O{UjOnO-ejV~QDjT5oKkrslRpbBbx^*mq#G zrMNTA)B~Eb_5g5ani)@eV+BNYnrU7XLX1u`^Xqt3NlVH0>8Ad^scH^W)}HC1J3vnu z6iq;w(@mC%N4++gLo-d?t(kflrc9!lQJZ3RrfK^7J5rc4O(u~XKUxZ!W$JUyR5O^e z70!y7GK*$KOqoTqA||Odn|?M|%_>@Yd*STJTbVYq!{8x>Ia`94_1dJBIcB_8p__g1 z-qP~ygQcUh4^r8bmyPg?+m_xAiHg4x0WmixGADCqj+lF15&-k0wbr>sYAJn?+Db=M znJhY@N^PZu`WIWQ8uQKAYW+iz`k$NTn^mjZ`F5hJk`Y{B#_JWPvm-`khm;N*PU-7; zCNk_H%$E@qNaPoobql0;1tNS_zg(=YDtOk6UmWNtbe=WqWu@Fl2eeTCyI8d-SZKz* zxhFr$uO@S^#M8mcMY>Cgy1HNyjs$k9ptHyBCxy{JSrEm&;Ey|qDpL}#&i zab3Hur$a23=o2NXUBQybpQ`9A5q~(vLm_xeb(a>ZO~Fz#?wvU0M|75&oH#kS0a;U) z>E~LgmIceqcwXQS=ZVBJv(CkV&)fz)r_Z;*=jY6LHqbHAdCt7_4}s5|_m}Hiug2%) zk&cDVa?xq;wZ#GddA;yz)v@6DC_Xki&zspoyNRchauY8+b&YCP@IutB6e=&6^)9g+ zdMasZCEfiR)wp1V87~anNu#sEyzKJ8WyejtsGqq8mtTy!?x6FcS&$8y%1D*d?t4q-}wIyw>iu|dL&MNW8?|Kb4 z@v{E9rRrGkWi#$=ml&^s&dcT{m)akY?O@kUysA64Qd{c1YR0`yKz>B&RkQvTj8{C- z$~9g$V;|_NTC3(ct;osOO)8OVm@BO$w=4AntyQt!e4Wbclaj#5&tzPsnW<*Wjb1Cs z3ApFE)PHPmmniLGTVY0O(-G_SAb?Vk4o-z4hm=i!WKMZpMh{+Gb4Z5`?%t!jnb*jrX zJVX2_B1#s16fW#YA$}wayBtefOBQ}&#xLSnx~L=fT~D@G%`qYQ$j|<^0>s28W^ii= z#Kb2iS7uVHv=+33g*CscuG>i!h>5ED;tr}w2_ozu3++gH?l6N3KBOL#A)PO!LL1lk z!i;^d$97OUrwy84Na-RcxHb}(-TKOooZxuI=I+oY5Y63T_kh^kE!~sTWE*k(EB#DI zbu&bX%U2Om;__AK3{r?+Nq+V8h{R=|&g-PQ6}Rz=?T9Ew_nDSov?GPM&#awqKPG9> zM&Lm`uakNdru6?{#Pq7|Fpfw?RpR)h&mszi@Q*c%$GzL?~s5HzmalC@~w?bzwh+y&gxctm3rX2s70B6 z--Y>x6ykT1Z;vokZC&F>Gj>wv-Jl+HrkUrxENCl3b=-{S6xPZXHZ5$JEo{a= zhsG|K%fG@a3;k6BEgD13PYfV7j+?=y9FWG2O953EFWXAIPl(BCzBSBvCVgAQ$T5aO zXiNt7L}W|`_JkPggy+|~#?NN#-@3z%s$IpkDE@5nGDViPYsK?Z;VJ^cD9|?wME6t} z4j@KPNjQ8e!qX8|`~ikk@#l0z6@N|(wZi9;Y5$72G9*C14!+i#dH*s^|F{N(`>&{3 z(3yxT$p#FYm1H{;H7m(>MyRa_Lp#?vYsO=L)8lSZB^B+^JS&Z4h(kLw<{IbB_|sMu zZ-ECRK4+R~udnSSOy|vnzrKTL6lnRnUYO3CwtsL!N~7mZE}W&S?PMT-H4|P*CV-W)aMeW3sJMOKmq-}w)4Vt!3^%Xflx0*&4PY26JC``vl1qt zpFKcziQtrf)Btw=DwwYc?R%ah4l~LZ;<7i|Uw)6&J~Y$E-wdVK#ez>8L+)S1T9Cy1a|3U5pUJ zNJIZ+o<3%!{0WW}OOIJh@Rpt>w#o69ey58n#(mi*$6JYX5O3Kh$6HS5zU-6ZBlp=R zCs+ypJm1cHR|yPTk)3gZRXq%;?2HpE3S|~@@t>XX3H;BWrn2p`e=Z$9rfhhbF26-h z!hP8(5r!itJLMBrF!PaO=?SYwj$Py#qQsqK>84#(W0*GXPqGqzB?g2!$x4T*CaT6MjImM!$^#`2V zd8(z~>ZTf$w2Nn8PK}rum{TKW2If>@dRH{Dt}ZIvTA;aA!optp;_56&%fx zLY*P*${VA0aSH93mbQAR7BH*R=*%cLs>7Tam)oKT;m-pwzcxMJ5;60>454x78P3; zjCK%rHtTwKsT+!U#+}WfJ3uryTfucH5TlzdF0lR~;prgmY^j`gm+GWS08qDB!FC7~ zp=J6r7YKEW^kiECe>%FxPAm3#WllfUIo`h`syoFW**-doKf5gds3?eK9q6y2KzhB) zO8H3vgu2VB;inUjR(4qwTN`8$I=RMPD|V=IZGY8L)$WAqUW@wOdqdMnnmJ&_v-#6? zlR>JRzP(g+?!d1!$IpIqKst3GYz~Nx16B?H9X62W4p#e3CGv^V5#cWiD&G5 z9odn=`q~O^DUph*mFpk=fY|xk;_$ajs_W}r<6A5CqkeFpT9|u1n%`P%_|HfNTrXZ9 z)mIKux&zO&aWrfLh_6ROUx6@>hQ0!6<7nvX_2TOfy2@bHt0T|Y`603+zWxx|5nq1@ zLyR(ZevlB4!PU;L@sq`s{NDzv2XZ^3_>;w@++uOHv$%Rn*DX^EI`K>sr@|(HG;u0y z0toX|=qivVPKm3FBpf%m#xGXvyuMJTp2@iZ&0k~?AEAjGq=|F-r6KB}>v^V$b72!e znm89m90>7T7;zv?oRf%q=b0N_W2_w;Z|h-0)l(HWqB_X27|y??*EhMwBs(_C z)>H0P|IED!-AOjrv2qf;NnDz2>lwq;EyV!LP7ciiQJriDD;f~9lWkVCTRbMhskW|u zACvti&!MRiQyiLVTfVzUVNSKFuG)J{in{4|bDwHca+7z=njSHwqtnAEAcZ+yqTtQ6 zn*`3Z_4)hM(-i>5Wu_f06F{gl?VxG~db(Z!!Bgj2Gr zi$v^MJK-+?AgDm!eV``|E;oQspS3S`>e{npW_6L9fF=69`_=Sfo}n%YhXM$7NjMZh zs7quhKKGfx<@$*cYDY;IZzPt7F$2O}ZU>h*KvA_hWS^F$^cL56*^X_foIX;GRJpgH z`m)U|oFP_kkvP1fYy3$~E#?`2UJ3mHqWVhc4-l)bh(B-nOr)>rPyeJUVamGmTIdf@ zWT8Jmn6HUHC*+0SEfRzEmFq_F#a;=3M%PD;N)XoD!M24I>Ux`P>j@d|uCB4kj{QS_ zRjwY(>5Aqi8E&~s=qep~S3fXDb*tbRo9~7;foQ%PPFEl{-<9bq!`W3Dd@r2oAgDlp zrUN}`Fw=oh-xI2Q<=0g@@_`*M%x{(LP&&FSJBBY8M`v~0KdYjS2+3=teqsO#(Fb;L z?gC=?1G|=A5&<#%fz5?`2fEqKHMZHYkM-(5tF}4aP~2uy5Xp|;O}e>VS9ws~P{A|4 zZV!D0qPaZ`9T1b-C3MowZqnXIcHF;C0YL@&-2{5lpo9fN{mABe=LWp#?ixGn*lt_p zx6F1LRyuUV$kFA)24(e@2f5De4snNgcO{K<7w=37x<;#|BzZ<%rmWi8MP{t>dP?wk&3FMe=}mzgYv|V9nxzbRt+n9pt#o# zPVPM<2K&NI2ZT|e-xVOb`$D5YjP4Vo5``Y(>;5nmK~RDIB?Zuv5^7lpfl&8LDtZ?j zJtPbV!tn*c1%_O)d_WdIpDW!y5C*@8po3xXK~RAqRl;ykrkPKbFdPhn-$Qb|_1AXX zzdi=S1%_NXx_>R(vCoyG``0#w;6TJ&%G73Z*9KeY0u9+UE`=7JE+(E zMYYN8iR7rwrvf`Z4+wY3q0xSs<#%!|Vsr)^YLk@ABnBPcHzK#{a5@ z1swsneIOM~O`rrT6`VJLSUQk${RJL~r30x;3c1XSCwjTY;S|@WW1dkxa(kh8IK|mO z-Wc=}=Z>Uif4Z-*f@e$~Nd?0WMDs{0*x7-YJdz47Yz0n$TgQ~~)t~;K`Fx>)5GRoOxd+73caak^?B9tK zb7hz4?HVUiv7aixo3E;?{=HE>kqS2K-qN#^srXf%gCL>@^cOZD{+>*w{FMv{^<=7` zeyB_i9JCR_^`!NLex=9e*P2-}`|PPY|&z0evI}kEauU^gy%<^!o`!_wjU|e_aHm z)yLC({^3&*PK>CMM!<`jczx^R<zPYc!x8{-oR$vmzk#SuO9vnA0Wm%;&1JCnGN`WvYeriC zyi_fz06?9Q4zd#H34?tB2z5p}*cbZB5X?-+{SJfZ6VShm0z#dc&h_udfKX?qxgYyb z(y6b&x#{@D`Ri4-kKB%p&X$kVInSxJ9g&e12>l!e;?vx8umS)vJU1Pr7tpgrdfm!f z`nYTSEggGSXO^oT)&7>QT1&1ltHvcf^Yl9}s7v(p<$UHlFCF(^IwPSI^U}Of&hZqn z{Y;wI`Bk%pZ3{gIU`rJE)qjr*tul0Fj?9|s`1OT%#h60W5(4n7s(vUL11FAZ<^<|EJ#JP=FE(m_=O^ptC5?R=S#U`#EO z&`IR0xW)_V*h_lg3q<~fF!EKzw-plk%PUrdLFY%hwnCUS33?TY)r;wP-NIzHuyn-W zARhee|L)Cy(Sr11n)#pWkw7a6aG{Yc969QDj@aU7Z%)FIxUWo;9H*5{5btn}SJScA z^`BO#lR0;w`f8f(t35%yLmXYLN59Bto;;IrtHW6UM00i8^2-z;{a&4>Op!YC4ry_X zKK!EURKYXEH4#yIuqGXxVv#~zlMV`sJH)rw!q|fdHqgI{210!;O|T`_K&Y=t#16_z zeWz=zPsiS8N%%CL?e$<;*#kXGM+~i8zEa(ya_@w>Ue>J1GSlvqj&0P&D!zE)8UHqh z{sB?lm<|ePAdPHHvrx|QnMgP5jjPm*iaWhr*qjbFKA_0b!Nv!KxjF3Fozk;+(?Qh- zqGv#V&jdn!H*NaS1VVjRqA3Y^r=a)JalaMi8@U8sJT=JP4BdzVCEd)ogTMG$cS`kOBh-RzkgR9TJa3=_&5w8QivZ*09Q!>?~*v|U^U5qR?YtVil(~3D{6ERzhZ-* z!^Xw_j?9eKvgp2!3F z&|y!wKp@4?o^&mL$p>O+k1RFpyJ86CeR|7kwFnpF4bHwWCx9^brGr`&2y>CX0O{hf zFdjgN$HI63Y2ui~V}xf1;c?x!Qr(9gDTIzkc4Xl_9@&vBJDv`XqbOtNc$(v=^zm*< zvXi>XTGbspGR!96BjxA;r$gbdG<^3dGLIwEx`}c0m8sbJp^5foFpJ&v1Bv z5dWFxUP7iFP*l^r?q4XwbGI~lTAy31o`ETcjMHJ1fiO>}gLhj%n5U)oDDjBso=MMs zWkyqol1pdOasN01gm@-h-LLb35YMEk^SuvG?v{@IM>l>`&FsW8?f)n0w0uMJpLB4^ zgA_ymN$2}p91uhQNng>x-X`PR&ozEa$F#2UmU{o5erW!d<}JRg82x0N$2xJpat6@| z(BB$?G&0r+?wx^9$2z%wsS2c#u?}0+!=5FC;~jnZI#u4WpEuOwBSW&FjCX?K2C1j( z`cnvqq45qWBU?>B8S2L!y?>qRSPX#qxD!-)K$wp^L6rxD`M5)*(zn^0MyA5Rfc!66AUj>sFS5pKZ58^ zapHct+|OG(fMEn>yr(!pae)*|Q=H)AX&{!SI8?xrDE(x(r#bQ2ug++K`!c{FKU07( zr#V5U0AWsZ$dvKE`>Y)^9DVoO>d{X9ylg-b5JStI z>=oYn1H{mB=c)2-2mwT*SH_3Mio5c{%cNf zmkmVowQ&9bY4bHF`0`?axc|Bn+@OP?0)6*^o;3K}0|@nXC%8c$Aj4AW1RuA6paLuW z+jlVBN+&)87V_9d`MjjL4H=<@`odNn|HGmBn z?i*neg5kaqHH-3_PQu@w26&%;0Yk2=EN_Nch!pCZl7&T{$Bg7#`t~iVNznjrVR_35 zJ`Mpwe9H+w4go@ZOZ=5Tj2a-HIj_@iZc(iu$~v;nN%%)DAjEY}uD{O$A+B@SXWM&3 zmXY=P@~s>+26*3;tapMhB!CdtJ30PaS0Kdo4lnWLmTZ80QnEqot^8pS&$PI~3BIKP zLfqg4XJR144Kne4B5TOoI=;;#%8K!JM3gT`-j0Z}V!SQHd%PC;f@G7vf1A3qWI#Mc zkT-?12MBSK6TGDdLfj<5*(#NIscUR?V!JEPZ&TN+oKjS`I#dsT#%QVJ^mg5QyBbx@ zGe);N!O;MS=5~kIaZ+ahF}htwS<9=5Qc1m?m1noB*$S%U^v=*9pa{cF3M!*>AFEv@JQIR1!~FvY^Gm0?zi0wsekrqo^(~$l=o{9Zrv8Gks*GtBQJ zrcBK5Bc@Eu?}aHdWT33f$Mn#h%n+U-9*c;w{U39JyMLq*k2zfHN?|%s-1|{)*{Qli zlut5$jEFKPe+<`Nq!53UwYP^yB$Ov~mtDMt9q1htPDDhRlPAJ`7AeFNvd>b@Ns~;< zpY^s~>VxZf#_^xSH5-TrKZk`D5JNvZ!96k%LqAK^uti3FkZb(n#QvJmUwp1M=L|yi z7g@69CGj8`^|N}_7piL!&$xQl2~N5|G|z_nFA$?=C6$JIM1;TUMqjFXAxifC8g>gP zvM`W9h`&l8<)igMGU&hQe|)J5i+P6lTSSyW|1BIkq!53Tp_4n(L4w9*bir=b3#JVE zxJ))HKt`^FY3~-)VSQiXim#8c=Dn4U>Uq8Gy2R|s!s_3 zqfdt30a1N26V$;#j6RtOC(vMt^sI~?w^uz~48Yl0VMu_Uu)6=I1qgLkhIgvo$0dVh z0O#ti`;>+$-JF{VQU(ZfZYC(%fH3D~NSUW3p$7|mTIcOovx<1e-KQgWWdNVf1d|V` zsAk9+Ii(JkSvybf+s|K0@(giaM3nKHmkEk?q!8z2DB5LT8!Y)XUk^B-T2=5YAR@}} z&5r^k!#7_7Bzym0>DPj&Uov1oe-lOsbwMV$LIXlwkm1s2lt*RSF3NBjJUH8%|G;46 z!29^mXR^BXLDdiMWphR9zvBX8X;Bm~nYfE2VE*{Bxh~Nw4ywKor9@v6xgeYClBnCV zxh|1z%lG4hWpiDoi@sKUI`B;JmW819f+M}88&I(0ruMEdfV5k zFX5AFeR*WZ#?JD{j%>ZlGrj^I zu$s615x!07sL0t3-qp9zWpAV$|qR*8E< zWsYvh#4q<+1mPagcMpiA4VjdGWCwc6b^Whgfmqs*xvajuND8BSUE{q>>>rhX`c~CZ z75Ae0UdHtA;_nsz-p>Rt@<6l#^jiVa%KMp=e;)#b`hKRKf3^nF%KI5!UH=kyL zzmGu*^HW(#c@LUM43m}g^UAKrR1MV{0QK{TDrP?qlMgA>&n5W|Nk{H;jlG%J0do5@ zm7U$cYc2hMKd5&q?t`;8V-|RUyHC2bFB5!+0m44ePi`Q(`!c~n9f@?!rFW@ktv delta 18141 zcmYM5cYqW{_Q$7&p{J*(dsupx;EKx%W(C9UDsd&NNKOi(h#ZDHPwqVR?tT{*@iB1lFgOZt6YSNHXQ{hfN>SFc{ZdiAQh=lG8FxlQRR z&aa#1SIJ(Q+*{@Cyi2#Jx39Z=Nb>D}UA4NQGk2Edr2VRi#LBnt?p^%0`a=KHRlU@z z%Jr_=tFnEZWU7I0t+o=obk%CAceT})UBkK4Nu?Sj6MpJz{rhUFPlKg%kzl8!NB6b4fr+`lT zYoTb1m8~8@G;Fc_iz0}IEmrZxPHCVa?WeZs7kzbOgKbvQ3T4tzwpnREf>5?uHEKFd z0*dXYw(E1gYSwIf+^J2c+v84cG;Fv03quVy8n#>LNmPAe1H=|I_O)u`q4Bgh*1)*dTy)KZ0A^}PkE zp?Ng{t<2CaA9qhVX0}kIVACPGdc?r*`oDiu5A~_+QsTRxx5S0_se!f#45NUit4=Pqo%C1i;h%cnW zOahd)blPNZAjB8Mckd@L<_6!Il1{u*xwTl8sr(xdoszcm0uSCG)=blv)lOPmKm&n~NF$}dIq9hs_TC@mFp-ql?%Q;kY^M(Mke zQXrD=M&T%a zA1fj+(+Y8gc=_>w2wJ6IyjuMc)2q73cEfg+k_w_ajQ$J*7p#WiYC z>#}4@Kx}#nMXS@7P^1-z?4igUAX*QJIh_M0jfc~^aj9xwc2i)_;g~7*9FEo$tuPPEni?%@ zs*!IUPbZ$z3rf{<1&xqAp0@Ly-Y9J(=A2CHJIhEo0L(d=PNsvo0wQ`cZP$t*N>8Q> zFAO%{MiT9(()#-{bpuREIHw|WfI(xJ#(^+TNpARO&?jr?Oj@_QQT-LBETS`UpQ83m z+BSKdR+wjG5lKnYNYL4|K60bF9%dDoXJe+UqO&nmR?*p*Nobv8oHqr`6wGt6wX$r^ zMb2v!Y=Gy)dBs7W$evH@MK`Gn=~I@;`IsroIVG;zw9Ad-#nLygsqMbFyFU_Hr? z@~h2yDhp(=XSi2vypChEGP=j>##-sMMRp0n#* z87&(XmVh znb9KCGU$sVz!$(%|WUvRKygD)y?ThO>%ZY2S@24i|rZ=n4>rS$hL1vd95t?LQb_ElbOf~kcX?Ef* zUB898A-^#}InAb~XvC^$EMfezez1iqt>BsXcsW`XKqOzbGgG{YnsXdD55r%!({=H z)iOhWMvn|zw(%KuSb+dBV1^xTzCiTMu){Mg5Ir+wB^WOt`qH9AiZXsxEV<{8`P z#a-GcnrDZF1Fa~UXBS=>4pdI|^XzLHIO8R^HcqmT=j+?rsL_~^!6)0DcNTYeJ+-?ga}dZMz41ZJiFZClkoQ&MR#o1JXLK%$bOMoF7L5Xk&Sf$RIS)1!OFtvq7q-xUY^Q4KdAF)- zOZXKP{A`vGFpvt(0;1wGF{@jk0!OUSdAF%frAxW-PK!zvKs8k;IdqN%CuYHRiI+f`R=mCb)`+@mb6 zwNZwl72;Y6u)i~D&3tQvo!G4NI;cPAH$!lPZPyNN6r0JUZPfqipo&X)M&-sxB@oGt zc6fIHMCC@Cy6GZpX(nFXqz`mZ7nJf0aZ^l`soE41WvVs_u?@B~_pL2<;s@QNqq@1G zIf7ek?ocHSH5Xg9Myno#QlOcCAhKJd0RmCFRR(CNG;WKjVh=E)iapz6s@Stls1=4w z?0g?{#mPWZur?1e_xHAK&Q(CT-^bm8w#QTnA7Iq2gwOW4TM3`-LT!Q@%6)66olN{o z|Fx4Ut0+fur*x9T59M~kw|3ddr!rN7JO!qCmu>B04HU>0T1VE_!Z9j5_EVTVn@=}IkA~A5lP8HNE zF8+Q0M}If)(c=3DJzA_E?n1QFh+Mw_6j8SxvGo<* zR702!HXN~2rj!E0JYu_1sL2iX5xZvXaNtz4M{WIVH&qHV3-f3^Z&{c}Z6_K`7Uogg zF9@#n%ahc&$87yeH+3yc7v{0p*)GguQCUMP%wske?NrbVo67gNt$TJ?SHbjP9;Y4% zo$bLqZs!LzvxvexE;Xu|aO&X`wtl<2y0WZ1nS*&EX69g?h?zNMJm9Xq!g)YH+vM=R9RVy;{qmnSKn&)8b^R5!xRqti2SY~;Z_6URm#%rkcF z!r&^bJV{A?*4Dr4scwQ<9p>4XSsmtC+cURTw8A`V=hq0GOPzhr*5CG2*ET9o`Y_MM z1NC8^iwEk%JSPK{8oNB1&q0*sRPQRiZM3SRd-vjIk6%&2&*pFqM8$c#n%Ve(s5o!e zDRTa8;IEGIo&Mja9rh^ zy_tbB0Mv0YRg&SjO!&TwR;c4LB*P!&g0qEhy_Dhhx5-_qpUQ86=t~*yTL+-Eh1fGi zzus5%E9DubQzE56B&TG;OAH`Nr)0<#Tf{vr#GdK;=DXFVGM;hIbWV{$_yVOZlW(#< z5a#p@$J7tSJuQ9f^-SX3%8vJ_N|oOd(bqGSWw)cWrI<5M*Sc5TQpz*t%!|wcA~`P; zUT^|YIxoYO(+Y7UbdqRe|6v2~rU_n^|Pc&3kaQ6E5TT^HF3gt;!V6-XcJB3s*t zt>5a?53261c}CB-u^zGY+gOj-`fcP`gwgY@IQDT&ZR=a#Ww=i0+ekl_0!D`q&>WE)Y%znk^BC?EXx6?gyfFe&r(&iI^i<>pT4A0NF9hrBR)J?S`sg6_LIr?%ITIxZAk;Gw-*V>y3}gcbCR4Zh z*7;20Nk=(Zr%LKJB+qBU6TofagTYRi8$e7x(BuXnoeXxu+yI0+*daIYnz3pMOfQ2S zVt9_Yy1j1=brNIrWq(vNYPLsos6z(o#i-j$ef_kPd{+PPN7cCkNbA#%ZH^M{#fD){ zSgeAW2%ssifyfSX9OF(PeGYSQr$kkI@z^s?$|L{~RG={*7_^3W5kRQVICZ>>oH4Sp z+RIsfgkJQh8d=IS)Dcb?RY0gCoG>7PP)9iU^IO9Nj@A`_QftfF2Qx7`@);23XeYdL z0g9-@srjfR(A#}$qLY|a`R~WnAXRWXq7xlf;q#*PcJaeYI`f2ju9Ro&c`337i0Dg^ zJwUX+B=&q@n6ysSpFg20VM^Ya8rcJsw#XhJ%&B6}L3tZ@yZB&cyqVo-hXtz~W9x#*Rv?lKBG&;?xjaq%+ zQTb7%5{TqSPN))y%8x{)Skpc`PQI*HR4J4sVJfN(4D zYV%CCMP~$;JK;gSv-n^Icl<#X1fdjYh5|%(MWhsn(iNgqywF)}{X7ai5LBSK zlK=*-xLOh)5bEa=dcl20XK};IXg)!3fe}|UuasnGxH9aOk@GtXS`|4T1Qi%j#SN=u zSsALhVO8Y(&Jxp2zi^V~b{7a27;)vK{)H2ki?qW1!l7IoDvP&^d^=ZTuzISX3u0e8 zeAv>GpS$|jIw!G8zdl$sE9gqgI*0f6Yh}8+if=dSGlSJvr99Ku#>lfkL^np!4y3P* zV&|Lk89~>;0hQ;TRM!->24MEeY|<=6pg1cV-kJl^v@+|Pgbqa0$}IIoPps?aTVG|l z3H|+4)g`|hf?s7h0my}ZH!*ItUNcqIe}rdLuFi(j4n%TwHaw94QMo!B-p_Os+t%>L zC-5+c2nHG-0)y6YR|P^{lO%O=p> zw>D)H-&Jm#rt(z3?uc&6hWl}M8OY{r^6J1I5Y7S`X8|#9b2e)d6%gv?Y|&+rFuiQf zUU`*MDZTXYt?k*w-pWqX)eWkk2cp}vjAXY=W)JCRrylo;`mq(ybh0z*1jtZ!Ml%A0 zxijmV{TE0lJG1P+^5(gRjPob`{;R4ddSqsQiuK6M{uJvGU;dQ!&2b80^!$|NI3=Iq z^blX}(OqY#9yjvLDEDNO=FSEPaZlDWQv`&#C(GIkiu|6wbugPalGWeMP?IZqB6={( zGL>7so>Fxj$|irwnp-_E&4;8}R(wzK!Oz*0@g9g?fo7aQWPi@qHkUy_di^=eR~Uv$ z#l*~F8&-b~fKpci_MXYC8gYpGN(G3aDg zKQmKZQwG3&C$r%-H4xF0+3?dSAUaQGx#11o$n+8)ozCjLGu6u#0H~*3Q^@T)HFM)&IWSzoAs<@Y2dHt#Q zu|YaJTPnWk~IF?P1dbfwYXmMdVvMd#SQ#wUbzFI z{M+UJ(NI87yUB}%QvN@R44+@k8+cx>2SRm=vmpnghv~f6RgL*-gNx8YMmxpI7m%v2H@^K6CN; z*vRKq#I|wb^UI6IMc(E|hB!``HSl&7ang8wZmz1;W4s%_)#pcK#=ETVf6|4wj;f}`TPJAG@Co0z5_nx_us-$^HvTsEVYxa>|bYqI{` z8>)E;&qUT_H%#|HBqzJ!+h-u7oa|C`NR@b}*g8dj_l9ay!861uF;V<8#SKe-S|Ltx z!}8!xF>Pw(X%LeHH226rs8d~BE1m^HohttMUJ`L{-b63}|*hAk;Tp+mvuXsBefjCH#5| zdecps$_4}#cumBWHU6ecZ6;o!IgqZF=PVSj^zp4qH}O^Fk+)T;>eL6(N|%q6L~kGQ z!h$fA1mOpuDdT|1E^x#B9EjQlE_=D1+6d_N$U7>Km;u&+Y~-D_M_K}^xpSWmsWj( z^vADeEdue)VmCZV15voxtsW^9*DMx=^3t)76n3BJzgP0ok!OgXxM7h8g!qYD!+g>Q zg!qZeCw(LvVPf{DS}jojXw5TfK8-Dqj|x7GvH`6q`qZsyGCL4OpGsa~R~1DFuh2^t zsHvDBZ(mkKApwNB!VL>cAj}mmh2>bo>hN<+m|o(9q+5oWqp$J|9~%JqP%N=kXgSO1Ns2MF=ME|&_j>VP8Z^74I(OwV1?={9|2k$SO& zXPDa}F9Tt2bHlgKK$zQHN{q6Ai0pQ~>{z<$)1eXK^e;hFw_j0Y{>tNiGOH#D@O=tsBE>}Nm}{penCrL#)rxvy{SbrVDM z>5tWC_w+?_ugg1iNf>=)p7*)tD>y-P0yJw6NGJQ;@X{Cvb)Q>c3Q-`P?30b^uYo2S z54yVU67^W?zQI%%qajX_hktX@n1hd)3H35IuKl7)U70;>9NI(9bk2r zg!BtO7MbaVpFRK~&h+xlTT~##nI13Y&3=rZhFFY3m zAss6sT!b@z`OV_JO1^tm+;c?uUE=v2$ zNLJ~`zEx8i@r=?{ky0R{tGqljlR%WN@;Kdh3Wzj*$#>p`Eylh+p^koFgSxV`e=s0^ zHDL=3gu(#<(eR}VC@9GK%YfGCWgFCsFlCLdiJ3B>HIXZ5g}FwU!TZ4e0>9B?H>!yx zJj47ZX37fvCT7YC{YIFwRQgNSUa$LYVyW;9aeYjbB4NE3UiZ@qalOY)u9UC+#k>uA z$tKkqqI^cVAtuV=+z_Q>S|M(bblfE%;?qsK^=4kQ_79E|n_{9Y&P`re+tUhhlgD;U z%_m*5I=ASho7M8RJY)ElD2)TLV2c-CDFIQm#S5>FfhgMIQCxg3(|@0D?eG#uJ-zxn zwKV@eM0ZFQm-oQ;$@K5kul|>BdU?jwonCkx1|qpL+NOah-6=8ka6qJSx8@J+4?>hM z-W?4KC~c7=fe?3#Bjq#l`()Dh>cv~wxOs-SHzvxY?~SI8R)~9L>g1mEK0*6EU307I z4pSz5f6SCg-yfw`S_4@Y-Qxih-yQPwq^;@?Fy&NvC<<~Q%tKzDxy}H>JR~{5xQAX2 zd%EQ|X79dW+7HKl%CsMjW{*~whh_HUcKAM7pGQ2sWSi>I27m=eqS*tY_DD2)KolME z!q4S_C^{mkmd}`ysR6!q(o2ljy}wsa77Rf0q)eWCS3N)`?^jPB{9g4c1EBQR$T}dR zzec_UqV(7QEuaD7>9d~x>vr`*DF9>7MlJycjd|wf3J~g9kJqNb_ag&j0tf51KPU}T zhB-JFh71tq;9OYQ0bvf#5i%1bpa%$iO6ToRV@i0&+^2G3rU1fxDiuG)GkE+QdJPU}4GJQ|y!rVkF z#HVuvn-l>9WL(4Iamj=MOabjR&jy4#EXU2zqXCs=JAA@U^$51go;o~MBg=Gn z>>gRB!^J&jHrZ20=xICE9T25%9}#ybd+LaIkg}(akU`29-UDP$9i^|{rFymE8CQ+U zh2yqlqhbJ`WC3D54thq%dSu5PoeT2~ z!sr>DlI__ySZuU>zV|V~)!u^~9ez-h=2B z7*XYO%yIFI$>*5ka(RAGRR6}eUdSc>Ghw&t)cH5ay^ssz;uKPRjAJP{ue=lupitMK%a;0ZowzWZEa^ z!Xg_8b#jg(TPgw|eN4_#V?RnC_xslLTw=EFx<~!K;C=+B=Q!EFB%j3HFP+S+T)Rir zRuur0&dh~7J`mZNxp2n^qI9Ojl9+eDtixHkt%Ion*pKOpwa&xJ4SK=cAMy#VQDelBZn zMu1S~=jxhMHjrNC=XhZ!_C6r?zLg6v^Fe3=Mw-Olw{qDFovXxwGzZdk%#||`Rd40E za{f{B<%7PpAeZ<=H#nfS6+DRKf}DL(aA|K~MheiN_urLY)AfgL%;h_m?K^C!ZVe6P}1d+%C?78byWs{x+JEG z+9gr+(F%2mMBfiGl81b2c`mV15C2(hsdxy<, } /// Nested message and enum types in `EditOperation`. @@ -1008,6 +1008,8 @@ pub mod edit_operation { AddSatisfy(super::AddSatisfyEdit), #[prost(message, tag="8")] AddRequirementConstraint(super::AddRequirementConstraintEdit), + #[prost(message, tag="9")] + AddTransition(super::AddTransitionEdit), } } /// AddMemberEdit inserts a declaration into a namespace or the document root. @@ -1047,10 +1049,10 @@ pub struct AddMemberEdit { #[prost(string, tag="11")] pub direction: ::prost::alloc::string::String, } -/// AddSatisfyEdit inserts a satisfy usage into a body that admits behavior usages. +/// AddSatisfyEdit inserts a satisfy usage into any package or body that admits behavior usages. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct AddSatisfyEdit { - /// Namespace FQN receiving the usage. + /// Body receiving the usage. #[prost(string, tag="1")] pub owner: ::prost::alloc::string::String, /// Requirement feature reference. @@ -1082,6 +1084,34 @@ pub struct AddRequirementConstraintEdit { #[prost(string, tag="4")] pub name: ::prost::alloc::string::String, } +/// AddTransitionEdit inserts a transition usage, or an entry transition, into a state body. +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct AddTransitionEdit { + /// State body receiving the transition. + #[prost(string, tag="1")] + pub owner: ::prost::alloc::string::String, + /// Optional transition name. + #[prost(string, tag="2")] + pub name: ::prost::alloc::string::String, + /// Source feature reference; empty only for an entry transition. + #[prost(string, tag="3")] + pub source: ::prost::alloc::string::String, + /// Target feature reference. + #[prost(string, tag="4")] + pub target: ::prost::alloc::string::String, + /// Optional text after `accept`. + #[prost(string, tag="5")] + pub trigger: ::prost::alloc::string::String, + /// Optional boolean expression after `if`. + #[prost(string, tag="6")] + pub guard: ::prost::alloc::string::String, + /// Optional effect text after `do`. + #[prost(string, tag="7")] + pub effect: ::prost::alloc::string::String, + /// Write `entry; then ;` instead of a regular transition. + #[prost(bool, tag="8")] + pub initial: bool, +} /// AddConnectionEdit inserts a usage whose ends connect two features. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct AddConnectionEdit { diff --git a/conformance/fixtures/apply_edits_transition.sysml b/conformance/fixtures/apply_edits_transition.sysml new file mode 100644 index 0000000000..bb8c2085d6 --- /dev/null +++ b/conformance/fixtures/apply_edits_transition.sysml @@ -0,0 +1,8 @@ +package Demo { + attribute def CycleStart; + action def cool; + state def S { + state idle; + state toasting; + } +} diff --git a/conformance/scenarios/08-apply-edits.json b/conformance/scenarios/08-apply-edits.json index fd590e0f3f..354ce11af5 100644 --- a/conformance/scenarios/08-apply-edits.json +++ b/conformance/scenarios/08-apply-edits.json @@ -170,6 +170,55 @@ } } }, + { + "id": "apply_edits/state_transitions_are_written", + "rpc": "ApplyEdits", + "requires_capabilities": [ + "apply_edits", + "authoring", + "transition_authoring" + ], + "model": { + "fixture": "apply_edits_transition.sysml" + }, + "request": { + "model_hash": "${model_hash}", + "operations": [ + { + "add_transition": { + "owner": "Demo::S", + "target": "idle", + "initial": true + } + }, + { + "add_transition": { + "owner": "Demo::S", + "name": "idle_to_toasting", + "source": "idle", + "target": "toasting", + "trigger": "CycleStart", + "guard": "true", + "effect": "action cool" + } + } + ] + }, + "expect": { + "contains_all": { + "content": [ + "entry; then idle;", + "transition idle_to_toasting first idle accept CycleStart if true do action cool then toasting;" + ] + }, + "absent": [ + "error" + ], + "counts": { + "applied": 2 + } + } + }, { "id": "apply_edits/a_requirement_constraint_is_written", "rpc": "ApplyEdits", diff --git a/docs/guide/09-clients.md b/docs/guide/09-clients.md index 3ef2a5ca5c..58a1c527a2 100644 --- a/docs/guide/09-clients.md +++ b/docs/guide/09-clients.md @@ -1142,6 +1142,11 @@ abstract=False, redefines=None, default=False, direction=None)` accepts notation declaration. Typed `add_*` helpers cover the common SysML and KerML kinds, including `ref` and `return` where admitted by the grammar. `add_satisfy`, `add_requirement_constraint`, `add_require_constraint` and `add_assume_constraint` write requirement statements. +`add_transition` and `add_entry_transition` write regular and entry transitions in state bodies. +`add_calc_def` and `add_calc` accept `inputs`, `return_type` and `return_expression`; +the expression is bound to the result parameter and is not written as +`return ;`. `add_action_def` and `add_action` accept `inputs` and `outputs` +as lists of `(name, type)` string pairs. `add_connection(owner, kind, from_, to, name=None, type=None)` writes a `connection`, `interface`, `allocation`, `binding`, `flow`, `succession` or `transition` (KerML: `connector`, `binding`, `flow` or `succession`); its feature references resolve from the owner's @@ -1233,6 +1238,7 @@ call is made. An `add_connection` edit also requires both `authoring` and `connection_authoring`. The new AddMember modifiers and `ref`/`return` kinds require `member_modifiers`; satisfy edits require `satisfy_authoring`, and requirement-constraint edits require `requirement_constraint_authoring`. +Transition edits require `transition_authoring` alongside `authoring`. ### Querying a model using the standard query model diff --git a/docs/project/spec-compliance.md b/docs/project/spec-compliance.md index e667fd17e5..325a14a07b 100644 --- a/docs/project/spec-compliance.md +++ b/docs/project/spec-compliance.md @@ -2714,7 +2714,7 @@ operations are defined: set value, rename, add member, delete, and move. | RPC | Implementation | Status | Tests | |-----|---------------|--------|-------| -| GetServerInfo | service.go `Service.GetServerInfo`, `capabilityAvailability` | ✅ Faithful — reports the build version (informational; a source build reports `dev`) and this service instance's capabilities in append-only canonical order: `type_facts`, `convert`, `verification`, `query`, `oslc_query`, `enum_values`, `evaluate_subject`, `symbol_attributes`, `unset_value`, `feature_values`, `apply_edits`, `authoring`, `inline_language`, `strict_conformance`, `document_query`, `render_document`, `parse_sources`, `complex_values`, `structured_values`, `measurement_refs`, `function_values`, `set_values`, `tensor_values`, `verification_verdicts`, `infinity_value`, `diagnostic_codes`, `schedule`, `case_evaluations`, `schedule_explore`, `final_time`, `engines`, `metaobject_values`, `undetermined_value`, `engines_external`, `edit_documents`, `performer`, `render_document_html`, `connection_authoring`, `satisfy_authoring`, `requirement_constraint_authoring`, `member_modifiers`. The same availability object drives request refusal and response population, so a capability cannot be advertised while withheld or withheld while advertised. A service predating this RPC answers `UNIMPLEMENTED`, which the client reads as supporting no capability | service_test.go:TestGetServerInfo, capability_test.go:`TestCapabilityAvailabilityDrivesAdvertisementAndRefusal`, client/python/tests/test_capabilities.py | +| GetServerInfo | service.go `Service.GetServerInfo`, `capabilityAvailability` | ✅ Faithful — reports the build version (informational; a source build reports `dev`) and this service instance's capabilities in append-only canonical order: `type_facts`, `convert`, `verification`, `query`, `oslc_query`, `enum_values`, `evaluate_subject`, `symbol_attributes`, `unset_value`, `feature_values`, `apply_edits`, `authoring`, `inline_language`, `strict_conformance`, `document_query`, `render_document`, `parse_sources`, `complex_values`, `structured_values`, `measurement_refs`, `function_values`, `set_values`, `tensor_values`, `verification_verdicts`, `infinity_value`, `diagnostic_codes`, `schedule`, `case_evaluations`, `schedule_explore`, `final_time`, `engines`, `metaobject_values`, `undetermined_value`, `engines_external`, `edit_documents`, `performer`, `render_document_html`, `connection_authoring`, `satisfy_authoring`, `requirement_constraint_authoring`, `member_modifiers`, `transition_authoring`. The same availability object drives request refusal and response population, so a capability cannot be advertised while withheld or withheld while advertised. A service predating this RPC answers `UNIMPLEMENTED`, which the client reads as supporting no capability | service_test.go:TestGetServerInfo, capability_test.go:`TestCapabilityAvailabilityDrivesAdvertisementAndRefusal`, client/python/tests/test_capabilities.py | | ParseFile | service.go `Service.ParseFile` (parser + passes.Analyze + stdlib load) | ✅ Faithful — the cache is keyed by the file name and content the service read, so repeated parses of an unchanged source hit it whatever the request's (ignored) `content_hash` says, a hash disagreeing with its content cannot serve another model, and identical content read under two names keeps a record each, since their diagnostics name different files. An explicit inline language requires `inline_language`, and `strict_conformance=true` requires `strict_conformance`; an unavailable requested field is `UNIMPLEMENTED`, while an unset field retains the default parse | runtime_test.go:TestParseFile_*, service_test.go:`TestParseFileCachesByContentRead`, service_test.go:`TestParseFileCachesPerFileName`, capability_test.go, conformance parse cases | | ParseFile (standard library) | `grpc/libindex.go` `libraryBase`, `buildLibraryIndex`, `indexPrewarmFromEnv` (`OPENSYSML_GRPC_INDEX_POOL`, positive prewarms, 0 disables), `symbols/layer.go`, `symbols/index.go` `Freeze`/`NewOverlay`, `libs/shared.go` `SharedBase`/`NewModelIndex`, `grpc/service.go` `Service.Prewarm`/`Close`/`ParseFile` | ✅ Faithful — the library does not depend on the model and is immutable once loaded, so it is built once, frozen, and read by every model through an overlay holding that model's own document. What a model resolves against is unchanged (same source list, same expansion, same persist step, same `Index.Library` marking); a model writes only into its overlay, so no two cached models see each other's documents and eviction removes only the evicting model's state; a request arriving before the shared index exists builds it, so a result never depends on prewarming. A cold `ParseFile` on `examples/combined-behavioral-demo.sysml` measures ~0.5–0.9 ms against ~100–128 ms building the library per model, and 100 cached models cost ~1.1 MiB rather than ~1598 MiB | `grpc/libindex_test.go:TestSharedIndexMatchesFreshlyBuiltIndex` (identical diagnostics and identical qualified lookups over the whole index, shared vs built inline), `:TestParseFileServesEveryModelFromOneLibraryIndex`, `:TestParseFileTakesNoIndexOnACacheHit`, `:TestCachedModelsOwnTheirIndex`, `:TestLibraryBaseFallsBackToBuildingInline`, `:TestLibraryBaseCloseReleasesTheIndexAndStillServes`, `:TestIndexPrewarmFromEnv`, `:TestLibraryBaseBuildsOnceUnderConcurrentDemand`, `symbols/overlay_test.go:TestOverlayEqualsAnIndexBuiltWhole`, `:TestOverlayAnswersEveryLookupAsAnIndexBuiltWhole`, `:TestOverlayRemovalOfABaseDocumentLeavesTheBaseIntact`, `:TestOverlaySuppressesAnAmbiguatedBaseImport`, `:TestConcurrentOverlaysDoNotSeeEachOther`, `:TestFrozenIndexRejectsWrites`, `libs/shared_index_test.go:TestModelsOverASharedLibraryAgreeWithModelsOverTheirOwn`, `:TestLibraryMarkingReadsThroughTheSharedBase`, `:TestAModelOverTheSharedBaseCostsFarLessThanItsOwnIndex`, `robustness_test.go:parse_with_unavailable_standard_library`, `BenchmarkParseFileColdShared`/`ColdInline` | | Convert | export.go `Service.Convert`, conversion in `internal/translate/convert` and `internal/translate/export` | ✅ Faithful for what OpenSysML writes — SysML/KerML notation, RDF Turtle and the API's JSON element form (`api-json`), from a loaded model named by its `model_hash`, a path the service opens, or inline content, with the format names `sysml -convert` takes and canonical names reported back. A `model_hash` converts the source that parse read, so a file edited since then does not change what is written, and a model evicted from the cache is `NOT_FOUND` rather than converted as something else; a `file_path` is read afresh, for a caller who does want the file as it stands. Notation to notation is source-preserving (comments and layout survive); a graph direction returns an equivalent model, not identical bytes, and drops comments, per docs/reference/rdf-mapping.md. A conversion that cannot be written faithfully returns `error` plus the diagnostics rather than partial output, and `tolerate_syntax_errors` is honored for notation to notation only, since a graph built from an unparsed declaration would lose it silently | export_test.go:TestConvert*, `TestConvertModelHashConvertsWhatWasParsed`, `TestConvertUncachedModelHashIsNotFound`, client/python/tests/test_conversion.py | @@ -2730,7 +2730,7 @@ operations are defined: set value, rename, add member, delete, and move. | ExecuteState | service.go:315-355 | ✅ Faithful | runtime_test.go:TestExecuteState_*, conformance `execute_state_transitions` | | ValidateInstance | validate.go `Service.ValidateInstance` (`runtime.Context.ValidateObject` over an object of `symbol_id`, instantiated as `VerifyConstraint` instantiates one) | ✅ Faithful — answers one `Verdict` per assertion about the object and the objects it holds, each labelled with `instance_id`, `instance_type_id` and the root-relative `instance_path` (`wheels[2]`), then a `summary` verdict of kind `object` that holds only when every assertion holds and the walk was complete — `bounded` reports a walk cut short, and an undecided summary carries `error` with `FAILURE_REASON_EVALUATION`; the object's instance graph in `instances`, verification-case verdicts in `verification_verdicts`, and on refusal an in-band `error` (an empty or unknown symbol, or an object that could not be built). Requires `verification`; an unknown model is `NOT_FOUND`. Exposed in the Connect adapter, the Go client (`Client.ValidateInstance` answering a `Validation` with `Valid()`/`Violated()`) and the Python client (`Model.validate_instance` answering a `Validation`) | validate_test.go:TestValidateInstance*, capability_test.go, engines_test.go, conformance `09-verify.json`, client/opensysml/surface_test.go:TestValidateInstance*, client/python/tests/test_verification.py, test_model_surface_integration.py | | ListEngines | `internal/frontend/grpc/engines.go` `Service.ListEngines`, `engineSelection`, `CapabilityEngines` (over `analysis.Default().Listings()`) | ✅ Faithful — lists the analysis engines of the build in name order with the authority, questions, bounds and process status of each; the `engine` field of the verification, calculation, analysis and sweep requests selects the engine (unset is `auto`, a set value requires `engines`, an unknown name is `INVALID_ARGUMENT`), and their responses carry `engine`, `strength` and `bounds`. See *Analysis Engines* below | engines_test.go:`TestListEnginesNamesEveryEngine`, `:TestEngineFieldNeedsTheEnginesCapability`, `:TestAnUnknownEngineIsInvalidArgument`, `:TestVerdictsCarryEngineStrengthAndBounds`, `:TestNamedEngineRefusalIsFinalOverTheWire`, `:TestEngineExploreIsScheduleExplore`, client/python/tests/test_engines.py | -| ApplyEdits | `internal/frontend/grpc/edit.go` `Service.ApplyEdits`, engine in `internal/check/edit` | ✅ Faithful for its operations — sets a feature's value, renames a declaration, adds a member, connection-like usage, satisfy usage or requirement constraint, deletes a declaration, and moves one into another namespace — on the source the named model was parsed from, splicing the spans the operations reach and leaving every other byte identical. The edited source is re-parsed and re-analysed before it is returned, so a refusal carries diagnostics and no content; a model evicted from the cache is `NOT_FOUND` rather than edited as something else. A rename rewrites the references to the renamed element as well as its declaration, and a non-cascade deletion of a referenced element is refused — see *Source-Preserving Model Editing* below. Every call requires `apply_edits`; authoring edits additionally require `authoring`; add-connection, add-satisfy, requirement-constraint, and modified-member edits additionally require `connection_authoring`, `satisfy_authoring`, `requirement_constraint_authoring`, and `member_modifiers`, respectively; missing requirements are `UNIMPLEMENTED` | `internal/frontend/grpc/edit.go`, `internal/frontend/grpc/edit_test.go`, `internal/check/edit/edit_test.go`, capability_test.go, `client/python/tests/test_edit.py`, `client/python/tests/test_wire_compat.py:test_apply_edits_is_an_added_rpc` | +| ApplyEdits | `internal/frontend/grpc/edit.go` `Service.ApplyEdits`, engine in `internal/check/edit` | ✅ Faithful for its operations — sets a feature's value, renames a declaration, adds a member, connection-like usage, satisfy usage, requirement constraint or state transition, deletes a declaration, and moves one into another namespace — on the source the named model was parsed from, splicing the spans the operations reach and leaving every other byte identical. The edited source is re-parsed and re-analysed before it is returned, so a refusal carries diagnostics and no content; a model evicted from the cache is `NOT_FOUND` rather than edited as something else. A rename rewrites the references to the renamed element as well as its declaration, and a non-cascade deletion of a referenced element is refused — see *Source-Preserving Model Editing* below. Every call requires `apply_edits`; authoring edits additionally require `authoring`; add-connection, add-satisfy, requirement-constraint, transition, and modified-member edits additionally require `connection_authoring`, `satisfy_authoring`, `requirement_constraint_authoring`, `transition_authoring`, and `member_modifiers`, respectively; missing requirements are `UNIMPLEMENTED` | `internal/frontend/grpc/edit.go`, `internal/frontend/grpc/edit_test.go`, `internal/check/edit/edit_test.go`, capability_test.go, `client/python/tests/test_edit.py`, `client/python/tests/test_wire_compat.py:test_apply_edits_is_an_added_rpc` | ### Server Process Lifecycle (`cmd/sysml-grpc`) diff --git a/docs/reference/api.md b/docs/reference/api.md index bd74011906..530f9a3841 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -97,16 +97,23 @@ and `type` fields: | Operation | Fields | Writes | | --- | --- | --- | | `add_connection` | `owner`, `kind`, `from_end`, `to_end`, `name?`, `type?` | A `connection`, `interface`, `allocation`, `binding`, `flow`, `succession` or `transition` (KerML: `connector`, `binding`, `flow`, `succession`) in the owner's body, with `from_end` and `to_end` written as they resolve from the owner's scope (`tank.fuelOut`). | -| `add_satisfy` | `owner`, `requirement`, `satisfying_feature?`, `is_asserted`, `is_negated` | A SysML `satisfy` usage in a body whose grammar admits behavior usages, including package, action, calculation, and requirement bodies. Both targets are lexical feature references; analysis checks that the resolved requirement target is a requirement. | +| `add_satisfy` | `owner`, `requirement`, `satisfying_feature?`, `is_asserted`, `is_negated` | A SysML `satisfy` usage in a package or body whose grammar admits behavior usages. Both targets are lexical feature references; analysis checks that the resolved requirement target is a requirement. | | `add_requirement_constraint` | `owner`, `kind`, `expression`, `name?` | A `require constraint` or `assume constraint` in a requirement-like body. The expression must parse and analyze; other kinds and placements are refused. | +| `add_transition` | `owner`, `source`, `target`, `name?`, `trigger?`, `guard?`, `effect?` | A state transition in a state definition or usage, including an exhibited or bodiless nested state. Each free-text clause must form exactly one grammar-admissible transition. | +| `add_entry_transition` | `owner`, `target` | An entry transition (`entry; then ;`) in a state body that has no existing entry action. | `type` is accepted only for connection kinds that permit a typing target. `add_connection` requires both the `authoring` and `connection_authoring` capabilities. `add_satisfy` requires `authoring` and `satisfy_authoring`; `add_requirement_constraint` requires -`authoring` and `requirement_constraint_authoring`. An `add_member` edit with any new modifier or +`authoring` and `requirement_constraint_authoring`; transition edits require `authoring` and +`transition_authoring`. An `add_member` edit with any new modifier or the `ref`/`return` kind also requires `member_modifiers`. Clients preflight these capabilities before sending the operation. +Regular transitions always write `first ` and may add `accept `, `if ` and +`do ` clauses. An entry transition has no name, source or clauses, and is refused when the +state already has an entry action. + ```go result, err := client.ApplyEdits(ctx, model, opensysml.Rename{Target: "Lib::Engine", NewName: "Motor"}) for _, doc := range result.Documents { @@ -145,7 +152,11 @@ by hand decodes the answers by [the wire contract](wire-contract.md). specializes=None, abstract=False, redefines=None, default=False, direction=None)` and its typed `add_*` helpers create declarations while preserving untouched source bytes. The editor also exposes `add_satisfy`, `add_requirement_constraint`, -`add_require_constraint` and `add_assume_constraint`. +`add_require_constraint`, `add_assume_constraint`, `add_transition` and +`add_entry_transition`. The calculation helpers accept `inputs`, `return_type` +and `return_expression`; the expression is bound to a result parameter, not +written as a `return ;` statement. Action helpers accept `inputs` and +`outputs`, each a list of `(name, type)` string pairs. `Editor.delete(target, cascade=False)` removes declarations transactionally; `Editor.move(target, owner)` carries one into another namespace of the same document and respells the references the diff --git a/docs/reference/service-transports.md b/docs/reference/service-transports.md index ad19a6b156..d8e4310913 100644 --- a/docs/reference/service-transports.md +++ b/docs/reference/service-transports.md @@ -51,7 +51,7 @@ capability's definition rather than something a client has to guess: | The capability describes | A request that needs it | What a client should do | |---|---|---| -| what the service can be *asked*: `strict_conformance`, `inline_language`, `parse_sources`, `evaluate_subject`, `verification`, `convert`, `apply_edits`, `authoring`, `connection_authoring`, `edit_documents`, `query`, `oslc_query`, `document_query`, `render_document`, `render_document_html`, `schedule`, `performer`, `satisfy_authoring`, `requirement_constraint_authoring`, `member_modifiers` | is **refused** with `UNIMPLEMENTED`, naming the capability | check the advertised list first, and report the missing capability locally rather than spending a round trip | +| what the service can be *asked*: `strict_conformance`, `inline_language`, `parse_sources`, `evaluate_subject`, `verification`, `convert`, `apply_edits`, `authoring`, `connection_authoring`, `edit_documents`, `query`, `oslc_query`, `document_query`, `render_document`, `render_document_html`, `schedule`, `performer`, `satisfy_authoring`, `requirement_constraint_authoring`, `member_modifiers`, `transition_authoring` | is **refused** with `UNIMPLEMENTED`, naming the capability | check the advertised list first, and report the missing capability locally rather than spending a round trip | | how a response is *populated*: `type_facts`, `symbol_attributes`, `feature_values`, `enum_values`, `unset_value`, `undetermined_value`, `complex_values`, `structured_values`, `measurement_refs`, `function_values`, `metaobject_values`, `verification_verdicts`, `case_evaluations`, `infinity_value`, `diagnostic_codes`, `final_time`, `edit_documents` | is answered with those fields **omitted** | check before reading the fields; an omitted field is not an error | `edit_documents` sits in both rows: without it `ApplyEdits` still edits a model of one document diff --git a/internal/check/edit/add.go b/internal/check/edit/add.go index d19db7afa3..5155bb665a 100644 --- a/internal/check/edit/add.go +++ b/internal/check/edit/add.go @@ -335,7 +335,7 @@ func (m Model) addOwner(fqn string) (ast.Node, *symbols.Scope, error) { Message: fmt.Sprintf("%q cannot contain members", fqn)} } switch local.Decl.(type) { - case *ast.Package, *ast.Namespace, *ast.Definition, *ast.Usage: + case *ast.Package, *ast.Namespace, *ast.Definition, *ast.Usage, *ast.SubstateMember: return local.Decl, local.Scope, nil default: return nil, nil, &Error{Failure: FailureOwnerNotNamespace, @@ -567,6 +567,8 @@ func bodyInfo(node ast.Node) (source.Span, bool) { return d.Span(), d.HasBody case *ast.Usage: return d.Span(), d.HasBody + case *ast.SubstateMember: + return d.Span(), false case *ast.TransitionMember: return d.Span(), d.HasBody case *ast.SuccessionEdge: diff --git a/internal/check/edit/edit.go b/internal/check/edit/edit.go index 2951dd5e82..bd8fbc1858 100644 --- a/internal/check/edit/edit.go +++ b/internal/check/edit/edit.go @@ -42,6 +42,8 @@ const ( OpAddSatisfy // OpAddRequirementConstraint inserts a requirement constraint. OpAddRequirementConstraint + // OpAddTransition inserts a transition usage into a state body. + OpAddTransition ) // Operation is one change to make to a model's source. @@ -89,6 +91,15 @@ type Operation struct { ConstraintKind string Expression string ConstraintName string + // TransitionSource, TransitionTarget, TransitionName and the optional + // trigger, guard and effect describe an OpAddTransition. + TransitionName string + TransitionSource string + TransitionTarget string + Trigger string + Guard string + Effect string + Initial bool // NewOwner is the namespace an OpMove moves Target into; empty means the root. NewOwner string // Annotation is the DiagramLayout metadata an OpSetLayout writes, by FQN @@ -148,6 +159,15 @@ func AddRequirementConstraint(owner, kind, expression, name string) Operation { } } +// AddTransition inserts a state transition, or an entry transition when initial. +func AddTransition(owner, name, from, to, trigger, guard, effect string, initial bool) Operation { + return Operation{ + Kind: OpAddTransition, Owner: owner, TransitionName: name, + TransitionSource: from, TransitionTarget: to, Trigger: trigger, + Guard: guard, Effect: effect, Initial: initial, + } +} + // Move is an operation making target a member of newOwner, "" for the root. func Move(target, newOwner string) Operation { return Operation{Kind: OpMove, Target: target, NewOwner: newOwner} @@ -580,6 +600,13 @@ func (m Model) splicesFor(i int, op Operation) ([]splice, error) { } return []splice{sp}, nil } + if op.Kind == OpAddTransition { + sp, err := m.addTransitionSplice(i, op) + if err != nil { + return nil, err + } + return []splice{sp}, nil + } if op.Kind == OpSetLayout { return m.layoutSplices(i, op) } diff --git a/internal/check/edit/substate_test.go b/internal/check/edit/substate_test.go new file mode 100644 index 0000000000..ef42ec52a5 --- /dev/null +++ b/internal/check/edit/substate_test.go @@ -0,0 +1,73 @@ +package edit + +import ( + "testing" +) + +func TestAddStateIntoBodilessSubstate(t *testing.T) { + source := "state def S {\n" + + " state toasting;\n" + + "}\n" + model := loadContent(t, "substate.sysml", source) + requireClean(t, model) + + result := applyOne(t, model, AddMember("S::toasting", "state", "heating")) + want := "state def S {\n" + + " state toasting {\n" + + " state heating;\n" + + " }\n" + + "}\n" + if got := string(result.Content); got != want { + t.Fatalf("edited source:\n%s\nwant:\n%s", got, want) + } + requireClean(t, loadContent(t, "substate.sysml", string(result.Content))) +} + +func TestAddTransitionIntoBodilessSubstate(t *testing.T) { + source := "state def S {\n" + + " state toasting;\n" + + "}\n" + model := loadContent(t, "substate-transition.sysml", source) + requireClean(t, model) + + result, err := Apply(model, []Operation{ + AddMember("S::toasting", "state", "heating"), + AddTransition("S::toasting", "", "", "heating", "", "", "", true), + }) + if err != nil { + t.Fatalf("Apply: %v", err) + } + requireClean(t, loadContent(t, "substate-transition.sysml", string(result.Content))) + want := "state def S {\n" + + " state toasting {\n" + + " state heating;\n" + + " entry; then heating;\n" + + " }\n" + + "}\n" + if got := string(result.Content); got != want { + t.Fatalf("edited source:\n%s\nwant:\n%s", got, want) + } +} + +func TestMoveIntoBodilessSubstate(t *testing.T) { + source := "package P {\n" + + " state def S {\n" + + " state toasting;\n" + + " }\n" + + " action cool;\n" + + "}\n" + model := loadContent(t, "substate-move.sysml", source) + requireClean(t, model) + + result := applyOne(t, model, Move("P::cool", "P::S::toasting")) + requireClean(t, loadContent(t, "substate-move.sysml", string(result.Content))) + if got := string(result.Content); got != "package P {\n"+ + " state def S {\n"+ + " state toasting {\n"+ + " action cool;\n"+ + " }\n"+ + " }\n"+ + "}\n" { + t.Fatalf("moved source:\n%s", got) + } +} diff --git a/internal/check/edit/transition.go b/internal/check/edit/transition.go new file mode 100644 index 0000000000..c1cfef8168 --- /dev/null +++ b/internal/check/edit/transition.go @@ -0,0 +1,184 @@ +package edit + +import ( + "fmt" + "strings" + + "github.com/Open-MBEE/OpenSysML/internal/syntax/ast" + "github.com/Open-MBEE/OpenSysML/internal/syntax/parser" + "github.com/Open-MBEE/OpenSysML/internal/syntax/source" +) + +func (m Model) addTransitionSplice(i int, op Operation) (splice, error) { + if m.Source.Kind() != source.KindSysML { + return splice{}, &Error{ + Failure: FailureIllegalKind, OperationIndex: i, + Message: fmt.Sprintf("transitions are not legal in %s source %q", + m.Source.Kind(), m.Source.Name()), + } + } + owner, ownerScope, err := m.addOwner(op.Owner) + if err != nil { + e := err.(*Error) + e.OperationIndex = i + return splice{}, e + } + if !stateBodyOwner(owner) { + return splice{}, &Error{ + Failure: FailureIllegalKind, OperationIndex: i, + Message: fmt.Sprintf("transitions are only admitted in a state body, which %s does not open", + ownerName(op.Owner)), + } + } + if err := checkEnd(i, "target", op.TransitionTarget); err != nil { + return splice{}, err + } + if op.Initial { + if op.TransitionName != "" || op.TransitionSource != "" || + op.Trigger != "" || op.Guard != "" || op.Effect != "" { + return splice{}, &Error{ + Failure: FailureIllegalKind, OperationIndex: i, + Message: "an entry transition cannot have a name, source, trigger, guard or effect", + } + } + for _, member := range ast.DeclMembers(owner) { + member = unwrapMembership(member) + if _, ok := member.(*ast.EntryMember); ok { + return splice{}, &Error{ + Failure: FailureIllegalKind, OperationIndex: i, + Message: fmt.Sprintf("%s already has an entry action", ownerName(op.Owner)), + } + } + } + ins := m.memberInsertion(owner, "entry; then "+op.TransitionTarget+";") + return splice{span: ins.span, text: ins.text, opIndex: i, target: op.Owner}, nil + } + if op.TransitionName != "" { + if err := checkName(i, op.TransitionName); err != nil { + e := err.(*Error) + e.Message = fmt.Sprintf("transition name %q is not an identifier", op.TransitionName) + return splice{}, e + } + } + if err := checkEnd(i, "source", op.TransitionSource); err != nil { + return splice{}, err + } + if op.TransitionName != "" && ownerScope != nil && + len(ownerScope.LookupLocalAll(op.TransitionName)) > 0 { + return splice{}, &Error{ + Failure: FailureMemberNameTaken, OperationIndex: i, + Message: fmt.Sprintf("%s already declares %q", ownerName(op.Owner), op.TransitionName), + } + } + text := writeTransition(op) + if err := validateTransitionText(i, op, text); err != nil { + return splice{}, err + } + ins := m.memberInsertion(owner, text) + return splice{span: ins.span, text: ins.text, opIndex: i, target: op.Owner}, nil +} + +func stateBodyOwner(owner ast.Node) bool { + switch d := owner.(type) { + case *ast.Definition: + return d.Kind == ast.DefState + case *ast.Usage: + return d.Kind == ast.UsageState + case *ast.SubstateMember: + return true + default: + return false + } +} + +func writeTransition(op Operation) string { + var text strings.Builder + text.WriteString("transition") + if op.TransitionName != "" { + text.WriteByte(' ') + text.WriteString(op.TransitionName) + } + text.WriteString(" first ") + text.WriteString(op.TransitionSource) + if op.Trigger != "" { + text.WriteString(" accept ") + text.WriteString(op.Trigger) + } + if op.Guard != "" { + text.WriteString(" if ") + text.WriteString(op.Guard) + } + if op.Effect != "" { + text.WriteString(" do ") + text.WriteString(op.Effect) + } + text.WriteString(" then ") + text.WriteString(op.TransitionTarget) + text.WriteByte(';') + return text.String() +} + +func validateTransitionText(i int, op Operation, text string) error { + wrapped := "state def __Transition {\n" + text + "\n}" + p := parser.New(source.New("", []byte(wrapped))) + root := p.ParseFile() + if len(p.Diagnostics) != 0 { + return invalidTransitionText(i) + } + if len(root.Members) != 1 { + return invalidTransitionText(i) + } + owner := unwrapMembership(root.Members[0]) + if _, ok := owner.(*ast.Definition); !ok { + return invalidTransitionText(i) + } + members := ast.DeclMembers(owner) + if len(members) != 1 { + return invalidTransitionText(i) + } + transition, ok := unwrapMembership(members[0]).(*ast.TransitionMember) + if !ok || transition.Name != op.TransitionName || + qualifiedNameText(transition.Source) != op.TransitionSource || + qualifiedNameText(transition.Target) != op.TransitionTarget || + (transition.Trigger != nil) != (op.Trigger != "") || + (transition.Guard != nil) != (op.Guard != "") || + transition.HasEffect != (op.Effect != "") { + return invalidTransitionText(i) + } + return nil +} + +func invalidTransitionText(i int) error { + return &Error{ + Failure: FailureInvalidValue, OperationIndex: i, + Message: "transition trigger, guard or effect does not form one grammar-admissible transition", + } +} + +func qualifiedNameText(name *ast.QualifiedName) string { + if name == nil { + return "" + } + var text strings.Builder + if name.Global { + text.WriteString("$::") + } + for i, part := range name.Parts { + if i > 0 { + if part.Chained { + text.WriteByte('.') + } else { + text.WriteString("::") + } + } + text.WriteString(part.Text) + } + return text.String() +} + +func unwrapMembership(member ast.Node) ast.Node { + if membership, ok := member.(*ast.Membership); ok && membership != nil { + return membership.Member + } + return member +} diff --git a/internal/check/edit/transition_test.go b/internal/check/edit/transition_test.go new file mode 100644 index 0000000000..9231306174 --- /dev/null +++ b/internal/check/edit/transition_test.go @@ -0,0 +1,122 @@ +package edit + +import ( + "strings" + "testing" +) + +const transitionTestModel = "package P {\n" + + " attribute def CycleStart;\n" + + " action def cool;\n" + + " state def S {\n" + + " state idle;\n" + + " state toasting;\n" + + " }\n" + + "}\n" + +func TestAddTransitionOptionalClauses(t *testing.T) { + tests := []struct { + name string + trigger string + guard string + effect string + want string + }{ + {name: "trigger", trigger: "CycleStart", want: "accept CycleStart"}, + {name: "guard", guard: "true", want: "if true"}, + {name: "effect", effect: "action cool", want: "do action cool"}, + { + name: "all clauses", + trigger: "CycleStart", guard: "true", effect: "action cool", + want: "accept CycleStart if true do action cool", + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + model := loadContent(t, "transition.sysml", transitionTestModel) + requireClean(t, model) + result := applyOne(t, model, AddTransition( + "P::S", "start", "idle", "toasting", + test.trigger, test.guard, test.effect, false, + )) + if !strings.Contains(string(result.Content), "transition start first idle "+test.want+" then toasting;") { + t.Fatalf("transition clauses missing:\n%s", result.Content) + } + requireClean(t, loadContent(t, "transition.sysml", string(result.Content))) + }) + } +} + +func TestAddEntryTransition(t *testing.T) { + model := loadContent(t, "entry-transition.sysml", + "state def S { state idle; }\n") + requireClean(t, model) + result := applyOne(t, model, AddTransition("S", "", "", "idle", "", "", "", true)) + if !strings.Contains(string(result.Content), "entry; then idle;") { + t.Fatalf("entry transition missing:\n%s", result.Content) + } + requireClean(t, loadContent(t, "entry-transition.sysml", string(result.Content))) +} + +func TestAddTransitionRefusesGrammarInjection(t *testing.T) { + for _, test := range []struct { + name string + trigger string + guard string + }{ + {name: "semicolon member", trigger: "X; part p"}, + {name: "injected target", trigger: "X then idle"}, + {name: "closing body", guard: "true }"}, + } { + t.Run(test.name, func(t *testing.T) { + model := loadContent(t, "transition-injection.sysml", transitionTestModel) + addFailure(t, model, AddTransition( + "P::S", "", "idle", "toasting", + test.trigger, test.guard, "", false, + ), FailureInvalidValue) + }) + } +} + +func TestAddEntryTransitionRefusals(t *testing.T) { + tests := []struct { + name string + op Operation + }{ + {"name", AddTransition("S", "named", "", "idle", "", "", "", true)}, + {"source", AddTransition("S", "", "idle", "idle", "", "", "", true)}, + {"trigger", AddTransition("S", "", "", "idle", "CycleStart", "", "", true)}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + model := loadContent(t, "entry-refusal.sysml", "state def S { state idle; }\n") + addFailure(t, model, test.op, FailureIllegalKind) + }) + } + + model := loadContent(t, "second-entry.sysml", + "state def S { state idle; entry; then idle; }\n") + addFailure(t, model, AddTransition("S", "", "", "idle", "", "", "", true), FailureIllegalKind) +} + +func TestAddTransitionRequiresStateOwnerAndSysML(t *testing.T) { + model := loadContent(t, "transition-owner.sysml", "part def P;\n") + addFailure(t, model, AddTransition("P", "", "a", "b", "", "", "", false), FailureIllegalKind) + + kerml := loadContent(t, "transition-owner.kerml", "package P;\n") + addFailure(t, kerml, AddTransition("", "", "a", "b", "", "", "", false), FailureIllegalKind) +} + +func TestAddTransitionUnknownTargetIsRefusedByAnalysis(t *testing.T) { + model := loadContent(t, "transition-unknown.sysml", + "state def S { state idle; }\n") + addFailure(t, model, AddTransition("S", "", "idle", "missing", "", "", "", false), + FailureResultInvalid) +} + +func TestAddTransitionRejectsAnExistingName(t *testing.T) { + model := loadContent(t, "transition-name.sysml", transitionTestModel) + addFailure(t, model, AddTransition( + "P::S", "idle", "idle", "toasting", "", "", "", false, + ), FailureMemberNameTaken) +} diff --git a/internal/frontend/grpc/authoring_test.go b/internal/frontend/grpc/authoring_test.go index 33d4f74074..fd6192794e 100644 --- a/internal/frontend/grpc/authoring_test.go +++ b/internal/frontend/grpc/authoring_test.go @@ -42,6 +42,15 @@ func addRequirementConstraintOp(owner, kind, expression, name string) *pb.EditOp }} } +func addTransitionOp(owner, name, source, target, trigger, guard, effect string, initial bool) *pb.EditOperation { + return &pb.EditOperation{Operation: &pb.EditOperation_AddTransition{ + AddTransition: &pb.AddTransitionEdit{ + Owner: owner, Name: name, Source: source, Target: target, + Trigger: trigger, Guard: guard, Effect: effect, Initial: initial, + }, + }} +} + func deleteOp(target string, cascade bool) *pb.EditOperation { return &pb.EditOperation{Operation: &pb.EditOperation_Delete{ Delete: &pb.DeleteEdit{Target: target, Cascade: cascade}, @@ -258,6 +267,32 @@ func TestApplyEditsAddConnectionRequiresConnectionAuthoring(t *testing.T) { } } +func TestApplyEditsAddTransitionRequiresTransitionAuthoring(t *testing.T) { + srv := mustNewServiceWithout(t, CapabilityTransitionAuthoring) + ctx := context.Background() + hash := mustParsedModel(t, srv, "state def S { state idle; }\n") + _, err := srv.ApplyEdits(ctx, &pb.ApplyEditsRequest{ + ModelHash: hash, + Operations: []*pb.EditOperation{ + addTransitionOp("S", "", "", "idle", "", "", "", true), + }, + }) + if connect.CodeOf(err) != connect.CodeUnimplemented || + !strings.Contains(err.Error(), CapabilityTransitionAuthoring) { + t.Fatalf("ApplyEdits refusal = %v, want UNIMPLEMENTED naming %q", err, CapabilityTransitionAuthoring) + } + + added, err := srv.ApplyEdits(ctx, &pb.ApplyEditsRequest{ + ModelHash: hash, Operations: []*pb.EditOperation{addMemberOp("S", "state", "toasting")}, + }) + if err != nil { + t.Fatalf("ApplyEdits add_member: %v", err) + } + if added.Error != "" || !strings.Contains(added.Content, "state toasting") { + t.Fatalf("add_member response = %+v, want the new state", added) + } +} + func TestApplyEditsNewAuthoringOperationsRequireDedicatedCapabilities(t *testing.T) { tests := []struct { name string @@ -288,6 +323,11 @@ func TestApplyEditsNewAuthoringOperationsRequireDedicatedCapabilities(t *testing capability: CapabilityRequirementConstraintAuthoring, operation: addRequirementConstraintOp("Demo::r", "require", "true", ""), }, + { + name: "transition", + capability: CapabilityTransitionAuthoring, + operation: addTransitionOp("Demo::S", "", "idle", "idle", "", "", "", false), + }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { @@ -373,7 +413,7 @@ func TestGetServerInfoAuthoringCapabilities(t *testing.T) { for _, capability := range []string{ CapabilityAuthoring, CapabilityConnectionAuthoring, CapabilitySatisfyAuthoring, CapabilityRequirementConstraintAuthoring, - CapabilityMemberModifiers, CapabilityInlineLanguage, + CapabilityMemberModifiers, CapabilityTransitionAuthoring, CapabilityInlineLanguage, } { if !slices.Contains(info.Capabilities, capability) { t.Errorf("capabilities = %v, want %q", info.Capabilities, capability) diff --git a/internal/frontend/grpc/capability_test.go b/internal/frontend/grpc/capability_test.go index bfb38ae991..2578320a06 100644 --- a/internal/frontend/grpc/capability_test.go +++ b/internal/frontend/grpc/capability_test.go @@ -111,6 +111,12 @@ func TestCapabilityGatedRequestsAreRefused(t *testing.T) { }) return err }}, + {"transition authoring", CapabilityTransitionAuthoring, func(s *Service) error { + _, err := s.ApplyEdits(ctx, &pb.ApplyEditsRequest{ + Operations: []*pb.EditOperation{addTransitionOp("P::S", "", "idle", "idle", "", "", "", false)}, + }) + return err + }}, {"member modifiers", CapabilityMemberModifiers, func(s *Service) error { _, err := s.ApplyEdits(ctx, &pb.ApplyEditsRequest{ Operations: []*pb.EditOperation{{ diff --git a/internal/frontend/grpc/edit.go b/internal/frontend/grpc/edit.go index 8ab7476e76..b07b9fd9ba 100644 --- a/internal/frontend/grpc/edit.go +++ b/internal/frontend/grpc/edit.go @@ -50,6 +50,11 @@ func (s *Service) ApplyEdits(ctx context.Context, req *pb.ApplyEditsRequest) (*p return nil, err } } + if requestsTransitionAuthoring(req.Operations) { + if err := s.requireCapability(CapabilityTransitionAuthoring); err != nil { + return nil, err + } + } if requestsMemberModifiers(req.Operations) { if err := s.requireCapability(CapabilityMemberModifiers); err != nil { return nil, err @@ -201,6 +206,7 @@ func requestsAuthoring(operations []*pb.EditOperation) bool { switch operation.GetOperation().(type) { case *pb.EditOperation_AddMember, *pb.EditOperation_AddConnection, *pb.EditOperation_AddSatisfy, *pb.EditOperation_AddRequirementConstraint, + *pb.EditOperation_AddTransition, *pb.EditOperation_Delete, *pb.EditOperation_Move: return true } @@ -247,6 +253,15 @@ func requestsRequirementConstraintAuthoring(operations []*pb.EditOperation) bool return false } +func requestsTransitionAuthoring(operations []*pb.EditOperation) bool { + for _, operation := range operations { + if _, ok := operation.GetOperation().(*pb.EditOperation_AddTransition); ok { + return true + } + } + return false +} + // editOperations reads the operations a request carries, rejecting a request // that names none of the forms: an unset operation is a client fault rather // than a refused edit. @@ -288,6 +303,12 @@ func editOperations(pbOps []*pb.EditOperation) ([]edit.Operation, error) { ops = append(ops, edit.AddRequirementConstraint( add.GetOwner(), add.GetKind(), add.GetExpression(), add.GetName(), )) + case *pb.EditOperation_AddTransition: + add := op.AddTransition + ops = append(ops, edit.AddTransition( + add.GetOwner(), add.GetName(), add.GetSource(), add.GetTarget(), + add.GetTrigger(), add.GetGuard(), add.GetEffect(), add.GetInitial(), + )) case *pb.EditOperation_Delete: del := op.Delete ops = append(ops, edit.Delete(del.GetTarget(), del.GetCascade())) @@ -295,7 +316,7 @@ func editOperations(pbOps []*pb.EditOperation) ([]edit.Operation, error) { ops = append(ops, edit.Move(op.Move.GetTarget(), op.Move.GetOwner())) default: return nil, statusErrorf(connect.CodeInvalidArgument, - "operation %d must be set_value, rename, add_member, add_connection, delete or move", i) + "operation %d must name a supported edit operation", i) } } return ops, nil diff --git a/internal/frontend/grpc/service.go b/internal/frontend/grpc/service.go index 164bab7492..26dfa860d7 100644 --- a/internal/frontend/grpc/service.go +++ b/internal/frontend/grpc/service.go @@ -95,6 +95,9 @@ const CapabilityRequirementConstraintAuthoring = "requirement_constraint_authori // CapabilityMemberModifiers names the additional AddMember modifiers and kinds. const CapabilityMemberModifiers = "member_modifiers" +// CapabilityTransitionAuthoring names the ApplyEdits add_transition operation. +const CapabilityTransitionAuthoring = "transition_authoring" + // CapabilityEditDocuments names the capability of editing a model of several // documents as one batch, for a request accepting documents, and of answering // each edited document by name in ApplyEditsResponse.documents. @@ -212,6 +215,7 @@ var capabilities = []string{ CapabilitySatisfyAuthoring, CapabilityRequirementConstraintAuthoring, CapabilityMemberModifiers, + CapabilityTransitionAuthoring, } type capabilityAvailability struct { diff --git a/internal/syntax/parser/defusage.go b/internal/syntax/parser/defusage.go index 024ee16c82..86e4e7a632 100644 --- a/internal/syntax/parser/defusage.go +++ b/internal/syntax/parser/defusage.go @@ -2042,6 +2042,8 @@ func BodyAdmitsBehaviorUsage(owner ast.Node) bool { return d.Kind != ast.DefEnumeration case *ast.Usage: return d.Kind != ast.UsageMetadata + case *ast.SubstateMember: + return true default: return true } @@ -2059,6 +2061,8 @@ func declarationBodyContext(owner ast.Node) bodyContext { body = defBodyContext(d.Kind) case *ast.Usage: body = usageBodyContext(d.Kind) + case *ast.SubstateMember: + body = usageBodyContext(ast.UsageState) } return body } diff --git a/internal/syntax/parser/defusage_test.go b/internal/syntax/parser/defusage_test.go index a8f6a66f3e..c48cb5b64b 100644 --- a/internal/syntax/parser/defusage_test.go +++ b/internal/syntax/parser/defusage_test.go @@ -427,6 +427,30 @@ func TestBodyKindsForAuthoring(t *testing.T) { } } +func TestSubstateUsesStateBodyContext(t *testing.T) { + owner := parseOneMember(t, "state def S { state toasting; }").(*ast.Definition) + substate := ast.DeclMembers(owner)[0] + if membership, ok := substate.(*ast.Membership); ok { + substate = membership.Member + } + if _, ok := substate.(*ast.SubstateMember); !ok { + t.Fatalf("state body member = %T, want *ast.SubstateMember", substate) + } + if got := declarationBodyContext(substate); got != usageBodyContext(ast.UsageState) { + t.Errorf("substate body context = %v, want state usage context %v", + got, usageBodyContext(ast.UsageState)) + } + if !BodyAdmitsBehaviorUsage(substate) { + t.Error("substate body does not admit behavior usages") + } + if BodyIsCalculation(substate) { + t.Error("substate body is classified as a calculation") + } + if !BodyAdmitsMember(substate, "entry") || !BodyAdmitsMember(substate, "transition") { + t.Error("substate body does not admit state members") + } +} + func TestBodyAdmitsBehaviorUsage(t *testing.T) { for _, tc := range []struct { src string diff --git a/tests/export/top_level_redefinition_value_test.go b/tests/export/top_level_redefinition_value_test.go new file mode 100644 index 0000000000..613d52b129 --- /dev/null +++ b/tests/export/top_level_redefinition_value_test.go @@ -0,0 +1,54 @@ +package export_test + +import ( + "testing" + + "github.com/Open-MBEE/OpenSysML/internal/translate/convert" + "github.com/Open-MBEE/OpenSysML/internal/translate/rdf" +) + +func TestTopLevelRedefinitionRetainsValueInOwnedAttribute(t *testing.T) { + src := `package P { + attribute def Tempo { + attribute operative; + } + part def Block { + attribute tempo : Tempo; + } + part def Writer :> Block { + attribute :>> tempo = Tempo::operative; + } +} +` + turtle, err := convert.Convert("m.sysml", []byte(src), convert.FormatSysML, convert.FormatTurtle) + if err != nil { + t.Fatalf("to turtle: %v", err) + } + graph, err := rdf.ParseTurtle(turtle) + if err != nil { + t.Fatalf("parse turtle: %v", err) + } + writer := elementNamed(t, graph, "P::Writer") + attribute := elementNamed(t, graph, "P::Writer::tempo") + if got := rdf.LocalName(graph.Type(attribute)); got != "AttributeUsage" { + t.Fatalf("redefined member has type %q, want AttributeUsage", got) + } + if got, ok := graph.Object(attribute, rdf.SysML+"owningNamespace"); !ok || got != writer { + t.Errorf("attribute owningNamespace = %v, want %v", got, writer) + } + membership := rdf.OwningMembershipIRI("P::Writer::tempo") + if got := graph.Objects(writer, rdf.SysML+"ownedMembership"); len(got) == 0 || got[0] != membership { + t.Errorf("Writer ownedMembership = %v, want membership %v", got, membership) + } + wantRedefined := elementNamed(t, graph, "P::Block::tempo") + if got := graph.Objects(attribute, rdf.SysML+"redefines"); len(got) != 1 || got[0] != wantRedefined { + t.Errorf("attribute redefines = %v, want Block::tempo %v", got, wantRedefined) + } + value, ok := graph.Object(attribute, rdf.SysML+"value") + if !ok { + t.Fatal("redefined attribute has no value") + } + if got, ok := graph.Lexical(value, rdf.OpenSysML+"sourceText"); !ok || got != "Tempo::operative" { + t.Errorf("value sourceText = %q, present=%v, want Tempo::operative", got, ok) + } +} diff --git a/tests/grpc/conformance_test.go b/tests/grpc/conformance_test.go index 1ec27275e2..037fefac05 100644 --- a/tests/grpc/conformance_test.go +++ b/tests/grpc/conformance_test.go @@ -120,6 +120,11 @@ type conformanceEditOperation struct { Direction string `json:"direction,omitempty"` Requirement string `json:"requirement,omitempty"` SatisfyingFeature string `json:"satisfying_feature,omitempty"` + TransitionSource string `json:"source,omitempty"` + Trigger string `json:"trigger,omitempty"` + Guard string `json:"guard,omitempty"` + Effect string `json:"effect,omitempty"` + Initial bool `json:"initial,omitempty"` Asserted bool `json:"is_asserted,omitempty"` Negated bool `json:"is_negated,omitempty"` Expression string `json:"expression,omitempty"` @@ -257,6 +262,14 @@ func runApplyEditsCase(t *testing.T, srv *grpc.Service, ctx context.Context, mod }, }, }) + case "add_transition": + operations = append(operations, &pb.EditOperation{ + Operation: &pb.EditOperation_AddTransition{AddTransition: &pb.AddTransitionEdit{ + Owner: op.Owner, Name: op.Name, Source: op.TransitionSource, + Target: op.Target, Trigger: op.Trigger, Guard: op.Guard, + Effect: op.Effect, Initial: op.Initial, + }}, + }) case "delete": operations = append(operations, &pb.EditOperation{ Operation: &pb.EditOperation_Delete{Delete: &pb.DeleteEdit{ From 5d0dfd32ff4ed7fbdb040dcfa4346d6f0654018f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 12:53:26 +0000 Subject: [PATCH 2/7] docs(api): describe entry transitions as the initial form of add_transition Co-Authored-By: jason.han --- docs/reference/api.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/reference/api.md b/docs/reference/api.md index 530f9a3841..74e91b6f48 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -99,8 +99,7 @@ and `type` fields: | `add_connection` | `owner`, `kind`, `from_end`, `to_end`, `name?`, `type?` | A `connection`, `interface`, `allocation`, `binding`, `flow`, `succession` or `transition` (KerML: `connector`, `binding`, `flow`, `succession`) in the owner's body, with `from_end` and `to_end` written as they resolve from the owner's scope (`tank.fuelOut`). | | `add_satisfy` | `owner`, `requirement`, `satisfying_feature?`, `is_asserted`, `is_negated` | A SysML `satisfy` usage in a package or body whose grammar admits behavior usages. Both targets are lexical feature references; analysis checks that the resolved requirement target is a requirement. | | `add_requirement_constraint` | `owner`, `kind`, `expression`, `name?` | A `require constraint` or `assume constraint` in a requirement-like body. The expression must parse and analyze; other kinds and placements are refused. | -| `add_transition` | `owner`, `source`, `target`, `name?`, `trigger?`, `guard?`, `effect?` | A state transition in a state definition or usage, including an exhibited or bodiless nested state. Each free-text clause must form exactly one grammar-admissible transition. | -| `add_entry_transition` | `owner`, `target` | An entry transition (`entry; then ;`) in a state body that has no existing entry action. | +| `add_transition` | `owner`, `source`, `target`, `name?`, `trigger?`, `guard?`, `effect?`, `initial` | A state transition in a state definition or usage, including an exhibited or bodiless nested state. Each free-text clause must form exactly one grammar-admissible transition. With `initial`, an entry transition (`entry; then ;`) in a state body that has no existing entry action. | `type` is accepted only for connection kinds that permit a typing target. `add_connection` requires both the `authoring` and `connection_authoring` capabilities. From 7fda3132fd3f814b5fbe3f4ac9d84b76ffed9cd4 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 13:44:16 +0000 Subject: [PATCH 3/7] test(export): find unnamed redefinition by ownership Co-Authored-By: jason.han --- tests/export/top_level_redefinition_value_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/export/top_level_redefinition_value_test.go b/tests/export/top_level_redefinition_value_test.go index 613d52b129..099277fa61 100644 --- a/tests/export/top_level_redefinition_value_test.go +++ b/tests/export/top_level_redefinition_value_test.go @@ -29,14 +29,21 @@ func TestTopLevelRedefinitionRetainsValueInOwnedAttribute(t *testing.T) { t.Fatalf("parse turtle: %v", err) } writer := elementNamed(t, graph, "P::Writer") - attribute := elementNamed(t, graph, "P::Writer::tempo") + owned := graph.Objects(writer, rdf.SysML+"ownedMember") + if len(owned) != 1 { + t.Fatalf("Writer has %d owned members, want one", len(owned)) + } + attribute := owned[0] if got := rdf.LocalName(graph.Type(attribute)); got != "AttributeUsage" { t.Fatalf("redefined member has type %q, want AttributeUsage", got) } if got, ok := graph.Object(attribute, rdf.SysML+"owningNamespace"); !ok || got != writer { t.Errorf("attribute owningNamespace = %v, want %v", got, writer) } - membership := rdf.OwningMembershipIRI("P::Writer::tempo") + membership, ok := graph.Object(attribute, rdf.SysML+"owningMembership") + if !ok { + t.Fatal("redefined attribute has no owning membership") + } if got := graph.Objects(writer, rdf.SysML+"ownedMembership"); len(got) == 0 || got[0] != membership { t.Errorf("Writer ownedMembership = %v, want membership %v", got, membership) } From ac031ea2a21cf6ceaa0926a403a02c6967ad6a4f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 14:21:14 +0000 Subject: [PATCH 4/7] test(lsp): include state usages as entry-action owners Co-Authored-By: jason.han --- internal/frontend/lsp/modeledit_test.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/frontend/lsp/modeledit_test.go b/internal/frontend/lsp/modeledit_test.go index ecc3482c21..1c552e82da 100644 --- a/internal/frontend/lsp/modeledit_test.go +++ b/internal/frontend/lsp/modeledit_test.go @@ -769,8 +769,21 @@ func TestRenderPaletteOwnersCoverDrawnNotations(t *testing.T) { ids[n.FQN] = n.ID } got := out.Palette.Owners["entry action"] - if len(got) != 1 || got[0] != ids["Ops::Run"] { - t.Fatalf("owners of entry action = %v, want [%s] (Ops::Run)", got, ids["Ops::Run"]) + want := []string{ids["Ops::Run"], ids["Ops::Run::idle"]} + if want[0] == "" || want[1] == "" { + t.Fatalf("rendered nodes omit an entry-action owner: %v", ids) + } + if len(got) != len(want) { + t.Fatalf("owners of entry action = %v, want %v (Ops::Run and Ops::Run::idle)", got, want) + } + for _, id := range want { + found := false + for _, owner := range got { + found = found || owner == id + } + if !found { + t.Errorf("owners of entry action = %v, missing %s", got, id) + } } if _, ok := out.Palette.Owners["state"]; ok { t.Error("state is owner-bound") From 1ca3e995040c5c8b7f73d4b57a433712fe8f9832 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 15:20:04 +0000 Subject: [PATCH 5/7] fix(edit): compare transition spans and require return types Co-Authored-By: jason.han --- .../unreleased/authoring-transitions.added.md | 2 +- client/python/README.md | 6 +-- client/python/opensysml/edit.py | 12 +++-- client/python/tests/test_edit.py | 17 +++++++ docs/guide/09-clients.md | 6 +-- docs/reference/api.md | 6 +-- internal/check/edit/transition.go | 51 +++++++++++-------- internal/check/edit/transition_test.go | 14 +++++ 8 files changed, 79 insertions(+), 35 deletions(-) diff --git a/changes/unreleased/authoring-transitions.added.md b/changes/unreleased/authoring-transitions.added.md index 98e76cf583..fb7bd0731c 100644 --- a/changes/unreleased/authoring-transitions.added.md +++ b/changes/unreleased/authoring-transitions.added.md @@ -1 +1 @@ -- **Source-preserving authoring now supports state transitions and behavior parameters.** Add regular or entry transitions with validated trigger, guard and effect clauses, and create calculations or actions with their parameters in one edit batch. +- **Source-preserving authoring now supports state transitions and behavior parameters.** Add regular or entry transitions with validated trigger, guard and effect clauses, and create calculations or actions with their parameters in one edit batch. A calculation return expression requires a return type. diff --git a/client/python/README.md b/client/python/README.md index 036e5427c9..38f4087189 100644 --- a/client/python/README.md +++ b/client/python/README.md @@ -55,9 +55,9 @@ dedicated `member_modifiers`, `satisfy_authoring`, `requirement_constraint_authoring` or `transition_authoring` capability as applicable. `add_calc_def` and `add_calc` accept input pairs, `return_type` and -`return_expression`; that expression is bound to the result parameter rather than -written as `return ;`. `add_action_def` and `add_action` accept input and -output pairs. +`return_expression`; a return expression requires a return type and is bound to +the result parameter rather than written as `return ;`. `add_action_def` +and `add_action` accept input and output pairs. Use `opensysml.loads(text, language="kerml")` for inline KerML content. diff --git a/client/python/opensysml/edit.py b/client/python/opensysml/edit.py index 299870d8ba..64c149f061 100644 --- a/client/python/opensysml/edit.py +++ b/client/python/opensysml/edit.py @@ -570,12 +570,14 @@ def add_calc_def( ): """Add a ``calc def`` with input parameters and an optional result. - ``return_expression`` is bound to the result parameter; it does not - write a ``return ;`` statement. + ``return_expression`` requires ``return_type`` and is bound to that + result parameter; it does not write a ``return ;`` statement. """ inputs = _parameter_pairs(inputs, "inputs") _optional_text(return_type, "return_type") _optional_text(return_expression, "return_expression") + if return_expression is not None and not return_type: + raise ValueError("return_expression requires return_type") owner = _owner_id(owner) self.add_member(owner, "calc def", name, **kwargs) qualified_name = name if owner == "" else owner + "::" + name @@ -594,12 +596,14 @@ def add_calc( ): """Add a ``calc`` with input parameters and an optional result. - ``return_expression`` is bound to the result parameter; it does not - write a ``return ;`` statement. + ``return_expression`` requires ``return_type`` and is bound to that + result parameter; it does not write a ``return ;`` statement. """ inputs = _parameter_pairs(inputs, "inputs") _optional_text(return_type, "return_type") _optional_text(return_expression, "return_expression") + if return_expression is not None and not return_type: + raise ValueError("return_expression requires return_type") owner = _owner_id(owner) self.add_member(owner, "calc", name, **kwargs) qualified_name = name if owner == "" else owner + "::" + name diff --git a/client/python/tests/test_edit.py b/client/python/tests/test_edit.py index 38f1b55114..52d42a2712 100644 --- a/client/python/tests/test_edit.py +++ b/client/python/tests/test_edit.py @@ -318,6 +318,23 @@ def test_calc_and_action_helpers_reject_invalid_parameter_shapes( assert len(editor) == 0 +@pytest.mark.parametrize("method", ["add_calc_def", "add_calc"]) +@pytest.mark.parametrize("return_type", [None, ""]) +def test_calc_helpers_require_return_type_for_return_expression(method, return_type): + editor = Editor("hash", None) + editor.add_member("Demo", "part", "existing") + pending = editor.operations + + with pytest.raises( + ValueError, match="^return_expression requires return_type$" + ): + getattr(editor, method)( + "Demo", "C", return_type=return_type, return_expression="x * 2" + ) + + assert editor.operations == pending + + def test_new_authoring_operations_and_member_modifiers_are_exact(fake_service): port, service = fake_service( capabilities=( diff --git a/docs/guide/09-clients.md b/docs/guide/09-clients.md index 58a1c527a2..e6969cd140 100644 --- a/docs/guide/09-clients.md +++ b/docs/guide/09-clients.md @@ -1144,9 +1144,9 @@ declaration. Typed `add_*` helpers cover the common SysML and KerML kinds, inclu `add_require_constraint` and `add_assume_constraint` write requirement statements. `add_transition` and `add_entry_transition` write regular and entry transitions in state bodies. `add_calc_def` and `add_calc` accept `inputs`, `return_type` and `return_expression`; -the expression is bound to the result parameter and is not written as -`return ;`. `add_action_def` and `add_action` accept `inputs` and `outputs` -as lists of `(name, type)` string pairs. +a return expression requires a return type and is bound to the result parameter, +not written as `return ;`. `add_action_def` and `add_action` accept +`inputs` and `outputs` as lists of `(name, type)` string pairs. `add_connection(owner, kind, from_, to, name=None, type=None)` writes a `connection`, `interface`, `allocation`, `binding`, `flow`, `succession` or `transition` (KerML: `connector`, `binding`, `flow` or `succession`); its feature references resolve from the owner's diff --git a/docs/reference/api.md b/docs/reference/api.md index 74e91b6f48..be3e97e167 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -153,9 +153,9 @@ and its typed `add_*` helpers create declarations while preserving untouched source bytes. The editor also exposes `add_satisfy`, `add_requirement_constraint`, `add_require_constraint`, `add_assume_constraint`, `add_transition` and `add_entry_transition`. The calculation helpers accept `inputs`, `return_type` -and `return_expression`; the expression is bound to a result parameter, not -written as a `return ;` statement. Action helpers accept `inputs` and -`outputs`, each a list of `(name, type)` string pairs. +and `return_expression`; a return expression requires a return type and is +bound to the result parameter, not written as a `return ;` statement. +Action helpers accept `inputs` and `outputs`, each a list of `(name, type)` string pairs. `Editor.delete(target, cascade=False)` removes declarations transactionally; `Editor.move(target, owner)` carries one into another namespace of the same document and respells the references the diff --git a/internal/check/edit/transition.go b/internal/check/edit/transition.go index c1cfef8168..914886c072 100644 --- a/internal/check/edit/transition.go +++ b/internal/check/edit/transition.go @@ -137,9 +137,16 @@ func validateTransitionText(i int, op Operation, text string) error { return invalidTransitionText(i) } transition, ok := unwrapMembership(members[0]).(*ast.TransitionMember) - if !ok || transition.Name != op.TransitionName || - qualifiedNameText(transition.Source) != op.TransitionSource || - qualifiedNameText(transition.Target) != op.TransitionTarget || + if !ok || transition.Source == nil || transition.Target == nil { + return invalidTransitionText(i) + } + nameText, nameOK := transitionSpanText(wrapped, transition.NameSpan) + sourceText, sourceOK := transitionQualifiedNameText(wrapped, transition.Source) + targetText, targetOK := transitionQualifiedNameText(wrapped, transition.Target) + if !nameOK || !sourceOK || !targetOK || + nameText != op.TransitionName || + sourceText != op.TransitionSource || + targetText != op.TransitionTarget || (transition.Trigger != nil) != (op.Trigger != "") || (transition.Guard != nil) != (op.Guard != "") || transition.HasEffect != (op.Effect != "") { @@ -155,25 +162,27 @@ func invalidTransitionText(i int) error { } } -func qualifiedNameText(name *ast.QualifiedName) string { - if name == nil { - return "" +func transitionSpanText(text string, span source.Span) (string, bool) { + end := span.Offset + span.Len + if span.Offset < 0 || span.Len < 0 || end < span.Offset || end > len(text) { + return "", false } - var text strings.Builder - if name.Global { - text.WriteString("$::") - } - for i, part := range name.Parts { - if i > 0 { - if part.Chained { - text.WriteByte('.') - } else { - text.WriteString("::") - } - } - text.WriteString(part.Text) - } - return text.String() + return text[span.Offset:end], true +} + +func transitionQualifiedNameText(text string, name *ast.QualifiedName) (string, bool) { + if name == nil || len(name.Parts) == 0 { + return "", false + } + last := name.Parts[len(name.Parts)-1].Span + end := last.Offset + last.Len + if end < last.Offset || end < name.NodeSpan.Offset { + return "", false + } + return transitionSpanText(text, source.Span{ + Offset: name.NodeSpan.Offset, + Len: end - name.NodeSpan.Offset, + }) } func unwrapMembership(member ast.Node) ast.Node { diff --git a/internal/check/edit/transition_test.go b/internal/check/edit/transition_test.go index 9231306174..16be7b25ab 100644 --- a/internal/check/edit/transition_test.go +++ b/internal/check/edit/transition_test.go @@ -47,6 +47,20 @@ func TestAddTransitionOptionalClauses(t *testing.T) { } } +func TestAddTransitionPreservesQuotedNames(t *testing.T) { + model := loadContent(t, "quoted-transition.sysml", + "state def S { state 'waiting room'; state done; }\n") + requireClean(t, model) + result := applyOne(t, model, AddTransition( + "S", "'to done'", "'waiting room'", "done", "", "", "", false, + )) + if !strings.Contains(string(result.Content), + "transition 'to done' first 'waiting room' then done;") { + t.Fatalf("quoted transition missing:\n%s", result.Content) + } + requireClean(t, loadContent(t, "quoted-transition.sysml", string(result.Content))) +} + func TestAddEntryTransition(t *testing.T) { model := loadContent(t, "entry-transition.sysml", "state def S { state idle; }\n") From 098ff193a4e1ca994ffe2295e3bacdf3e156112e Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 15:54:12 +0000 Subject: [PATCH 6/7] fix(edit): validate transition clause text and order Co-Authored-By: jason.han --- .../unreleased/authoring-transitions.added.md | 2 +- docs/project/protocol-state-machines.md | 7 +- docs/reference/api.md | 6 +- internal/check/edit/transition.go | 89 ++++++++++++++++++- internal/check/edit/transition_test.go | 21 +++++ internal/syntax/parser/behavior.go | 32 +++++-- .../syntax/parser/transition_clauses_test.go | 53 +++++++++++ 7 files changed, 190 insertions(+), 20 deletions(-) create mode 100644 internal/syntax/parser/transition_clauses_test.go diff --git a/changes/unreleased/authoring-transitions.added.md b/changes/unreleased/authoring-transitions.added.md index fb7bd0731c..97ef008e21 100644 --- a/changes/unreleased/authoring-transitions.added.md +++ b/changes/unreleased/authoring-transitions.added.md @@ -1 +1 @@ -- **Source-preserving authoring now supports state transitions and behavior parameters.** Add regular or entry transitions with validated trigger, guard and effect clauses, and create calculations or actions with their parameters in one edit batch. A calculation return expression requires a return type. +- **Source-preserving authoring now supports state transitions and behavior parameters.** Add regular or entry transitions with at most one `accept`, `if` and `do` clause in grammar order, and create calculations or actions with their parameters in one edit batch. A calculation return expression requires a return type. diff --git a/docs/project/protocol-state-machines.md b/docs/project/protocol-state-machines.md index d4b1d8b40e..29dd9725e4 100644 --- a/docs/project/protocol-state-machines.md +++ b/docs/project/protocol-state-machines.md @@ -45,9 +45,10 @@ which of those spellings OpenSysML runs today. definition to parts: a `port def` is an occurrence definition (its base is `Ports::Port`, which specializes `Objects::Object`, itself an `Occurrence`), so a port definition may exhibit a state machine, and so may an `interface def` (`Interfaces::Interface :> Connection`). -- **§7.18.3 — transitions.** A transition is `first accept [if ] - [do ] then `. The trigger is an `AcceptActionUsage`; the guard is a Boolean - expression over the performer's features; the effect is optional. Dropping the effect leaves a +- **§7.18.3 — transitions.** A transition has at most one of each optional clause, in this order: + `first [accept ] [if ] [do ] then `. The trigger is an + `AcceptActionUsage`; the guard is a Boolean expression over the performer's features; the effect + is optional. Dropping the effect leaves a transition that is exactly a "guarded change of state on a reception" — the shape of a protocol transition minus its post-condition. - **§7.17.8 — accept actions and `via`.** `accept via ` accepts a transfer whose diff --git a/docs/reference/api.md b/docs/reference/api.md index be3e97e167..104dd872d2 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -109,9 +109,9 @@ and `type` fields: the `ref`/`return` kind also requires `member_modifiers`. Clients preflight these capabilities before sending the operation. -Regular transitions always write `first ` and may add `accept `, `if ` and -`do ` clauses. An entry transition has no name, source or clauses, and is refused when the -state already has an entry action. +Regular transitions always write `first ` and may add at most one `accept `, one +`if ` and one `do ` clause, in that order. An entry transition has no name, source or +clauses, and is refused when the state already has an entry action. ```go result, err := client.ApplyEdits(ctx, model, opensysml.Rename{Target: "Lib::Engine", NewName: "Motor"}) diff --git a/internal/check/edit/transition.go b/internal/check/edit/transition.go index 914886c072..4eb643e0c8 100644 --- a/internal/check/edit/transition.go +++ b/internal/check/edit/transition.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/Open-MBEE/OpenSysML/internal/syntax/ast" + "github.com/Open-MBEE/OpenSysML/internal/syntax/lexer" "github.com/Open-MBEE/OpenSysML/internal/syntax/parser" "github.com/Open-MBEE/OpenSysML/internal/syntax/source" ) @@ -143,13 +144,25 @@ func validateTransitionText(i int, op Operation, text string) error { nameText, nameOK := transitionSpanText(wrapped, transition.NameSpan) sourceText, sourceOK := transitionQualifiedNameText(wrapped, transition.Source) targetText, targetOK := transitionQualifiedNameText(wrapped, transition.Target) - if !nameOK || !sourceOK || !targetOK || + triggerText, triggerOK := "", op.Trigger == "" + if transition.Trigger != nil { + triggerText, triggerOK = transitionTriggerText(wrapped, transition) + } + guardText, guardOK := "", op.Guard == "" + if transition.Guard != nil { + guardText, guardOK = transitionNodeText(wrapped, transition.Guard) + } + effectText, effectOK := "", op.Effect == "" + if transition.HasEffect { + effectText, effectOK = transitionEffectText(wrapped, transition.Effect) + } + if !nameOK || !sourceOK || !targetOK || !triggerOK || !guardOK || !effectOK || nameText != op.TransitionName || sourceText != op.TransitionSource || targetText != op.TransitionTarget || - (transition.Trigger != nil) != (op.Trigger != "") || - (transition.Guard != nil) != (op.Guard != "") || - transition.HasEffect != (op.Effect != "") { + triggerText != op.Trigger || + guardText != op.Guard || + effectText != op.Effect { return invalidTransitionText(i) } return nil @@ -170,6 +183,74 @@ func transitionSpanText(text string, span source.Span) (string, bool) { return text[span.Offset:end], true } +func transitionNodeText(text string, node ast.Node) (string, bool) { + if node == nil { + return "", false + } + return transitionTrimmedSpanText(text, node.Span()) +} + +func transitionTriggerText(text string, transition *ast.TransitionMember) (string, bool) { + if transition.Trigger == nil { + return "", false + } + span := transition.Trigger.Span() + if transition.Via != nil { + viaText, ok := transitionQualifiedNameText(text, transition.Via) + if !ok { + return "", false + } + end := transition.Via.NodeSpan.Offset + len(viaText) + if end < span.Offset { + return "", false + } + span.Len = end - span.Offset + } + return transitionTrimmedSpanText(text, span) +} + +func transitionEffectText(text string, effects []ast.Node) (string, bool) { + if len(effects) == 0 { + return "", false + } + start := effects[0].Span().Offset + end := effects[0].Span().End() + for _, effect := range effects[1:] { + span := effect.Span() + if span.Offset < start || span.End() < end { + return "", false + } + end = span.End() + } + if end < start { + return "", false + } + return transitionTrimmedSpanText(text, source.Span{Offset: start, Len: end - start}) +} + +func transitionTrimmedSpanText(text string, span source.Span) (string, bool) { + raw, ok := transitionSpanText(text, span) + if !ok { + return "", false + } + lx := lexer.New(source.New("", []byte(raw))) + end := 0 + for { + token := lx.Next() + if token.Kind == lexer.EOF { + break + } + if token.IsTrivia() || token.Kind == lexer.RegularComment { + continue + } + end = token.Span.End() + } + if end == 0 { + return "", false + } + return raw[:end], true +} + func transitionQualifiedNameText(text string, name *ast.QualifiedName) (string, bool) { if name == nil || len(name.Parts) == 0 { return "", false diff --git a/internal/check/edit/transition_test.go b/internal/check/edit/transition_test.go index 16be7b25ab..c889ea3ada 100644 --- a/internal/check/edit/transition_test.go +++ b/internal/check/edit/transition_test.go @@ -47,6 +47,27 @@ func TestAddTransitionOptionalClauses(t *testing.T) { } } +func TestAddTransitionRejectsRepeatedGuardText(t *testing.T) { + model := loadContent(t, "transition-repeated-guard.sysml", transitionTestModel) + addFailure(t, model, AddTransition( + "P::S", "start", "idle", "toasting", "", "true if false", "", false, + ), FailureInvalidValue) +} + +func TestAddTransitionAcceptsCompoundGuard(t *testing.T) { + model := loadContent(t, "transition-compound-guard.sysml", + "package P { state def S { attribute x : ScalarValues::Real; attribute y : ScalarValues::Real; state idle; state toasting; } }\n") + requireClean(t, model) + result := applyOne(t, model, AddTransition( + "P::S", "start", "idle", "toasting", "", "x > 0 and y < 1", "", false, + )) + if !strings.Contains(string(result.Content), + "transition start first idle if x > 0 and y < 1 then toasting;") { + t.Fatalf("compound guard missing:\n%s", result.Content) + } + requireClean(t, loadContent(t, "transition-compound-guard.sysml", string(result.Content))) +} + func TestAddTransitionPreservesQuotedNames(t *testing.T) { model := loadContent(t, "quoted-transition.sysml", "state def S { state 'waiting room'; state done; }\n") diff --git a/internal/syntax/parser/behavior.go b/internal/syntax/parser/behavior.go index e9b9b1aded..0e859cf5d4 100644 --- a/internal/syntax/parser/behavior.go +++ b/internal/syntax/parser/behavior.go @@ -3033,22 +3033,33 @@ func (p *Parser) atTransitionClause() bool { // parseTransitionTail parses the clauses a transition carries after its source — // trigger, guard, effect and the `then` naming its target — and the terminating -// ';'. The clauses are read in the order they were written so a misordered -// transition is reported once, at the clause that is out of place, rather than -// silently dropped. +// ';'. Repeated and misordered clauses are reported at the offending keyword; +// parsing continues so the remaining transition can be recovered. func (p *Parser) parseTransitionTail(start int, name ast.NameSegment, source *ast.QualifiedName) ast.Node { node := &ast.TransitionMember{ Name: name.Text, NameSpan: name.Span, Source: source, } + var lastClause int + var seenTrigger, seenGuard, seenEffect bool + reportClause := func(tok lexer.Token, keyword string, order int, repeated bool) { + if repeated { + p.error(tok.Span, fmt.Sprintf("a transition has at most one '%s' clause", keyword)) + } + if order < lastClause { + p.error(tok.Span, "transition clauses must appear in the order 'accept', 'if', 'do'") + } + if order > lastClause { + lastClause = order + } + } for { switch { case p.atKeyword("accept"): - if node.Trigger != nil { - p.error(p.peek().Span, "a transition accepts one trigger: write a second transition for the other event") - } + reportClause(p.peek(), "accept", 1, seenTrigger) + seenTrigger = true acceptStart := p.peek().Span.Offset p.advance() // consume 'accept' node.Trigger = p.parseTriggerEvent() @@ -3064,19 +3075,22 @@ func (p *Parser) parseTransitionTail(start int, name ast.NameSegment, source *as // standard `accept`. What follows is read as an expression and // classified when lowered, so a name states a signal and a condition a // change, as it did before the standard spelling was added. - if node.Trigger != nil { - p.error(p.peek().Span, "a transition accepts one trigger: write a second transition for the other event") - } + reportClause(p.peek(), "when", 1, seenTrigger) + seenTrigger = true whenStart := p.peek().Span.Offset p.advance() // consume 'when' node.Trigger = p.ParseExpression() node.TriggerSpan = p.spanFrom(whenStart) continue case p.atKeyword("if"): + reportClause(p.peek(), "if", 2, seenGuard) + seenGuard = true p.advance() // consume 'if' node.Guard = p.ParseExpression() continue case p.atKeyword("do"): + reportClause(p.peek(), "do", 3, seenEffect) + seenEffect = true p.advance() // consume 'do' effect, err := p.parseTransitionEffect(start) if err != nil { diff --git a/internal/syntax/parser/transition_clauses_test.go b/internal/syntax/parser/transition_clauses_test.go new file mode 100644 index 0000000000..283a52efe9 --- /dev/null +++ b/internal/syntax/parser/transition_clauses_test.go @@ -0,0 +1,53 @@ +package parser + +import ( + "strings" + "testing" + + "github.com/Open-MBEE/OpenSysML/internal/syntax/source" +) + +func TestTransitionClausesRejectRepeatedGuard(t *testing.T) { + src := "state def S { state a; state b; transition first a if true if false then b; }" + p := New(source.New("transition.sysml", []byte(src))) + p.ParseFile() + + if len(p.Diagnostics) != 1 { + t.Fatalf("diagnostics = %v, want one repeated-guard diagnostic", p.Diagnostics) + } + diagnostic := p.Diagnostics[0] + if diagnostic.Message != "a transition has at most one 'if' clause" { + t.Fatalf("diagnostic = %q, want repeated-guard message", diagnostic.Message) + } + secondIf := strings.LastIndex(src, "if") + if diagnostic.Span.Offset != secondIf || diagnostic.Span.Len != len("if") { + t.Fatalf("diagnostic span = %+v, want second `if` at %d", diagnostic.Span, secondIf) + } +} + +func TestTransitionClausesAcceptSingleGuard(t *testing.T) { + src := "state def S { state a; state b; transition first a if true then b; }" + p := New(source.New("transition.sysml", []byte(src))) + p.ParseFile() + + if len(p.Diagnostics) != 0 { + t.Fatalf("diagnostics = %v, want none", p.Diagnostics) + } +} + +func TestTransitionClausesReportOutOfOrderClause(t *testing.T) { + src := "state def S { state a; state b; transition first a do { } if true then b; }" + p := New(source.New("transition.sysml", []byte(src))) + p.ParseFile() + + if len(p.Diagnostics) != 1 { + t.Fatalf("diagnostics = %v, want one out-of-order diagnostic", p.Diagnostics) + } + diagnostic := p.Diagnostics[0] + if diagnostic.Message != "transition clauses must appear in the order 'accept', 'if', 'do'" { + t.Fatalf("diagnostic = %q, want clause-order message", diagnostic.Message) + } + if got := src[diagnostic.Span.Offset:diagnostic.Span.End()]; got != "if" { + t.Fatalf("diagnostic sits on %q, want the out-of-order `if` keyword", got) + } +} From ac209157ae66363a7223caa601d7e38af364b964 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 16:07:22 +0000 Subject: [PATCH 7/7] fix(edit): detect quoted duplicate names Co-Authored-By: jason.han --- internal/check/edit/add.go | 2 +- internal/check/edit/add_test.go | 5 +++++ internal/check/edit/connection.go | 2 +- internal/check/edit/connection_test.go | 7 +++++++ internal/check/edit/requirement.go | 2 +- internal/check/edit/requirement_test.go | 7 +++++++ internal/check/edit/transition.go | 2 +- internal/check/edit/transition_test.go | 8 ++++++++ internal/check/edit/validate.go | 8 ++++++++ 9 files changed, 39 insertions(+), 4 deletions(-) diff --git a/internal/check/edit/add.go b/internal/check/edit/add.go index 5155bb665a..3538e80467 100644 --- a/internal/check/edit/add.go +++ b/internal/check/edit/add.go @@ -290,7 +290,7 @@ func (m Model) addMemberSplice(i int, op Operation) (splice, error) { } } } - if op.MemberName != "" && ownerScope != nil && len(ownerScope.LookupLocalAll(op.MemberName)) > 0 { + if op.MemberName != "" && ownerScope != nil && len(ownerScope.LookupLocalAll(symbolName(op.MemberName))) > 0 { return splice{}, &Error{ Failure: FailureMemberNameTaken, OperationIndex: i, diff --git a/internal/check/edit/add_test.go b/internal/check/edit/add_test.go index 3f3c681938..1b6e69471a 100644 --- a/internal/check/edit/add_test.go +++ b/internal/check/edit/add_test.go @@ -260,6 +260,11 @@ func TestAddMemberDuplicateRootNamesRefuse(t *testing.T) { } } +func TestAddMemberRejectsQuotedDuplicateName(t *testing.T) { + m := loadContent(t, "add-quoted-duplicate.sysml", "package P { part def X; }\n") + addFailure(t, m, AddMember("P", "part def", "'X'"), FailureMemberNameTaken) +} + // memberKindTypes pairs each typed usage kind with a definition kind it may be // typed by. SysML usages are typed by their own `def`. var memberKindTypes = map[string]string{ diff --git a/internal/check/edit/connection.go b/internal/check/edit/connection.go index dd1796d0a1..903896b368 100644 --- a/internal/check/edit/connection.go +++ b/internal/check/edit/connection.go @@ -87,7 +87,7 @@ func (m Model) addConnectionSplice(i int, op Operation) (splice, error) { e.OperationIndex = i return splice{}, e } - if op.MemberName != "" && ownerScope != nil && len(ownerScope.LookupLocalAll(op.MemberName)) > 0 { + if op.MemberName != "" && ownerScope != nil && len(ownerScope.LookupLocalAll(symbolName(op.MemberName))) > 0 { return splice{}, &Error{ Failure: FailureMemberNameTaken, OperationIndex: i, diff --git a/internal/check/edit/connection_test.go b/internal/check/edit/connection_test.go index ecdef85222..89c4e568dc 100644 --- a/internal/check/edit/connection_test.go +++ b/internal/check/edit/connection_test.go @@ -240,6 +240,13 @@ func TestAddConnectionDuplicateNamesInOneRequestRefuse(t *testing.T) { } } +func TestAddConnectionRejectsQuotedDuplicateName(t *testing.T) { + m := loadContent(t, "assembly-quoted-duplicate.sysml", interconnectionFixture) + addFailure(t, m, AddConnection( + "Vehicle::Assembly", "connection", "tank.fuelOut", "engine.fuelIn", "'tank'", + ), FailureMemberNameTaken) +} + func TestKindListings(t *testing.T) { sysml := strings.Join(ConnectionKinds(source.KindSysML), " ") if sysml != "allocation binding connection flow interface succession transition" { diff --git a/internal/check/edit/requirement.go b/internal/check/edit/requirement.go index 61409e28b2..a1ccd9b0cc 100644 --- a/internal/check/edit/requirement.go +++ b/internal/check/edit/requirement.go @@ -91,7 +91,7 @@ func (m Model) addRequirementConstraintSplice(i int, op Operation) (splice, erro e.Message = fmt.Sprintf("constraint name %q is not an identifier", op.ConstraintName) return splice{}, e } - if ownerScope != nil && len(ownerScope.LookupLocalAll(op.ConstraintName)) > 0 { + if ownerScope != nil && len(ownerScope.LookupLocalAll(symbolName(op.ConstraintName))) > 0 { return splice{}, &Error{ Failure: FailureMemberNameTaken, OperationIndex: i, Message: fmt.Sprintf("%s already declares %q", op.Owner, op.ConstraintName), diff --git a/internal/check/edit/requirement_test.go b/internal/check/edit/requirement_test.go index 62bdf46dc2..123d94a6fb 100644 --- a/internal/check/edit/requirement_test.go +++ b/internal/check/edit/requirement_test.go @@ -81,6 +81,13 @@ func TestAddRequirementConstraintWritesAndAnalyzes(t *testing.T) { requireClean(t, loadContent(t, "constraint.sysml", got)) } +func TestAddRequirementConstraintRejectsQuotedDuplicateName(t *testing.T) { + m := loadContent(t, "constraint-quoted-duplicate.sysml", + "part def Vehicle;\nrequirement def R { subject s : Vehicle; require constraint isValid { true } }\n") + addFailure(t, m, AddRequirementConstraint("R", "require", "true", "'isValid'"), + FailureMemberNameTaken) +} + func TestAddRequirementConstraintRefusals(t *testing.T) { t.Run("outside requirement body", func(t *testing.T) { m := loadContent(t, "part.sysml", "part def P;\n") diff --git a/internal/check/edit/transition.go b/internal/check/edit/transition.go index 4eb643e0c8..1ec7e56362 100644 --- a/internal/check/edit/transition.go +++ b/internal/check/edit/transition.go @@ -65,7 +65,7 @@ func (m Model) addTransitionSplice(i int, op Operation) (splice, error) { return splice{}, err } if op.TransitionName != "" && ownerScope != nil && - len(ownerScope.LookupLocalAll(op.TransitionName)) > 0 { + len(ownerScope.LookupLocalAll(symbolName(op.TransitionName))) > 0 { return splice{}, &Error{ Failure: FailureMemberNameTaken, OperationIndex: i, Message: fmt.Sprintf("%s already declares %q", ownerName(op.Owner), op.TransitionName), diff --git a/internal/check/edit/transition_test.go b/internal/check/edit/transition_test.go index c889ea3ada..e87de50f27 100644 --- a/internal/check/edit/transition_test.go +++ b/internal/check/edit/transition_test.go @@ -155,3 +155,11 @@ func TestAddTransitionRejectsAnExistingName(t *testing.T) { "P::S", "idle", "idle", "toasting", "", "", "", false, ), FailureMemberNameTaken) } + +func TestAddTransitionRejectsQuotedExistingName(t *testing.T) { + model := loadContent(t, "quoted-transition-name.sysml", + "state def S { state 'waiting room'; state idle; }\n") + addFailure(t, model, AddTransition( + "S", "'waiting room'", "idle", "idle", "", "", "", false, + ), FailureMemberNameTaken) +} diff --git a/internal/check/edit/validate.go b/internal/check/edit/validate.go index 6c7ec16ef4..f8f87e5834 100644 --- a/internal/check/edit/validate.go +++ b/internal/check/edit/validate.go @@ -76,6 +76,14 @@ func checkName(i int, name string) error { return nil } +func symbolName(name string) string { + segments, ok := source.QualifiedNameSegments(name) + if ok && len(segments) == 1 { + return segments[0] + } + return name +} + // validate re-reads every rewritten document the way the original was read and // refuses the edit if any carries errors its original did not: an edit never // hands back a model that cannot be read again. The documents are judged