99import gov .nasa .jpl .aerie .merlin .framework .annotations .Export ;
1010import gov .nasa .jpl .aerie .merlin .framework .annotations .MissionModel ;
1111import gov .nasa .jpl .aerie .merlin .processor .metamodel .ActivityTypeRecord ;
12+ import gov .nasa .jpl .aerie .merlin .processor .metamodel .ActivityValueMapperRecord ;
1213import gov .nasa .jpl .aerie .merlin .processor .metamodel .InputTypeRecord ;
1314import gov .nasa .jpl .aerie .merlin .processor .metamodel .EffectModelRecord ;
1415import gov .nasa .jpl .aerie .merlin .processor .metamodel .ExportDefaultsStyle ;
15- import gov .nasa .jpl .aerie .merlin .processor .metamodel .MapperRecord ;
16+ import gov .nasa .jpl .aerie .merlin .processor .metamodel .ActivityMapperRecord ;
1617import gov .nasa .jpl .aerie .merlin .processor .metamodel .MissionModelRecord ;
1718import gov .nasa .jpl .aerie .merlin .processor .metamodel .ParameterRecord ;
1819import gov .nasa .jpl .aerie .merlin .processor .metamodel .ParameterValidationRecord ;
@@ -183,9 +184,10 @@ private Optional<InputTypeRecord> getMissionModelConfigurationType(final Package
183184 final var name = declaration .getSimpleName ().toString ();
184185 final var parameters = getExportParameters (declaration );
185186 final var validations = this .getExportValidations (declaration , parameters );
186- final var mapper = getExportMapper (missionModelElement , declaration );
187+ final var activityMapper = getExportActivityMapper (missionModelElement , declaration );
188+ final var valueMapper = getExportValueMapper (missionModelElement , declaration );
187189 final var defaultsStyle = getExportDefaultsStyle (declaration );
188- return Optional .of (new InputTypeRecord (name , declaration , parameters , validations , mapper , defaultsStyle ));
190+ return Optional .of (new InputTypeRecord (name , declaration , parameters , validations , activityMapper , valueMapper , defaultsStyle ));
189191 }
190192
191193 private List <TypeElement > getMissionModelMapperClasses (final PackageElement missionModelElement )
@@ -381,7 +383,8 @@ private ActivityTypeRecord parseActivityType(final PackageElement missionModelEl
381383 {
382384 final var fullyQualifiedClassName = activityTypeElement .getQualifiedName ();
383385 final var name = this .getActivityTypeName (activityTypeElement );
384- final var mapper = this .getExportMapper (missionModelElement , activityTypeElement );
386+ final var activityMapper = getExportActivityMapper (missionModelElement , activityTypeElement );
387+ final var valueMapper = getExportValueMapper (missionModelElement , activityTypeElement );
385388 final var parameters = this .getExportParameters (activityTypeElement );
386389 final var validations = this .getExportValidations (activityTypeElement , parameters );
387390 final var effectModel = this .getActivityEffectModel (activityTypeElement );
@@ -405,7 +408,7 @@ class (old-style) or as a record (new-style) by determining
405408 return new ActivityTypeRecord (
406409 fullyQualifiedClassName .toString (),
407410 name ,
408- new InputTypeRecord (name , activityTypeElement , parameters , validations , mapper , defaultsStyle ),
411+ new InputTypeRecord (name , activityTypeElement , parameters , validations , activityMapper , valueMapper , defaultsStyle ),
409412 effectModel );
410413 }
411414
@@ -471,12 +474,12 @@ private String getActivityTypeName(final TypeElement activityTypeElement)
471474 return (String ) nameAttribute .getValue ();
472475 }
473476
474- private MapperRecord getExportMapper (final PackageElement missionModelElement , final TypeElement exportTypeElement )
477+ private ActivityMapperRecord getExportActivityMapper (final PackageElement missionModelElement , final TypeElement exportTypeElement )
475478 throws InvalidMissionModelException
476479 {
477480 final var annotationMirror = this .getAnnotationMirrorByType (exportTypeElement , ActivityType .WithMapper .class );
478481 if (annotationMirror .isEmpty ()) {
479- return MapperRecord .generatedFor (
482+ return ActivityMapperRecord .generatedFor (
480483 ClassName .get (exportTypeElement ),
481484 missionModelElement );
482485 }
@@ -488,7 +491,27 @@ private MapperRecord getExportMapper(final PackageElement missionModelElement, f
488491 annotationMirror .get ()))
489492 .getValue ();
490493
491- return MapperRecord .custom (
494+ return ActivityMapperRecord .custom (
495+ ClassName .get ((TypeElement ) mapperType .asElement ()));
496+ }
497+ private ActivityValueMapperRecord getExportValueMapper (final PackageElement missionModelElement , final TypeElement exportTypeElement )
498+ throws InvalidMissionModelException
499+ {
500+ final var annotationMirror = this .getAnnotationMirrorByType (exportTypeElement , ActivityType .WithMapper .class );
501+ if (annotationMirror .isEmpty ()) {
502+ return ActivityValueMapperRecord .generatedFor (
503+ ClassName .get (exportTypeElement ),
504+ missionModelElement );
505+ }
506+
507+ final var mapperType = (DeclaredType ) getAnnotationAttribute (annotationMirror .get (), "value" )
508+ .orElseThrow (() -> new InvalidMissionModelException (
509+ "Unable to get value attribute of annotation" ,
510+ exportTypeElement ,
511+ annotationMirror .get ()))
512+ .getValue ();
513+
514+ return ActivityValueMapperRecord .custom (
492515 ClassName .get ((TypeElement ) mapperType .asElement ()));
493516 }
494517
0 commit comments