Skip to content

Commit

Permalink
Merge pull request #549 from aml-org/publish-6.0.12
Browse files Browse the repository at this point in the history
Publish 6.0.12
  • Loading branch information
looseale authored Aug 23, 2022
2 parents ddd953b + fac9076 commit a563948
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import amf.core.client.scala.model.DataType
import amf.core.client.scala.model.document.BaseUnit
import amf.core.client.scala.model.domain._
import amf.core.client.scala.vocabulary.Namespace
import amf.core.internal.annotations.{SourceAST, SourceYPart}
import amf.core.internal.annotations.{LexicalInformation, SourceAST, SourceYPart}
import amf.core.internal.metamodel.Field
import amf.core.internal.parser.domain.Annotations
import amf.core.internal.utils._
Expand Down Expand Up @@ -189,14 +189,29 @@ class CustomShaclValidator(
// depending if propertyInfo is provided, violation is thrown at a given property, or by default on element
val onValidation = (validationInfo: Option[ValidationInfo]) =>
validationInfo match {
case Some(ValidationInfo(field, customMessage, _)) => // why annotations are never used?
reportFailure(validationSpecification, element.id, field.toString, customMessage, reportBuilder)
case _ => reportFailure(validationSpecification, element.id, "", reportBuilder = reportBuilder)
case Some(ValidationInfo(field, customMessage, ann)) =>
reportBuilder.reportFailure(
validationSpecification,
element.id,
field.toString,
customMessage,
getPosition(ann),
getLocation(ann)
)
case _ => reportBuilder.reportFailure(validationSpecification, element.id, "")
}
validationFunction.run(element, onValidation)
})
}

private def getPosition(annotations: Option[Annotations]): Option[LexicalInformation] = {
annotations flatMap (_.find(classOf[LexicalInformation]))
}

private def getLocation(annotations: Option[Annotations]): Option[String] = {
annotations flatMap (_.location())
}

private def getFunctionForName(name: String): CustomShaclFunction = customFunctions.get(name) match {
case Some(validationFunction) => validationFunction
case None =>
Expand All @@ -219,7 +234,7 @@ class CustomShaclValidator(
validationSpecification.targetObject.foreach { targetObject =>
extractor.extractPlainPredicateValue(targetObject, element).foreach {
case ExtractedPropertyValue(_: AmfScalar, Some(value: String)) if !value.contains("://") =>
reportFailure(validationSpecification, element.id, "", reportBuilder = reportBuilder)
reportBuilder.reportFailure(validationSpecification, element.id, "", None)
case _ => // ignore
}
}
Expand Down Expand Up @@ -353,7 +368,7 @@ class CustomShaclValidator(
case ExtractedPropertyValue(obj: AmfObject, _) =>
val current = obj.meta.`type`.map(_.iri())
if (!propertyConstraint.`class`.exists(t => current.contains(t)))
reportBuilder.reportFailure(validationSpecification, propertyConstraint, element.id)
reportBuilder.reportFailure(validationSpecification, propertyConstraint, element.id, None, None)
case _ => // ignore
}
}
Expand Down Expand Up @@ -866,16 +881,6 @@ class CustomShaclValidator(
id: String,
reportBuilder: ReportBuilder
): Unit = {
reportBuilder.reportFailure(validationSpecification, propertyConstraint, id)
}

private def reportFailure(
validationSpec: ValidationSpecification,
id: String,
path: String,
customMessage: Option[String] = None,
reportBuilder: ReportBuilder
): Unit = {
reportBuilder.reportFailure(validationSpec, id, path, customMessage)
reportBuilder.reportFailure(validationSpecification, propertyConstraint, id, None, None)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package amf.validation.internal.shacl.custom

import amf.core.client.common.validation.{MessageStyle, OASStyle, RAMLStyle, SeverityLevels}
import amf.core.internal.annotations.LexicalInformation
import amf.core.internal.validation.core._

import scala.collection.mutable
Expand All @@ -20,16 +21,20 @@ class ReportBuilder(messageStyle: MessageStyle) {
def reportFailure(
validationSpecification: ValidationSpecification,
propertyConstraint: PropertyConstraint,
id: String
id: String,
position: Option[LexicalInformation],
location: Option[String]
): Unit = {
reportFailure(validationSpecification, id, propertyConstraint.ramlPropertyId)
reportFailure(validationSpecification, id, propertyConstraint.ramlPropertyId, None, position, location)
}

def reportFailure(
validationSpec: ValidationSpecification,
id: String,
path: String,
customMessage: Option[String] = None
customMessage: Option[String] = None,
position: Option[LexicalInformation] = None,
location: Option[String] = None
): Unit = {
registerResult(
CustomValidationResult(
Expand All @@ -38,13 +43,16 @@ class ReportBuilder(messageStyle: MessageStyle) {
sourceConstraintComponent = validationSpec.id,
focusNode = id,
severity = ShaclSeverityUris.amfSeverity(validationSpec.severity),
sourceShape = validationSpec.id
sourceShape = validationSpec.id,
position = position,
location = location
)
)
}

private def registerResult(result: ValidationResult): Unit = {
val key = result.sourceShape + result.sourceConstraintComponent + result.focusNode + result.message.getOrElse("")
val key =
result.sourceShape + result.sourceConstraintComponent + result.focusNode + result.message + result.position + result.location
if (!duplicates.contains(key)) {
duplicates += key
results.append(result)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package amf.validation.internal.shacl.custom

import amf.core.internal.annotations.LexicalInformation
import amf.core.internal.validation.core.ValidationResult

case class CustomValidationResult(
Expand All @@ -8,5 +9,7 @@ case class CustomValidationResult(
sourceConstraintComponent: String,
focusNode: String,
severity: String,
sourceShape: String
sourceShape: String,
position: Option[LexicalInformation],
location: Option[String]
) extends ValidationResult
4 changes: 2 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo

name := "amf-aml"

ThisBuild / version := "6.0.11"
ThisBuild / version := "6.0.12"
ThisBuild / scalaVersion := "2.12.11"

publish := {}
Expand All @@ -34,7 +34,7 @@ lazy val workspaceDirectory: File =
case _ => Path.userHome / "mulesoft"
}

val amfCoreVersion = "5.0.11"
val amfCoreVersion = "5.0.12"

lazy val amfCoreJVMRef = ProjectRef(workspaceDirectory / "amf-core", "coreJVM")
lazy val amfCoreJSRef = ProjectRef(workspaceDirectory / "amf-core", "coreJS")
Expand Down

0 comments on commit a563948

Please sign in to comment.