From 948be91aaa2e7595dbc9b30867a41f18dcb5042e Mon Sep 17 00:00:00 2001 From: Martin Ledvinka Date: Fri, 31 Mar 2023 10:41:48 +0200 Subject: [PATCH] [Enhancement #54] Minor code cleanup, add some tests. --- .../compact/IndividualSerializer.java | 21 ++++---- .../ObjectPropertyValueSerializer.java | 4 -- .../ContextBuildingIndividualSerializer.java | 1 + .../traversal/ObjectGraphTraverser.java | 8 ++- ...ntextBuildingIndividualSerializerTest.java | 52 +++++++++++++++++++ 5 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 src/test/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializerTest.java diff --git a/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/IndividualSerializer.java b/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/IndividualSerializer.java index 05dccf6..669a80a 100644 --- a/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/IndividualSerializer.java +++ b/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/IndividualSerializer.java @@ -21,22 +21,21 @@ public class IndividualSerializer implements ValueSerializer { public JsonNode serialize(Object value, SerializationContext ctx) { assert BeanClassProcessor.isIdentifierType(value.getClass()) || value.getClass().isEnum(); if (BeanClassProcessor.isIdentifierType(value.getClass())) { - final ObjectNode node = JsonNodeFactory.createObjectNode(ctx.getTerm()); - node.addItem(JsonNodeFactory.createObjectIdNode(idAttribute(ctx), value)); - return node; + return serializeValue(value, ctx); } else { - return serializeEnumConstant((Enum) value, ctx); + assert value instanceof Enum; + final String iri = EnumUtil.resolveMappedIndividual((Enum) value); + return serialize(iri, ctx); } } - private String idAttribute(SerializationContext ctx) { - return ctx.getJsonLdContext().getMappedTerm(JsonLd.ID).orElse(JsonLd.ID); - } - - protected JsonNode serializeEnumConstant(Enum constant, SerializationContext ctx) { - final String iri = EnumUtil.resolveMappedIndividual(constant); + private JsonNode serializeValue(Object value, SerializationContext ctx) { final ObjectNode node = JsonNodeFactory.createObjectNode(ctx.getTerm()); - node.addItem(JsonNodeFactory.createObjectIdNode(idAttribute(ctx), iri)); + node.addItem(JsonNodeFactory.createObjectIdNode(idAttribute(ctx), value)); return node; } + + private String idAttribute(SerializationContext ctx) { + return ctx.getJsonLdContext().getMappedTerm(JsonLd.ID).orElse(JsonLd.ID); + } } diff --git a/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/ObjectPropertyValueSerializer.java b/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/ObjectPropertyValueSerializer.java index 0db24c4..6ea3f7e 100644 --- a/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/ObjectPropertyValueSerializer.java +++ b/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/compact/ObjectPropertyValueSerializer.java @@ -12,11 +12,7 @@ */ package cz.cvut.kbss.jsonld.serialization.serializer.compact; -import cz.cvut.kbss.jsonld.JsonLd; -import cz.cvut.kbss.jsonld.common.EnumUtil; -import cz.cvut.kbss.jsonld.serialization.JsonNodeFactory; import cz.cvut.kbss.jsonld.serialization.model.JsonNode; -import cz.cvut.kbss.jsonld.serialization.model.ObjectNode; import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializer; import cz.cvut.kbss.jsonld.serialization.traversal.ObjectGraphTraverser; import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContext; diff --git a/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializer.java b/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializer.java index 9b0bc69..33848ec 100644 --- a/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializer.java +++ b/src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializer.java @@ -15,6 +15,7 @@ public class ContextBuildingIndividualSerializer extends IndividualSerializer { @Override public JsonNode serialize(Object value, SerializationContext ctx) { + // Assume term has been already registered in context if (serializeUsingExtendedDefinition) { if (BeanClassProcessor.isIdentifierType(value.getClass())) { return JsonNodeFactory.createStringLiteralNode(ctx.getTerm(), value.toString()); diff --git a/src/main/java/cz/cvut/kbss/jsonld/serialization/traversal/ObjectGraphTraverser.java b/src/main/java/cz/cvut/kbss/jsonld/serialization/traversal/ObjectGraphTraverser.java index 48dc36f..7e22f98 100644 --- a/src/main/java/cz/cvut/kbss/jsonld/serialization/traversal/ObjectGraphTraverser.java +++ b/src/main/java/cz/cvut/kbss/jsonld/serialization/traversal/ObjectGraphTraverser.java @@ -81,15 +81,15 @@ void traverseSingular(SerializationContext ctx) { if (ctx.getValue() == null) { return; } - final boolean firstEncounter = !knownInstances.containsKey(ctx.getValue()); final boolean shouldTraverse = visitInstance(ctx); if (!shouldTraverse) { return; } if (isIndividual(ctx)) { - visitor.visitIndividual(ctx); + visitIndividual(ctx); return; } + final boolean firstEncounter = !knownInstances.containsKey(ctx.getValue()); openInstance(ctx); visitIdentifier(ctx); if (firstEncounter) { @@ -161,6 +161,10 @@ public boolean visitInstance(SerializationContext ctx) { return visitor.visitObject(ctx); } + public void visitIndividual(SerializationContext ctx) { + visitor.visitIndividual(ctx); + } + public void openInstance(SerializationContext ctx) { if (!BeanClassProcessor.isIdentifierType(ctx.getValue().getClass())) { final String identifier = resolveIdentifier(ctx.getValue()); diff --git a/src/test/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializerTest.java b/src/test/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializerTest.java new file mode 100644 index 0000000..0fd4555 --- /dev/null +++ b/src/test/java/cz/cvut/kbss/jsonld/serialization/serializer/context/ContextBuildingIndividualSerializerTest.java @@ -0,0 +1,52 @@ +package cz.cvut.kbss.jsonld.serialization.serializer.context; + +import cz.cvut.kbss.jopa.vocabulary.OWL; +import cz.cvut.kbss.jsonld.ConfigParam; +import cz.cvut.kbss.jsonld.Configuration; +import cz.cvut.kbss.jsonld.environment.Generator; +import cz.cvut.kbss.jsonld.environment.Vocabulary; +import cz.cvut.kbss.jsonld.environment.model.OwlPropertyType; +import cz.cvut.kbss.jsonld.serialization.context.DummyJsonLdContext; +import cz.cvut.kbss.jsonld.serialization.model.JsonNode; +import cz.cvut.kbss.jsonld.serialization.model.StringLiteralNode; +import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContext; +import org.junit.jupiter.api.Test; + +import java.net.URI; + +import static org.junit.jupiter.api.Assertions.*; + +class ContextBuildingIndividualSerializerTest { + + private final ContextBuildingIndividualSerializer sut = new ContextBuildingIndividualSerializer(); + + @Test + void serializeSerializesUriValueAsStringWhenSerializationWithExtendedTermDefinitionInContextIsEnabled() { + final URI individual = Generator.generateUri(); + final SerializationContext ctx = + new SerializationContext<>(Vocabulary.ORIGIN, individual, DummyJsonLdContext.INSTANCE); + final Configuration config = new Configuration(); + config.set(ConfigParam.SERIALIZE_INDIVIDUALS_USING_EXPANDED_DEFINITION, Boolean.TRUE.toString()); + + sut.configure(config); + final JsonNode result = sut.serialize(individual, ctx); + assertInstanceOf(StringLiteralNode.class, result); + final StringLiteralNode node = (StringLiteralNode) result; + assertEquals(individual.toString(), node.getValue()); + } + + @Test + void serializeSerializesEnumValueMappedToIndividualAsStringWhenSerializationWithExtendedTermDefinitionInContextIsEnabled() { + final OwlPropertyType value = OwlPropertyType.OBJECT_PROPERTY; + final SerializationContext ctx = + new SerializationContext<>(Vocabulary.HAS_PROPERTY_TYPE, value, DummyJsonLdContext.INSTANCE); + final Configuration config = new Configuration(); + config.set(ConfigParam.SERIALIZE_INDIVIDUALS_USING_EXPANDED_DEFINITION, Boolean.TRUE.toString()); + + sut.configure(config); + final JsonNode result = sut.serialize(value, ctx); + assertInstanceOf(StringLiteralNode.class, result); + final StringLiteralNode node = (StringLiteralNode) result; + assertEquals(OWL.OBJECT_PROPERTY, node.getValue()); + } +} \ No newline at end of file