Skip to content

Commit 3b2204c

Browse files
authored
Merge pull request #389 from bci-oss/bugfix/esmf-372-fix-wrong-json-payloads
Fix problems with JSON payload generation.
2 parents 4551c72 + 4d067ef commit 3b2204c

File tree

15 files changed

+655
-66
lines changed

15 files changed

+655
-66
lines changed

core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/Instantiator.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,9 @@
3434
import org.apache.jena.rdf.model.Statement;
3535
import org.apache.jena.vocabulary.RDF;
3636
import org.apache.jena.vocabulary.RDFS;
37-
38-
import org.eclipse.esmf.aspectmodel.vocabulary.SAMM;
39-
import org.eclipse.esmf.samm.KnownVersion;
4037
import org.eclipse.esmf.aspectmodel.resolver.services.ExtendedXsdDataType;
4138
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
39+
import org.eclipse.esmf.aspectmodel.vocabulary.SAMM;
4240
import org.eclipse.esmf.aspectmodel.vocabulary.SAMMC;
4341
import org.eclipse.esmf.aspectmodel.vocabulary.UNIT;
4442
import org.eclipse.esmf.metamodel.AbstractEntity;
@@ -53,10 +51,11 @@
5351
import org.eclipse.esmf.metamodel.Type;
5452
import org.eclipse.esmf.metamodel.Value;
5553
import org.eclipse.esmf.metamodel.datatypes.LangString;
56-
import org.eclipse.esmf.metamodel.impl.DefaultScalarValue;
5754
import org.eclipse.esmf.metamodel.impl.DefaultCollectionValue;
5855
import org.eclipse.esmf.metamodel.impl.DefaultEntityInstance;
5956
import org.eclipse.esmf.metamodel.impl.DefaultScalar;
57+
import org.eclipse.esmf.metamodel.impl.DefaultScalarValue;
58+
import org.eclipse.esmf.samm.KnownVersion;
6059

6160
public abstract class Instantiator<T extends ModelElement> extends AttributeValueRetriever implements Function<Resource, T> {
6261
protected final ModelElementFactory modelElementFactory;
@@ -223,9 +222,7 @@ private ScalarValue buildScalarValue( final Literal literal ) {
223222
// but _not_ org.eclipse.esmf.metamodel.datatypes.LangString as we would like to.
224223
// 3. So we construct an instance of LangString here from the RDFLangString.
225224
if ( literal.getDatatypeURI().equals( RDF.langString.getURI() ) ) {
226-
final LangString langString = new LangString( literal.getString(), Locale.forLanguageTag( literal.getLanguage() ) );
227-
final Scalar type = new DefaultScalar( RDF.langString.getURI(), metaModelVersion );
228-
return new DefaultScalarValue( langString, type );
225+
return buildLanguageString( literal );
229226
}
230227

231228
return Stream.concat( ExtendedXsdDataType.supportedXsdTypes.stream(), Stream.of( curieDataType ) )
@@ -236,6 +233,12 @@ private ScalarValue buildScalarValue( final Literal literal ) {
236233
.orElseThrow( () -> new AspectLoadingException( "Literal can not be parsed: " + literal ) );
237234
}
238235

236+
protected ScalarValue buildLanguageString( final Literal literal ) {
237+
final LangString langString = new LangString( literal.getString(), Locale.forLanguageTag( literal.getLanguage() ) );
238+
final Scalar type = new DefaultScalar( RDF.langString.getURI(), metaModelVersion );
239+
return new DefaultScalarValue( langString, type );
240+
}
241+
239242
private CollectionValue buildCollectionValue( final RDFList list, final CollectionValue.CollectionType collectionType,
240243
final Optional<Resource> elementCharacteristic, final Type elementType ) {
241244
final java.util.Collection<Value> values = createEmptyCollectionForType( collectionType );

core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/PropertyInstantiator.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@
1818
import java.util.Optional;
1919

2020
import org.apache.jena.datatypes.BaseDatatype;
21+
import org.apache.jena.rdf.model.Literal;
2122
import org.apache.jena.rdf.model.Resource;
2223
import org.apache.jena.rdf.model.Statement;
2324
import org.apache.jena.vocabulary.RDF;
24-
25-
import org.eclipse.esmf.samm.KnownVersion;
2625
import org.eclipse.esmf.aspectmodel.resolver.exceptions.InvalidModelException;
2726
import org.eclipse.esmf.metamodel.Characteristic;
2827
import org.eclipse.esmf.metamodel.Property;
@@ -35,6 +34,7 @@
3534
import org.eclipse.esmf.metamodel.loader.Instantiator;
3635
import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
3736
import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
37+
import org.eclipse.esmf.samm.KnownVersion;
3838

3939
public class PropertyInstantiator extends Instantiator<Property> {
4040
private final Characteristic fallbackCharacteristic;
@@ -81,18 +81,22 @@ public Property apply( final Resource property ) {
8181
}
8282
return type.as( Scalar.class );
8383
} )
84-
.map( type -> {
85-
final Object literal = statement.getLiteral().getValue();
86-
final Object value = literal instanceof BaseDatatype.TypedValue
87-
? statement.getLiteral().getLexicalForm()
88-
: literal;
89-
return new DefaultScalarValue( value, type );
90-
} ) );
84+
.map( type -> buildScalarValue( statement.getLiteral(), type ) ) );
9185

9286
defProperty = new DefaultProperty( metaModelBaseAttributes, Optional.of( characteristic ), exampleValue, isOptional,
9387
isNotInPayload, payloadName, isAbstract, extends_ );
9488
}
9589
defaultPropertyWrapper.setProperty( defProperty );
9690
return defaultPropertyWrapper;
9791
}
92+
93+
private ScalarValue buildScalarValue( final Literal literal, final Scalar type ) {
94+
final Object literalValue = literal.getValue();
95+
if ( literalValue instanceof BaseDatatype.TypedValue ) {
96+
return new DefaultScalarValue( literal.getLexicalForm(), type );
97+
} else if ( literal.getDatatypeURI().equals( RDF.langString.getURI() ) ) {
98+
return buildLanguageString( literal );
99+
}
100+
return new DefaultScalarValue( literalValue, type );
101+
}
98102
}

0 commit comments

Comments
 (0)