-
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
3de9a3e
commit ef7c133
Showing
18 changed files
with
377 additions
and
13 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
62 changes: 62 additions & 0 deletions
62
...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,62 @@ | ||
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, | ||
"headers", | ||
"Defines the IBM MQ message headers to include with this message. More than one header can be specified as a comma separated list." | ||
) | ||
) | ||
|
||
val Description: Field = | ||
Field( | ||
Str, | ||
ApiBinding + "description", | ||
ModelDoc( | ||
ModelVocabularies.ApiBinding, | ||
"description", | ||
"Provides additional information for application developers: describes the message type or format." | ||
) | ||
) | ||
|
||
val Expiry: Field = | ||
Field( | ||
Int, | ||
ApiBinding + "expiry", | ||
ModelDoc( | ||
ModelVocabularies.ApiBinding, | ||
"expiry", | ||
"This is a period of time expressed in milliseconds and set by the application that puts 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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -117,4 +117,5 @@ object Bindings { | |
val Stomp = "stomp" | ||
val Redis = "redis" | ||
val Mercure = "mercure" | ||
val IBMMQ = "ibmmq" | ||
} |
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
15 changes: 13 additions & 2 deletions
15
.../main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async21Syntax.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 |
---|---|---|
@@ -1,8 +1,19 @@ | ||
package amf.apicontract.internal.spec.async.parser.context.syntax | ||
|
||
import amf.apicontract.internal.spec.async.parser.bindings.Bindings.Mercure | ||
import amf.apicontract.internal.spec.async.parser.bindings.Bindings.{IBMMQ, Mercure} | ||
import amf.shapes.internal.spec.common.parser.SpecSyntax | ||
|
||
object Async21Syntax extends SpecSyntax { | ||
override val nodes: Map[String, Set[String]] = add(Async20Syntax.nodes, "bindings", Set(Mercure)) | ||
override val nodes: Map[String, Set[String]] = | ||
add( | ||
Async20Syntax.nodes, | ||
"bindings" -> Set(Mercure, IBMMQ), | ||
"IBMMQMessageBinding" -> Set( | ||
"type", | ||
"headers", | ||
"description", | ||
"expiry", | ||
"bindingVersion" | ||
) | ||
) | ||
} |
28 changes: 28 additions & 0 deletions
28
amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/ibmmq-binding.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,28 @@ | ||
asyncapi: 2.1.0 | ||
info: | ||
title: test mercure binding | ||
version: 1.0.0 | ||
servers: | ||
theName: | ||
url: some.com | ||
protocol: ibmmq | ||
bindings: | ||
ibmmq: {} | ||
channels: | ||
some-channel: | ||
bindings: | ||
ibmmq: {} | ||
description: some channel | ||
publish: | ||
bindings: | ||
ibmmq: {} | ||
message: | ||
bindings: | ||
ibmmq: | ||
type: test | ||
headers: test | ||
description: test | ||
expiry: 123 | ||
bindingVersion: test | ||
payload: | ||
type: string |
Oops, something went wrong.