Skip to content

Method: ContextBuildingObjectPropertyValueSerializer(ObjectGraphTraverser)

1: package cz.cvut.kbss.jsonld.serialization.serializer.context;
2:
3: import cz.cvut.kbss.jsonld.ConfigParam;
4: import cz.cvut.kbss.jsonld.Configuration;
5: import cz.cvut.kbss.jsonld.JsonLd;
6: import cz.cvut.kbss.jsonld.common.BeanClassProcessor;
7: import cz.cvut.kbss.jsonld.serialization.model.JsonNode;
8: import cz.cvut.kbss.jsonld.serialization.serializer.SerializerUtils;
9: import cz.cvut.kbss.jsonld.serialization.serializer.compact.ObjectPropertyValueSerializer;
10: import cz.cvut.kbss.jsonld.serialization.traversal.ObjectGraphTraverser;
11: import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContext;
12:
13: import java.util.Collection;
14:
15: public class ContextBuildingObjectPropertyValueSerializer extends ObjectPropertyValueSerializer {
16:
17: private boolean serializeUsingExtendedDefinition;
18:
19: public ContextBuildingObjectPropertyValueSerializer(ObjectGraphTraverser graphTraverser) {
20: super(graphTraverser);
21: }
22:
23: @Override
24: public JsonNode serialize(Object value, SerializationContext ctx) {
25: if (ctx.getTerm() != null) {
26: registerTermDefinition(ctx);
27: }
28: return super.serialize(value, ctx);
29: }
30:
31: private void registerTermDefinition(SerializationContext<?> ctx) {
32: if (serializeUsingExtendedDefinition && isIndividual(ctx)) {
33: ctx.registerTermMapping(ctx.getFieldName(),
34: SerializerUtils.createTypedTermDefinition(ctx.getFieldName(), ctx.getTerm(),
35: JsonLd.ID));
36: } else {
37: ctx.registerTermMapping(ctx.getFieldName(), ctx.getTerm());
38: }
39: }
40:
41: private static boolean isIndividual(SerializationContext<?> ctx) {
42: if (BeanClassProcessor.isIndividualType(ctx.getValue().getClass())) {
43: return true;
44: }
45: if (ctx.getValue() instanceof Collection) {
46: final Collection<?> c = (Collection<?>) ctx.getValue();
47: for (Object elem : c) {
48: if (elem != null) {
49: return BeanClassProcessor.isIndividualType(elem.getClass());
50: }
51: }
52: }
53: return false;
54: }
55:
56: @Override
57: public void configure(Configuration config) {
58: this.serializeUsingExtendedDefinition = config.is(ConfigParam.SERIALIZE_INDIVIDUALS_USING_EXPANDED_DEFINITION);
59: }
60: }