71
71
import io .adminshell .aas .v3 .model .impl .DefaultSubmodelElementCollection ;
72
72
import io .adminshell .aas .v3 .model .impl .DefaultValueList ;
73
73
import io .adminshell .aas .v3 .model .impl .DefaultValueReferencePair ;
74
- import io .openmanufacturing .sds .metamodel .Aspect ;
75
- import io .openmanufacturing .sds .metamodel .ModelElement ;
76
- import io .openmanufacturing .sds .metamodel .Characteristic ;
74
+ import io .openmanufacturing .sds .aspectmodel .urn .AspectModelUrn ;
77
75
import io .openmanufacturing .sds .characteristic .Code ;
78
76
import io .openmanufacturing .sds .characteristic .Collection ;
79
77
import io .openmanufacturing .sds .characteristic .Duration ;
80
78
import io .openmanufacturing .sds .characteristic .Either ;
81
- import io .openmanufacturing .sds .metamodel .Entity ;
82
79
import io .openmanufacturing .sds .characteristic .Enumeration ;
83
- import io .openmanufacturing .sds .metamodel .NamedElement ;
84
80
import io .openmanufacturing .sds .characteristic .Measurement ;
85
- import io .openmanufacturing .sds .metamodel .Property ;
86
81
import io .openmanufacturing .sds .characteristic .Quantifiable ;
87
82
import io .openmanufacturing .sds .characteristic .SingleEntity ;
88
83
import io .openmanufacturing .sds .characteristic .SortedSet ;
89
84
import io .openmanufacturing .sds .characteristic .State ;
90
85
import io .openmanufacturing .sds .characteristic .StructuredValue ;
91
86
import io .openmanufacturing .sds .characteristic .Trait ;
87
+ import io .openmanufacturing .sds .metamodel .Aspect ;
88
+ import io .openmanufacturing .sds .metamodel .Characteristic ;
89
+ import io .openmanufacturing .sds .metamodel .Entity ;
90
+ import io .openmanufacturing .sds .metamodel .ModelElement ;
91
+ import io .openmanufacturing .sds .metamodel .NamedElement ;
92
+ import io .openmanufacturing .sds .metamodel .Property ;
92
93
import io .openmanufacturing .sds .metamodel .Type ;
93
94
import io .openmanufacturing .sds .metamodel .visitor .AspectVisitor ;
94
95
@@ -175,13 +176,11 @@ public AssetAdministrationShellEnvironment visitAspect( final Aspect aspect, Con
175
176
return context .getEnvironment ();
176
177
}
177
178
178
- private List <SubmodelElement > visitOperations (
179
- final List <io .openmanufacturing .sds .metamodel .Operation > elements , final Context context ) {
179
+ private List <SubmodelElement > visitOperations ( final List <io .openmanufacturing .sds .metamodel .Operation > elements , final Context context ) {
180
180
return elements .stream ().map ( i -> map ( i , context ) ).collect ( Collectors .toList () );
181
181
}
182
182
183
- private List <SubmodelElement > visitProperties (
184
- final List <Property > elements , final Context context ) {
183
+ private List <SubmodelElement > visitProperties ( final List <Property > elements , final Context context ) {
185
184
return elements .stream ().map ( i -> map ( i , context ) ).collect ( Collectors .toList () );
186
185
}
187
186
@@ -195,10 +194,12 @@ private SubmodelElement map( final Property property, final Context context ) {
195
194
// property will be excluded from generation.
196
195
recursiveProperty .remove ( property );
197
196
if ( property .isOptional () ) {
198
- LOG .warn ( String .format ( "Having a recursive Property %s which is optional. Will be excluded from AAS mapping." , property ) );
197
+ LOG .warn ( String .format ( "Having a recursive Property %s which is optional. Will be excluded from AAS mapping." ,
198
+ property .getAspectModelUrn ().map ( AspectModelUrn ::toString ).orElse ( "(unknown)" ) ) );
199
199
return defaultResultForProperty .get ();
200
200
} else {
201
- throw new IllegalArgumentException ( String .format ( "Having a recursive Property: %s which is not optional is not valid." , property ) );
201
+ throw new IllegalArgumentException ( String .format ( "Having a recursive Property %s which is not optional is not valid." ,
202
+ property .getAspectModelUrn ().map ( AspectModelUrn ::toString ).orElse ( "(unknown)" ) ) );
202
203
}
203
204
}
204
205
recursiveProperty .add ( property );
@@ -228,17 +229,15 @@ private SubmodelElement decideOnMapping( final Property property, final Context
228
229
return decideOnMapping ( type , property , context );
229
230
}
230
231
231
- private SubmodelElement decideOnMapping (
232
- final Type type , final Property property , final Context context ) {
232
+ private SubmodelElement decideOnMapping ( final Type type , final Property property , final Context context ) {
233
233
if ( type instanceof Entity ) {
234
234
return mapToAasSubModelElementCollection ( (Entity ) type , context );
235
235
} else {
236
236
return mapToAasProperty ( property );
237
237
}
238
238
}
239
239
240
- private SubmodelElementCollection mapToAasSubModelElementCollection (
241
- final Entity entity , final Context context ) {
240
+ private SubmodelElementCollection mapToAasSubModelElementCollection ( final Entity entity , final Context context ) {
242
241
final List <SubmodelElement > submodelElements =
243
242
visitProperties ( entity .getAllProperties (), context );
244
243
return new DefaultSubmodelElementCollection .Builder ()
@@ -273,8 +272,7 @@ private String mapType( final Type type ) {
273
272
return type .getUrn ();
274
273
}
275
274
276
- private Operation map (
277
- final io .openmanufacturing .sds .metamodel .Operation operation , final Context context ) {
275
+ private Operation map ( final io .openmanufacturing .sds .metamodel .Operation operation , final Context context ) {
278
276
return new DefaultOperation .Builder ()
279
277
.displayNames ( map ( operation .getPreferredNames () ) )
280
278
.descriptions ( map ( operation .getDescriptions () ) )
@@ -441,15 +439,13 @@ private DataTypeIEC61360 mapIEC61360DataType( final String urn ) {
441
439
}
442
440
443
441
@ Override
444
- public AssetAdministrationShellEnvironment visitCharacteristic (
445
- final Characteristic characteristic , final Context context ) {
442
+ public AssetAdministrationShellEnvironment visitCharacteristic ( final Characteristic characteristic , final Context context ) {
446
443
createSubmodelElement ( ( property ) -> decideOnMapping ( property , context ), context );
447
444
return context .environment ;
448
445
}
449
446
450
447
@ Override
451
- public AssetAdministrationShellEnvironment visitCollection (
452
- final Collection collection , final Context context ) {
448
+ public AssetAdministrationShellEnvironment visitCollection ( final Collection collection , final Context context ) {
453
449
final SubmodelElementBuilder builder =
454
450
( property ) ->
455
451
new DefaultSubmodelElementCollection .Builder ()
@@ -464,8 +460,7 @@ public AssetAdministrationShellEnvironment visitCollection(
464
460
}
465
461
466
462
@ Override
467
- public AssetAdministrationShellEnvironment visitList (
468
- final io .openmanufacturing .sds .characteristic .List list , final Context context ) {
463
+ public AssetAdministrationShellEnvironment visitList ( final io .openmanufacturing .sds .characteristic .List list , final Context context ) {
469
464
final SubmodelElementBuilder builder =
470
465
( property ) ->
471
466
new DefaultSubmodelElementCollection .Builder ()
@@ -480,8 +475,7 @@ public AssetAdministrationShellEnvironment visitList(
480
475
}
481
476
482
477
@ Override
483
- public AssetAdministrationShellEnvironment visitSet (
484
- final io .openmanufacturing .sds .characteristic .Set set , final Context context ) {
478
+ public AssetAdministrationShellEnvironment visitSet ( final io .openmanufacturing .sds .characteristic .Set set , final Context context ) {
485
479
final SubmodelElementBuilder builder =
486
480
( property ) ->
487
481
new DefaultSubmodelElementCollection .Builder ()
@@ -497,8 +491,7 @@ public AssetAdministrationShellEnvironment visitSet(
497
491
}
498
492
499
493
@ Override
500
- public AssetAdministrationShellEnvironment visitSortedSet (
501
- final SortedSet sortedSet , final Context context ) {
494
+ public AssetAdministrationShellEnvironment visitSortedSet ( final SortedSet sortedSet , final Context context ) {
502
495
final SubmodelElementBuilder builder =
503
496
( property ) ->
504
497
new DefaultSubmodelElementCollection .Builder ()
@@ -517,8 +510,7 @@ public AssetAdministrationShellEnvironment visitSortedSet(
517
510
// No possibilities to mark the SubmodelElements as optional. So both are either options are
518
511
// in the result and have to be manually selected.
519
512
@ Override
520
- public AssetAdministrationShellEnvironment visitEither (
521
- final Either either , final Context context ) {
513
+ public AssetAdministrationShellEnvironment visitEither ( final Either either , final Context context ) {
522
514
final List <SubmodelElement > submodelElements = new ArrayList <>();
523
515
if ( either .getLeft ().getDataType ().isPresent () ) {
524
516
submodelElements .add (
@@ -540,8 +532,7 @@ public AssetAdministrationShellEnvironment visitEither(
540
532
}
541
533
542
534
@ Override
543
- public AssetAdministrationShellEnvironment visitQuantifiable (
544
- final Quantifiable quantifiable , final Context context ) {
535
+ public AssetAdministrationShellEnvironment visitQuantifiable ( final Quantifiable quantifiable , final Context context ) {
545
536
createSubmodelElement ( ( property ) -> decideOnMapping ( property , context ), context );
546
537
547
538
if ( quantifiable .getUnit ().isPresent () ) {
@@ -560,22 +551,19 @@ public AssetAdministrationShellEnvironment visitQuantifiable(
560
551
}
561
552
562
553
@ Override
563
- public AssetAdministrationShellEnvironment visitMeasurement (
564
- final Measurement measurement , final Context context ) {
554
+ public AssetAdministrationShellEnvironment visitMeasurement ( final Measurement measurement , final Context context ) {
565
555
// No special handling required can use Quantifiable mapping implementation
566
556
return visitQuantifiable ( measurement , context );
567
557
}
568
558
569
559
@ Override
570
- public AssetAdministrationShellEnvironment visitDuration (
571
- final Duration duration , final Context context ) {
560
+ public AssetAdministrationShellEnvironment visitDuration ( final Duration duration , final Context context ) {
572
561
// No special handling required can use Quantifiable mapping implementation
573
562
return visitQuantifiable ( duration , context );
574
563
}
575
564
576
565
@ Override
577
- public AssetAdministrationShellEnvironment visitEnumeration (
578
- final Enumeration enumeration , final Context context ) {
566
+ public AssetAdministrationShellEnvironment visitEnumeration ( final Enumeration enumeration , final Context context ) {
579
567
createSubmodelElement ( ( property ) -> decideOnMapping ( property , context ), context );
580
568
581
569
final ConceptDescription conceptDescription =
@@ -589,12 +577,11 @@ public AssetAdministrationShellEnvironment visitEnumeration(
589
577
dataSpecificationContent .setDataType ( mapIEC61360DataType ( enumeration ) );
590
578
final List <ValueReferencePair > valueReferencePairs =
591
579
enumeration .getValues ().stream ()
592
- .map (
593
- x ->
594
- new DefaultValueReferencePair .Builder ()
595
- .value ( x .toString () )
596
- .valueId ( buildReferenceToEnumValue ( enumeration , x ) )
597
- .build () )
580
+ .map ( x ->
581
+ new DefaultValueReferencePair .Builder ()
582
+ .value ( x .toString () )
583
+ .valueId ( buildReferenceToEnumValue ( enumeration , x ) )
584
+ .build () )
598
585
.collect ( Collectors .toList () );
599
586
600
587
final ValueList valueList =
@@ -613,15 +600,13 @@ public AssetAdministrationShellEnvironment visitState( final State state, final
613
600
}
614
601
615
602
@ Override
616
- public AssetAdministrationShellEnvironment visitSingleEntity (
617
- final SingleEntity singleEntity , final Context context ) {
603
+ public AssetAdministrationShellEnvironment visitSingleEntity ( final SingleEntity singleEntity , final Context context ) {
618
604
// Same handling as characteristics
619
605
return visitCharacteristic ( singleEntity , context );
620
606
}
621
607
622
608
@ Override
623
- public AssetAdministrationShellEnvironment visitStructuredValue (
624
- final StructuredValue structuredValue , final Context context ) {
609
+ public AssetAdministrationShellEnvironment visitStructuredValue ( final StructuredValue structuredValue , final Context context ) {
625
610
// https://openmanufacturingplatform.github.io/sds-documentation/bamm-specification/v1.0.0/modeling-guidelines.html#declaring-structured-value
626
611
// AAS cannot handle structuredValues, so we can handle them as ordinary Characteristics
627
612
return visitCharacteristic ( structuredValue , context );
0 commit comments