Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Commit 50ae2c5

Browse files
author
Matthias Böckmann
committed
Add generation of random URIs to serialization
1 parent 7b15be2 commit 50ae2c5

8 files changed

Lines changed: 56 additions & 23 deletions

File tree

dataformat-jsonld/src/main/java/io/adminshell/aas/v3/dataformat/jsonld/JsonLDModule.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import java.math.BigDecimal;
1111
import java.net.URI;
12+
import java.util.Map;
1213

1314

1415
import javax.xml.datatype.XMLGregorianCalendar;
@@ -19,11 +20,11 @@
1920
*/
2021
public class JsonLDModule extends SimpleModule {
2122

22-
public JsonLDModule() {
23-
super();
2423

24+
public JsonLDModule(Map<Object, String> idMap) {
25+
super();
2526

26-
setSerializerModifier(new JsonLDSerializerModifier());
27+
setSerializerModifier(new JsonLDSerializerModifier(idMap));
2728

2829
addSerializer(XMLGregorianCalendar.class, new XMLGregorianCalendarSerializer());
2930
addDeserializer(XMLGregorianCalendar.class, new XMLGregorianCalendarDeserializer());

dataformat-jsonld/src/main/java/io/adminshell/aas/v3/dataformat/jsonld/JsonLDSerializer.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ public class JsonLDSerializer extends BeanSerializer {
2828

2929
static final Map<String, String> contextItems = new HashMap<>();
3030

31-
JsonLDSerializer(BeanSerializerBase src) {
31+
private final Map<Object, String> idMap;
32+
33+
JsonLDSerializer(BeanSerializerBase src, Map<Object, String> idMap) {
3234
super(src);
35+
this.idMap = Objects.requireNonNullElseGet(idMap, HashMap::new);
3336
}
3437

3538

@@ -48,6 +51,18 @@ public void serializeWithType(Object bean, JsonGenerator gen, SerializerProvider
4851
//gen.writeStringField("@context", "https://jira.iais.fraunhofer.de/stash/projects/ICTSL/repos/ids-infomodel-commons/raw/jsonld-context/3.0.0/context.jsonld"); // only add @context on top level
4952

5053
}
54+
55+
if(idMap.containsKey(bean))
56+
{
57+
gen.writeStringField("@id", idMap.get(bean));
58+
}
59+
else
60+
{
61+
String randomUri = "https://admin-shell.io/autogen/" + UUID.randomUUID();
62+
idMap.put(bean, randomUri);
63+
gen.writeStringField("@id", randomUri);
64+
}
65+
5166
WritableTypeId typeIdDef = _typeIdDef(typeSer, bean, JsonToken.START_OBJECT);
5267
String resolvedTypeId = typeIdDef.id != null ? typeIdDef.id.toString() : typeSer.getTypeIdResolver().idFromValue(bean);
5368
if (resolvedTypeId != null) {

dataformat-jsonld/src/main/java/io/adminshell/aas/v3/dataformat/jsonld/JsonLDSerializerModifier.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,21 @@
88
import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;
99
import io.adminshell.aas.v3.dataformat.jsonld.JsonLDSerializer;
1010

11+
import java.util.Map;
12+
1113

1214
public class JsonLDSerializerModifier extends BeanSerializerModifier {
1315

16+
private final Map<Object, String> idMap;
1417

15-
public JsonLDSerializerModifier() {
18+
public JsonLDSerializerModifier(Map<Object, String> idMap) {
19+
this.idMap = idMap;
1620
}
1721

1822
@Override
1923
public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) {
2024
if (serializer instanceof BeanSerializerBase) {
21-
return new JsonLDSerializer((BeanSerializerBase) serializer);
25+
return new JsonLDSerializer((BeanSerializerBase) serializer, idMap);
2226
} else {
2327
return serializer;
2428
}

dataformat-jsonld/src/main/java/io/adminshell/aas/v3/dataformat/jsonld/JsonLdEnumSerializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.fasterxml.jackson.core.JsonGenerator;
2020
import com.fasterxml.jackson.databind.JsonSerializer;
2121
import com.fasterxml.jackson.databind.SerializerProvider;
22-
import io.adminshell.aas.v3.dataformat.core.ReflectionHelper;
2322
import io.adminshell.aas.v3.model.annotations.IRI;
2423

2524
import java.io.IOException;
@@ -29,7 +28,8 @@ public class JsonLdEnumSerializer extends JsonSerializer<Enum<?>> {
2928

3029
@Override
3130
public void serialize(Enum value, JsonGenerator gen, SerializerProvider provider) throws IOException {
32-
if (ReflectionHelper.ENUMS.contains(value.getClass())) {
31+
if(value.getClass().isEnum() && value.getClass().getName().startsWith("io.adminshell.aas."))
32+
{
3333
gen.writeString(translate(value.getClass(), value.name()));
3434
} else {
3535
provider.findValueSerializer(Enum.class).serialize(value, gen, provider);

dataformat-jsonld/src/main/java/io/adminshell/aas/v3/dataformat/jsonld/Parser.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,8 @@ private <T> T handleObject(Model inputModel, String objectUri, Class<T> targetCl
444444
}
445445
if (querySolution.contains(sparqlParameterName)) {
446446
String currentSparqlBinding = querySolution.get(sparqlParameterName).toString();
447+
boolean objectIsBlankNode = querySolution.get(sparqlParameterName).isResource() && querySolution.get(sparqlParameterName).asNode().isBlank();
448+
System.out.println(currentSparqlBinding + " is blank node? " + objectIsBlankNode);
447449

448450
if (currentType.isEnum()) {
449451
entry.getValue().invoke(returnObject, handleEnum(currentType, currentSparqlBinding));

dataformat-jsonld/src/main/java/io/adminshell/aas/v3/dataformat/jsonld/Serializer.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
import java.io.*;
2525
import java.nio.charset.Charset;
2626
import java.nio.charset.StandardCharsets;
27-
import java.util.ArrayList;
28-
import java.util.Collection;
29-
import java.util.List;
27+
import java.util.*;
3028

3129
public class Serializer implements io.adminshell.aas.v3.dataformat.Serializer, Deserializer {
3230

@@ -71,15 +69,15 @@ public Serializer() {
7169
* @return RDF serialization of the provided object graph
7270
*/
7371
public String serialize(Object instance) throws IOException {
74-
return serialize(instance, RDFLanguages.JSONLD);
72+
return serialize(instance, RDFLanguages.JSONLD, new HashMap<>());
7573
}
7674

7775
//Synchronized is required for thread safety. Without it, context elements might be missing in case of multiple simultaneous calls to this function
78-
public synchronized String serialize(Object instance, Lang format) throws IOException {
76+
public synchronized String serialize(Object instance, Lang format, Map<Object, String> idMap) throws IOException {
7977
if (format != RDFLanguages.JSONLD && format != RDFLanguages.TURTLE && format != RDFLanguages.RDFXML) {
8078
throw new IOException("RDFFormat " + format + " is currently not supported by the serializer.");
8179
}
82-
mapper.registerModule(new JsonLDModule());
80+
mapper.registerModule(new JsonLDModule(idMap));
8381
String jsonLD = (instance instanceof Collection)
8482
? serializeCollection((Collection<?>) instance)
8583
: mapper.writerWithDefaultPrettyPrinter().writeValueAsString(instance);
@@ -202,6 +200,19 @@ public String write(AssetAdministrationShellEnvironment aasEnvironment) throws S
202200
}
203201
}
204202

203+
public String write(AssetAdministrationShellEnvironment aasEnvironment, Lang format) throws SerializationException {
204+
return write(aasEnvironment, format, new HashMap<>());
205+
}
206+
207+
public String write(AssetAdministrationShellEnvironment aasEnvironment, Lang format, Map<Object, String> idMap) throws SerializationException {
208+
try {
209+
return serialize(aasEnvironment, format, idMap);
210+
}
211+
catch (IOException e)
212+
{
213+
throw new SerializationException("Failed to serialize environment.", e);
214+
}
215+
}
205216
@Override
206217
public AssetAdministrationShellEnvironment read(String value) throws DeserializationException {
207218
try {

dataformat-jsonld/src/test/resources/example-from-serializer.jsonld

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
"phys_unit" : "https://admin-shell.io/DataSpecificationTemplates/DataSpecificationPhysicalUnit/3/0/RC01/",
66
"iec61360" : "https://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/3/0/RC01/"
77
},
8-
"@id" : "https://example.org/myEnv",
8+
"@id" : "https://admin-shell.io/autogen/31208fc0-2024-4533-a3a8-102eab30b8fc",
99
"@type" : "aas:AssetAdministrationShellEnvironment",
1010
"https://admin-shell.io/aas/3/0/RC01/AssetAdministrationShellEnvironment/assetAdministrationShells" : [ {
11+
"@id" : "https://admin-shell.io/autogen/ad00d860-9995-4fd8-badb-466c507d2793",
1112
"@type" : "aas:AssetAdministrationShell",
12-
"@id" : "https://example.org/myAAS",
1313
"https://admin-shell.io/aas/3/0/RC01/AssetAdministrationShell/assetInformation" : {
14+
"@id" : "https://admin-shell.io/autogen/f34ed149-f568-47fd-aaad-93e3d66260d2",
1415
"@type" : "aas:AssetInformation",
15-
"@id" : "https://example.org/myAASInfo",
1616
"https://admin-shell.io/aas/3/0/RC01/AssetInformation/assetKind" : "aas:AssetKind/INSTANCE",
1717
"https://admin-shell.io/aas/3/0/RC01/AssetInformation/billOfMaterial" : [ ],
1818
"https://admin-shell.io/aas/3/0/RC01/AssetInformation/specificAssetId" : [ ]
@@ -34,24 +34,24 @@
3434
} ],
3535
"https://admin-shell.io/aas/3/0/RC01/AssetAdministrationShellEnvironment/conceptDescriptions" : [ ],
3636
"https://admin-shell.io/aas/3/0/RC01/AssetAdministrationShellEnvironment/submodels" : [ {
37+
"@id" : "https://admin-shell.io/autogen/8e5e5058-b969-4ec4-abc1-5b9d87c84d40",
3738
"@type" : "aas:Submodel",
38-
"@id" : "https://example.org/mySubmodel",
3939
"https://admin-shell.io/aas/3/0/RC01/HasDataSpecification/embeddedDataSpecification" : [ {
40+
"@id" : "https://admin-shell.io/autogen/3f625f89-e744-487f-98c6-4fec1e2743e9",
4041
"@type" : "aas:EmbeddedDataSpecification",
41-
"@id" : "https://example.org/myDataSpec",
4242
"https://admin-shell.io/aas/3/0/RC01/EmbeddedDataSpecification/dataSpecification" : {
43+
"@id" : "https://admin-shell.io/autogen/cb1f585b-060b-4132-bbac-ef83bb3f9cb8",
4344
"@type" : "aas:Reference",
44-
"@id" : "https://example.org/myRef1",
4545
"https://admin-shell.io/aas/3/0/RC01/Reference/key" : [ {
46+
"@id" : "https://admin-shell.io/autogen/75b6ec66-74eb-4c2c-bab4-550a51e12ff6",
4647
"@type" : "aas:Key",
47-
"@id" : "https://example.org/myKey",
4848
"https://admin-shell.io/aas/3/0/RC01/Key/idType" : "aas:KeyType/IRI",
4949
"https://admin-shell.io/aas/3/0/RC01/Key/value" : "https://example.org"
5050
} ]
5151
},
5252
"https://admin-shell.io/aas/3/0/RC01/EmbeddedDataSpecification/dataSpecificationContent" : {
53+
"@id" : "https://admin-shell.io/autogen/734ac4cf-2b9d-450a-bcba-23f21fd9625b",
5354
"@type" : "https://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/3/0/RC01/DataSpecificationIEC61360",
54-
"@id" : "https://example.org/myDataSpecContent",
5555
"https://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/3/0/RC01/DataSpecificationIEC61360/dataType" : "https://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/3/0/RC01/DataTypeIEC61360/RATIONAL",
5656
"https://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/3/0/RC01/DataSpecificationIEC61360/definition" : [ ],
5757
"https://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/3/0/RC01/DataSpecificationIEC61360/levelType" : [ ],

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<module>dataformat-jsonld</module>
1616
</modules>
1717
<properties>
18-
<revision>1.0.1</revision>
18+
<revision>1.0.2-SNAPSHOT</revision>
1919
<model.version>${revision}</model.version>
2020
<maven.compiler.source>1.8</maven.compiler.source>
2121
<maven.compiler.target>1.8</maven.compiler.target>

0 commit comments

Comments
 (0)