Skip to content

Commit 3d774bf

Browse files
Add instance handling for either characteristic
1 parent 22dfb55 commit 3d774bf

File tree

2 files changed

+43
-13
lines changed

2 files changed

+43
-13
lines changed

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/AspectModelAASVisitor.java

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.eclipse.digitaltwin.aas4j.v3.model.Key;
4040
import org.eclipse.digitaltwin.aas4j.v3.model.KeyTypes;
4141
import org.eclipse.digitaltwin.aas4j.v3.model.LangString;
42+
import org.eclipse.digitaltwin.aas4j.v3.model.ModelingKind;
4243
import org.eclipse.digitaltwin.aas4j.v3.model.Operation;
4344
import org.eclipse.digitaltwin.aas4j.v3.model.OperationVariable;
4445
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
@@ -72,6 +73,9 @@
7273
import com.fasterxml.jackson.databind.node.ArrayNode;
7374
import com.google.common.collect.ImmutableMap;
7475

76+
import io.openmanufacturing.sds.aspectmetamodel.KnownVersion;
77+
import io.openmanufacturing.sds.aspectmodel.urn.AspectModelUrn;
78+
import io.openmanufacturing.sds.aspectmodel.vocabulary.BAMM;
7579
import io.openmanufacturing.sds.characteristic.Code;
7680
import io.openmanufacturing.sds.characteristic.Collection;
7781
import io.openmanufacturing.sds.characteristic.Duration;
@@ -92,6 +96,7 @@
9296
import io.openmanufacturing.sds.metamodel.Property;
9397
import io.openmanufacturing.sds.metamodel.Scalar;
9498
import io.openmanufacturing.sds.metamodel.Type;
99+
import io.openmanufacturing.sds.metamodel.loader.MetaModelBaseAttributes;
95100
import io.openmanufacturing.sds.metamodel.visitor.AspectVisitor;
96101

97102
public class AspectModelAASVisitor implements AspectVisitor<Environment, Context> {
@@ -572,26 +577,52 @@ private <T extends Collection> List<SubmodelElement> getValues( final T collecti
572577
public Environment visitEither(
573578
final Either either, final Context context ) {
574579
final List<SubmodelElement> submodelElements = new ArrayList<>();
575-
if ( either.getLeft().getDataType().isPresent() ) {
576-
submodelElements.add(
577-
decideOnMapping( either.getLeft().getDataType().get(), context.getProperty(), context ) );
578-
}
579-
if ( either.getRight().getDataType().isPresent() ) {
580-
submodelElements.add(
581-
decideOnMapping( either.getRight().getDataType().get(), context.getProperty(), context ) );
582-
}
583-
final SubmodelElementList aasSubModelElementCollection =
580+
final var property = context.getProperty();
581+
either.getLeft().getDataType()
582+
.flatMap( dataType -> handleEitherField( "left", either.getLeft(), property, context ) )
583+
.ifPresent( submodelElements::add );
584+
either.getRight().getDataType()
585+
.flatMap( dataType -> handleEitherField( "right", either.getRight(), property, context ) )
586+
.ifPresent( submodelElements::add );
587+
588+
//context.setProperty( property );
589+
final SubmodelElementList eitherSubModelElements =
584590
new DefaultSubmodelElementList.Builder()
585591
.idShort( either.getName() )
586592
.displayName( map( either.getPreferredNames() ) )
587593
.description( map( either.getDescriptions() ) )
588594
.value( submodelElements )
589595
.kind( context.getModelingKind() )
590596
.build();
591-
context.setPropertyResult( aasSubModelElementCollection );
597+
context.setPropertyResult( eitherSubModelElements );
592598
return context.environment;
593599
}
594600

601+
private Optional<SubmodelElement> handleEitherField( final String field, final Characteristic fieldCharacteristic,
602+
final Property property, final Context context ) {
603+
Optional<SubmodelElement> result = Optional.empty();
604+
if ( context.getModelingKind().equals( ModelingKind.INSTANCE ) ) {
605+
final var fieldProperty = createProperty( property.getMetaModelVersion(), field, fieldCharacteristic );
606+
context.setProperty( fieldProperty );
607+
if ( context.getRawPropertyValue().isPresent() ) {
608+
result = Optional.ofNullable( decideOnMapping( fieldCharacteristic.getDataType().get(), context.getProperty(), context ) );
609+
}
610+
context.getPropertyResult();
611+
} else {
612+
result = Optional.ofNullable( decideOnMapping( fieldCharacteristic.getDataType().get(), context.getProperty(), context ) );
613+
}
614+
615+
return result;
616+
}
617+
618+
private Property createProperty( final KnownVersion modelVersion, final String propertyName, final Characteristic characteristic ) {
619+
final MetaModelBaseAttributes propertyAttributes =
620+
MetaModelBaseAttributes.from( modelVersion, AspectModelUrn.fromUrn( new BAMM( modelVersion ).Property().getURI() ), propertyName );
621+
return new io.openmanufacturing.sds.metamodel.impl.DefaultProperty( propertyAttributes, Optional.of( characteristic ), Optional.empty(), false, false,
622+
Optional.empty(), false,
623+
Optional.empty() );
624+
}
625+
595626
@Override
596627
public Environment visitQuantifiable(
597628
final Quantifiable quantifiable, final Context context ) {

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/Context.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,14 @@ public Optional<JsonNode> getRawPropertyValue() {
175175
if ( aspectData == null ) {
176176
return Optional.empty();
177177
}
178-
179178
AtomicReference<String> pathExpression = new AtomicReference<>(
180179
"/" + String.join( "/", propertyPath.stream().map( Property::getPayloadName ).toList() ) );
181180
indices.entrySet()
182181
.forEach( index -> {
183182
pathExpression.getAndUpdate(
184183
path -> path.replace( index.getKey().getPayloadName(), index.getKey().getPayloadName() + "/" + index.getValue() ) );
185184
} );
186-
187-
return Optional.of( aspectData.at( pathExpression.get() ) );
185+
final JsonNode valueNode = aspectData.at( pathExpression.get() );
186+
return valueNode.isMissingNode() ? Optional.empty() : Optional.of( valueNode );
188187
}
189188
}

0 commit comments

Comments
 (0)