-
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.
Merge pull request #2017 from aml-org/publish-5.5.3
W-16124325 - Publish 5.5.3
- Loading branch information
Showing
910 changed files
with
56,955 additions
and
46,033 deletions.
There are no files selected for viewing
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
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
23 changes: 23 additions & 0 deletions
23
...i-contract/shared/src/main/scala/amf/apicontract/internal/spec/avro/AvroParsePlugin.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,23 @@ | ||
package amf.apicontract.internal.spec.avro | ||
|
||
import amf.apicontract.internal.plugins.ApiParsePlugin | ||
import amf.apicontract.internal.spec.avro.parser.context.AvroSchemaContext | ||
import amf.apicontract.internal.spec.avro.parser.document.AvroDocumentParser | ||
import amf.core.client.scala.model.document.BaseUnit | ||
import amf.core.client.scala.parse.document.ParserContext | ||
import amf.core.internal.parser.Root | ||
import amf.core.internal.remote.{Mimes, Spec} | ||
|
||
object AvroParsePlugin extends ApiParsePlugin { | ||
|
||
override def spec: Spec = Spec.AVRO_SCHEMA | ||
|
||
override def parse(document: Root, ctx: ParserContext): BaseUnit = { | ||
new AvroDocumentParser(document)(new AvroSchemaContext(ctx, AvroSettings)).parseDocument() | ||
} | ||
|
||
/** media types which specifies vendors that are parsed by this plugin. */ | ||
override def mediaTypes: Seq[String] = Seq(Mimes.`application/json`) | ||
|
||
override def applies(element: Root): Boolean = element.mediatype == Mimes.`application/json` | ||
} |
30 changes: 30 additions & 0 deletions
30
amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/avro/AvroSettings.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,30 @@ | ||
package amf.apicontract.internal.spec.avro | ||
|
||
import amf.core.client.scala.parse.document.ParserContext | ||
import amf.core.internal.plugins.syntax.SyamlAMFErrorHandler | ||
import amf.core.internal.remote.Spec | ||
import amf.core.internal.remote.Spec.AVRO_SCHEMA | ||
import amf.shapes.internal.spec.common.parser._ | ||
import amf.shapes.internal.spec.common.{OAS20SchemaVersion, SchemaPosition, SchemaVersion} | ||
import amf.shapes.internal.spec.raml.parser.RamlWebApiContextType.RamlWebApiContextType | ||
import org.yaml.model.YNode | ||
|
||
object AvroSettings extends SpecSettings { | ||
override val spec: Spec = AVRO_SCHEMA | ||
|
||
override def link(node: YNode)(implicit eh: SyamlAMFErrorHandler): Either[String, YNode] = Left(node.toString) | ||
|
||
override def ignoreCriteria: IgnoreCriteria = IgnoreAllCriteria | ||
|
||
override def ramlContextType: Option[RamlWebApiContextType] = None | ||
|
||
override val defaultSchemaVersion: SchemaVersion = OAS20SchemaVersion.apply(SchemaPosition.Other) | ||
override val annotationValidatorBuilder: AnnotationSchemaValidatorBuilder = IgnoreAnnotationSchemaValidatorBuilder | ||
|
||
override def shouldLinkTypes(parent: ParserContext): Boolean = parent match { | ||
case ctx: ShapeParserContext if ctx.isRamlContext => false | ||
case _ => true | ||
} | ||
|
||
override val syntax: SpecSyntax = SpecSyntax.empty | ||
} |
17 changes: 17 additions & 0 deletions
17
.../src/main/scala/amf/apicontract/internal/spec/avro/parser/context/AvroSchemaContext.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,17 @@ | ||
package amf.apicontract.internal.spec.avro.parser.context | ||
|
||
import amf.core.client.scala.parse.document.ParserContext | ||
import amf.shapes.internal.spec.common.parser.{ShapeParserContext, SpecSettings} | ||
|
||
import scala.collection.mutable | ||
|
||
class AvroSchemaContext(ctx: ParserContext, settings: SpecSettings) | ||
extends ShapeParserContext( | ||
ctx.rootContextDocument, | ||
ctx.refs, | ||
ctx.parsingOptions, | ||
ctx, | ||
None, | ||
mutable.Map.empty, | ||
settings | ||
) {} |
32 changes: 32 additions & 0 deletions
32
...rc/main/scala/amf/apicontract/internal/spec/avro/parser/document/AvroDocumentParser.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,32 @@ | ||
package amf.apicontract.internal.spec.avro.parser.document | ||
|
||
import amf.apicontract.internal.spec.avro.parser.context.AvroSchemaContext | ||
import amf.apicontract.internal.spec.avro.parser.domain.AvroShapeParser | ||
import amf.core.client.scala.model.document.BaseUnitProcessingData | ||
import amf.core.client.scala.parse.document.SyamlParsedDocument | ||
import amf.core.internal.metamodel.document.DocumentModel | ||
import amf.core.internal.parser.domain.Annotations | ||
import amf.core.internal.parser.{Root, YMapOps} | ||
import amf.core.internal.remote.Spec | ||
import amf.shapes.client.scala.model.document.AvroSchemaDocument | ||
import amf.shapes.client.scala.model.domain.AnyShape | ||
import amf.shapes.internal.spec.common.parser.QuickFieldParserOps | ||
import org.yaml.model.YMap | ||
|
||
class AvroDocumentParser(root: Root)(implicit ctx: AvroSchemaContext) extends QuickFieldParserOps { | ||
|
||
def parseDocument(): AvroSchemaDocument = { | ||
val map = root.parsed.asInstanceOf[SyamlParsedDocument].document.as[YMap] | ||
val doc = AvroSchemaDocument(Annotations(map)) | ||
.withLocation(ctx.loc) | ||
.withProcessingData(BaseUnitProcessingData().withSourceSpec(Spec.AVRO_SCHEMA)) | ||
|
||
map.key("namespace", (DocumentModel.Package in doc).allowingAnnotations) | ||
|
||
val parsedShape = parseType(map) | ||
parsedShape.foreach(shape => doc.withEncodes(shape)) | ||
doc | ||
} | ||
|
||
def parseType(map: YMap): Option[AnyShape] = new AvroShapeParser(map).parse() | ||
} |
13 changes: 13 additions & 0 deletions
13
...rc/main/scala/amf/apicontract/internal/spec/avro/parser/domain/AvroArrayShapeParser.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,13 @@ | ||
package amf.apicontract.internal.spec.avro.parser.domain | ||
import amf.apicontract.internal.spec.avro.parser.context.AvroSchemaContext | ||
import amf.shapes.client.scala.model.domain.{AnyShape, ArrayShape} | ||
import org.yaml.model.{YMap, YMapEntry} | ||
|
||
case class AvroArrayShapeParser(map: YMap)(implicit ctx: AvroSchemaContext) | ||
extends AvroCollectionShapeParser[ArrayShape](map, "items") { | ||
override val shape: ArrayShape = ArrayShape(map) | ||
override def setMembers(anyShape: AnyShape): Unit = shape.withItems(anyShape) | ||
override def parseMembers(e: YMapEntry): AnyShape = AvroTextParser(e.value).parse() | ||
|
||
override def parseSpecificFields(): Unit = {} | ||
} |
24 changes: 24 additions & 0 deletions
24
...in/scala/amf/apicontract/internal/spec/avro/parser/domain/AvroCollectionShapeParser.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,24 @@ | ||
package amf.apicontract.internal.spec.avro.parser.domain | ||
|
||
import amf.apicontract.internal.spec.avro.parser.context.AvroSchemaContext | ||
import amf.core.internal.parser.YMapOps | ||
import amf.shapes.client.scala.model.domain.AnyShape | ||
import org.yaml.model.{YMap, YMapEntry} | ||
|
||
abstract class AvroCollectionShapeParser[T <: AnyShape](map: YMap, membersKey: String)(implicit ctx: AvroSchemaContext) | ||
extends AvroComplexShapeParser(map) { | ||
val shape: T | ||
|
||
protected def setMembers(anyShape: AnyShape): Unit | ||
|
||
override def parse(): AnyShape = { | ||
map | ||
.key(membersKey) | ||
.map(parseMembers) | ||
.foreach(setMembers) | ||
parseDefault() | ||
shape | ||
} | ||
|
||
protected def parseMembers(e: YMapEntry): AnyShape = AvroTextTypeParser(e.value.as[String], None).parse() | ||
} |
66 changes: 66 additions & 0 deletions
66
.../main/scala/amf/apicontract/internal/spec/avro/parser/domain/AvroComplexShapeParser.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,66 @@ | ||
package amf.apicontract.internal.spec.avro.parser.domain | ||
|
||
import amf.apicontract.internal.spec.avro.parser.context.AvroSchemaContext | ||
import amf.core.internal.datanode.DataNodeParser | ||
import amf.core.internal.metamodel.domain.ShapeModel | ||
import amf.core.internal.parser.YMapOps | ||
import amf.core.internal.parser.domain.Annotations | ||
import amf.shapes.client.scala.model.domain.AnyShape | ||
import amf.shapes.internal.domain.metamodel.AnyShapeModel | ||
import amf.shapes.internal.spec.common.parser.QuickFieldParserOps | ||
import org.yaml.model._ | ||
|
||
abstract class AvroComplexShapeParser(map: YMap)(implicit ctx: AvroSchemaContext) | ||
extends QuickFieldParserOps | ||
with AvroKeyExtractor { | ||
val shape: AnyShape | ||
|
||
def parse(): AnyShape = { | ||
addTypeToCache() | ||
parseCommonFields() | ||
parseSpecificFields() | ||
parseDefault() | ||
shape | ||
} | ||
|
||
def parseCommonFields(): Unit = { | ||
map.key("name", AnyShapeModel.Name in shape) | ||
map.key("namespace", (AnyShapeModel.AvroNamespace in shape).allowingAnnotations) | ||
map.key("aliases", (AnyShapeModel.Aliases in shape).allowingAnnotations) | ||
map.key("doc", (AnyShapeModel.Description in shape).allowingAnnotations) | ||
} | ||
|
||
// each specific parser should override and parse it's specific fields | ||
def parseSpecificFields(): Unit | ||
|
||
def parseDefault(): Unit = { | ||
map.key( | ||
"default", | ||
entry => { | ||
val dataNode = DataNodeParser(entry.value).parse() | ||
shape.set(ShapeModel.Default, dataNode, Annotations(entry)) | ||
} | ||
) | ||
} | ||
|
||
private def addTypeToCache(): Unit = { | ||
def getText(node: YNode) = node.as[YScalar].text | ||
def getAliases(entry: YMapEntry): IndexedSeq[String] = entry.value.as[YSequence].nodes.map(getText) | ||
val name = map.key("name").map(name => getText(name.value)) | ||
val aliases = map.key("aliases").map(getAliases) | ||
name.foreach(ctx.globalSpace.put(_, shape)) | ||
aliases.foreach(_.foreach(alias => ctx.globalSpace.put(alias, shape))) | ||
} | ||
} | ||
|
||
trait AvroKeyExtractor { | ||
implicit class YMapKeys(map: YMap) { | ||
def typeValue: Option[YNode] = map.key("type").map(_.value) | ||
def `type`: Option[String] = typeValue.flatMap(_.asScalar).map(_.text) | ||
} | ||
|
||
implicit class StringAvroOps(value: String) { | ||
def isPrimitive: Boolean = | ||
Seq("null", "boolean", "int", "long", "float", "double", "bytes", "string").contains(value) | ||
} | ||
} |
33 changes: 33 additions & 0 deletions
33
...ared/src/main/scala/amf/apicontract/internal/spec/avro/parser/domain/AvroEnumParser.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,33 @@ | ||
package amf.apicontract.internal.spec.avro.parser.domain | ||
|
||
import amf.apicontract.internal.spec.avro.parser.context.AvroSchemaContext | ||
import amf.core.client.scala.model.DataType | ||
import amf.core.client.scala.model.domain.ScalarNode | ||
import amf.core.internal.parser.{YMapOps, YScalarYRead} | ||
import amf.shapes.client.scala.model.domain.AnyShape | ||
import org.yaml.model._ | ||
|
||
class AvroEnumParser(map: YMap)(implicit ctx: AvroSchemaContext) extends AvroTextTypeParser("string", Some(map)) { | ||
|
||
override def parse(): AnyShape = { | ||
val shape = super.parse() | ||
parseCommonFields() | ||
parseSpecificFields() | ||
parseDefault() | ||
shape | ||
} | ||
|
||
override def parseSpecificFields(): Unit = { | ||
map | ||
.key("symbols") | ||
.map(parseSymbols) | ||
.map(shape.withValues) | ||
} | ||
|
||
private def parseSymbols(e: YMapEntry): Seq[ScalarNode] = { | ||
val symbols = e.value.as[YSequence] | ||
symbols.nodes.map(buildDataNode) | ||
} | ||
|
||
private def buildDataNode(symbol: YNode) = ScalarNode(symbol.as[YScalar].text, Some(DataType.String), symbol) | ||
} |
Oops, something went wrong.