diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/JsonLDSchemaConfiguration.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/JsonLDSchemaConfiguration.scala index bb90fa9c30..f595325e68 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/JsonLDSchemaConfiguration.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/JsonLDSchemaConfiguration.scala @@ -21,6 +21,7 @@ import amf.core.internal.validation.core.ValidationProfile import amf.shapes.client.scala.{JsonLDSchemaElementClient, ShapesConfiguration, ShapesElementClient} import amf.shapes.client.scala.model.document.JsonSchemaDocument import amf.shapes.internal.convert.JsonLDSchemaRegister +import amf.shapes.internal.plugins.parser.AMFJsonLDSchemaGraphParsePlugin import amf.shapes.internal.plugins.render.AMFJsonLDSchemaGraphRenderPlugin import amf.shapes.internal.spec.jsonldschema.JsonLDSchemaParsePlugin import amf.shapes.internal.transformation.JsonLDSchemaEditingPipeline @@ -237,6 +238,7 @@ object JsonLDSchemaConfiguration { base.listeners, base.options ).withTransformationPipeline(JsonLDSchemaEditingPipeline()) - .withPlugin(AMFJsonLDSchemaGraphRenderPlugin) + .withPlugins(List(AMFJsonLDSchemaGraphRenderPlugin, AMFJsonLDSchemaGraphParsePlugin)) + } } diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/internal/plugins/document/graph/parser/FlattenedJsonLdInstanceParser.scala b/amf-shapes/shared/src/main/scala/amf/shapes/internal/plugins/document/graph/parser/FlattenedJsonLdInstanceParser.scala new file mode 100644 index 0000000000..7f30e8b1cd --- /dev/null +++ b/amf-shapes/shared/src/main/scala/amf/shapes/internal/plugins/document/graph/parser/FlattenedJsonLdInstanceParser.scala @@ -0,0 +1,39 @@ +package amf.shapes.internal.plugins.document.graph.parser + +import amf.core.client.scala.parse.document.SyamlParsedDocument +import amf.core.internal.parser.ParseConfiguration +import amf.core.internal.plugins.document.graph.parser.{ + FlattenedGraphParser, + FlattenedUnitGraphParser, + GraphParserContext +} + +class FlattenedJsonLdInstanceParser(startingPoint: String, overrideAliases: Map[String, String] = Map.empty)(implicit + ctx: GraphParserContext +) extends FlattenedGraphParser(startingPoint, overrideAliases) { + + // TODO override sorted array parsing + +} + +class FlattenedJsonLdInstanceUnitGraphParser(overrideAliases: Map[String, String] = Map.empty)(implicit + ctx: GraphParserContext +) extends FlattenedUnitGraphParser(overrideAliases) { + + override def parserProvider( + rootId: String, + overrideAliases: Map[String, String], + ctx: GraphParserContext + ): FlattenedGraphParser = new FlattenedJsonLdInstanceParser(rootId, overrideAliases)(ctx) + +} + +object FlattenedJsonLdInstanceUnitGraphParser { + + def apply(config: ParseConfiguration, aliases: Map[String, String]): FlattenedJsonLdInstanceUnitGraphParser = + new FlattenedJsonLdInstanceUnitGraphParser(aliases)(new GraphParserContext(config = config)) + + def canParse(document: SyamlParsedDocument, aliases: Map[String, String] = Map.empty): Boolean = + FlattenedUnitGraphParser.canParse(document, aliases) + +} diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/internal/plugins/parser/AMFJsonLDSchemaGraphParsePlugin.scala b/amf-shapes/shared/src/main/scala/amf/shapes/internal/plugins/parser/AMFJsonLDSchemaGraphParsePlugin.scala new file mode 100644 index 0000000000..7d647b9e4a --- /dev/null +++ b/amf-shapes/shared/src/main/scala/amf/shapes/internal/plugins/parser/AMFJsonLDSchemaGraphParsePlugin.scala @@ -0,0 +1,26 @@ +package amf.shapes.internal.plugins.parser + +import amf.core.client.scala.exception.UnsupportedParsedDocumentException +import amf.core.client.scala.model.document.BaseUnit +import amf.core.client.scala.parse.document.{ParserContext, SyamlParsedDocument} +import amf.core.internal.parser.Root +import amf.core.internal.plugins.parse.AMFGraphParsePlugin +import amf.shapes.internal.plugins.document.graph.parser.FlattenedJsonLdInstanceUnitGraphParser + +object AMFJsonLDSchemaGraphParsePlugin extends AMFGraphParsePlugin { + + override def applies(element: Root): Boolean = element.parsed match { + case parsed: SyamlParsedDocument => FlattenedJsonLdInstanceUnitGraphParser.canParse(parsed, aliases) + case _ => false + } + override def parse(document: Root, ctx: ParserContext): BaseUnit = document.parsed match { + case parsed: SyamlParsedDocument => + FlattenedJsonLdInstanceUnitGraphParser(ctx.config, aliases) + .parse(parsed.document, effectiveUnitUrl(document.location, ctx.parsingOptions)) + case _ => throw UnsupportedParsedDocumentException + } + + override def mediaTypes: Seq[String] = Seq( + "application/schemald+json" + ) +}