-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
W-12689952: add ibmmq message binding in async21+
- add message binding model, parser and emitter - add unit validation and cycle tests - add model to APIEntities and model.md
- Loading branch information
1 parent
36343b6
commit b612202
Showing
15 changed files
with
331 additions
and
12 deletions.
There are no files selected for viewing
51 changes: 51 additions & 0 deletions
51
...ala/amf/apicontract/client/platform/model/domain/bindings/ibmmq/IBMMQMessageBinding.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package amf.apicontract.client.platform.model.domain.bindings.ibmmq | ||
|
||
import amf.apicontract.client.platform.model.domain.bindings.{BindingVersion, MessageBinding} | ||
import amf.apicontract.client.scala.model.domain.bindings.ibmmq.{IBMMQMessageBinding => InternalIBMMQMessageBinding} | ||
import amf.apicontract.internal.convert.ApiClientConverters._ | ||
import amf.core.client.platform.model | ||
import amf.core.client.platform.model.{IntField, StrField} | ||
|
||
import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel} | ||
|
||
@JSExportAll | ||
case class IBMMQMessageBinding(override private[amf] val _internal: InternalIBMMQMessageBinding) | ||
extends MessageBinding | ||
with BindingVersion { | ||
@JSExportTopLevel("IBMMQMessageBinding") | ||
def this() = this(InternalIBMMQMessageBinding()) | ||
|
||
def messageType: StrField = _internal.messageType | ||
def headers: StrField = _internal.headers | ||
def description: StrField = _internal.description | ||
def expiry: IntField = _internal.expiry | ||
|
||
def withType(messageType: String): this.type = { | ||
_internal.withMessageType(messageType) | ||
this | ||
} | ||
|
||
def withHeaders(headers: String): this.type = { | ||
_internal.withHeaders(headers) | ||
this | ||
} | ||
|
||
def withDescription(description: String): this.type = { | ||
_internal.withDescription(description) | ||
this | ||
} | ||
|
||
def withExpiry(expiry: Int): this.type = { | ||
_internal.withExpiry(expiry) | ||
this | ||
} | ||
|
||
override protected def bindingVersion: model.StrField = _internal.bindingVersion | ||
|
||
override def withBindingVersion(bindingVersion: String): this.type = { | ||
_internal.withBindingVersion(bindingVersion) | ||
this | ||
} | ||
|
||
override def linkCopy(): IBMMQMessageBinding = _internal.linkCopy() | ||
} |
49 changes: 49 additions & 0 deletions
49
.../scala/amf/apicontract/client/scala/model/domain/bindings/ibmmq/IBMMQMessageBinding.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package amf.apicontract.client.scala.model.domain.bindings.ibmmq | ||
|
||
import amf.apicontract.client.scala.model.domain.bindings.{BindingVersion, MessageBinding} | ||
import amf.apicontract.internal.metamodel.domain.bindings.IBMMQMessageBindingModel | ||
import amf.apicontract.internal.metamodel.domain.bindings.IBMMQMessageBindingModel._ | ||
import amf.apicontract.internal.spec.async.parser.bindings.Bindings.IBMMQ | ||
import amf.core.client.scala.model.{IntField, StrField} | ||
import amf.core.client.scala.model.domain.{DomainElement, Linkable} | ||
import amf.core.internal.metamodel.Field | ||
import amf.core.internal.parser.domain.{Annotations, Fields} | ||
import amf.shapes.client.scala.model.domain.Key | ||
|
||
class IBMMQMessageBinding(override val fields: Fields, override val annotations: Annotations) | ||
extends MessageBinding | ||
with BindingVersion | ||
with Key { | ||
|
||
override protected def bindingVersionField: Field = BindingVersion | ||
override def meta: IBMMQMessageBindingModel.type = IBMMQMessageBindingModel | ||
|
||
def messageType: StrField = fields.field(MessageType) | ||
def headers: StrField = fields.field(Headers) | ||
def description: StrField = fields.field(Description) | ||
def expiry: IntField = fields.field(Expiry) | ||
|
||
def withMessageType(messageType: String): this.type = set(MessageType, messageType) | ||
def withHeaders(headers: String): this.type = set(Headers, headers) | ||
def withDescription(description: String): this.type = set(Description, description) | ||
def withExpiry(expiry: Int): this.type = set(Expiry, expiry) | ||
|
||
override def key: StrField = fields.field(IBMMQMessageBindingModel.key) | ||
|
||
override def componentId: String = s"/$IBMMQ-message" | ||
|
||
override def linkCopy(): IBMMQMessageBinding = IBMMQMessageBinding() | ||
|
||
override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement = | ||
IBMMQMessageBinding.apply | ||
} | ||
|
||
object IBMMQMessageBinding { | ||
|
||
def apply(): IBMMQMessageBinding = apply(Annotations()) | ||
|
||
def apply(annotations: Annotations): IBMMQMessageBinding = apply(Fields(), annotations) | ||
|
||
def apply(fields: Fields, annotations: Annotations): IBMMQMessageBinding = | ||
new IBMMQMessageBinding(fields, annotations) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
...src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/IBMMQBindingModel.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package amf.apicontract.internal.metamodel.domain.bindings | ||
|
||
import amf.apicontract.client.scala.model.domain.bindings.ibmmq.IBMMQMessageBinding | ||
import amf.core.client.scala.model.domain.AmfObject | ||
import amf.core.client.scala.vocabulary.Namespace.ApiBinding | ||
import amf.core.client.scala.vocabulary.ValueType | ||
import amf.core.internal.metamodel.Field | ||
import amf.core.internal.metamodel.Type.{Int, Str} | ||
import amf.core.internal.metamodel.domain.{ModelDoc, ModelVocabularies} | ||
|
||
object IBMMQMessageBindingModel extends MessageBindingModel with BindingVersion { | ||
val MessageType: Field = | ||
Field( | ||
Str, | ||
ApiBinding + "messageType", | ||
ModelDoc(ModelVocabularies.ApiBinding, "type", "The type of the message") | ||
) | ||
|
||
val Headers: Field = | ||
Field( | ||
Str, | ||
ApiBinding + "headers", | ||
ModelDoc(ModelVocabularies.ApiBinding, "type", "The type of the message") | ||
) | ||
|
||
val Description: Field = | ||
Field( | ||
Str, | ||
ApiBinding + "headers", | ||
ModelDoc(ModelVocabularies.ApiBinding, "type", "The type of the message") | ||
) | ||
|
||
val Expiry: Field = | ||
Field( | ||
Int, | ||
ApiBinding + "expiry", | ||
ModelDoc(ModelVocabularies.ApiBinding, "type", "The type of the message") | ||
) | ||
|
||
override def modelInstance: AmfObject = IBMMQMessageBinding() | ||
|
||
override def fields: List[Field] = | ||
List(MessageType, Headers, Description, Expiry, BindingVersion) ++ MessageBindingModel.fields | ||
|
||
override val `type`: List[ValueType] = ApiBinding + "IBMMQMessageBinding" :: MessageBindingModel.`type` | ||
|
||
override val key: Field = Type | ||
|
||
override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "IBMMQMessageBinding") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
...f/apicontract/internal/spec/async/parser/bindings/message/IBMMQMessageBindingParser.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package amf.apicontract.internal.spec.async.parser.bindings.message | ||
|
||
import amf.apicontract.client.scala.model.domain.bindings.ibmmq.IBMMQMessageBinding | ||
import amf.apicontract.internal.metamodel.domain.bindings.IBMMQMessageBindingModel | ||
import amf.apicontract.internal.spec.async.parser.bindings.BindingParser | ||
import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext | ||
import amf.core.internal.parser.YMapOps | ||
import amf.core.internal.parser.domain.Annotations | ||
import org.yaml.model.{YMap, YMapEntry} | ||
|
||
object IBMMQMessageBindingParser extends BindingParser[IBMMQMessageBinding] { | ||
override def parse(entry: YMapEntry, parent: String)(implicit ctx: AsyncWebApiContext): IBMMQMessageBinding = { | ||
val binding = IBMMQMessageBinding(Annotations(entry)) | ||
val map = entry.value.as[YMap] | ||
|
||
map.key("type", IBMMQMessageBindingModel.MessageType in binding) | ||
map.key("headers", IBMMQMessageBindingModel.Headers in binding) | ||
map.key("description", IBMMQMessageBindingModel.Description in binding) | ||
map.key("expiry", IBMMQMessageBindingModel.Expiry in binding) | ||
|
||
parseBindingVersion(binding, IBMMQMessageBindingModel.BindingVersion, map) | ||
|
||
ctx.closedShape(binding, map, "IBMMQMessageBinding") | ||
|
||
binding | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
...li/shared/src/test/resources/validations/async20/validations/ibmmq-binding-extra-key.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
asyncapi: 2.1.0 | ||
info: | ||
title: test mercure binding | ||
version: 1.0.0 | ||
servers: | ||
theName: | ||
url: some.com | ||
protocol: mercure | ||
bindings: | ||
ibmmq: | ||
key: value | ||
channels: | ||
some-channel: | ||
bindings: | ||
ibmmq: | ||
key: value | ||
description: some channel | ||
publish: | ||
bindings: | ||
ibmmq: | ||
key: value | ||
message: | ||
bindings: | ||
ibmmq: | ||
type: test | ||
headers: test | ||
description: test | ||
expiry: 123 | ||
bindingVersion: test | ||
thisKeyIsNotAllowed: should throw validation error | ||
payload: | ||
type: string |
Oops, something went wrong.