From 299cb2edf69c30ac4861f617752b4c56d8dbbb2a Mon Sep 17 00:00:00 2001 From: David Al-Kanani <david.al-kanani@regnosys.com> Date: Mon, 6 Jan 2025 17:16:21 +0000 Subject: [PATCH] Story/1045/cdm serialization (#446) * Added baseline tests for serialization * add basic types * add records * add data types * fix namespace name * add enums * add choice types * correct choice wrapper attr name * add extension tests * add extended concrete type test * rename test * add meta scheme * add meta key * meta address * fix address structure * add extra element to structure * fix formatting * fix list test for scheme * add first error handling test * add number fraction test * fix string length * add illegal string tests * too many elements test * fix namespace * rename serializer methods * add extra field for polymorphic test * make error handling test individual tests * rename round trip test * rename serializer * revert changes * fix reference attribute name * remove generated code * rename serializer implementation * add object mapper initial * add json handling code * create a dynamic classloader for the in memory compile * use correct rune annotations * fix test * fix group names * fix metascheme test structures * fix enumtypes test structures * fix choicetype test structures * fix address structure * add licenses to code * override RosettaModelConfiguration * refactor injector * add SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS to fix wrapped subtype handling * fix meta tests * bring in property ignorals code * refactor ignorals so it doesn't override legacy method * inject object mapper * add top level meta * add property ordering attempt which doesn't work atm * reorder test properties * add all ordered prop names * fix location tests * override ObjectWriter to add header fields * put meta headers at top of json output * rename mapper classes * add javadoc * remove dead code * add javadoc and outline difficulty with property ordering * rename package * rename test package names * clean up javadoc * add license * add javadoc * remove redundant comment * rename caps json * rename mapper and writer * remove top level serializer abstraction * remove alphabetic ordering * update dsl version --------- Co-authored-by: Minesh Patel <minesh.patel@regnosys.com> --- common/pom.xml | 185 +++++++++++++++ .../parser/InputValidationReport.java | 0 .../projector/ProjectionEnvironment.java | 0 .../granite/projector/ProjectionReport.java | 0 .../granite/projector/ProjectionService.java | 0 .../com/regnosys/rosetta/common/RegPaths.java | 0 .../common/compile/CancelIndicator.java | 0 .../CompilationCancellationException.java | 0 .../compile/CompilationCompletionState.java | 0 .../CompilationTargetDeletionException.java | 0 .../JavaCSourceCancellableCompiler.java | 0 .../compile/JavaCancellableCompiler.java | 0 .../common/compile/JavaCompilationResult.java | 0 .../compile/JavaCompileReleaseFlag.java | 0 .../common/hashing/GlobalKeyProcessStep.java | 0 .../common/hashing/IntegerHashGenerator.java | 0 .../rosetta/common/hashing/IntegerReport.java | 0 .../common/hashing/NonNullHashCollector.java | 0 .../common/hashing/ReKeyProcessStep.java | 0 .../common/hashing/ReferenceConfig.java | 0 .../hashing/ReferenceResolverProcessStep.java | 0 .../RosettaBasicTypesHashGenerator.java | 0 .../common/hashing/ScopeReferenceHelper.java | 0 .../merging/MergeTemplateProcessStep.java | 0 .../rosetta/common/merging/SimpleMerger.java | 0 .../common/merging/SimpleSplitter.java | 0 .../model/CachingMethodInterceptor.java | 0 .../common/model/FunctionMemoisingModule.java | 0 .../model/FunctionMemoisingModuleBuilder.java | 0 .../rosetta/common/model/MemoiseCacheKey.java | 0 .../postprocess/WorkflowPostProcessor.java | 0 .../EmptyQualificationHandlerProvider.java | 0 .../qualify/QualificationHandler.java | 0 .../qualify/QualificationHandlerProvider.java | 0 .../qualify/QualificationReport.java | 0 .../qualify/QualificationResult.java | 0 .../qualify/QualifyProcessorStep.java | 0 .../ProjectionDataItemExpectation.java | 0 .../ProjectionDataSetExpectation.java | 0 .../common/projection/RegProjectionPaths.java | 0 .../common/reports/RegReportPaths.java | 0 .../reports/ReportDataItemExpectation.java | 0 .../reports/ReportDataSetExpectation.java | 0 .../rosetta/common/reports/ReportField.java | 0 .../serialisation/AbstractJsonDataLoader.java | 0 ...wardsCompatibleAnnotationIntrospector.java | 0 .../common/serialisation/BeanUtil.java | 0 .../ConstantAttributePropertyWriter.java | 0 .../common/serialisation/DataLoader.java | 0 .../rosetta/common/serialisation/DataSet.java | 0 .../common/serialisation/InputDataLoader.java | 0 .../serialisation/JsonDataLoaderUtil.java | 0 .../serialisation/ObjectMapperCreator.java | 0 .../RosettaDataValueObjectToString.java | 0 .../serialisation/RosettaObjectMapper.java | 0 .../RosettaObjectMapperCreator.java | 0 .../RosettaSerialiserException.java | 0 .../lookup/JsonLookupDataLoader.java | 0 .../serialisation/lookup/LookupDataItem.java | 0 .../serialisation/lookup/LookupDataSet.java | 0 .../serialisation/mixin/DateExtended.java | 0 .../EnumAsStringBuilderIntrospector.java | 0 .../serialisation/mixin/ReferenceFilter.java | 0 .../mixin/ReferenceWithMetaMixIn.java | 0 .../mixin/RosettaDateModule.java | 0 .../mixin/RosettaEnumBuilderIntrospector.java | 0 .../RosettaJSONAnnotationIntrospector.java | 0 .../mixin/RosettaJSONModule.java | 0 .../legacy/LegacyGlobalKeyFieldsMixIn.java | 0 .../mixin/legacy/LegacyKeyMixIn.java | 0 .../mixin/legacy/LegacyReferenceMixIn.java | 0 .../LegacyRosettaBuilderIntrospector.java | 0 .../JsonProjectionDataLoader.java | 0 .../projectiondata/ProjectionDataSet.java | 0 .../reportdata/ExpectedResult.java | 0 .../reportdata/ExpectedResultField.java | 0 .../reportdata/JsonExpectedResultLoader.java | 0 .../reportdata/JsonReportDataLoader.java | 0 .../reportdata/ReportDataItem.java | 0 .../reportdata/ReportDataSet.java | 0 .../reportdata/ReportIdentifierDataSet.java | 0 .../xml/RosettaBeanDeserializerModifier.java | 0 .../xml/RosettaBeanSerializer.java | 0 .../xml/RosettaBeanSerializerModifier.java | 0 .../xml/RosettaSerialiserFactory.java | 0 .../xml/RosettaXMLAnnotationIntrospector.java | 0 .../serialisation/xml/RosettaXMLModule.java | 0 .../xml/SubstitutedMethodProperty.java | 0 .../xml/SubstitutingBeanPropertyWriter.java | 0 .../serialisation/xml/SubstitutionMap.java | 0 .../xml/SubstitutionMapLoader.java | 0 .../xml/UnwrappableIndexedListSerializer.java | 0 .../xml/UnwrappingAsArraySerializerBase.java | 0 .../xml/UnwrappingIndexedListSerializer.java | 0 .../xml/VirtualXMLAttribute.java | 0 .../common/testing/CoverageFraction.java | 0 .../common/testing/ExecutableFunction.java | 0 .../common/testing/ExecutionDescriptor.java | 0 .../common/testing/FunctionRunner.java | 0 .../common/testing/MappingCoverage.java | 0 .../common/transform/PipelineInfo.java | 0 .../common/transform/PipelineModel.java | 0 .../common/transform/TestPackModel.java | 0 .../common/transform/TestPackUtils.java | 0 .../common/transform/TransformType.java | 0 .../rosetta/common/translation/Mapping.java | 0 .../common/translation/MappingContext.java | 0 .../common/translation/MappingDelegate.java | 0 .../common/translation/MappingProcessor.java | 0 .../translation/MappingProcessorStep.java | 0 .../translation/MappingProcessorUtils.java | 0 .../rosetta/common/translation/Path.java | 0 .../common/translation/SynonymToEnumMap.java | 0 .../common/translation/flat/Capture.java | 0 .../flat/FlatFileMappingProcessor.java | 0 .../translation/flat/IndexCapturePath.java | 0 .../util/AbstractHierarchicalPathMatcher.java | 0 .../rosetta/common/util/ClassPathUtils.java | 0 .../rosetta/common/util/CollectionUtils.java | 0 .../common/util/HierarchicalPathMatcher.java | 0 .../rosetta/common/util/MutablePair.java | 0 .../regnosys/rosetta/common/util/Pair.java | 0 .../util/PathCollectorBuilderProcessor.java | 0 .../rosetta/common/util/PathException.java | 0 .../rosetta/common/util/PathLoader.java | 0 .../rosetta/common/util/PathUtils.java | 0 .../rosetta/common/util/PathValue.java | 0 .../regnosys/rosetta/common/util/Report.java | 0 .../util/RosettaModelObjectSupplier.java | 0 .../RosettaObjectCollectorProcessStep.java | 0 .../common/util/SimpleBuilderProcessor.java | 0 .../rosetta/common/util/SimpleProcessor.java | 0 .../rosetta/common/util/StreamUtils.java | 0 .../rosetta/common/util/StringExtensions.java | 0 .../rosetta/common/util/TeeReader.java | 0 .../rosetta/common/util/UrlUtils.java | 0 .../validation/RosettaTypeValidator.java | 0 .../common/validation/ValidationFailure.java | 0 .../common/validation/ValidationReport.java | 0 .../JavaCSourceCancellableCompilerTest.java | 0 .../rosetta/common/merger/BarBuilder.java | 0 .../rosetta/common/merger/FooBuilder.java | 0 .../common/merger/SplitterMergerTest.java | 0 .../FunctionMemoisingKeyEqualityTest.java | 0 .../model/FunctionMemoisingModuleTest.java | 0 .../json/JsonLookupDataLoaderTest.java | 0 .../json/RosettaObjectMapperTest.java | 0 .../json/RosettaSerialisationTest.java | 0 .../PreAnnotatedPojoSerialisationTest.java | 0 .../json/preannotation/testpojo/Price.java | 0 .../preannotation/testpojo/PriceQuantity.java | 0 .../testpojo/ResolvablePriceQuantity.java | 0 .../metafields/FieldWithMetaPrice.java | 0 .../testpojo/metafields/MetaFields.java | 0 .../metafields/ReferenceWithMetaPrice.java | 0 .../JsonProjectionDataLoaderTest.java | 0 .../JsonExpectedResultLoaderTest.java | 3 +- .../reportdata/JsonReportDataLoaderTest.java | 0 .../xml/XmlSerialisationTest.java | 0 .../rosetta/common/test/CommonAssertions.java | 0 .../common/testing/FunctionRunnerTest.java | 0 .../transform/PipelineSerialisationTest.java | 0 .../transform/TestPackSerialisationTest.java | 0 .../translation/MappingProcessorStepTest.java | 0 .../rosetta/common/translation/PathTest.java | 0 .../flat/IndexCapturePathTest.java | 0 .../common/util/ClassPathUtilsTest.java | 0 .../rosetta/common/util/PairTest.java | 0 .../rosetta/common/util/PathUtilsTest.java | 0 .../rosetta/common/util/TestStreamUtils.java | 0 .../rosetta/common/util/TestTeeReader.java | 0 .../compile-test/BrokenHelloWorld.java | 0 .../resources/compile-test/HelloWorld.java | 0 .../execution-descriptor-1.json | 0 .../expected-output-test-1.json | 0 .../function-runner-test/input-test-1.json | 0 .../src}/test/resources/logback-test.xml | 0 .../resources/path-files/META-INF/MANIFEST.MF | 0 .../resources/path-files/test-class-path.jar | Bin .../resources/path-files/test-path-2.rosetta | 0 .../resources/path-files/test-path.rosetta | 0 .../projection-data-descriptor.json | 0 .../projection-data-descriptor.json | 0 .../projection/test-use-case-load/test1.json | 0 .../549300GUAMON5OX2OO54.json | 0 ...egulatory-reporting-lookup-descriptor.json | 0 .../regulatory-reporting-data-descriptor.json | 0 .../regs/test-use-case-load-error/test1.json | 0 .../expected/test1-expected.json | 0 .../regulatory-reporting-data-descriptor.json | 0 .../test1.json | 0 .../regulatory-reporting-data-descriptor.json | 0 .../input/test-set-1/test1.json | 0 .../test-set-1/test1-key-value.json | 0 .../test-set-1/test1-key-value.json | 0 .../regulatory-reporting-data-descriptor.json | 0 .../test-use-case-load-one-error/test1.json | 0 .../regulatory-reporting-data-descriptor.json | 0 .../regs/test-use-case-load/test1.json | 0 .../pipeline-projection-emir-trade.json | 0 .../pipeline-report-emir-trade.json | 0 .../pipeline-translate-fpml.json | 0 ...-pack-projection-emir-trade-commodity.json | 0 ...test-pack-report-emir-trade-commodity.json | 0 .../test-pack-translate-fpml-commodity.json | 0 .../src}/test/resources/test-private-key.der | Bin .../src}/test/resources/test-public-key.der | Bin .../xml-serialisation/expected/document.xml | 0 .../expected/license-header.xml | 0 .../expected/multicardinality-container.xml | 0 .../expected/nested-container.xml | 0 .../expected/substitution-group-multi.xml | 0 .../expected/substitution-group.xml | 0 .../schema/import-config.yml | 0 .../xml-serialisation/schema/schema.xsd | 0 pom.xml | 214 +++--------------- serialization/pom.xml | 74 ++++++ .../rune/mapper/RuneJsonObjectMapper.java | 106 +++++++++ .../rune/mapper/RuneJsonObjectWriter.java | 103 +++++++++ .../finos/rune/mapper/date/DateExtended.java | 36 +++ .../rune/mapper/date/RuneDateModule.java | 52 +++++ .../rune/mapper/filters/SubTypeFilter.java | 45 ++++ .../mapper/introspector/RuneBeanUtil.java | 62 +++++ .../RuneJsonAnnotationIntrospector.java | 165 ++++++++++++++ .../mapper/introspector/RuneJsonModule.java | 52 +++++ .../RuneStdTypeResolverBuilder.java | 50 ++++ .../mixins/RosettaModelObjectMixin.java | 32 +++ .../DynamicCompiledClassLoader.java | 36 +++ .../RuneJsonSerializerErrorHandlingTest.java | 164 ++++++++++++++ .../RuneJsonSerializerRoundTripTest.java | 104 +++++++++ .../RuneSerializerTestHelper.java | 117 ++++++++++ .../cardinality/cardinality.rosetta | 7 + .../cardinality/too-many-elements.json | 6 + .../number-fraction-too-large.json | 6 + .../parameterised/number-too-large.json | 6 + .../parameterised/parameterised.rosetta | 15 ++ .../parameterised/string-illegal-pattern.json | 6 + .../parameterised/string-too-large.json | 6 + .../basic/basic-types-list.json | 13 ++ .../basic/basic-types-single.json | 13 ++ .../basic/basic.rosetta | 31 +++ .../choicetype/choice-basic.json | 8 + .../choicetype/choice-data.json | 10 + .../choicetype/choice-mixed-1.json | 10 + .../choicetype/choice-mixed-2.json | 8 + .../choicetype/choice.rosetta | 28 +++ .../data/data-types.json | 16 ++ .../data/data.rosetta | 16 ++ .../enumtypes/enum-types-list.json | 8 + .../enumtypes/enum-types-single.json | 8 + .../enumtypes/enum.rosetta | 19 ++ .../extension/base-type.json | 8 + .../extension/extended-type-concrete.json | 9 + .../extension/extended-type-polymorphic.json | 10 + .../extension/extension.rosetta | 16 ++ .../metakey/attribute-ref.json | 16 ++ .../metakey/dangling-attribute-ref.json | 11 + .../metakey/dangling-node-ref.json | 11 + .../metakey/meta-key.rosetta | 23 ++ .../metakey/node-ref.json | 16 ++ .../metalocation/address.json | 14 ++ .../metalocation/dangling-address.json | 8 + .../metalocation/meta-location.rosetta | 16 ++ .../metascheme/enum-list.json | 15 ++ .../metascheme/enum-single.json | 9 + .../metascheme/meta-scheme.rosetta | 23 ++ .../metascheme/node-list.json | 24 ++ .../metascheme/node-single.json | 12 + .../record/record-types-list.json | 10 + .../record/record-types-single.json | 10 + .../record/record.rosetta | 18 ++ 271 files changed, 1938 insertions(+), 181 deletions(-) create mode 100644 common/pom.xml rename {src => common/src}/main/java/com/regnosys/granite/ingestor/parser/InputValidationReport.java (100%) rename {src => common/src}/main/java/com/regnosys/granite/projector/ProjectionEnvironment.java (100%) rename {src => common/src}/main/java/com/regnosys/granite/projector/ProjectionReport.java (100%) rename {src => common/src}/main/java/com/regnosys/granite/projector/ProjectionService.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/RegPaths.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/CancelIndicator.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/CompilationCancellationException.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/CompilationCompletionState.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/CompilationTargetDeletionException.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompiler.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/JavaCancellableCompiler.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/JavaCompilationResult.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/compile/JavaCompileReleaseFlag.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/GlobalKeyProcessStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/IntegerHashGenerator.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/IntegerReport.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/NonNullHashCollector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/ReKeyProcessStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/ReferenceConfig.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/ReferenceResolverProcessStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/RosettaBasicTypesHashGenerator.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/hashing/ScopeReferenceHelper.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/merging/MergeTemplateProcessStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/merging/SimpleMerger.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/merging/SimpleSplitter.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/model/CachingMethodInterceptor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModule.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleBuilder.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/model/MemoiseCacheKey.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/WorkflowPostProcessor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/qualify/EmptyQualificationHandlerProvider.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandler.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandlerProvider.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationReport.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationResult.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualifyProcessorStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/projection/ProjectionDataItemExpectation.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/projection/ProjectionDataSetExpectation.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/projection/RegProjectionPaths.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/reports/RegReportPaths.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/reports/ReportDataItemExpectation.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/reports/ReportDataSetExpectation.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/reports/ReportField.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/AbstractJsonDataLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/BackwardsCompatibleAnnotationIntrospector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/BeanUtil.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/ConstantAttributePropertyWriter.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/DataLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/DataSet.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/InputDataLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/JsonDataLoaderUtil.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/ObjectMapperCreator.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/RosettaDataValueObjectToString.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapper.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapperCreator.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/RosettaSerialiserException.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/lookup/JsonLookupDataLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataItem.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataSet.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/DateExtended.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/EnumAsStringBuilderIntrospector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceFilter.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceWithMetaMixIn.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaDateModule.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaEnumBuilderIntrospector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONAnnotationIntrospector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONModule.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyGlobalKeyFieldsMixIn.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyKeyMixIn.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyReferenceMixIn.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyRosettaBuilderIntrospector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/JsonProjectionDataLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/ProjectionDataSet.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResult.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResultField.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonExpectedResultLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonReportDataLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataItem.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataSet.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportIdentifierDataSet.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanDeserializerModifier.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializer.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializerModifier.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaSerialiserFactory.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLAnnotationIntrospector.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLModule.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutedMethodProperty.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutingBeanPropertyWriter.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMap.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMapLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappableIndexedListSerializer.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingAsArraySerializerBase.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingIndexedListSerializer.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/serialisation/xml/VirtualXMLAttribute.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/testing/CoverageFraction.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/testing/ExecutableFunction.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/testing/ExecutionDescriptor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/testing/FunctionRunner.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/testing/MappingCoverage.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/transform/PipelineInfo.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/transform/PipelineModel.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/transform/TestPackModel.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/transform/TestPackUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/transform/TransformType.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/Mapping.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/MappingContext.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/MappingDelegate.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/MappingProcessor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/MappingProcessorStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/MappingProcessorUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/Path.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/SynonymToEnumMap.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/flat/Capture.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/flat/FlatFileMappingProcessor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePath.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/AbstractHierarchicalPathMatcher.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/ClassPathUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/CollectionUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/HierarchicalPathMatcher.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/MutablePair.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/Pair.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/PathCollectorBuilderProcessor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/PathException.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/PathLoader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/PathUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/PathValue.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/Report.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/RosettaModelObjectSupplier.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/RosettaObjectCollectorProcessStep.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/SimpleBuilderProcessor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/SimpleProcessor.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/StreamUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/StringExtensions.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/TeeReader.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/util/UrlUtils.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/validation/RosettaTypeValidator.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/validation/ValidationFailure.java (100%) rename {src => common/src}/main/java/com/regnosys/rosetta/common/validation/ValidationReport.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompilerTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/merger/BarBuilder.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/merger/FooBuilder.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/merger/SplitterMergerTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingKeyEqualityTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/JsonLookupDataLoaderTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaObjectMapperTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaSerialisationTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/PreAnnotatedPojoSerialisationTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/Price.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/PriceQuantity.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/ResolvablePriceQuantity.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/FieldWithMetaPrice.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/MetaFields.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/ReferenceWithMetaPrice.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/projection/JsonProjectionDataLoaderTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java (98%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonReportDataLoaderTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/serialisation/xml/XmlSerialisationTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/test/CommonAssertions.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/testing/FunctionRunnerTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/transform/PipelineSerialisationTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/transform/TestPackSerialisationTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/translation/MappingProcessorStepTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/translation/PathTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePathTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/util/ClassPathUtilsTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/util/PairTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/util/PathUtilsTest.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/util/TestStreamUtils.java (100%) rename {src => common/src}/test/java/com/regnosys/rosetta/common/util/TestTeeReader.java (100%) rename {src => common/src}/test/resources/compile-test/BrokenHelloWorld.java (100%) rename {src => common/src}/test/resources/compile-test/HelloWorld.java (100%) rename {src => common/src}/test/resources/function-runner-test/execution-descriptor-1.json (100%) rename {src => common/src}/test/resources/function-runner-test/expected-output-test-1.json (100%) rename {src => common/src}/test/resources/function-runner-test/input-test-1.json (100%) rename {src => common/src}/test/resources/logback-test.xml (100%) rename {src => common/src}/test/resources/path-files/META-INF/MANIFEST.MF (100%) rename {src => common/src}/test/resources/path-files/test-class-path.jar (100%) rename {src => common/src}/test/resources/path-files/test-path-2.rosetta (100%) rename {src => common/src}/test/resources/path-files/test-path.rosetta (100%) rename {src => common/src}/test/resources/projection/null-applicable-projections/projection-data-descriptor.json (100%) rename {src => common/src}/test/resources/projection/test-use-case-load/projection-data-descriptor.json (100%) rename {src => common/src}/test/resources/projection/test-use-case-load/test1.json (100%) rename {src => common/src}/test/resources/regs/test-reg-lookups/549300GUAMON5OX2OO54.json (100%) rename {src => common/src}/test/resources/regs/test-reg-lookups/regulatory-reporting-lookup-descriptor.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-error/regulatory-reporting-data-descriptor.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-error/test1.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected-legacy/expected/test1-expected.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected-legacy/regulatory-reporting-data-descriptor.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected-legacy/test1.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected/config/regulatory-reporting-data-descriptor.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected/input/test-set-1/test1.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected/output/body-corpus1/test-set-1/test1-key-value.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-expected/output/body-corpus2/test-set-1/test1-key-value.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-one-error/regulatory-reporting-data-descriptor.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load-one-error/test1.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load/regulatory-reporting-data-descriptor.json (100%) rename {src => common/src}/test/resources/regs/test-use-case-load/test1.json (100%) rename {src => common/src}/test/resources/test-pack-serialisation-test/pipeline-projection-emir-trade.json (100%) rename {src => common/src}/test/resources/test-pack-serialisation-test/pipeline-report-emir-trade.json (100%) rename {src => common/src}/test/resources/test-pack-serialisation-test/pipeline-translate-fpml.json (100%) rename {src => common/src}/test/resources/test-pack-serialisation-test/test-pack-projection-emir-trade-commodity.json (100%) rename {src => common/src}/test/resources/test-pack-serialisation-test/test-pack-report-emir-trade-commodity.json (100%) rename {src => common/src}/test/resources/test-pack-serialisation-test/test-pack-translate-fpml-commodity.json (100%) rename {src => common/src}/test/resources/test-private-key.der (100%) rename {src => common/src}/test/resources/test-public-key.der (100%) rename {src => common/src}/test/resources/xml-serialisation/expected/document.xml (100%) rename {src => common/src}/test/resources/xml-serialisation/expected/license-header.xml (100%) rename {src => common/src}/test/resources/xml-serialisation/expected/multicardinality-container.xml (100%) rename {src => common/src}/test/resources/xml-serialisation/expected/nested-container.xml (100%) rename {src => common/src}/test/resources/xml-serialisation/expected/substitution-group-multi.xml (100%) rename {src => common/src}/test/resources/xml-serialisation/expected/substitution-group.xml (100%) rename {src => common/src}/test/resources/xml-serialisation/schema/import-config.yml (100%) rename {src => common/src}/test/resources/xml-serialisation/schema/schema.xsd (100%) create mode 100644 serialization/pom.xml create mode 100644 serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectMapper.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectWriter.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/date/DateExtended.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/date/RuneDateModule.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/filters/SubTypeFilter.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/introspector/RuneBeanUtil.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonAnnotationIntrospector.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonModule.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/introspector/RuneStdTypeResolverBuilder.java create mode 100644 serialization/src/main/java/org/finos/rune/mapper/mixins/RosettaModelObjectMixin.java create mode 100644 serialization/src/test/java/org/finos/rune/serialization/DynamicCompiledClassLoader.java create mode 100644 serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerErrorHandlingTest.java create mode 100644 serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerRoundTripTest.java create mode 100644 serialization/src/test/java/org/finos/rune/serialization/RuneSerializerTestHelper.java create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/cardinality.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/too-many-elements.json create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-fraction-too-large.json create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-too-large.json create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/parameterised.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-illegal-pattern.json create mode 100644 serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-too-large.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-list.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-single.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-basic.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-data.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-1.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-2.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/data/data-types.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/data/data.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-list.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-single.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/extension/base-type.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-concrete.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-polymorphic.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/extension/extension.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metakey/attribute-ref.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-attribute-ref.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-node-ref.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metakey/meta-key.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metakey/node-ref.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/address.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/dangling-address.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/meta-location.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-list.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-single.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/meta-scheme.rosetta create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-list.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-single.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-list.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-single.json create mode 100644 serialization/src/test/resources/rune-serializer-round-trip-test/record/record.rosetta diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 00000000..0376112e --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.regnosys</groupId> + <artifactId>rune-common-parent</artifactId> + <version>0.0.0.main-SNAPSHOT</version> + </parent> + + <artifactId>rosetta-common</artifactId> + + <properties> + <maven.compiler.source>21</maven.compiler.source> + <maven.compiler.target>21</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <dependency> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>com.regnosys.rosetta.lib</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-annotations</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.module</groupId> + <artifactId>jackson-module-parameter-names</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.module</groupId> + <artifactId>jackson-module-blackbird</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jdk8</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-guava</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-joda</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.dataformat</groupId> + <artifactId>jackson-dataformat-yaml</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.dataformat</groupId> + <artifactId>jackson-dataformat-xml</artifactId> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> + <groupId>com.google.inject</groupId> + <artifactId>guice</artifactId> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <version>${exec-maven-plugin.version}</version> + <executions> + <execution> + <id>import-test-xsd-schema</id> + <phase>generate-test-sources</phase> + <goals> + <goal>java</goal> + </goals> + <configuration> + <mainClass>com.regnosys.rosetta.tools.modelimport.XsdImportMain</mainClass> + <cleanupDaemonThreads>false</cleanupDaemonThreads> + <arguments> + <argument>-config-path</argument> + <argument> + ${project.basedir}/src/test/resources/xml-serialisation/schema/import-config.yml + </argument> + <argument>-rosetta-output-path</argument> + <argument>${project.build.testOutputDirectory}/xml-serialisation/rosetta</argument> + <argument>-xml-config-output-path</argument> + <argument>${project.build.testOutputDirectory}/xml-serialisation/xml-config.json + </argument> + </arguments> + <includePluginDependencies>true</includePluginDependencies> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>com.regnosys.rosetta.tools</artifactId> + <version>${rosetta.dsl.version}</version> + <exclusions> + <exclusion> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>com.regnosys.rosetta.ide</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>com.regnosys.rosetta.xcore</artifactId> + <version>${rosetta.dsl.version}</version> + </dependency> + </dependencies> + </plugin> + <plugin> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>rosetta-maven-plugin</artifactId> + <version>${rosetta.dsl.version}</version> + <executions> + <execution> + <id>generate-xsd-based-sources</id> + <phase>generate-test-sources</phase> + <goals> + <goal>testGenerate</goal> + </goals> + <configuration> + <addOutputDirectoriesToCompileSourceRoots>false</addOutputDirectoriesToCompileSourceRoots> + <sourceRoots> + <sourceRoot>${project.build.testOutputDirectory}/xml-serialisation/rosetta</sourceRoot> + </sourceRoots> + <classPathLookupFilter>.*com\.regnosys\.rosetta.*</classPathLookupFilter> + <languages> + <language> + <setup>com.regnosys.rosetta.RosettaStandaloneSetup</setup> + <outputConfigurations> + <outputConfiguration> + <outputDirectory>${project.build.testOutputDirectory}/xml-serialisation/java</outputDirectory> + </outputConfiguration> + </outputConfigurations> + </language> + </languages> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>${build-helper-maven-plugin.version}</version> + <executions> + <execution> + <id>add-generated-test-sources</id> + <phase>generate-test-sources</phase> + <goals> + <goal>add-test-source</goal> + </goals> + <configuration> + <sources> + <source>${project.build.testOutputDirectory}/xml-serialisation/java</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/src/main/java/com/regnosys/granite/ingestor/parser/InputValidationReport.java b/common/src/main/java/com/regnosys/granite/ingestor/parser/InputValidationReport.java similarity index 100% rename from src/main/java/com/regnosys/granite/ingestor/parser/InputValidationReport.java rename to common/src/main/java/com/regnosys/granite/ingestor/parser/InputValidationReport.java diff --git a/src/main/java/com/regnosys/granite/projector/ProjectionEnvironment.java b/common/src/main/java/com/regnosys/granite/projector/ProjectionEnvironment.java similarity index 100% rename from src/main/java/com/regnosys/granite/projector/ProjectionEnvironment.java rename to common/src/main/java/com/regnosys/granite/projector/ProjectionEnvironment.java diff --git a/src/main/java/com/regnosys/granite/projector/ProjectionReport.java b/common/src/main/java/com/regnosys/granite/projector/ProjectionReport.java similarity index 100% rename from src/main/java/com/regnosys/granite/projector/ProjectionReport.java rename to common/src/main/java/com/regnosys/granite/projector/ProjectionReport.java diff --git a/src/main/java/com/regnosys/granite/projector/ProjectionService.java b/common/src/main/java/com/regnosys/granite/projector/ProjectionService.java similarity index 100% rename from src/main/java/com/regnosys/granite/projector/ProjectionService.java rename to common/src/main/java/com/regnosys/granite/projector/ProjectionService.java diff --git a/src/main/java/com/regnosys/rosetta/common/RegPaths.java b/common/src/main/java/com/regnosys/rosetta/common/RegPaths.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/RegPaths.java rename to common/src/main/java/com/regnosys/rosetta/common/RegPaths.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/CancelIndicator.java b/common/src/main/java/com/regnosys/rosetta/common/compile/CancelIndicator.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/CancelIndicator.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/CancelIndicator.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/CompilationCancellationException.java b/common/src/main/java/com/regnosys/rosetta/common/compile/CompilationCancellationException.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/CompilationCancellationException.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/CompilationCancellationException.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/CompilationCompletionState.java b/common/src/main/java/com/regnosys/rosetta/common/compile/CompilationCompletionState.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/CompilationCompletionState.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/CompilationCompletionState.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/CompilationTargetDeletionException.java b/common/src/main/java/com/regnosys/rosetta/common/compile/CompilationTargetDeletionException.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/CompilationTargetDeletionException.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/CompilationTargetDeletionException.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompiler.java b/common/src/main/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompiler.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompiler.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompiler.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/JavaCancellableCompiler.java b/common/src/main/java/com/regnosys/rosetta/common/compile/JavaCancellableCompiler.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/JavaCancellableCompiler.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/JavaCancellableCompiler.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/JavaCompilationResult.java b/common/src/main/java/com/regnosys/rosetta/common/compile/JavaCompilationResult.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/JavaCompilationResult.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/JavaCompilationResult.java diff --git a/src/main/java/com/regnosys/rosetta/common/compile/JavaCompileReleaseFlag.java b/common/src/main/java/com/regnosys/rosetta/common/compile/JavaCompileReleaseFlag.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/compile/JavaCompileReleaseFlag.java rename to common/src/main/java/com/regnosys/rosetta/common/compile/JavaCompileReleaseFlag.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/GlobalKeyProcessStep.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/GlobalKeyProcessStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/GlobalKeyProcessStep.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/GlobalKeyProcessStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/IntegerHashGenerator.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/IntegerHashGenerator.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/IntegerHashGenerator.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/IntegerHashGenerator.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/IntegerReport.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/IntegerReport.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/IntegerReport.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/IntegerReport.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/NonNullHashCollector.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/NonNullHashCollector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/NonNullHashCollector.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/NonNullHashCollector.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/ReKeyProcessStep.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/ReKeyProcessStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/ReKeyProcessStep.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/ReKeyProcessStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/ReferenceConfig.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/ReferenceConfig.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/ReferenceConfig.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/ReferenceConfig.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/ReferenceResolverProcessStep.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/ReferenceResolverProcessStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/ReferenceResolverProcessStep.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/ReferenceResolverProcessStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/RosettaBasicTypesHashGenerator.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/RosettaBasicTypesHashGenerator.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/RosettaBasicTypesHashGenerator.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/RosettaBasicTypesHashGenerator.java diff --git a/src/main/java/com/regnosys/rosetta/common/hashing/ScopeReferenceHelper.java b/common/src/main/java/com/regnosys/rosetta/common/hashing/ScopeReferenceHelper.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/hashing/ScopeReferenceHelper.java rename to common/src/main/java/com/regnosys/rosetta/common/hashing/ScopeReferenceHelper.java diff --git a/src/main/java/com/regnosys/rosetta/common/merging/MergeTemplateProcessStep.java b/common/src/main/java/com/regnosys/rosetta/common/merging/MergeTemplateProcessStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/merging/MergeTemplateProcessStep.java rename to common/src/main/java/com/regnosys/rosetta/common/merging/MergeTemplateProcessStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/merging/SimpleMerger.java b/common/src/main/java/com/regnosys/rosetta/common/merging/SimpleMerger.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/merging/SimpleMerger.java rename to common/src/main/java/com/regnosys/rosetta/common/merging/SimpleMerger.java diff --git a/src/main/java/com/regnosys/rosetta/common/merging/SimpleSplitter.java b/common/src/main/java/com/regnosys/rosetta/common/merging/SimpleSplitter.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/merging/SimpleSplitter.java rename to common/src/main/java/com/regnosys/rosetta/common/merging/SimpleSplitter.java diff --git a/src/main/java/com/regnosys/rosetta/common/model/CachingMethodInterceptor.java b/common/src/main/java/com/regnosys/rosetta/common/model/CachingMethodInterceptor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/model/CachingMethodInterceptor.java rename to common/src/main/java/com/regnosys/rosetta/common/model/CachingMethodInterceptor.java diff --git a/src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModule.java b/common/src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModule.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModule.java rename to common/src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModule.java diff --git a/src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleBuilder.java b/common/src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleBuilder.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleBuilder.java rename to common/src/main/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleBuilder.java diff --git a/src/main/java/com/regnosys/rosetta/common/model/MemoiseCacheKey.java b/common/src/main/java/com/regnosys/rosetta/common/model/MemoiseCacheKey.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/model/MemoiseCacheKey.java rename to common/src/main/java/com/regnosys/rosetta/common/model/MemoiseCacheKey.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/WorkflowPostProcessor.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/WorkflowPostProcessor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/WorkflowPostProcessor.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/WorkflowPostProcessor.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/EmptyQualificationHandlerProvider.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/EmptyQualificationHandlerProvider.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/qualify/EmptyQualificationHandlerProvider.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/EmptyQualificationHandlerProvider.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandler.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandler.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandler.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandler.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandlerProvider.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandlerProvider.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandlerProvider.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationHandlerProvider.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationReport.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationReport.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationReport.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationReport.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationResult.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationResult.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationResult.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualificationResult.java diff --git a/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualifyProcessorStep.java b/common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualifyProcessorStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualifyProcessorStep.java rename to common/src/main/java/com/regnosys/rosetta/common/postprocess/qualify/QualifyProcessorStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataItemExpectation.java b/common/src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataItemExpectation.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataItemExpectation.java rename to common/src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataItemExpectation.java diff --git a/src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataSetExpectation.java b/common/src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataSetExpectation.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataSetExpectation.java rename to common/src/main/java/com/regnosys/rosetta/common/projection/ProjectionDataSetExpectation.java diff --git a/src/main/java/com/regnosys/rosetta/common/projection/RegProjectionPaths.java b/common/src/main/java/com/regnosys/rosetta/common/projection/RegProjectionPaths.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/projection/RegProjectionPaths.java rename to common/src/main/java/com/regnosys/rosetta/common/projection/RegProjectionPaths.java diff --git a/src/main/java/com/regnosys/rosetta/common/reports/RegReportPaths.java b/common/src/main/java/com/regnosys/rosetta/common/reports/RegReportPaths.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/reports/RegReportPaths.java rename to common/src/main/java/com/regnosys/rosetta/common/reports/RegReportPaths.java diff --git a/src/main/java/com/regnosys/rosetta/common/reports/ReportDataItemExpectation.java b/common/src/main/java/com/regnosys/rosetta/common/reports/ReportDataItemExpectation.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/reports/ReportDataItemExpectation.java rename to common/src/main/java/com/regnosys/rosetta/common/reports/ReportDataItemExpectation.java diff --git a/src/main/java/com/regnosys/rosetta/common/reports/ReportDataSetExpectation.java b/common/src/main/java/com/regnosys/rosetta/common/reports/ReportDataSetExpectation.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/reports/ReportDataSetExpectation.java rename to common/src/main/java/com/regnosys/rosetta/common/reports/ReportDataSetExpectation.java diff --git a/src/main/java/com/regnosys/rosetta/common/reports/ReportField.java b/common/src/main/java/com/regnosys/rosetta/common/reports/ReportField.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/reports/ReportField.java rename to common/src/main/java/com/regnosys/rosetta/common/reports/ReportField.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/AbstractJsonDataLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/AbstractJsonDataLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/AbstractJsonDataLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/AbstractJsonDataLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/BackwardsCompatibleAnnotationIntrospector.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/BackwardsCompatibleAnnotationIntrospector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/BackwardsCompatibleAnnotationIntrospector.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/BackwardsCompatibleAnnotationIntrospector.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/BeanUtil.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/BeanUtil.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/BeanUtil.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/BeanUtil.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/ConstantAttributePropertyWriter.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/ConstantAttributePropertyWriter.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/ConstantAttributePropertyWriter.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/ConstantAttributePropertyWriter.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/DataLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/DataLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/DataLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/DataLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/DataSet.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/DataSet.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/DataSet.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/DataSet.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/InputDataLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/InputDataLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/InputDataLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/InputDataLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/JsonDataLoaderUtil.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/JsonDataLoaderUtil.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/JsonDataLoaderUtil.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/JsonDataLoaderUtil.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/ObjectMapperCreator.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/ObjectMapperCreator.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/ObjectMapperCreator.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/ObjectMapperCreator.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaDataValueObjectToString.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaDataValueObjectToString.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/RosettaDataValueObjectToString.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaDataValueObjectToString.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapper.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapper.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapper.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapper.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapperCreator.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapperCreator.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapperCreator.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaObjectMapperCreator.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaSerialiserException.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaSerialiserException.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/RosettaSerialiserException.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/RosettaSerialiserException.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/JsonLookupDataLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/JsonLookupDataLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/lookup/JsonLookupDataLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/JsonLookupDataLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataItem.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataItem.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataItem.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataItem.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataSet.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataSet.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataSet.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/lookup/LookupDataSet.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/DateExtended.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/DateExtended.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/DateExtended.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/DateExtended.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/EnumAsStringBuilderIntrospector.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/EnumAsStringBuilderIntrospector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/EnumAsStringBuilderIntrospector.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/EnumAsStringBuilderIntrospector.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceFilter.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceFilter.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceFilter.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceFilter.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceWithMetaMixIn.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceWithMetaMixIn.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceWithMetaMixIn.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/ReferenceWithMetaMixIn.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaDateModule.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaDateModule.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaDateModule.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaDateModule.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaEnumBuilderIntrospector.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaEnumBuilderIntrospector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaEnumBuilderIntrospector.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaEnumBuilderIntrospector.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONAnnotationIntrospector.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONAnnotationIntrospector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONAnnotationIntrospector.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONAnnotationIntrospector.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONModule.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONModule.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONModule.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/RosettaJSONModule.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyGlobalKeyFieldsMixIn.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyGlobalKeyFieldsMixIn.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyGlobalKeyFieldsMixIn.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyGlobalKeyFieldsMixIn.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyKeyMixIn.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyKeyMixIn.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyKeyMixIn.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyKeyMixIn.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyReferenceMixIn.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyReferenceMixIn.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyReferenceMixIn.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyReferenceMixIn.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyRosettaBuilderIntrospector.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyRosettaBuilderIntrospector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyRosettaBuilderIntrospector.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/mixin/legacy/LegacyRosettaBuilderIntrospector.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/JsonProjectionDataLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/JsonProjectionDataLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/JsonProjectionDataLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/JsonProjectionDataLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/ProjectionDataSet.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/ProjectionDataSet.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/ProjectionDataSet.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/projectiondata/ProjectionDataSet.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResult.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResult.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResult.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResult.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResultField.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResultField.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResultField.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ExpectedResultField.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonExpectedResultLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonExpectedResultLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonExpectedResultLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonExpectedResultLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonReportDataLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonReportDataLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonReportDataLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/JsonReportDataLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataItem.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataItem.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataItem.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataItem.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataSet.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataSet.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataSet.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportDataSet.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportIdentifierDataSet.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportIdentifierDataSet.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportIdentifierDataSet.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/reportdata/ReportIdentifierDataSet.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanDeserializerModifier.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanDeserializerModifier.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanDeserializerModifier.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanDeserializerModifier.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializer.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializer.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializer.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializer.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializerModifier.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializerModifier.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializerModifier.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaBeanSerializerModifier.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaSerialiserFactory.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaSerialiserFactory.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaSerialiserFactory.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaSerialiserFactory.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLAnnotationIntrospector.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLAnnotationIntrospector.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLAnnotationIntrospector.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLAnnotationIntrospector.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLModule.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLModule.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLModule.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/RosettaXMLModule.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutedMethodProperty.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutedMethodProperty.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutedMethodProperty.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutedMethodProperty.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutingBeanPropertyWriter.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutingBeanPropertyWriter.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutingBeanPropertyWriter.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutingBeanPropertyWriter.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMap.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMap.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMap.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMap.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMapLoader.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMapLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMapLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/SubstitutionMapLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappableIndexedListSerializer.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappableIndexedListSerializer.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappableIndexedListSerializer.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappableIndexedListSerializer.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingAsArraySerializerBase.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingAsArraySerializerBase.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingAsArraySerializerBase.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingAsArraySerializerBase.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingIndexedListSerializer.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingIndexedListSerializer.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingIndexedListSerializer.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/UnwrappingIndexedListSerializer.java diff --git a/src/main/java/com/regnosys/rosetta/common/serialisation/xml/VirtualXMLAttribute.java b/common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/VirtualXMLAttribute.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/serialisation/xml/VirtualXMLAttribute.java rename to common/src/main/java/com/regnosys/rosetta/common/serialisation/xml/VirtualXMLAttribute.java diff --git a/src/main/java/com/regnosys/rosetta/common/testing/CoverageFraction.java b/common/src/main/java/com/regnosys/rosetta/common/testing/CoverageFraction.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/testing/CoverageFraction.java rename to common/src/main/java/com/regnosys/rosetta/common/testing/CoverageFraction.java diff --git a/src/main/java/com/regnosys/rosetta/common/testing/ExecutableFunction.java b/common/src/main/java/com/regnosys/rosetta/common/testing/ExecutableFunction.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/testing/ExecutableFunction.java rename to common/src/main/java/com/regnosys/rosetta/common/testing/ExecutableFunction.java diff --git a/src/main/java/com/regnosys/rosetta/common/testing/ExecutionDescriptor.java b/common/src/main/java/com/regnosys/rosetta/common/testing/ExecutionDescriptor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/testing/ExecutionDescriptor.java rename to common/src/main/java/com/regnosys/rosetta/common/testing/ExecutionDescriptor.java diff --git a/src/main/java/com/regnosys/rosetta/common/testing/FunctionRunner.java b/common/src/main/java/com/regnosys/rosetta/common/testing/FunctionRunner.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/testing/FunctionRunner.java rename to common/src/main/java/com/regnosys/rosetta/common/testing/FunctionRunner.java diff --git a/src/main/java/com/regnosys/rosetta/common/testing/MappingCoverage.java b/common/src/main/java/com/regnosys/rosetta/common/testing/MappingCoverage.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/testing/MappingCoverage.java rename to common/src/main/java/com/regnosys/rosetta/common/testing/MappingCoverage.java diff --git a/src/main/java/com/regnosys/rosetta/common/transform/PipelineInfo.java b/common/src/main/java/com/regnosys/rosetta/common/transform/PipelineInfo.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/transform/PipelineInfo.java rename to common/src/main/java/com/regnosys/rosetta/common/transform/PipelineInfo.java diff --git a/src/main/java/com/regnosys/rosetta/common/transform/PipelineModel.java b/common/src/main/java/com/regnosys/rosetta/common/transform/PipelineModel.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/transform/PipelineModel.java rename to common/src/main/java/com/regnosys/rosetta/common/transform/PipelineModel.java diff --git a/src/main/java/com/regnosys/rosetta/common/transform/TestPackModel.java b/common/src/main/java/com/regnosys/rosetta/common/transform/TestPackModel.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/transform/TestPackModel.java rename to common/src/main/java/com/regnosys/rosetta/common/transform/TestPackModel.java diff --git a/src/main/java/com/regnosys/rosetta/common/transform/TestPackUtils.java b/common/src/main/java/com/regnosys/rosetta/common/transform/TestPackUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/transform/TestPackUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/transform/TestPackUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/transform/TransformType.java b/common/src/main/java/com/regnosys/rosetta/common/transform/TransformType.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/transform/TransformType.java rename to common/src/main/java/com/regnosys/rosetta/common/transform/TransformType.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/Mapping.java b/common/src/main/java/com/regnosys/rosetta/common/translation/Mapping.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/Mapping.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/Mapping.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/MappingContext.java b/common/src/main/java/com/regnosys/rosetta/common/translation/MappingContext.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/MappingContext.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/MappingContext.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/MappingDelegate.java b/common/src/main/java/com/regnosys/rosetta/common/translation/MappingDelegate.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/MappingDelegate.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/MappingDelegate.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessor.java b/common/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/MappingProcessor.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessor.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorStep.java b/common/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorStep.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorUtils.java b/common/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/MappingProcessorUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/Path.java b/common/src/main/java/com/regnosys/rosetta/common/translation/Path.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/Path.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/Path.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/SynonymToEnumMap.java b/common/src/main/java/com/regnosys/rosetta/common/translation/SynonymToEnumMap.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/SynonymToEnumMap.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/SynonymToEnumMap.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/flat/Capture.java b/common/src/main/java/com/regnosys/rosetta/common/translation/flat/Capture.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/flat/Capture.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/flat/Capture.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/flat/FlatFileMappingProcessor.java b/common/src/main/java/com/regnosys/rosetta/common/translation/flat/FlatFileMappingProcessor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/flat/FlatFileMappingProcessor.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/flat/FlatFileMappingProcessor.java diff --git a/src/main/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePath.java b/common/src/main/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePath.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePath.java rename to common/src/main/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePath.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/AbstractHierarchicalPathMatcher.java b/common/src/main/java/com/regnosys/rosetta/common/util/AbstractHierarchicalPathMatcher.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/AbstractHierarchicalPathMatcher.java rename to common/src/main/java/com/regnosys/rosetta/common/util/AbstractHierarchicalPathMatcher.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/ClassPathUtils.java b/common/src/main/java/com/regnosys/rosetta/common/util/ClassPathUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/ClassPathUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/util/ClassPathUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/CollectionUtils.java b/common/src/main/java/com/regnosys/rosetta/common/util/CollectionUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/CollectionUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/util/CollectionUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/HierarchicalPathMatcher.java b/common/src/main/java/com/regnosys/rosetta/common/util/HierarchicalPathMatcher.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/HierarchicalPathMatcher.java rename to common/src/main/java/com/regnosys/rosetta/common/util/HierarchicalPathMatcher.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/MutablePair.java b/common/src/main/java/com/regnosys/rosetta/common/util/MutablePair.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/MutablePair.java rename to common/src/main/java/com/regnosys/rosetta/common/util/MutablePair.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/Pair.java b/common/src/main/java/com/regnosys/rosetta/common/util/Pair.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/Pair.java rename to common/src/main/java/com/regnosys/rosetta/common/util/Pair.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/PathCollectorBuilderProcessor.java b/common/src/main/java/com/regnosys/rosetta/common/util/PathCollectorBuilderProcessor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/PathCollectorBuilderProcessor.java rename to common/src/main/java/com/regnosys/rosetta/common/util/PathCollectorBuilderProcessor.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/PathException.java b/common/src/main/java/com/regnosys/rosetta/common/util/PathException.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/PathException.java rename to common/src/main/java/com/regnosys/rosetta/common/util/PathException.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/PathLoader.java b/common/src/main/java/com/regnosys/rosetta/common/util/PathLoader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/PathLoader.java rename to common/src/main/java/com/regnosys/rosetta/common/util/PathLoader.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/PathUtils.java b/common/src/main/java/com/regnosys/rosetta/common/util/PathUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/PathUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/util/PathUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/PathValue.java b/common/src/main/java/com/regnosys/rosetta/common/util/PathValue.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/PathValue.java rename to common/src/main/java/com/regnosys/rosetta/common/util/PathValue.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/Report.java b/common/src/main/java/com/regnosys/rosetta/common/util/Report.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/Report.java rename to common/src/main/java/com/regnosys/rosetta/common/util/Report.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/RosettaModelObjectSupplier.java b/common/src/main/java/com/regnosys/rosetta/common/util/RosettaModelObjectSupplier.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/RosettaModelObjectSupplier.java rename to common/src/main/java/com/regnosys/rosetta/common/util/RosettaModelObjectSupplier.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/RosettaObjectCollectorProcessStep.java b/common/src/main/java/com/regnosys/rosetta/common/util/RosettaObjectCollectorProcessStep.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/RosettaObjectCollectorProcessStep.java rename to common/src/main/java/com/regnosys/rosetta/common/util/RosettaObjectCollectorProcessStep.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/SimpleBuilderProcessor.java b/common/src/main/java/com/regnosys/rosetta/common/util/SimpleBuilderProcessor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/SimpleBuilderProcessor.java rename to common/src/main/java/com/regnosys/rosetta/common/util/SimpleBuilderProcessor.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/SimpleProcessor.java b/common/src/main/java/com/regnosys/rosetta/common/util/SimpleProcessor.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/SimpleProcessor.java rename to common/src/main/java/com/regnosys/rosetta/common/util/SimpleProcessor.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/StreamUtils.java b/common/src/main/java/com/regnosys/rosetta/common/util/StreamUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/StreamUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/util/StreamUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/StringExtensions.java b/common/src/main/java/com/regnosys/rosetta/common/util/StringExtensions.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/StringExtensions.java rename to common/src/main/java/com/regnosys/rosetta/common/util/StringExtensions.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/TeeReader.java b/common/src/main/java/com/regnosys/rosetta/common/util/TeeReader.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/TeeReader.java rename to common/src/main/java/com/regnosys/rosetta/common/util/TeeReader.java diff --git a/src/main/java/com/regnosys/rosetta/common/util/UrlUtils.java b/common/src/main/java/com/regnosys/rosetta/common/util/UrlUtils.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/util/UrlUtils.java rename to common/src/main/java/com/regnosys/rosetta/common/util/UrlUtils.java diff --git a/src/main/java/com/regnosys/rosetta/common/validation/RosettaTypeValidator.java b/common/src/main/java/com/regnosys/rosetta/common/validation/RosettaTypeValidator.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/validation/RosettaTypeValidator.java rename to common/src/main/java/com/regnosys/rosetta/common/validation/RosettaTypeValidator.java diff --git a/src/main/java/com/regnosys/rosetta/common/validation/ValidationFailure.java b/common/src/main/java/com/regnosys/rosetta/common/validation/ValidationFailure.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/validation/ValidationFailure.java rename to common/src/main/java/com/regnosys/rosetta/common/validation/ValidationFailure.java diff --git a/src/main/java/com/regnosys/rosetta/common/validation/ValidationReport.java b/common/src/main/java/com/regnosys/rosetta/common/validation/ValidationReport.java similarity index 100% rename from src/main/java/com/regnosys/rosetta/common/validation/ValidationReport.java rename to common/src/main/java/com/regnosys/rosetta/common/validation/ValidationReport.java diff --git a/src/test/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompilerTest.java b/common/src/test/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompilerTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompilerTest.java rename to common/src/test/java/com/regnosys/rosetta/common/compile/JavaCSourceCancellableCompilerTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/merger/BarBuilder.java b/common/src/test/java/com/regnosys/rosetta/common/merger/BarBuilder.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/merger/BarBuilder.java rename to common/src/test/java/com/regnosys/rosetta/common/merger/BarBuilder.java diff --git a/src/test/java/com/regnosys/rosetta/common/merger/FooBuilder.java b/common/src/test/java/com/regnosys/rosetta/common/merger/FooBuilder.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/merger/FooBuilder.java rename to common/src/test/java/com/regnosys/rosetta/common/merger/FooBuilder.java diff --git a/src/test/java/com/regnosys/rosetta/common/merger/SplitterMergerTest.java b/common/src/test/java/com/regnosys/rosetta/common/merger/SplitterMergerTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/merger/SplitterMergerTest.java rename to common/src/test/java/com/regnosys/rosetta/common/merger/SplitterMergerTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingKeyEqualityTest.java b/common/src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingKeyEqualityTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingKeyEqualityTest.java rename to common/src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingKeyEqualityTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleTest.java b/common/src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleTest.java rename to common/src/test/java/com/regnosys/rosetta/common/model/FunctionMemoisingModuleTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/JsonLookupDataLoaderTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/JsonLookupDataLoaderTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/JsonLookupDataLoaderTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/JsonLookupDataLoaderTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaObjectMapperTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaObjectMapperTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaObjectMapperTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaObjectMapperTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaSerialisationTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaSerialisationTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaSerialisationTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/RosettaSerialisationTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/PreAnnotatedPojoSerialisationTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/PreAnnotatedPojoSerialisationTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/PreAnnotatedPojoSerialisationTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/PreAnnotatedPojoSerialisationTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/Price.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/Price.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/Price.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/Price.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/PriceQuantity.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/PriceQuantity.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/PriceQuantity.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/PriceQuantity.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/ResolvablePriceQuantity.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/ResolvablePriceQuantity.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/ResolvablePriceQuantity.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/ResolvablePriceQuantity.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/FieldWithMetaPrice.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/FieldWithMetaPrice.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/FieldWithMetaPrice.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/FieldWithMetaPrice.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/MetaFields.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/MetaFields.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/MetaFields.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/MetaFields.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/ReferenceWithMetaPrice.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/ReferenceWithMetaPrice.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/ReferenceWithMetaPrice.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/preannotation/testpojo/metafields/ReferenceWithMetaPrice.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/projection/JsonProjectionDataLoaderTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/projection/JsonProjectionDataLoaderTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/projection/JsonProjectionDataLoaderTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/projection/JsonProjectionDataLoaderTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java similarity index 98% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java index 42ffcc14..c6b998b7 100644 --- a/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java +++ b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonExpectedResultLoaderTest.java @@ -1,4 +1,4 @@ -package com.regnosys.rosetta.common.serialisation.reportdata; +package com.regnosys.rosetta.common.serialisation.json.reportdata; /*- * ============== @@ -24,6 +24,7 @@ import com.fasterxml.jackson.databind.type.CollectionType; import com.google.common.io.Resources; import com.regnosys.rosetta.common.serialisation.RosettaObjectMapper; +import com.regnosys.rosetta.common.serialisation.reportdata.*; import com.rosetta.model.lib.ModelReportId; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonReportDataLoaderTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonReportDataLoaderTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonReportDataLoaderTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/json/reportdata/JsonReportDataLoaderTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/serialisation/xml/XmlSerialisationTest.java b/common/src/test/java/com/regnosys/rosetta/common/serialisation/xml/XmlSerialisationTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/serialisation/xml/XmlSerialisationTest.java rename to common/src/test/java/com/regnosys/rosetta/common/serialisation/xml/XmlSerialisationTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/test/CommonAssertions.java b/common/src/test/java/com/regnosys/rosetta/common/test/CommonAssertions.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/test/CommonAssertions.java rename to common/src/test/java/com/regnosys/rosetta/common/test/CommonAssertions.java diff --git a/src/test/java/com/regnosys/rosetta/common/testing/FunctionRunnerTest.java b/common/src/test/java/com/regnosys/rosetta/common/testing/FunctionRunnerTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/testing/FunctionRunnerTest.java rename to common/src/test/java/com/regnosys/rosetta/common/testing/FunctionRunnerTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/transform/PipelineSerialisationTest.java b/common/src/test/java/com/regnosys/rosetta/common/transform/PipelineSerialisationTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/transform/PipelineSerialisationTest.java rename to common/src/test/java/com/regnosys/rosetta/common/transform/PipelineSerialisationTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/transform/TestPackSerialisationTest.java b/common/src/test/java/com/regnosys/rosetta/common/transform/TestPackSerialisationTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/transform/TestPackSerialisationTest.java rename to common/src/test/java/com/regnosys/rosetta/common/transform/TestPackSerialisationTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/translation/MappingProcessorStepTest.java b/common/src/test/java/com/regnosys/rosetta/common/translation/MappingProcessorStepTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/translation/MappingProcessorStepTest.java rename to common/src/test/java/com/regnosys/rosetta/common/translation/MappingProcessorStepTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/translation/PathTest.java b/common/src/test/java/com/regnosys/rosetta/common/translation/PathTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/translation/PathTest.java rename to common/src/test/java/com/regnosys/rosetta/common/translation/PathTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePathTest.java b/common/src/test/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePathTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePathTest.java rename to common/src/test/java/com/regnosys/rosetta/common/translation/flat/IndexCapturePathTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/util/ClassPathUtilsTest.java b/common/src/test/java/com/regnosys/rosetta/common/util/ClassPathUtilsTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/util/ClassPathUtilsTest.java rename to common/src/test/java/com/regnosys/rosetta/common/util/ClassPathUtilsTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/util/PairTest.java b/common/src/test/java/com/regnosys/rosetta/common/util/PairTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/util/PairTest.java rename to common/src/test/java/com/regnosys/rosetta/common/util/PairTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/util/PathUtilsTest.java b/common/src/test/java/com/regnosys/rosetta/common/util/PathUtilsTest.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/util/PathUtilsTest.java rename to common/src/test/java/com/regnosys/rosetta/common/util/PathUtilsTest.java diff --git a/src/test/java/com/regnosys/rosetta/common/util/TestStreamUtils.java b/common/src/test/java/com/regnosys/rosetta/common/util/TestStreamUtils.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/util/TestStreamUtils.java rename to common/src/test/java/com/regnosys/rosetta/common/util/TestStreamUtils.java diff --git a/src/test/java/com/regnosys/rosetta/common/util/TestTeeReader.java b/common/src/test/java/com/regnosys/rosetta/common/util/TestTeeReader.java similarity index 100% rename from src/test/java/com/regnosys/rosetta/common/util/TestTeeReader.java rename to common/src/test/java/com/regnosys/rosetta/common/util/TestTeeReader.java diff --git a/src/test/resources/compile-test/BrokenHelloWorld.java b/common/src/test/resources/compile-test/BrokenHelloWorld.java similarity index 100% rename from src/test/resources/compile-test/BrokenHelloWorld.java rename to common/src/test/resources/compile-test/BrokenHelloWorld.java diff --git a/src/test/resources/compile-test/HelloWorld.java b/common/src/test/resources/compile-test/HelloWorld.java similarity index 100% rename from src/test/resources/compile-test/HelloWorld.java rename to common/src/test/resources/compile-test/HelloWorld.java diff --git a/src/test/resources/function-runner-test/execution-descriptor-1.json b/common/src/test/resources/function-runner-test/execution-descriptor-1.json similarity index 100% rename from src/test/resources/function-runner-test/execution-descriptor-1.json rename to common/src/test/resources/function-runner-test/execution-descriptor-1.json diff --git a/src/test/resources/function-runner-test/expected-output-test-1.json b/common/src/test/resources/function-runner-test/expected-output-test-1.json similarity index 100% rename from src/test/resources/function-runner-test/expected-output-test-1.json rename to common/src/test/resources/function-runner-test/expected-output-test-1.json diff --git a/src/test/resources/function-runner-test/input-test-1.json b/common/src/test/resources/function-runner-test/input-test-1.json similarity index 100% rename from src/test/resources/function-runner-test/input-test-1.json rename to common/src/test/resources/function-runner-test/input-test-1.json diff --git a/src/test/resources/logback-test.xml b/common/src/test/resources/logback-test.xml similarity index 100% rename from src/test/resources/logback-test.xml rename to common/src/test/resources/logback-test.xml diff --git a/src/test/resources/path-files/META-INF/MANIFEST.MF b/common/src/test/resources/path-files/META-INF/MANIFEST.MF similarity index 100% rename from src/test/resources/path-files/META-INF/MANIFEST.MF rename to common/src/test/resources/path-files/META-INF/MANIFEST.MF diff --git a/src/test/resources/path-files/test-class-path.jar b/common/src/test/resources/path-files/test-class-path.jar similarity index 100% rename from src/test/resources/path-files/test-class-path.jar rename to common/src/test/resources/path-files/test-class-path.jar diff --git a/src/test/resources/path-files/test-path-2.rosetta b/common/src/test/resources/path-files/test-path-2.rosetta similarity index 100% rename from src/test/resources/path-files/test-path-2.rosetta rename to common/src/test/resources/path-files/test-path-2.rosetta diff --git a/src/test/resources/path-files/test-path.rosetta b/common/src/test/resources/path-files/test-path.rosetta similarity index 100% rename from src/test/resources/path-files/test-path.rosetta rename to common/src/test/resources/path-files/test-path.rosetta diff --git a/src/test/resources/projection/null-applicable-projections/projection-data-descriptor.json b/common/src/test/resources/projection/null-applicable-projections/projection-data-descriptor.json similarity index 100% rename from src/test/resources/projection/null-applicable-projections/projection-data-descriptor.json rename to common/src/test/resources/projection/null-applicable-projections/projection-data-descriptor.json diff --git a/src/test/resources/projection/test-use-case-load/projection-data-descriptor.json b/common/src/test/resources/projection/test-use-case-load/projection-data-descriptor.json similarity index 100% rename from src/test/resources/projection/test-use-case-load/projection-data-descriptor.json rename to common/src/test/resources/projection/test-use-case-load/projection-data-descriptor.json diff --git a/src/test/resources/projection/test-use-case-load/test1.json b/common/src/test/resources/projection/test-use-case-load/test1.json similarity index 100% rename from src/test/resources/projection/test-use-case-load/test1.json rename to common/src/test/resources/projection/test-use-case-load/test1.json diff --git a/src/test/resources/regs/test-reg-lookups/549300GUAMON5OX2OO54.json b/common/src/test/resources/regs/test-reg-lookups/549300GUAMON5OX2OO54.json similarity index 100% rename from src/test/resources/regs/test-reg-lookups/549300GUAMON5OX2OO54.json rename to common/src/test/resources/regs/test-reg-lookups/549300GUAMON5OX2OO54.json diff --git a/src/test/resources/regs/test-reg-lookups/regulatory-reporting-lookup-descriptor.json b/common/src/test/resources/regs/test-reg-lookups/regulatory-reporting-lookup-descriptor.json similarity index 100% rename from src/test/resources/regs/test-reg-lookups/regulatory-reporting-lookup-descriptor.json rename to common/src/test/resources/regs/test-reg-lookups/regulatory-reporting-lookup-descriptor.json diff --git a/src/test/resources/regs/test-use-case-load-error/regulatory-reporting-data-descriptor.json b/common/src/test/resources/regs/test-use-case-load-error/regulatory-reporting-data-descriptor.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-error/regulatory-reporting-data-descriptor.json rename to common/src/test/resources/regs/test-use-case-load-error/regulatory-reporting-data-descriptor.json diff --git a/src/test/resources/regs/test-use-case-load-error/test1.json b/common/src/test/resources/regs/test-use-case-load-error/test1.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-error/test1.json rename to common/src/test/resources/regs/test-use-case-load-error/test1.json diff --git a/src/test/resources/regs/test-use-case-load-expected-legacy/expected/test1-expected.json b/common/src/test/resources/regs/test-use-case-load-expected-legacy/expected/test1-expected.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected-legacy/expected/test1-expected.json rename to common/src/test/resources/regs/test-use-case-load-expected-legacy/expected/test1-expected.json diff --git a/src/test/resources/regs/test-use-case-load-expected-legacy/regulatory-reporting-data-descriptor.json b/common/src/test/resources/regs/test-use-case-load-expected-legacy/regulatory-reporting-data-descriptor.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected-legacy/regulatory-reporting-data-descriptor.json rename to common/src/test/resources/regs/test-use-case-load-expected-legacy/regulatory-reporting-data-descriptor.json diff --git a/src/test/resources/regs/test-use-case-load-expected-legacy/test1.json b/common/src/test/resources/regs/test-use-case-load-expected-legacy/test1.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected-legacy/test1.json rename to common/src/test/resources/regs/test-use-case-load-expected-legacy/test1.json diff --git a/src/test/resources/regs/test-use-case-load-expected/config/regulatory-reporting-data-descriptor.json b/common/src/test/resources/regs/test-use-case-load-expected/config/regulatory-reporting-data-descriptor.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected/config/regulatory-reporting-data-descriptor.json rename to common/src/test/resources/regs/test-use-case-load-expected/config/regulatory-reporting-data-descriptor.json diff --git a/src/test/resources/regs/test-use-case-load-expected/input/test-set-1/test1.json b/common/src/test/resources/regs/test-use-case-load-expected/input/test-set-1/test1.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected/input/test-set-1/test1.json rename to common/src/test/resources/regs/test-use-case-load-expected/input/test-set-1/test1.json diff --git a/src/test/resources/regs/test-use-case-load-expected/output/body-corpus1/test-set-1/test1-key-value.json b/common/src/test/resources/regs/test-use-case-load-expected/output/body-corpus1/test-set-1/test1-key-value.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected/output/body-corpus1/test-set-1/test1-key-value.json rename to common/src/test/resources/regs/test-use-case-load-expected/output/body-corpus1/test-set-1/test1-key-value.json diff --git a/src/test/resources/regs/test-use-case-load-expected/output/body-corpus2/test-set-1/test1-key-value.json b/common/src/test/resources/regs/test-use-case-load-expected/output/body-corpus2/test-set-1/test1-key-value.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-expected/output/body-corpus2/test-set-1/test1-key-value.json rename to common/src/test/resources/regs/test-use-case-load-expected/output/body-corpus2/test-set-1/test1-key-value.json diff --git a/src/test/resources/regs/test-use-case-load-one-error/regulatory-reporting-data-descriptor.json b/common/src/test/resources/regs/test-use-case-load-one-error/regulatory-reporting-data-descriptor.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-one-error/regulatory-reporting-data-descriptor.json rename to common/src/test/resources/regs/test-use-case-load-one-error/regulatory-reporting-data-descriptor.json diff --git a/src/test/resources/regs/test-use-case-load-one-error/test1.json b/common/src/test/resources/regs/test-use-case-load-one-error/test1.json similarity index 100% rename from src/test/resources/regs/test-use-case-load-one-error/test1.json rename to common/src/test/resources/regs/test-use-case-load-one-error/test1.json diff --git a/src/test/resources/regs/test-use-case-load/regulatory-reporting-data-descriptor.json b/common/src/test/resources/regs/test-use-case-load/regulatory-reporting-data-descriptor.json similarity index 100% rename from src/test/resources/regs/test-use-case-load/regulatory-reporting-data-descriptor.json rename to common/src/test/resources/regs/test-use-case-load/regulatory-reporting-data-descriptor.json diff --git a/src/test/resources/regs/test-use-case-load/test1.json b/common/src/test/resources/regs/test-use-case-load/test1.json similarity index 100% rename from src/test/resources/regs/test-use-case-load/test1.json rename to common/src/test/resources/regs/test-use-case-load/test1.json diff --git a/src/test/resources/test-pack-serialisation-test/pipeline-projection-emir-trade.json b/common/src/test/resources/test-pack-serialisation-test/pipeline-projection-emir-trade.json similarity index 100% rename from src/test/resources/test-pack-serialisation-test/pipeline-projection-emir-trade.json rename to common/src/test/resources/test-pack-serialisation-test/pipeline-projection-emir-trade.json diff --git a/src/test/resources/test-pack-serialisation-test/pipeline-report-emir-trade.json b/common/src/test/resources/test-pack-serialisation-test/pipeline-report-emir-trade.json similarity index 100% rename from src/test/resources/test-pack-serialisation-test/pipeline-report-emir-trade.json rename to common/src/test/resources/test-pack-serialisation-test/pipeline-report-emir-trade.json diff --git a/src/test/resources/test-pack-serialisation-test/pipeline-translate-fpml.json b/common/src/test/resources/test-pack-serialisation-test/pipeline-translate-fpml.json similarity index 100% rename from src/test/resources/test-pack-serialisation-test/pipeline-translate-fpml.json rename to common/src/test/resources/test-pack-serialisation-test/pipeline-translate-fpml.json diff --git a/src/test/resources/test-pack-serialisation-test/test-pack-projection-emir-trade-commodity.json b/common/src/test/resources/test-pack-serialisation-test/test-pack-projection-emir-trade-commodity.json similarity index 100% rename from src/test/resources/test-pack-serialisation-test/test-pack-projection-emir-trade-commodity.json rename to common/src/test/resources/test-pack-serialisation-test/test-pack-projection-emir-trade-commodity.json diff --git a/src/test/resources/test-pack-serialisation-test/test-pack-report-emir-trade-commodity.json b/common/src/test/resources/test-pack-serialisation-test/test-pack-report-emir-trade-commodity.json similarity index 100% rename from src/test/resources/test-pack-serialisation-test/test-pack-report-emir-trade-commodity.json rename to common/src/test/resources/test-pack-serialisation-test/test-pack-report-emir-trade-commodity.json diff --git a/src/test/resources/test-pack-serialisation-test/test-pack-translate-fpml-commodity.json b/common/src/test/resources/test-pack-serialisation-test/test-pack-translate-fpml-commodity.json similarity index 100% rename from src/test/resources/test-pack-serialisation-test/test-pack-translate-fpml-commodity.json rename to common/src/test/resources/test-pack-serialisation-test/test-pack-translate-fpml-commodity.json diff --git a/src/test/resources/test-private-key.der b/common/src/test/resources/test-private-key.der similarity index 100% rename from src/test/resources/test-private-key.der rename to common/src/test/resources/test-private-key.der diff --git a/src/test/resources/test-public-key.der b/common/src/test/resources/test-public-key.der similarity index 100% rename from src/test/resources/test-public-key.der rename to common/src/test/resources/test-public-key.der diff --git a/src/test/resources/xml-serialisation/expected/document.xml b/common/src/test/resources/xml-serialisation/expected/document.xml similarity index 100% rename from src/test/resources/xml-serialisation/expected/document.xml rename to common/src/test/resources/xml-serialisation/expected/document.xml diff --git a/src/test/resources/xml-serialisation/expected/license-header.xml b/common/src/test/resources/xml-serialisation/expected/license-header.xml similarity index 100% rename from src/test/resources/xml-serialisation/expected/license-header.xml rename to common/src/test/resources/xml-serialisation/expected/license-header.xml diff --git a/src/test/resources/xml-serialisation/expected/multicardinality-container.xml b/common/src/test/resources/xml-serialisation/expected/multicardinality-container.xml similarity index 100% rename from src/test/resources/xml-serialisation/expected/multicardinality-container.xml rename to common/src/test/resources/xml-serialisation/expected/multicardinality-container.xml diff --git a/src/test/resources/xml-serialisation/expected/nested-container.xml b/common/src/test/resources/xml-serialisation/expected/nested-container.xml similarity index 100% rename from src/test/resources/xml-serialisation/expected/nested-container.xml rename to common/src/test/resources/xml-serialisation/expected/nested-container.xml diff --git a/src/test/resources/xml-serialisation/expected/substitution-group-multi.xml b/common/src/test/resources/xml-serialisation/expected/substitution-group-multi.xml similarity index 100% rename from src/test/resources/xml-serialisation/expected/substitution-group-multi.xml rename to common/src/test/resources/xml-serialisation/expected/substitution-group-multi.xml diff --git a/src/test/resources/xml-serialisation/expected/substitution-group.xml b/common/src/test/resources/xml-serialisation/expected/substitution-group.xml similarity index 100% rename from src/test/resources/xml-serialisation/expected/substitution-group.xml rename to common/src/test/resources/xml-serialisation/expected/substitution-group.xml diff --git a/src/test/resources/xml-serialisation/schema/import-config.yml b/common/src/test/resources/xml-serialisation/schema/import-config.yml similarity index 100% rename from src/test/resources/xml-serialisation/schema/import-config.yml rename to common/src/test/resources/xml-serialisation/schema/import-config.yml diff --git a/src/test/resources/xml-serialisation/schema/schema.xsd b/common/src/test/resources/xml-serialisation/schema/schema.xsd similarity index 100% rename from src/test/resources/xml-serialisation/schema/schema.xsd rename to common/src/test/resources/xml-serialisation/schema/schema.xsd diff --git a/pom.xml b/pom.xml index 5fd0b8cb..31dc64ca 100644 --- a/pom.xml +++ b/pom.xml @@ -25,21 +25,25 @@ <version>5</version> </parent> - <name>Rosetta Common</name> + <name>Rune Common Parent</name> + <modules> + <module>common</module> + <module>serialization</module> + </modules> <groupId>com.regnosys</groupId> - <artifactId>rosetta-common</artifactId> - <packaging>jar</packaging> + <artifactId>rune-common-parent</artifactId> + <packaging>pom</packaging> <version>0.0.0.main-SNAPSHOT</version> - <url>https://github.com/REGnosys/rosetta-common</url> + <url>https://github.com/finos/rune-common</url> <scm> - <developerConnection>scm:git:https://github.com/REGnosys/rosetta-common</developerConnection> - <connection>scm:git:git://github.com/REGnosys/rosetta-common.git</connection> + <developerConnection>scm:git:https://github.com/finos/rune-common</developerConnection> + <connection>scm:git:git://github.com/finos/rune-common.git</connection> <tag>HEAD</tag> - <url>https://github.com/REGnosys/rosetta-common</url> + <url>https://github.com/finos/rune-common</url> </scm> - <description>Rune Common is a java library that is utilised by Rosetta Code Generators and models expressed in the Rosetta DSL.</description> + <description>Rune Common is a java library that is utilised by Rune Code Generators and models expressed in the Rune DSL.</description> <organization> <name>REGnosys</name> @@ -87,14 +91,13 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.enforced.version>[17,18)</java.enforced.version> <maven.compiler.release>8</maven.compiler.release> - <rosetta.dsl.version>9.25.0</rosetta.dsl.version> + <rosetta.dsl.version>9.26.0</rosetta.dsl.version> <!-- Release --> <gpg.keyname>configured-by-release-profile</gpg.keyname> <repoServerHost>s01.oss.sonatype.org</repoServerHost> <stagingTimeoutInMinutes>10</stagingTimeoutInMinutes> - <!-- Also to be changed in rosetta-products->persistence --> <jackson.version>2.17.1</jackson.version> <guice.version>5.0.1</guice.version> <guava.version>32.0.1-jre</guava.version> @@ -272,6 +275,13 @@ <artifactId>slf4j-api</artifactId> <version>${slf4j-api.version}</version> </dependency> + <dependency> + <groupId>org.junit</groupId> + <artifactId>junit-bom</artifactId> + <version>${junit.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> <dependency> <groupId>org.eclipse.xtext</groupId> <artifactId>xtext-dev-bom</artifactId> @@ -293,13 +303,6 @@ <type>pom</type> <scope>import</scope> </dependency> - <dependency> - <groupId>org.junit</groupId> - <artifactId>junit-bom</artifactId> - <version>${junit.version}</version> - <type>pom</type> - <scope>import</scope> - </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> @@ -312,74 +315,27 @@ <version>${logback.version}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>com.regnosys.rosetta.tests</artifactId> + <version>${rosetta.dsl.version}</version> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>org.eclipse.jdt</groupId> + <artifactId>org.eclipse.jdt.core</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> </dependencyManagement> <dependencies> - <dependency> - <groupId>com.regnosys.rosetta</groupId> - <artifactId>com.regnosys.rosetta.lib</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-annotations</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.module</groupId> - <artifactId>jackson-module-parameter-names</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.module</groupId> - <artifactId>jackson-module-blackbird</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-jdk8</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-jsr310</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-guava</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-joda</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.dataformat</groupId> - <artifactId>jackson-dataformat-yaml</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.dataformat</groupId> - <artifactId>jackson-dataformat-xml</artifactId> - </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - </dependency> - <dependency> - <groupId>com.google.inject</groupId> - <artifactId>guice</artifactId> - </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> <!-- test --> <dependency> <groupId>org.junit.jupiter</groupId> @@ -409,17 +365,10 @@ <dependency> <groupId>com.regnosys.rosetta</groupId> <artifactId>com.regnosys.rosetta.tests</artifactId> - <version>${rosetta.dsl.version}</version> <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.eclipse.jdt</groupId> - <artifactId>org.eclipse.jdt.core</artifactId> - </exclusion> - </exclusions> </dependency> </dependencies> - + <build> <plugins> <plugin> @@ -492,101 +441,6 @@ <release>${maven.compiler.release}</release> </configuration> </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>exec-maven-plugin</artifactId> - <version>${exec-maven-plugin.version}</version> - <executions> - <execution> - <id>import-test-xsd-schema</id> - <phase>generate-test-sources</phase> - <goals> - <goal>java</goal> - </goals> - <configuration> - <mainClass>com.regnosys.rosetta.tools.modelimport.XsdImportMain</mainClass> - <cleanupDaemonThreads>false</cleanupDaemonThreads> - <arguments> - <argument>-config-path</argument> - <argument>${project.basedir}/src/test/resources/xml-serialisation/schema/import-config.yml</argument> - <argument>-rosetta-output-path</argument> - <argument>${project.build.testOutputDirectory}/xml-serialisation/rosetta</argument> - <argument>-xml-config-output-path</argument> - <argument>${project.build.testOutputDirectory}/xml-serialisation/xml-config.json</argument> - </arguments> - <includePluginDependencies>true</includePluginDependencies> - </configuration> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>com.regnosys.rosetta</groupId> - <artifactId>com.regnosys.rosetta.tools</artifactId> - <version>${rosetta.dsl.version}</version> - <exclusions> - <exclusion> - <groupId>com.regnosys.rosetta</groupId> - <artifactId>com.regnosys.rosetta.ide</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.regnosys.rosetta</groupId> - <artifactId>com.regnosys.rosetta.xcore</artifactId> - <version>${rosetta.dsl.version}</version> - </dependency> - </dependencies> - </plugin> - <plugin> - <groupId>com.regnosys.rosetta</groupId> - <artifactId>rosetta-maven-plugin</artifactId> - <version>${rosetta.dsl.version}</version> - <executions> - <execution> - <id>generate-xsd-based-sources</id> - <phase>generate-test-sources</phase> - <goals> - <goal>testGenerate</goal> - </goals> - <configuration> - <addOutputDirectoriesToCompileSourceRoots>false</addOutputDirectoriesToCompileSourceRoots> - <sourceRoots> - <sourceRoot>${project.build.testOutputDirectory}/xml-serialisation/rosetta</sourceRoot> - </sourceRoots> - <classPathLookupFilter>.*com\.regnosys\.rosetta.*</classPathLookupFilter> - <languages> - <language> - <setup>com.regnosys.rosetta.RosettaStandaloneSetup</setup> - <outputConfigurations> - <outputConfiguration> - <outputDirectory>${project.build.testOutputDirectory}/xml-serialisation/java</outputDirectory> - </outputConfiguration> - </outputConfigurations> - </language> - </languages> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>build-helper-maven-plugin</artifactId> - <version>${build-helper-maven-plugin.version}</version> - <executions> - <execution> - <id>add-generated-test-sources</id> - <phase>generate-test-sources</phase> - <goals> - <goal>add-test-source</goal> - </goals> - <configuration> - <sources> - <source>${project.build.testOutputDirectory}/xml-serialisation/java</source> - </sources> - </configuration> - </execution> - </executions> - </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>license-maven-plugin</artifactId> diff --git a/serialization/pom.xml b/serialization/pom.xml new file mode 100644 index 00000000..573d1f2c --- /dev/null +++ b/serialization/pom.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.regnosys</groupId> + <artifactId>rune-common-parent</artifactId> + <version>0.0.0.main-SNAPSHOT</version> + </parent> + + <artifactId>serialization</artifactId> + + <properties> + <maven.compiler.source>21</maven.compiler.source> + <maven.compiler.target>21</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <dependency> + <groupId>com.regnosys.rosetta</groupId> + <artifactId>com.regnosys.rosetta.lib</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-annotations</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.module</groupId> + <artifactId>jackson-module-parameter-names</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.module</groupId> + <artifactId>jackson-module-blackbird</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jdk8</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-guava</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-joda</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.dataformat</groupId> + <artifactId>jackson-dataformat-yaml</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.dataformat</groupId> + <artifactId>jackson-dataformat-xml</artifactId> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + </dependencies> +</project> \ No newline at end of file diff --git a/serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectMapper.java b/serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectMapper.java new file mode 100644 index 00000000..a8574bda --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectMapper.java @@ -0,0 +1,106 @@ +package org.finos.rune.mapper; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.FormatSchema; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.PrettyPrinter; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; +import com.fasterxml.jackson.datatype.guava.GuavaModule; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.joda.JodaModule; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; +import com.rosetta.model.lib.RosettaModelObject; +import org.finos.rune.mapper.date.RuneDateModule; +import org.finos.rune.mapper.filters.SubTypeFilter; +import org.finos.rune.mapper.introspector.RuneJsonModule; +import org.finos.rune.mapper.mixins.RosettaModelObjectMixin; + +/** + * A custom {@link ObjectMapper} designed for the Rune DSL. + * <p> + * This class provides JSON serialization and deserialization that closely + * aligns with the structure of the Rune DSL, ensuring that the serialized + * output is both human-readable and faithful to the DSL's design. + * </p> + * + * <p> + * By tailoring the serialization format, this mapper makes the JSON output + * intuitive for developers and domain experts working with the Rune DSL, + * while maintaining compatibility with standard JSON processing tools. + * </p> + * + * <h2>Usage:</h2> + * <pre> + * RuneJacksonJsonObjectMapper objectMapper = new RuneJacksonJsonObjectMapper(); + * String json = objectMapper.writeValueAsString(runeObject); + * </pre> + * + * @see ObjectMapper + */ +public class RuneJsonObjectMapper extends ObjectMapper { + public RuneJsonObjectMapper() { + super(create()); + } + + @Override + protected ObjectWriter _newWriter(SerializationConfig config) { + return new RuneJsonObjectWriter(this, config); + } + + @Override + protected ObjectWriter _newWriter(SerializationConfig config, FormatSchema schema) { + return new RuneJsonObjectWriter(this, config, schema); + } + + @Override + protected ObjectWriter _newWriter(SerializationConfig config, JavaType rootType, PrettyPrinter pp) { + return new RuneJsonObjectWriter(this, config, rootType, pp); + } + + private static ObjectMapper create() { + return new ObjectMapper() + .registerModule(new GuavaModule()) + .registerModule(new JodaModule()) + .registerModule(new ParameterNamesModule()) + .registerModule(new Jdk8Module()) + .registerModule(new JavaTimeModule()) + .registerModule(new RuneDateModule()) + .registerModule(new RuneJsonModule()) + .setSerializationInclusion(JsonInclude.Include.NON_ABSENT) + .setSerializationInclusion(JsonInclude.Include.NON_EMPTY) + .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true) + .configure(SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE, false) + .configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false) + .configure(SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS, false) + .setFilterProvider(new SimpleFilterProvider().addFilter("SubTypeFilter", new SubTypeFilter())) + .addMixIn(RosettaModelObject.class, RosettaModelObjectMixin.class) + .enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN) + .setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.PUBLIC_ONLY); + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectWriter.java b/serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectWriter.java new file mode 100644 index 00000000..9ff3a1a9 --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/RuneJsonObjectWriter.java @@ -0,0 +1,103 @@ +package org.finos.rune.mapper; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2025 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.core.FormatSchema; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.PrettyPrinter; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.rosetta.model.lib.RosettaModelObject; +import com.rosetta.model.lib.annotations.RuneDataType; + +import java.util.Arrays; + +/** + * A custom {@link ObjectWriter} implementation for the Rune DSL. + * <p> + * This writer extends Jackson's {@link ObjectWriter} to provide JSON serialization + * tailored to the Rune DSL. It ensures that serialized objects include metadata + * at the top level and maintain a structure that is easy to read and closely aligned + * with the DSL's format. + * </p> + * + * <h2>Usage:</h2> + * This writer is used internally by the {@link RuneJsonObjectMapper} and + * is not typically instantiated directly. Instead, it is accessed through the + * configured {@link ObjectMapper}. + * <pre> + * RuneJacksonJsonObjectMapper objectMapper = new RuneJacksonJsonObjectMapper(); + * String json = objectMapper.writeValueAsString(runeObject); + * </pre> + * + * @see ObjectWriter + * @see RuneJsonObjectMapper + */ +public class RuneJsonObjectWriter extends ObjectWriter { + private final ObjectMapper mapper; + + + protected RuneJsonObjectWriter(ObjectMapper mapper, SerializationConfig config, FormatSchema s) { + super(mapper, config, s); + this.mapper = mapper; + } + + public RuneJsonObjectWriter(ObjectMapper mapper, SerializationConfig config) { + super(mapper, config); + this.mapper = mapper; + } + + protected RuneJsonObjectWriter(ObjectMapper mapper, SerializationConfig config, JavaType rootType, PrettyPrinter pp) { + super(mapper, config, rootType, pp); + this.mapper = mapper; + } + + @Override + public String writeValueAsString(Object value) throws JsonProcessingException { + if (value instanceof RosettaModelObject) { + RosettaModelObject rosettaModelObject = (RosettaModelObject) value; + ObjectNode objectNode = addTopLevelMeta(rosettaModelObject); + return super.writeValueAsString(objectNode); + } + + return super.writeValueAsString(value); + } + + private <T extends RosettaModelObject> ObjectNode addTopLevelMeta(T runeObject) { + Class<? extends RosettaModelObject> runeType = runeObject.getType(); + return Arrays.stream(runeType.getAnnotations()) + .filter(allAnnotations -> allAnnotations.annotationType().equals(RuneDataType.class)).findFirst().map(a -> { + RuneDataType runeDataType = (RuneDataType) a; + ObjectNode modifiedNode = mapper.createObjectNode(); + modifiedNode = modifiedNode.put("@model", runeDataType.model()) + .put("@type", runeType.getCanonicalName()) + .put("@version", runeDataType.version()); + + ObjectNode originalNode = mapper.valueToTree(runeObject); + modifiedNode.setAll(originalNode); + return modifiedNode; + + }).orElse(mapper.valueToTree(runeObject)); + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/date/DateExtended.java b/serialization/src/main/java/org/finos/rune/mapper/date/DateExtended.java new file mode 100644 index 00000000..ca135343 --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/date/DateExtended.java @@ -0,0 +1,36 @@ +package org.finos.rune.mapper.date; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.rosetta.model.lib.records.DateImpl; + +import java.time.LocalDate; + +public class DateExtended extends DateImpl { + public DateExtended(@JsonProperty("year") int year, @JsonProperty("month") int month, @JsonProperty("day") int day) { + super(year, month, day); + } + + public DateExtended(String date) { + super(LocalDate.parse(date)); + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/date/RuneDateModule.java b/serialization/src/main/java/org/finos/rune/mapper/date/RuneDateModule.java new file mode 100644 index 00000000..f02a0136 --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/date/RuneDateModule.java @@ -0,0 +1,52 @@ +package org.finos.rune.mapper.date; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.rosetta.model.lib.records.Date; + +import java.io.IOException; + +public class RuneDateModule extends SimpleModule { + private static final long serialVersionUID = 1L; + + { + addDeserializer(Date.class, new StdDeserializer<Date>(Date.class) { + @Override + public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { + return Date.of(p.readValueAs(DateExtended.class).toLocalDate()); + } + }); + addSerializer(Date.class, new StdSerializer<Date>(Date.class) { + @Override + public void serialize(Date value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeString(value.toString()); + } + }); + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/filters/SubTypeFilter.java b/serialization/src/main/java/org/finos/rune/mapper/filters/SubTypeFilter.java new file mode 100644 index 00000000..d61d6b7b --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/filters/SubTypeFilter.java @@ -0,0 +1,45 @@ +package org.finos.rune.mapper.filters; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.PropertyWriter; +import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; + +public class SubTypeFilter extends SimpleBeanPropertyFilter { + + @Override + public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception { + String name = writer.getName(); + if (name.equals("@type")) { + if (!pojo.getClass().getSuperclass().getCanonicalName().equals(Object.class.getCanonicalName())) { + writer.serializeAsField(pojo, jgen, provider); + } + + return; + } + super.serializeAsField(pojo, jgen, provider, writer); + } + + +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneBeanUtil.java b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneBeanUtil.java new file mode 100644 index 00000000..0bffcd49 --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneBeanUtil.java @@ -0,0 +1,62 @@ +package org.finos.rune.mapper.introspector; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import java.lang.reflect.Method; + +public class RuneBeanUtil { + + public static String getPropertyName(Method method) { + String methodName = method.getName(); + String rawPropertyName = getSubstringIfPrefixMatches(methodName, "get"); + if (rawPropertyName == null) { + rawPropertyName = getSubstringIfPrefixMatches(methodName, "set"); + } + + if (rawPropertyName == null) { + rawPropertyName = getSubstringIfPrefixMatches(methodName, "is"); + } + + if (rawPropertyName == null) { + rawPropertyName = getSubstringIfPrefixMatches(methodName, "add"); + } + + return toLowerCamelCase(rawPropertyName); + } + + public static String toLowerCamelCase(String string) { + if (string == null) { + return null; + } else if (string.isEmpty()) { + return string; + } else if (string.length() > 1 && Character.isUpperCase(string.charAt(1)) && Character.isUpperCase(string.charAt(0))) { + return string; + } else { + char[] chars = string.toCharArray(); + chars[0] = Character.toLowerCase(chars[0]); + return new String(chars); + } + } + + private static String getSubstringIfPrefixMatches(String wholeString, String prefix) { + return wholeString.startsWith(prefix) ? wholeString.substring(prefix.length()) : null; + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonAnnotationIntrospector.java b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonAnnotationIntrospector.java new file mode 100644 index 00000000..1815f10c --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonAnnotationIntrospector.java @@ -0,0 +1,165 @@ +package org.finos.rune.mapper.introspector; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.PropertyName; +import com.fasterxml.jackson.databind.cfg.MapperConfig; +import com.fasterxml.jackson.databind.introspect.*; +import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder; +import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder; +import com.fasterxml.jackson.databind.util.NameTransformer; +import com.rosetta.model.lib.annotations.RuneAttribute; +import com.rosetta.model.lib.annotations.RuneDataType; +import com.rosetta.model.lib.annotations.RuneMetaType; + +import java.util.Objects; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +/** + * Custom Jackson annotation introspector for handling serialization and deserialization + * of classes annotated with {@link RuneDataType}, {@link RuneAttribute}, and {@link RuneMetaType}. + * + * <p>This introspector modifies Jackson's default behavior to: + * <ul> + * <li>Enable alphabetic property sorting for {@link RuneDataType} annotated classes.</li> + * <li>Support custom polymorphic type resolution for {@link RuneDataType} annotations.</li> + * <li>Provide custom name mapping for serialization and deserialization based on {@link RuneAttribute}.</li> + * <li>Handle property unwrapping for {@link RuneMetaType} annotations.</li> + * <li>Define property inclusion/exclusion rules for {@link RuneDataType} classes.</li> + * </ul> + * + * <p>This class overrides several key methods in {@link JacksonAnnotationIntrospector} + * to integrate these custom behaviors. + * + * <p>Key functionality includes: + * <ul> + * <li>Polymorphic type resolution for {@link RuneDataType} using custom {@link StdTypeResolverBuilder}.</li> + * <li>Explicit handling of property ordering limitations documented in + * <a href="https://github.com/FasterXML/jackson-databind/issues/1670">jackson-databind issue 1670</a>.</li> + * <li>Integration with {@link RuneAttribute} to control property name mapping for + * serialization and deserialization.</li> + * <li>Support for unwrapping of properties with {@link RuneMetaType} using a no-operation + * {@link NameTransformer}.</li> + * </ul> + * + * @see JacksonAnnotationIntrospector + * @see StdTypeResolverBuilder + * @see RuneDataType + * @see RuneAttribute + * @see RuneMetaType + */ +public class RuneJsonAnnotationIntrospector extends JacksonAnnotationIntrospector { + private static final long serialVersionUID = 1L; + + @Override + protected StdTypeResolverBuilder _constructStdTypeResolverBuilder() { + return new RuneStdTypeResolverBuilder(); + } + + @Override + protected TypeResolverBuilder<?> _constructStdTypeResolverBuilder(MapperConfig<?> config, + JsonTypeInfo.Value typeInfo, JavaType baseType) { + return new RuneStdTypeResolverBuilder(typeInfo); + } + + @Override + public JsonTypeInfo.Value findPolymorphicTypeInfo(MapperConfig<?> config, Annotated ann) { + RuneDataType t = _findAnnotation(ann, RuneDataType.class); + if (t != null) { + return JsonTypeInfo.Value.construct(JsonTypeInfo.Id.CLASS, + JsonTypeInfo.As.EXISTING_PROPERTY, + "@type", + JsonTypeInfo.class, + true, + false); + } + return super.findPolymorphicTypeInfo(config, ann); + } + + @Override + public Class<?> findPOJOBuilder(AnnotatedClass ac) { + if (ac.hasAnnotation(RuneDataType.class)) { + return ac.getAnnotation(RuneDataType.class).builder(); + } + return super.findPOJOBuilder(ac); + } + + @Override + public PropertyName findNameForSerialization(Annotated a) { + if (a.hasAnnotation(RuneAttribute.class)) { + return new PropertyName(a.getAnnotation(RuneAttribute.class).value()); + } + return super.findNameForSerialization(a); + } + + @Override + public PropertyName findNameForDeserialization(Annotated a) { + if (a.hasAnnotation(RuneAttribute.class)) { + return new PropertyName(a.getAnnotation(RuneAttribute.class).value()); + } + return super.findNameForDeserialization(a); + } + + @Override + public NameTransformer findUnwrappingNameTransformer(AnnotatedMember member) { + RuneMetaType ann = _findAnnotation(member, RuneMetaType.class); + // if not enabled, just means annotation is not enabled; not necessarily + // that unwrapping should not be done (relevant when using chained introspectors) + if (ann == null) { + return super.findUnwrappingNameTransformer(member); + } + return NameTransformer.NOP; + } + + @Override + public JsonIgnoreProperties.Value findPropertyIgnoralByName(MapperConfig<?> config, Annotated a) { + if (a instanceof AnnotatedClass && a.hasAnnotation(RuneDataType.class)) { + AnnotatedClass acc = (AnnotatedClass) a; + Set<String> includes = getPropertyNames(acc, x -> x.hasAnnotation(RuneAttribute.class)); + Set<String> ignored = getPropertyNames(acc, x -> !x.hasAnnotation(RuneAttribute.class)); + ignored.removeAll(includes); + return JsonIgnoreProperties.Value.forIgnoredProperties(ignored).withAllowSetters(); + } + + return super.findPropertyIgnoralByName(config, a); + } + + private static Set<String> getPropertyNames(AnnotatedClass acc, Predicate<AnnotatedMethod> filter) { + return StreamSupport.stream(acc.memberMethods().spliterator(), false) + .filter(filter) + .map(m -> RuneBeanUtil.getPropertyName(m.getAnnotated())) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } + + @Override + public Version version() { + return Version.unknownVersion(); + } + +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonModule.java b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonModule.java new file mode 100644 index 00000000..65b7a0ed --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneJsonModule.java @@ -0,0 +1,52 @@ +package org.finos.rune.mapper.introspector; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.core.json.PackageVersion; +import com.fasterxml.jackson.databind.module.SimpleModule; + +/** + * Using a module class to append our annotation introspector with a minimal fuss + */ +public class RuneJsonModule extends SimpleModule { + + private static final long serialVersionUID = 1L; + + public RuneJsonModule() { + super(PackageVersion.VERSION); + } + + @Override + public void setupModule(SetupContext context) { + super.setupModule(context); + context.insertAnnotationIntrospector(new RuneJsonAnnotationIntrospector()); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object o) { + return this == o; + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneStdTypeResolverBuilder.java b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneStdTypeResolverBuilder.java new file mode 100644 index 00000000..44bd646f --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/introspector/RuneStdTypeResolverBuilder.java @@ -0,0 +1,50 @@ +package org.finos.rune.mapper.introspector; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.DeserializationConfig; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.introspect.AnnotatedClass; +import com.fasterxml.jackson.databind.introspect.AnnotatedClassResolver; +import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder; +import com.rosetta.model.lib.annotations.RuneDataType; + +public class RuneStdTypeResolverBuilder extends StdTypeResolverBuilder { + + public RuneStdTypeResolverBuilder(JsonTypeInfo.Value typeInfo) { + super(typeInfo); + } + + public RuneStdTypeResolverBuilder() { + super(); + } + + @Override + public boolean _strictTypeIdHandling(DeserializationConfig config, JavaType baseType) { + AnnotatedClass annotatedClass = AnnotatedClassResolver.resolve(config, baseType, config); + if (annotatedClass.hasAnnotation(RuneDataType.class)) { + return _requireTypeIdForSubtypes; + } + + return super._strictTypeIdHandling(config, baseType); + } +} diff --git a/serialization/src/main/java/org/finos/rune/mapper/mixins/RosettaModelObjectMixin.java b/serialization/src/main/java/org/finos/rune/mapper/mixins/RosettaModelObjectMixin.java new file mode 100644 index 00000000..64cc3f4d --- /dev/null +++ b/serialization/src/main/java/org/finos/rune/mapper/mixins/RosettaModelObjectMixin.java @@ -0,0 +1,32 @@ +package org.finos.rune.mapper.mixins; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.rosetta.model.lib.RosettaModelObject; +import com.rosetta.model.lib.annotations.RuneAttribute; + +@JsonFilter("SubTypeFilter") +public @interface RosettaModelObjectMixin { + + @RuneAttribute("@type") + Class<? extends RosettaModelObject> getType(); +} diff --git a/serialization/src/test/java/org/finos/rune/serialization/DynamicCompiledClassLoader.java b/serialization/src/test/java/org/finos/rune/serialization/DynamicCompiledClassLoader.java new file mode 100644 index 00000000..fff68b78 --- /dev/null +++ b/serialization/src/test/java/org/finos/rune/serialization/DynamicCompiledClassLoader.java @@ -0,0 +1,36 @@ +package org.finos.rune.serialization; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import java.util.Map; + +public class DynamicCompiledClassLoader extends ClassLoader { + private Map<String, Class<?>> compiledCode; + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + return compiledCode.containsKey(name) ? compiledCode.get(name) : super.findClass(name); + } + + public void setCompiledCode(Map<String, Class<?>> compiledCode) { + this.compiledCode = compiledCode; + } +} diff --git a/serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerErrorHandlingTest.java b/serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerErrorHandlingTest.java new file mode 100644 index 00000000..3abc7a0b --- /dev/null +++ b/serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerErrorHandlingTest.java @@ -0,0 +1,164 @@ +package org.finos.rune.serialization; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.inject.Injector; +import com.regnosys.rosetta.RosettaStandaloneSetup; +import com.regnosys.rosetta.tests.util.CodeGeneratorTestHelper; +import com.rosetta.model.lib.RosettaModelObject; +import org.finos.rune.mapper.RuneJsonObjectMapper; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; + +import static org.finos.rune.serialization.RuneSerializerTestHelper.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@Disabled +public class RuneJsonSerializerErrorHandlingTest { + public static final String TEST_TYPE = "rune-serializer-error-handling-test"; + private ObjectMapper objectMapper; + + private static CodeGeneratorTestHelper helper; + + @BeforeAll + static void beforeAll() { + RosettaStandaloneSetup rosettaStandaloneSetup = new RosettaStandaloneSetup(); + Injector injector = rosettaStandaloneSetup.createInjectorAndDoEMFRegistration(); + helper = injector.getInstance(CodeGeneratorTestHelper.class); + } + + @BeforeEach + void setUp() { + objectMapper = new RuneJsonObjectMapper(); + } + + + @Test + public void testCardinalityTooManyElementsThrowsException() { + Path groupPath = getGroupPath("cardinality"); + Class<RosettaModelObject> rootDataType = getRootRosettaModelObjectClass(groupPath, "cardinality.rosetta"); + String json = readAsString(getFile(groupPath, "too-many-elements.json")); + + RosettaModelObject deserializedObject = fromJson(json, rootDataType); + + RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> { + toJson(deserializedObject); + }); + + assertEquals("Attribute contained more than the allowed number of elements", runtimeException.getMessage()); + } + + @Test + public void testNumberFractionTooLargeThrowsException() { + Path groupPath = getGroupPath("parameterised"); + Class<RosettaModelObject> rootDataType = getRootRosettaModelObjectClass(groupPath, "parameterised.rosetta"); + String json = readAsString(getFile(groupPath, "number-fraction-too-large.json")); + + RosettaModelObject deserializedObject = fromJson(json, rootDataType); + + RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> { + toJson(deserializedObject); + }); + + assertEquals("Number contained more than the allowed number of digits", runtimeException.getMessage()); + } + + @Test + public void testNumberTooLargeThrowsException() { + Path groupPath = getGroupPath("parameterised"); + Class<RosettaModelObject> rootDataType = getRootRosettaModelObjectClass(groupPath, "parameterised.rosetta"); + String json = readAsString(getFile(groupPath, "number-too-large.json")); + + RosettaModelObject deserializedObject = fromJson(json, rootDataType); + + RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> { + toJson(deserializedObject); + }); + + assertEquals("Number contained more than the allowed number of digits", runtimeException.getMessage()); + } + + @Test + public void testStringIllegalPatternThrowsException() { + Path groupPath = getGroupPath("parameterised"); + Class<RosettaModelObject> rootDataType = getRootRosettaModelObjectClass(groupPath, "parameterised.rosetta"); + String json = readAsString(getFile(groupPath, "string-illegal-pattern.json")); + + RosettaModelObject deserializedObject = fromJson(json, rootDataType); + + RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> { + toJson(deserializedObject); + }); + + assertEquals("String does not match the required pattern", runtimeException.getMessage()); + } + + @Test + public void testStringTooLargeThrowsException() { + Path groupPath = getGroupPath("parameterised"); + Class<RosettaModelObject> rootDataType = getRootRosettaModelObjectClass(groupPath, "parameterised.rosetta"); + String json = readAsString(getFile(groupPath, "string-too-large.json")); + + RosettaModelObject deserializedObject = fromJson(json, rootDataType); + + RuntimeException runtimeException = assertThrows(RuntimeException.class, () -> { + toJson(deserializedObject); + }); + + assertEquals("String exceeds the maximum length", runtimeException.getMessage()); + } + + private static Path getGroupPath(String groupName) { + return Paths.get("src/test/resources").resolve(TEST_TYPE).resolve(groupName); + } + + private Class<RosettaModelObject> getRootRosettaModelObjectClass(Path groupPath, String fileName) { + Path rosetta = getFile(groupPath, fileName); + String groupName = groupPath.getFileName().toString(); + return generateCompileAndGetRootDataType(groupName, Collections.singletonList(rosetta), helper, new DynamicCompiledClassLoader()); + } + + private <T extends RosettaModelObject> T fromJson(String runeJson, Class<T> type) { + try { + return objectMapper.readValue(runeJson, type); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + private <T extends RosettaModelObject> String toJson(T runeObject) { + try { + return objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(runeObject); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerRoundTripTest.java b/serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerRoundTripTest.java new file mode 100644 index 00000000..3d755dc1 --- /dev/null +++ b/serialization/src/test/java/org/finos/rune/serialization/RuneJsonSerializerRoundTripTest.java @@ -0,0 +1,104 @@ +package org.finos.rune.serialization; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.inject.Injector; +import com.regnosys.rosetta.tests.util.CodeGeneratorTestHelper; +import com.rosetta.model.lib.RosettaModelObject; +import org.finos.rune.mapper.RuneJsonObjectMapper; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Stream; + +import static org.finos.rune.serialization.RuneSerializerTestHelper.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class RuneJsonSerializerRoundTripTest { + public static final String TEST_TYPE = "rune-serializer-round-trip-test"; + private static DynamicCompiledClassLoader dynamicCompiledClassLoader; + + private static CodeGeneratorTestHelper helper; + private ObjectMapper objectMapper; + + @BeforeAll + static void beforeAll() { + Injector injector = setupInjector(); + helper = injector.getInstance(CodeGeneratorTestHelper.class); + dynamicCompiledClassLoader = new DynamicCompiledClassLoader(); + } + + @BeforeEach + void setUp() { + objectMapper = new RuneJsonObjectMapper(); + objectMapper.setTypeFactory(objectMapper.getTypeFactory().withClassLoader(dynamicCompiledClassLoader)); + } + + @ParameterizedTest(name = "{0} - {1}") + @MethodSource("testCases") + public void testSerializationRoundTrip(String group, String testCaseName, Class<? extends RosettaModelObject> rosettaRootType, String jsonString) { + RosettaModelObject deserializedObject = fromJson(jsonString, rosettaRootType); + String serializedjsonString = toJson(deserializedObject); + assertEquals(jsonString, serializedjsonString, testCaseName + ": Serialization round trip failed"); + } + + public static Stream<Arguments> testCases() { + return groups(TEST_TYPE).stream() + .flatMap(groupPath -> { + List<Path> rosettas = listFiles(groupPath, ".rosetta"); + String groupName = groupPath.getFileName().toString(); + Class<RosettaModelObject> rootDataType = generateCompileAndGetRootDataType(groupName, rosettas, helper, dynamicCompiledClassLoader); + + return listFiles(groupPath, ".json").stream() + .map(jsonPath -> Arguments.of( + groupName, + jsonPath.getFileName().toString(), + rootDataType, + readAsString(jsonPath) + )); + } + ); + } + + private <T extends RosettaModelObject> T fromJson(String runeJson, Class<T> type) { + try { + return objectMapper.readValue(runeJson, type); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + private <T extends RosettaModelObject> String toJson(T runeObject) { + try { + return objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(runeObject); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/serialization/src/test/java/org/finos/rune/serialization/RuneSerializerTestHelper.java b/serialization/src/test/java/org/finos/rune/serialization/RuneSerializerTestHelper.java new file mode 100644 index 00000000..9f9ca7f0 --- /dev/null +++ b/serialization/src/test/java/org/finos/rune/serialization/RuneSerializerTestHelper.java @@ -0,0 +1,117 @@ +package org.finos.rune.serialization; + +/*- + * ============== + * Rune Common + * ============== + * Copyright (C) 2018 - 2024 REGnosys + * ============== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============== + */ + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.util.Modules; +import com.regnosys.rosetta.RosettaRuntimeModule; +import com.regnosys.rosetta.RosettaStandaloneSetup; +import com.regnosys.rosetta.config.RosettaConfiguration; +import com.regnosys.rosetta.config.RosettaGeneratorsConfiguration; +import com.regnosys.rosetta.config.RosettaModelConfiguration; +import com.regnosys.rosetta.tests.util.CodeGeneratorTestHelper; +import com.rosetta.model.lib.RosettaModelObject; +import org.eclipse.xtext.common.TerminalsStandaloneSetup; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class RuneSerializerTestHelper { + + public static final String TEST_MODEL_NAME = "serialization"; + + @SuppressWarnings("unchecked") + public static <T extends RosettaModelObject> Class<T> generateCompileAndGetRootDataType(String groupName, + List<Path> rosettaPaths, + CodeGeneratorTestHelper helper, DynamicCompiledClassLoader dynamicCompiledClassLoader) { + String[] rosettaFileContents = rosettaPaths.stream().map(RuneSerializerTestHelper::readAsString).toArray(String[]::new); + HashMap<String, String> generatedCode = helper.generateCode(rosettaFileContents); + Map<String, Class<?>> compiledCode = helper.compileToClasses(generatedCode); + dynamicCompiledClassLoader.setCompiledCode(compiledCode); + Class<?> aClass = compiledCode.get(TEST_MODEL_NAME + ".test." + groupName + ".Root"); + return (Class<T>) aClass; + } + + public static String readAsString(Path jsonPath) { + try { + return new String(Files.readAllBytes(jsonPath)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static List<Path> groups(String testType) { + try (Stream<Path> files = Files.list(Paths.get("src/test/resources/" + testType))) { + return files.filter(Files::isDirectory).collect(Collectors.toList()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static Path getFile(Path groupPath, String fileName) { + try (Stream<Path> files = Files.list(groupPath)) { + return files.filter(x -> x.getFileName().toString().equals(fileName)).collect(Collectors.toList()) + .stream().findFirst() + .orElseThrow(() -> new RuntimeException("File not found: " + fileName)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static List<Path> listFiles(Path groupPath, String suffix) { + try (Stream<Path> files = Files.list(groupPath)) { + return files.filter(x -> x.getFileName().toString().endsWith(suffix)).collect(Collectors.toList()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static Injector setupInjector() { + RosettaStandaloneSetup rosettaStandaloneSetup = new RosettaStandaloneSetup(); + TerminalsStandaloneSetup.doSetup(); + + Module module = Modules.override(new RosettaRuntimeModule()).with(new AbstractModule() { + @Override + protected void configure() { + bind(RosettaConfiguration.class).toInstance(new RosettaConfiguration( + new RosettaModelConfiguration(TEST_MODEL_NAME), + new ArrayList<>(), + new RosettaGeneratorsConfiguration() + )); + } + }); + Injector injector = Guice.createInjector(module); + rosettaStandaloneSetup.register(injector); + return injector; + } +} diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/cardinality.rosetta b/serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/cardinality.rosetta new file mode 100644 index 00000000..8b8378b0 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/cardinality.rosetta @@ -0,0 +1,7 @@ +namespace cardinality + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +type Root: + [rootType] + stringList string (0..2) diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/too-many-elements.json b/serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/too-many-elements.json new file mode 100644 index 00000000..b2919192 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/cardinality/too-many-elements.json @@ -0,0 +1,6 @@ +{ + "@model": "test.cardinality", + "@type": "test.cardinality.Root", + "@version": "0.0.0", + "stringList": ["foo", "bar", "baz"] +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-fraction-too-large.json b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-fraction-too-large.json new file mode 100644 index 00000000..78a65eb5 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-fraction-too-large.json @@ -0,0 +1,6 @@ +{ + "@model": "test.parameterised", + "@type": "test.parameterised.Root", + "@version": "0.0.0", + "parameterisedNumber": 1.23456789 +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-too-large.json b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-too-large.json new file mode 100644 index 00000000..01ef2321 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/number-too-large.json @@ -0,0 +1,6 @@ +{ + "@model": "test.parameterised", + "@type": "test.parameterised.Root", + "@version": "0.0.0", + "parameterisedNumber": 123456789 +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/parameterised.rosetta b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/parameterised.rosetta new file mode 100644 index 00000000..eac8a252 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/parameterised.rosetta @@ -0,0 +1,15 @@ +namespace parameterised + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +typeAlias ParameterisedNumberType: + number(digits: 3, fractionalDigits: 2) + +typeAlias ParameterisedStringType: + string(minLength: 1, maxLength: 2, pattern: "[a-zA-Z]") + +type Root: + [rootType] + parameterisedNumber ParameterisedNumberType (0..1) + parameterisedString ParameterisedStringType (0..1) + \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-illegal-pattern.json b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-illegal-pattern.json new file mode 100644 index 00000000..26b4020e --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-illegal-pattern.json @@ -0,0 +1,6 @@ +{ + "@model": "test.parameterised", + "@type": "test.parameterised.Root", + "@version": "0.0.0", + "parameterisedString": "$$" +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-too-large.json b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-too-large.json new file mode 100644 index 00000000..c432c53e --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-error-handling-test/parameterised/string-too-large.json @@ -0,0 +1,6 @@ +{ + "@model": "test.parameterised", + "@type": "test.parameterised.Root", + "@version": "0.0.0", + "parameterisedString": "abcdefg" +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-list.json b/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-list.json new file mode 100644 index 00000000..a209b36d --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-list.json @@ -0,0 +1,13 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.basic.Root", + "@version" : "0.0.0", + "basicList" : { + "booleanTypes" : [ true, false, true ], + "numberTypes" : [ 123.456, 789, 345.123 ], + "parameterisedNumberTypes" : [ 123.99, 456, 99.12 ], + "parameterisedStringTypes" : [ "abcDEF", "foo", "foo" ], + "stringTypes" : [ "foo", "bar", "Baz123" ], + "timeTypes" : [ "12:00:00" ] + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-single.json b/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-single.json new file mode 100644 index 00000000..8edd3fe6 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic-types-single.json @@ -0,0 +1,13 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.basic.Root", + "@version" : "0.0.0", + "basicSingle" : { + "booleanType" : true, + "numberType" : 123.456, + "parameterisedNumberType" : 123.99, + "parameterisedStringType" : "abcDEF", + "stringType" : "foo", + "timeType" : "12:00:00" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic.rosetta new file mode 100644 index 00000000..ce1c47c9 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/basic/basic.rosetta @@ -0,0 +1,31 @@ +namespace serialization.test.basic + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +typeAlias ParameterisedNumberType: + number(digits: 18, fractionalDigits: 2) + +typeAlias ParameterisedStringType: + string(minLength: 1, maxLength: 20, pattern: "[a-zA-Z]") + +type BasicSingle: + booleanType boolean (1..1) + numberType number (1..1) + parameterisedNumberType ParameterisedNumberType (1..1) + parameterisedStringType ParameterisedStringType (1..1) + stringType string (1..1) + timeType time (1..1) + +type BasicList: + booleanTypes boolean (1..*) + numberTypes number (1..*) + parameterisedNumberTypes ParameterisedNumberType (1..*) + parameterisedStringTypes ParameterisedStringType (1..*) + stringTypes string (1..*) + timeTypes time (1..*) + +type Root: + [rootType] + basicSingle BasicSingle (0..1) + basicList BasicList (0..1) + \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-basic.json b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-basic.json new file mode 100644 index 00000000..629720b4 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-basic.json @@ -0,0 +1,8 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.choicetype.Root", + "@version" : "0.0.0", + "choiceBasic" : { + "string" : "foo" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-data.json b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-data.json new file mode 100644 index 00000000..63c32f17 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-data.json @@ -0,0 +1,10 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.choicetype.Root", + "@version" : "0.0.0", + "choiceData" : { + "A" : { + "fieldA" : "foo" + } + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-1.json b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-1.json new file mode 100644 index 00000000..9447c2f7 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-1.json @@ -0,0 +1,10 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.choicetype.Root", + "@version" : "0.0.0", + "choiceMixed" : { + "B" : { + "fieldB" : "foo" + } + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-2.json b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-2.json new file mode 100644 index 00000000..972ed019 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice-mixed-2.json @@ -0,0 +1,8 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.choicetype.Root", + "@version" : "0.0.0", + "choiceMixed" : { + "string" : "foo" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice.rosetta new file mode 100644 index 00000000..6c3ceb81 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/choicetype/choice.rosetta @@ -0,0 +1,28 @@ +namespace serialization.test.choicetype + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +choice ChoiceBasic: + string + number + +type A: + fieldA string (1..1) + +type B: + fieldB string (1..1) + +choice ChoiceData: + A + B + +choice ChoiceMixed: + A + B + string + +type Root: + [rootType] + choiceBasic ChoiceBasic (0..1) + choiceData ChoiceData (0..1) + choiceMixed ChoiceMixed (0..1) diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/data/data-types.json b/serialization/src/test/resources/rune-serializer-round-trip-test/data/data-types.json new file mode 100644 index 00000000..2885f02c --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/data/data-types.json @@ -0,0 +1,16 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.data.Root", + "@version" : "0.0.0", + "a" : { + "b" : [ { }, { + "c" : { + "field" : "foo" + } + }, { + "c" : { + "field" : "bar" + } + } ] + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/data/data.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/data/data.rosetta new file mode 100644 index 00000000..5dbdac8a --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/data/data.rosetta @@ -0,0 +1,16 @@ +namespace serialization.test.data + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +type A: + b B (1..*) + +type B: + c C (0..1) + +type C: + field string (1..1) + +type Root: + [rootType] + a A (1..1) \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-list.json b/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-list.json new file mode 100644 index 00000000..4138fccc --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-list.json @@ -0,0 +1,8 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.enumtypes.Root", + "@version" : "0.0.0", + "enumList" : { + "enumType" : [ "A", "B", "C", "B" ] + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-single.json b/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-single.json new file mode 100644 index 00000000..62c4da7f --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum-types-single.json @@ -0,0 +1,8 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.enumtypes.Root", + "@version" : "0.0.0", + "enumSingle" : { + "enumType" : "A" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum.rosetta new file mode 100644 index 00000000..d6e35fc9 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/enumtypes/enum.rosetta @@ -0,0 +1,19 @@ +namespace serialization.test.enumtypes + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +enum EnumType: + A + B + C + +type EnumSingle: + enumType EnumType (1..1) + +type EnumList: + enumType EnumType (1..*) + +type Root: + [rootType] + enumSingle EnumSingle (0..1) + enumList EnumList (0..1) \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/extension/base-type.json b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/base-type.json new file mode 100644 index 00000000..1cf7cf1f --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/base-type.json @@ -0,0 +1,8 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.extension.Root", + "@version" : "0.0.0", + "typeA" : { + "fieldA" : "foo" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-concrete.json b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-concrete.json new file mode 100644 index 00000000..bc84b3b4 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-concrete.json @@ -0,0 +1,9 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.extension.Root", + "@version" : "0.0.0", + "typeB" : { + "fieldB" : "foo", + "@type" : "serialization.test.extension.B" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-polymorphic.json b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-polymorphic.json new file mode 100644 index 00000000..9a26157d --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extended-type-polymorphic.json @@ -0,0 +1,10 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.extension.Root", + "@version" : "0.0.0", + "typeA" : { + "fieldA" : "bar", + "fieldB" : "foo", + "@type" : "serialization.test.extension.B" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extension.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extension.rosetta new file mode 100644 index 00000000..17b875b5 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/extension/extension.rosetta @@ -0,0 +1,16 @@ +namespace serialization.test.extension + +annotation rootType: <"Mark a type as a root of the rosetta model"> + + +type A: + fieldA string (1..1) + +type B extends A: + fieldB string (1..1) + +type Root: + [rootType] + typeA A (0..1) + typeB B (0..1) + diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/attribute-ref.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/attribute-ref.json new file mode 100644 index 00000000..9a53ad09 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/attribute-ref.json @@ -0,0 +1,16 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metakey.Root", + "@version" : "0.0.0", + "attributeRef" : { + "dateField" : { + "@data" : "2024-12-12", + "@key" : "someKey", + "@key:external" : "someExternalKey" + }, + "dateReference" : { + "@ref" : "someKey", + "@ref:external" : "someExternalKey" + } + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-attribute-ref.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-attribute-ref.json new file mode 100644 index 00000000..4cfa7b38 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-attribute-ref.json @@ -0,0 +1,11 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metakey.Root", + "@version" : "0.0.0", + "attributeRef" : { + "dateReference" : { + "@ref" : "someKey", + "@ref:external" : "someExternalKey" + } + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-node-ref.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-node-ref.json new file mode 100644 index 00000000..724faa75 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/dangling-node-ref.json @@ -0,0 +1,11 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metakey.Root", + "@version" : "0.0.0", + "nodeRef" : { + "aReference" : { + "@ref" : "someKey", + "@ref:external" : "someExternalKey" + } + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/meta-key.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/meta-key.rosetta new file mode 100644 index 00000000..b2a223f8 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/meta-key.rosetta @@ -0,0 +1,23 @@ +namespace serialization.test.metakey + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +type A: + [metadata key] + fieldA string (1..1) + +type NodeRef: + typeA A (0..1) + aReference A (0..1) + [metadata reference] + +type AttributeRef: + dateField date (0..1) + [metadata id] + dateReference date (0..1) + [metadata reference] + +type Root: + [rootType] + nodeRef NodeRef (0..1) + attributeRef AttributeRef (0..1) diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/node-ref.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/node-ref.json new file mode 100644 index 00000000..7b7fcd63 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metakey/node-ref.json @@ -0,0 +1,16 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metakey.Root", + "@version" : "0.0.0", + "nodeRef" : { + "typeA" : { + "fieldA" : "foo", + "@key" : "someKey", + "@key:external" : "someExternalKey" + }, + "aReference" : { + "@ref" : "someKey", + "@ref:external" : "someExternalKey" + } + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/address.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/address.json new file mode 100644 index 00000000..a0de0b86 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/address.json @@ -0,0 +1,14 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metalocation.Root", + "@version" : "0.0.0", + "typeA" : { + "b" : { + "fieldB" : "foo", + "@key:scoped" : "someLocation" + } + }, + "bAddress" : { + "@ref:scoped" : "someLocation" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/dangling-address.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/dangling-address.json new file mode 100644 index 00000000..c86a090a --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/dangling-address.json @@ -0,0 +1,8 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metalocation.Root", + "@version" : "0.0.0", + "bAddress" : { + "@ref:scoped" : "someLocation" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/meta-location.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/meta-location.rosetta new file mode 100644 index 00000000..323d199e --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metalocation/meta-location.rosetta @@ -0,0 +1,16 @@ +namespace serialization.test.metalocation + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +type A: + b B (1..1) + [metadata location] + +type B: + fieldB string (1..1) + +type Root: + [rootType] + typeA A (0..1) + bAddress B (0..1) + [metadata address "pointsTo"=A->b] diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-list.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-list.json new file mode 100644 index 00000000..0ae28a02 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-list.json @@ -0,0 +1,15 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metascheme.Root", + "@version" : "0.0.0", + "enumTypeList" : [ { + "@data" : "A", + "@scheme" : "https://www.example.com/scheme1" + }, { + "@data" : "B", + "@scheme" : "https://www.example.com/scheme2" + }, { + "@data" : "C", + "@scheme" : "https://www.example.com/scheme3" + } ] +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-single.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-single.json new file mode 100644 index 00000000..83ffb1cb --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/enum-single.json @@ -0,0 +1,9 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metascheme.Root", + "@version" : "0.0.0", + "enumType" : { + "@data" : "A", + "@scheme" : "https://www.example.com/scheme" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/meta-scheme.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/meta-scheme.rosetta new file mode 100644 index 00000000..18728dfe --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/meta-scheme.rosetta @@ -0,0 +1,23 @@ +namespace serialization.test.metascheme + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +enum EnumType: + A + B + C + +type A: + fieldA string (1..1) + [metadata scheme] + +type Root: + [rootType] + enumType EnumType (0..1) + [metadata scheme] + typeA A (0..1) + [metadata scheme] + enumTypeList EnumType (0..*) + [metadata scheme] + typeAList A (0..*) + [metadata scheme] diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-list.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-list.json new file mode 100644 index 00000000..63af4247 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-list.json @@ -0,0 +1,24 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metascheme.Root", + "@version" : "0.0.0", + "typeAList" : [ { + "fieldA" : { + "@data" : "foo", + "@scheme" : "https://www.example.com/scheme1" + }, + "@scheme" : "https://www.example.com/scheme-outer1" + }, { + "fieldA" : { + "@data" : "bar", + "@scheme" : "https://www.example.com/scheme2" + }, + "@scheme" : "https://www.example.com/scheme-outer2" + }, { + "fieldA" : { + "@data" : "baz", + "@scheme" : "https://www.example.com/scheme3" + }, + "@scheme" : "https://www.example.com/scheme-outer3" + } ] +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-single.json b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-single.json new file mode 100644 index 00000000..64c45ea1 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/metascheme/node-single.json @@ -0,0 +1,12 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.metascheme.Root", + "@version" : "0.0.0", + "typeA" : { + "fieldA" : { + "@data" : "foo", + "@scheme" : "https://www.example.com/scheme1" + }, + "@scheme" : "https://www.example.com/scheme2" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-list.json b/serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-list.json new file mode 100644 index 00000000..195be6ff --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-list.json @@ -0,0 +1,10 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.record.Root", + "@version" : "0.0.0", + "recordList" : { + "dateType" : [ "2024-12-10", "2024-11-10", "2024-10-20" ], + "dateTimeType" : [ "2024-12-12T11:18:58", "2024-12-12T11:18:58", "2024-12-12T11:18:58" ], + "zonedDateTimeType" : [ "2024-12-12T11:18:57Z", "2024-12-12T11:18:57Z", "2024-12-12T11:18:57Z" ] + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-single.json b/serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-single.json new file mode 100644 index 00000000..d348ba57 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/record/record-types-single.json @@ -0,0 +1,10 @@ +{ + "@model" : "serialization", + "@type" : "serialization.test.record.Root", + "@version" : "0.0.0", + "recordSingle" : { + "dateType" : "2024-12-10", + "dateTimeType" : "2024-12-12T11:18:58", + "zonedDateTimeType" : "2024-12-12T11:18:57Z" + } +} \ No newline at end of file diff --git a/serialization/src/test/resources/rune-serializer-round-trip-test/record/record.rosetta b/serialization/src/test/resources/rune-serializer-round-trip-test/record/record.rosetta new file mode 100644 index 00000000..f3c437f4 --- /dev/null +++ b/serialization/src/test/resources/rune-serializer-round-trip-test/record/record.rosetta @@ -0,0 +1,18 @@ +namespace serialization.test.record + +annotation rootType: <"Mark a type as a root of the rosetta model"> + +type RecordSingle: + dateType date (1..1) + dateTimeType dateTime (1..1) + zonedDateTimeType zonedDateTime (1..1) + +type RecordList: + dateType date (1..*) + dateTimeType dateTime (1..*) + zonedDateTimeType zonedDateTime (1..*) + +type Root: + [rootType] + recordSingle RecordSingle (0..1) + recordList RecordList (0..1) \ No newline at end of file