From a32f47fa0d8c20822abfc089747c804a394cbf4a Mon Sep 17 00:00:00 2001 From: Loose Date: Tue, 15 Feb 2022 18:10:42 -0300 Subject: [PATCH] Add interface to parse from content to SemanticBaseUnitClient --- amf-cli/js/typings/amf-client-js.d.ts | 1 + .../config/SemanticBaseUnitClient.scala | 4 ++++ .../SemanticJsonSchemaConfiguration.scala | 12 +++++------ .../scala/config/SemanticBaseUnitClient.scala | 4 ++++ .../SemanticJsonSchemaConfiguration.scala | 4 ++-- .../SemanticSchemaParser.scala | 21 ++++++++++++------- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/amf-cli/js/typings/amf-client-js.d.ts b/amf-cli/js/typings/amf-client-js.d.ts index 06436fdb58..e7b3e5a850 100644 --- a/amf-cli/js/typings/amf-client-js.d.ts +++ b/amf-cli/js/typings/amf-client-js.d.ts @@ -670,6 +670,7 @@ declare module 'amf-client-js' { export class SemanticBaseUnitClient extends AMLBaseUnitClient { parseSemanticSchema(url: string): Promise + parseSemanticSchemaContent(content: string): Promise } export interface ValidationResult { diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticBaseUnitClient.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticBaseUnitClient.scala index 38b4e439a3..4cfeacd41c 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticBaseUnitClient.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticBaseUnitClient.scala @@ -20,6 +20,10 @@ class SemanticBaseUnitClient private[amf] (private val _internal: InternalSemant def parseSemanticSchema(url: String): ClientFuture[AMFSemanticSchemaResult] = { _internal.parseSemanticSchema(url).asClient } + + def parseSemanticSchemaContent(content: String): ClientFuture[AMFSemanticSchemaResult] = { + _internal.parseSemanticSchemaContent(content).asClient + } } @JSExportAll diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticJsonSchemaConfiguration.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticJsonSchemaConfiguration.scala index 0c2e424d48..518f1dbf34 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticJsonSchemaConfiguration.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/config/SemanticJsonSchemaConfiguration.scala @@ -1,7 +1,7 @@ package amf.shapes.client.platform.config +import amf.aml.client.platform.AMLConfigurationState import amf.aml.client.platform.model.document.{Dialect, DialectInstance} -import amf.aml.client.platform.{AMLBaseUnitClient, AMLConfigurationState, AMLElementClient} import amf.aml.internal.convert.VocabulariesClientConverter.{ClientFuture, ClientList} import amf.core.client.platform.config.{AMFEventListener, ParsingOptions, RenderOptions} import amf.core.client.platform.errorhandling.ErrorHandlerProvider @@ -10,15 +10,15 @@ import amf.core.client.platform.reference.UnitCache import amf.core.client.platform.resource.ResourceLoader import amf.core.client.platform.transform.TransformationPipeline import amf.core.client.platform.validation.payload.AMFShapePayloadValidationPlugin +import amf.core.internal.convert.ClientErrorHandlerConverter._ import amf.core.internal.convert.PayloadValidationPluginConverter.PayloadValidationPluginMatcher -import amf.shapes.client.platform.{BaseShapesConfiguration, ShapesConfiguration, ShapesElementClient} +import amf.core.internal.convert.TransformationPipelineConverter._ +import amf.shapes.client.platform.{BaseShapesConfiguration, ShapesConfiguration} import amf.shapes.client.scala.config.{ - SemanticJsonSchemaConfiguration => InternalSemanticJsonSchemaConfiguration, - SemanticBaseUnitClient => InternalSemanticBaseUnitClient + SemanticBaseUnitClient => InternalSemanticBaseUnitClient, + SemanticJsonSchemaConfiguration => InternalSemanticJsonSchemaConfiguration } import amf.shapes.internal.convert.ShapeClientConverters._ -import amf.core.internal.convert.TransformationPipelineConverter._ -import amf.core.internal.convert.ClientErrorHandlerConverter._ import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel} diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticBaseUnitClient.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticBaseUnitClient.scala index 29e5229c96..ca12155618 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticBaseUnitClient.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticBaseUnitClient.scala @@ -18,6 +18,10 @@ class SemanticBaseUnitClient private[amf] (override protected val configuration: def parseSemanticSchema(url: String): Future[AMFSemanticSchemaResult] = { SemanticSchemaParser.parse(url, configuration) } + + def parseSemanticSchemaContent(content: String): Future[AMFSemanticSchemaResult] = { + SemanticSchemaParser.parseContent(content, configuration) + } } class AMFSemanticSchemaResult(override val baseUnit: Dialect, diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticJsonSchemaConfiguration.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticJsonSchemaConfiguration.scala index 3144dab8c7..5cb66e2f9e 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticJsonSchemaConfiguration.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/config/SemanticJsonSchemaConfiguration.scala @@ -3,7 +3,7 @@ package amf.shapes.client.scala.config import amf.aml.client.scala.AMLConfigurationState import amf.aml.client.scala.model.document.{Dialect, DialectInstance} import amf.aml.internal.registries.AMLRegistry -import amf.core.client.scala.config.{AMFEventListener, AMFOptions, ParsingOptions, RenderOptions, UnitCache} +import amf.core.client.scala.config._ import amf.core.client.scala.errorhandling.{DefaultErrorHandlerProvider, ErrorHandlerProvider} import amf.core.client.scala.execution.ExecutionEnvironment import amf.core.client.scala.model.domain.AnnotationGraphLoader @@ -17,7 +17,7 @@ import amf.core.internal.registries.AMFRegistry import amf.core.internal.resource.AMFResolvers import amf.core.internal.validation.EffectiveValidations import amf.core.internal.validation.core.ValidationProfile -import amf.shapes.client.scala.{ShapesBaseUnitClient, ShapesConfiguration, ShapesElementClient} +import amf.shapes.client.scala.{ShapesConfiguration, ShapesElementClient} import amf.shapes.internal.spec.jsonschema.semanticjsonschema.JsonSchemaDialectParsePlugin import scala.concurrent.{ExecutionContext, Future} diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/internal/spec/jsonschema/semanticjsonschema/SemanticSchemaParser.scala b/amf-shapes/shared/src/main/scala/amf/shapes/internal/spec/jsonschema/semanticjsonschema/SemanticSchemaParser.scala index 7e3f705f9a..6393e9ae49 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/internal/spec/jsonschema/semanticjsonschema/SemanticSchemaParser.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/internal/spec/jsonschema/semanticjsonschema/SemanticSchemaParser.scala @@ -12,16 +12,23 @@ object SemanticSchemaParser { def parse(uri: String, config: SemanticJsonSchemaConfiguration): Future[AMFSemanticSchemaResult] = { implicit val executionContext: ExecutionContext = config.getExecutionContext - val client = config.baseUnitClient() - client.parseDialect(uri).map { result => - val AMLDialectResult(dialect: Dialect, results) = result - val maybeVocab = getVocabularyFromReferences(dialect) - dialect.withReferences(Nil) // remove references to avoid emission with "uses" as it is harder to use - AMFSemanticSchemaResult(dialect, maybeVocab, results) - } + config.baseUnitClient().parseDialect(uri).map(processResult) + } + + def parseContent(content: String, config: SemanticJsonSchemaConfiguration): Future[AMFSemanticSchemaResult] = { + implicit val executionContext: ExecutionContext = config.getExecutionContext + + config.baseUnitClient().parseContent(content).map(processResult) } private def getVocabularyFromReferences(dialect: Dialect): Option[Vocabulary] = { dialect.references.headOption.collect { case vocab: Vocabulary => vocab } } + + private def processResult(result: AMFResult): AMFSemanticSchemaResult = { + val AMLDialectResult(dialect: Dialect, results) = result + val maybeVocab = getVocabularyFromReferences(dialect) + dialect.withReferences(Nil) // remove references to avoid emission with "uses" as it is harder to use + AMFSemanticSchemaResult(dialect, maybeVocab, results) + } }