Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

W-15643510-fix default version fon bindings #2000

Merged
merged 1 commit into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
package amf.apicontract.internal.spec.async.emitters.domain

import amf.apicontract.client.scala.model.domain.bindings.solace.{SolaceOperationDestination, SolaceOperationDestination020, SolaceOperationDestination030, SolaceOperationDestination040, SolaceOperationQueue, SolaceOperationQueue030, SolaceOperationTopic}
import amf.apicontract.internal.metamodel.domain.bindings.{SolaceOperationDestinationModel, SolaceOperationQueue010Model, SolaceOperationQueue030Model, SolaceOperationQueueModel, SolaceOperationTopicModel}
import amf.apicontract.client.scala.model.domain.bindings.solace.{
SolaceOperationDestination,
SolaceOperationDestination010,
SolaceOperationDestination020,
SolaceOperationDestination030,
SolaceOperationDestination040,
SolaceOperationQueue,
SolaceOperationQueue030,
SolaceOperationTopic
}
import amf.apicontract.internal.metamodel.domain.bindings.{
SolaceOperationDestinationModel,
SolaceOperationQueue010Model,
SolaceOperationQueue030Model,
SolaceOperationQueueModel,
SolaceOperationTopicModel
}
import amf.apicontract.internal.spec.common.emitter.AgnosticShapeEmitterContextAdapter
import amf.apicontract.internal.spec.oas.emitter.context.OasLikeSpecEmitterContext
import amf.core.internal.parser.domain.FieldEntry
Expand Down Expand Up @@ -38,14 +53,14 @@ case class AsyncApiDestinationsEmitter(f: FieldEntry, ordering: SpecOrdering)(im
override def position(): Position = pos(f.element.annotations)
}

class SingleDestinationEmitter(binding: SolaceOperationDestination, ordering: SpecOrdering)(implicit
class SingleDestinationEmitter(destination: SolaceOperationDestination, ordering: SpecOrdering)(implicit
val spec: OasLikeSpecEmitterContext
) extends PartEmitter {
protected implicit val shapeCtx = AgnosticShapeEmitterContextAdapter(spec)
override def emit(b: YDocument.PartBuilder): Unit = {

val result = ListBuffer[EntryEmitter]()
val fs = binding.fields
val fs = destination.fields

fs.entry(SolaceOperationDestinationModel.DestinationType).foreach(f => result += ValueEmitter("destinationType", f))
fs.entry(SolaceOperationDestinationModel.DeliveryMode).foreach { f =>
Expand All @@ -55,24 +70,26 @@ class SingleDestinationEmitter(binding: SolaceOperationDestination, ordering: Sp
}
}

Option(binding.queue).foreach(queue => result += new SolaceOperationQueueEmitter(queue, ordering))
binding match {
Option(destination.queue).foreach { queue =>
val emitter = new SolaceOperationQueueEmitter(queue, ordering)
result += emitter
}
destination match {
case binding020: SolaceOperationDestination020 =>
Option(binding020.topic).foreach(topic => result += new SolaceOperationTopicEmitter(topic, ordering))
case binding030: SolaceOperationDestination030 =>
Option(binding030.topic).foreach(topic => result += new SolaceOperationTopicEmitter(topic, ordering))
case binding040: SolaceOperationDestination040 =>
case binding040: SolaceOperationDestination040 =>
Option(binding040.topic).foreach(topic => result += new SolaceOperationTopicEmitter(topic, ordering))
case _ =>
}


result ++= AnnotationsEmitter(binding, ordering).emitters
result ++= AnnotationsEmitter(destination, ordering).emitters

b.obj(traverse(ordering.sorted(result), _))
}

override def position(): Position = pos(binding.annotations)
override def position(): Position = pos(destination.annotations)
}

class SolaceOperationQueueEmitter(queue: SolaceOperationQueue, ordering: SpecOrdering)(implicit
Expand All @@ -90,12 +107,9 @@ class SolaceOperationQueueEmitter(queue: SolaceOperationQueue, ordering: SpecOrd
fs.entry(SolaceOperationQueueModel.TopicSubscriptions)
.foreach(f => result += spec.arrayEmitter("topicSubscriptions", f, ordering))
fs.entry(SolaceOperationQueueModel.AccessType).foreach(f => result += ValueEmitter("accessType", f))
queue match {
case _: SolaceOperationQueue030 =>
fs.entry(SolaceOperationQueue030Model.MaxMsgSpoolSize).foreach(f => result += ValueEmitter("maxMsgSpoolSize", f))
fs.entry(SolaceOperationQueue030Model.MaxTtl).foreach(f => result += ValueEmitter("maxTtl", f))
case _ =>
}
fs.entry(SolaceOperationQueue030Model.MaxMsgSpoolSize)
.foreach(f => result += ValueEmitter("maxMsgSpoolSize", f))
fs.entry(SolaceOperationQueue030Model.MaxTtl).foreach(f => result += ValueEmitter("maxTtl", f))

traverse(ordering.sorted(result), emitter)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ object SolaceOperationBindingParser extends BindingParser[SolaceOperationBinding
case "0.3.0" => SolaceOperationBinding030(Annotations(entry))
case "0.2.0" => SolaceOperationBinding020(Annotations(entry))
case "0.1.0" => SolaceOperationBinding010(Annotations(entry))
case invalidVersion =>
val defaultBinding = SolaceOperationBinding010(Annotations(entry))
case invalidVersion => //default to 0.3.0
val defaultBinding = SolaceOperationBinding030(Annotations(entry))
invalidBindingVersion(defaultBinding, invalidVersion, "Solace Operation Binding")
defaultBinding
}
Expand All @@ -30,7 +30,8 @@ object SolaceOperationBindingParser extends BindingParser[SolaceOperationBinding
case "0.4.0" | "latest" => SolaceOperationBinding040Model.Destinations
case "0.3.0" => SolaceOperationBinding030Model.Destinations
case "0.2.0" => SolaceOperationBinding020Model.Destinations
case _ => SolaceOperationBinding010Model.Destinations //this support 0.1.0
case "0.1.0" => SolaceOperationBinding010Model.Destinations
case _ => SolaceOperationBinding030Model.Destinations // default to 0.3.0
}
binding.setWithoutId(
field,
Expand All @@ -57,7 +58,8 @@ object SolaceOperationBindingParser extends BindingParser[SolaceOperationBinding
case "0.4.0" | "latest" => SolaceOperationDestination040(Annotations(map))
case "0.3.0" => SolaceOperationDestination030(Annotations(map))
case "0.2.0" => SolaceOperationDestination020(Annotations(map))
case _ => SolaceOperationDestination010(Annotations(map))
case "0.1.0" => SolaceOperationDestination010(Annotations(map))
case _ => SolaceOperationDestination030(Annotations(map))
}

map.key("destinationType", SolaceOperationDestinationModel.DestinationType in destination)
Expand All @@ -69,11 +71,13 @@ object SolaceOperationBindingParser extends BindingParser[SolaceOperationBinding

parseQueue(destination, map, bindingVersion)
bindingVersion match {
case "0.1.0" => ctx.closedShape(destination, map, s"SolaceOperationDestination010")
case "0.2.0" | "0.3.0" | "0.4.0" | "latest" =>
parseTopic(destination, map)
ctx.closedShape(destination, map, s"SolaceOperationDestination020")
case _ =>
ctx.closedShape(destination, map, "SolaceOperationDestination010")
parseTopic(destination, map)
ctx.closedShape(destination, map, "SolaceOperationDestination020")
}
destination
}
Expand All @@ -84,13 +88,14 @@ object SolaceOperationBindingParser extends BindingParser[SolaceOperationBinding
{ entry =>
val queueMap = entry.value.as[YMap]
val queue = bindingVersion match {
case "0.2.0" | "0.1.0" => SolaceOperationQueue010(Annotations(entry.value))
case "0.4.0" | "0.3.0" | "latest" =>
val queue030 = SolaceOperationQueue030(Annotations(entry.value))
queueMap.key("maxMsgSpoolSize", SolaceOperationQueue030Model.MaxMsgSpoolSize in queue030)
queueMap.key("maxTtl", SolaceOperationQueue030Model.MaxTtl in queue030)
queue030
case _ =>
SolaceOperationQueue010(Annotations(entry.value))
SolaceOperationQueue030(Annotations(entry.value))
}

queueMap.key("name", SolaceOperationQueueModel.Name in queue)
Expand All @@ -100,10 +105,11 @@ object SolaceOperationBindingParser extends BindingParser[SolaceOperationBinding
queueMap.key("accessType", SolaceOperationQueueModel.AccessType in queue)

bindingVersion match {
case "0.2.0" | "0.1.0" => ctx.closedShape(queue, queueMap, "SolaceOperationQueue010")
case "0.4.0" | "0.3.0" | "latest" =>
ctx.closedShape(queue, queueMap, "SolaceOperationQueue030")
case _ =>
ctx.closedShape(queue, queueMap, "SolaceOperationQueue010")
ctx.closedShape(queue, queueMap, "SolaceOperationQueue030")
}

destination.setWithoutId(SolaceOperationDestinationModel.Queue, queue, Annotations(entry))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml
Profile:
Conforms: false
Number of results: 8
Number of results: 5

Level: Violation

Expand All @@ -16,55 +16,31 @@ Level: Violation
- Constraint: http://a.ml/vocabularies/amf/parser#unsupported-binding-version
Message: Version 9.9.9 is not supported in a Solace Operation Binding
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-030
Property:
Range: [(18,8)-(38,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'maxMsgSpoolSize' not supported in a ASYNC 2.3 SolaceOperationQueue010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010/destinations/solace-operation-destination-010/solace-operation-queue-010
Property:
Range: [(28,16)-(29,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'maxTtl' not supported in a ASYNC 2.3 SolaceOperationQueue010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010/destinations/solace-operation-destination-010/solace-operation-queue-010
Property:
Range: [(29,16)-(30,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'topic' not supported in a ASYNC 2.3 SolaceOperationDestination010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010/destinations/solace-operation-destination-010_1
Property:
Range: [(32,14)-(35,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'timeToLive' not supported in a ASYNC 2.3 SolaceOperationBinding010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-030
Property:
Range: [(35,10)-(36,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'priority' not supported in a ASYNC 2.3 SolaceOperationBinding010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-030
Property:
Range: [(36,10)-(37,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'dmqEligible' not supported in a ASYNC 2.3 SolaceOperationBinding010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-030
Property:
Range: [(37,10)-(38,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-0.4.0-invalid.yaml
Original file line number Diff line number Diff line change
@@ -1,38 +1,14 @@
ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml
Profile:
Conforms: false
Number of results: 4
Number of results: 1

Level: Violation

- Constraint: http://a.ml/vocabularies/amf/parser#unsupported-binding-version
Message: Version 9.9.9 is not supported in a Solace Operation Binding
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-030
Property:
Range: [(17,8)-(34,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'maxMsgSpoolSize' not supported in a ASYNC 2.3 SolaceOperationQueue010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010/destinations/solace-operation-destination-010/solace-operation-queue-010
Property:
Range: [(27,16)-(28,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'maxTtl' not supported in a ASYNC 2.3 SolaceOperationQueue010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010/destinations/solace-operation-destination-010/solace-operation-queue-010
Property:
Range: [(28,16)-(29,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'topic' not supported in a ASYNC 2.3 SolaceOperationDestination010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-010/destinations/solace-operation-destination-010_1
Property:
Range: [(31,14)-(34,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-invalid-queue-version.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@

ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-wrong-queue-version.yaml
Profile:
Profile:
Conforms: false
Number of results: 2

Expand All @@ -10,14 +9,14 @@ Level: Violation
Message: Property 'maxMsgSpoolSize' not supported in a ASYNC 2.3 SolaceOperationQueue010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-wrong-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-020/destinations/solace-operation-destination-020/solace-operation-queue-010
Property:
Property:
Range: [(27,16)-(28,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-wrong-queue-version.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape
Message: Property 'maxTtl' not supported in a ASYNC 2.3 SolaceOperationQueue010 node
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-wrong-queue-version.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/solace-operation-020/destinations/solace-operation-destination-020/solace-operation-queue-010
Property:
Property:
Range: [(28,16)-(29,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/solace-wrong-queue-version.yaml