All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core_servicestore.tests.mapping.pure Maven / Gradle / Ivy

The newest version!
// Copyright 2021 Goldman Sachs
//
// 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.

###Mapping
Mapping meta::external::store::service::tests::mapping::DummyMappingsToBeDeleted
(
  meta::external::store::service::tests::domain::S_Trade[s_trade_set_dummy]: Pure
  {
    ~src meta::external::store::service::tests::domain::S_Trade

    s_tradeId: $src.s_tradeId
  }

  meta::external::store::service::tests::domain::S_Product[s_prod_set_dummy]: Pure
  {
    ~src meta::external::store::service::tests::domain::S_Product

     s_productId: $src.s_productId
  }
)

Mapping meta::external::store::service::tests::mapping::ServiceStoreMapping
(
   include meta::external::store::service::tests::mapping::DummyMappingsToBeDeleted

//   *meta::external::store::service::tests::domain::S_Trade[s_trade_set]: Service
//   {
//      [meta::external::store::service::tests::store::TradeProductServiceStore] TradeServices.AllTradeService
//      (
//          ParamMapping
//          (
//             serializationFormat : 'CSV'
//          )
//      )
//   }

//   *meta::external::store::service::tests::domain::S_Product[s_prod_set]: Service
//   {

//      [meta::external::store::service::tests::store::TradeProductServiceStore] ProductServices.ProductByIdService
//      (
//          ParamMapping
//          (
//             id : $this.s_tradeId->split(':')->at(0),
//             serializationFormat : 'CSV'
//          )
//      )

//      [meta::external::store::service::tests::store::TradeProductServiceStore] ProductServices.ProductByIdService
//      (
//          ParamMapping
//          (
//             id : $this.s_productId,
//             serializationFormat : 'CSV'
//          )
//      )

//      [meta::external::store::service::tests::store::TradeProductServiceStore] ProductServices.ProductByNameService
//      (
//          ParamMapping
//          (
//             name : 'product 30'
//          )
//      )
//   }

  meta::external::store::service::tests::domain::Trade[trade_set]: Pure
  {
    ~src meta::external::store::service::tests::domain::S_Trade

    tradeId: $src.s_tradeId,
    +prodId: String[1]: $src.s_tradeDetails->split(':')->at(0),
    quantity: $src.s_tradeDetails->split(':')->at(1)->parseInteger(),
    trader[trader_set]: $src
  }

  meta::external::store::service::tests::domain::Trader[trader_set]:Pure
  {
    ~src meta::external::store::service::tests::domain::S_Trade

    kerberos  : $src.s_traderDetails->split(':')->at(0),
    firstName : $src.s_traderDetails->split(':')->at(1),
    lastName  : $src.s_traderDetails->split(':')->at(2)
  }

  meta::external::store::service::tests::domain::Product[prod_set]: Pure
  {
    ~src meta::external::store::service::tests::domain::S_Product

    productId: $src.s_productId,
    productName: $src.s_productName,
    description: $src.s_description,
    synonyms[synonym_set]: $src.s_synonyms
  }

  meta::external::store::service::tests::domain::Synonym[synonym_set]:Pure
  {
    ~src meta::external::store::service::tests::domain::S_Synonym

    name: $src.s_name,
    type: EnumerationMapping SynonymTypeMapping: $src.s_type
  }

  meta::external::store::service::tests::domain::SynonymType: EnumerationMapping SynonymTypeMapping
  {
    CUSIP: ['cusip', 'CUSIP'],
    ISIN: ['isin', 'ISIN']
  }

  meta::external::store::service::tests::domain::S_Trade_S_Product[s_cross_set]: XStore
  {
    s_product[s_trade_set_dummy, s_prod_set_dummy]: $this.s_tradeDetails == $that.s_tradeId
  }

  meta::external::store::service::tests::domain::Trade_Product[cross_set]: XStore
  {
    product[trade_set, prod_set]: $this.prodId == $that.productId
  }
)

###Pure
import meta::pure::mapping::*;
import meta::external::store::service::metamodel::*;
import meta::external::store::service::tests::domain::*;
import meta::external::format::shared::metamodel::*;
import meta::external::store::service::metamodel::mapping::*;
import meta::pure::mapping::xStore::*;
import meta::external::store::model::*;

function meta::external::store::service::tests::mapping::serviceStoreMapping():Mapping[1]
{
   let baseMapping         = meta::external::store::service::tests::mapping::ServiceStoreMapping;

   let serviceStore        = meta::external::store::service::tests::store::TradeProductServiceStore();

   //Generated in compilation phase using schema binding details
   let tradeSetPropMappings= [
      ^ServiceStorePropertyMapping(property = S_Trade.properties->filter(p | $p.name == 's_tradeId')->toOne(), sourceSetImplementationId = 's_trade_set', targetSetImplementationId = ''),
      ^ServiceStorePropertyMapping(property = S_Trade.properties->filter(p | $p.name == 's_traderDetails')->toOne(), sourceSetImplementationId = 's_trade_set', targetSetImplementationId = ''),
      ^ServiceStorePropertyMapping(property = S_Trade.properties->filter(p | $p.name == 's_tradeDetails')->toOne(), sourceSetImplementationId = 's_trade_set', targetSetImplementationId = '')
   ];
   let tradeServiceSetImpl = ^RootServiceInstanceSetImplementation(
                                 id = 's_trade_set',
                                 root = true,
                                 class = meta::external::store::service::tests::domain::S_Trade,
                                 parent = $baseMapping,
                                 propertyMappings = $tradeSetPropMappings);

   let tradeService         = $serviceStore.getServiceStoreElementById('TradeServices')->cast(@ServiceGroup).getServiceStoreElementById('AllTradeService')->cast(@Service);
   let transform3           = {| 'CSV'};
   let parameterBuildInfo   = ^ServiceRequestParameterBuildInfo(serviceParameter = $tradeService.parameters->toOne(),
                                                                transform        = $transform3);

   let requestBodyBuildInfo = ^ServiceRequestBodyBuildInfo(transform = {s_trade:meta::external::store::service::tests::domain::S_Trade[1]| ^meta::external::store::service::tests::domain::S_RequestBody(propA = $s_trade.s_tradeId, propB = 'propB')});
   let tradeServicesMapping = ^ServiceMapping(service = $tradeService,
                                              owner = $tradeServiceSetImpl,
                                              requestBuildInfo = ^ServiceRequestBuildInfo(requestParametersBuildInfo = ^ServiceRequestParametersBuildInfo(parameterBuildInfoList = $parameterBuildInfo),
                                                                                          requestBodyBuildInfo = $requestBodyBuildInfo));
   $tradeServiceSetImpl->mutateAdd('servicesMapping', $tradeServicesMapping);

   let prodServiceSetImpl  = ^RootServiceInstanceSetImplementation(
                                 id = 's_prod_set',
                                 root = true,
                                 class = meta::external::store::service::tests::domain::S_Product,
                                 parent = $baseMapping);

   //Generated in compilation phase using schema binding details
   let embeddedSetImpl = ^EmbeddedServiceStoreSetImplementation(property = S_Product.properties->filter(p | $p.name == 's_synonyms')->toOne(), owner = $prodServiceSetImpl, sourceSetImplementationId = 's_prod_set', targetSetImplementationId = 's_synonym_set', root = false, class = S_Synonym, parent = $baseMapping, id = 's_synonym_set',
                                       propertyMappings = [^ServiceStorePropertyMapping(property = S_Synonym.properties->filter(p | $p.name == 's_name')->toOne(), sourceSetImplementationId = 's_synonyms', targetSetImplementationId = ''),
                                                           ^ServiceStorePropertyMapping(property = S_Synonym.properties->filter(p | $p.name == 's_type')->toOne(), sourceSetImplementationId = 's_synonyms', targetSetImplementationId = '')]);
   let prodSetPropMappings= [
      ^ServiceStorePropertyMapping(property = S_Product.properties->filter(p | $p.name == 's_productId')->toOne(), sourceSetImplementationId = 's_prod_set', targetSetImplementationId = ''),
      ^ServiceStorePropertyMapping(property = S_Product.properties->filter(p | $p.name == 's_productName')->toOne(), sourceSetImplementationId = 's_prod_set', targetSetImplementationId = ''),
      ^ServiceStorePropertyMapping(property = S_Product.properties->filter(p | $p.name == 's_description')->toOne(), sourceSetImplementationId = 's_prod_set', targetSetImplementationId = ''),
      ^ServiceStorePropertyMapping(property = S_Product.properties->filter(p | $p.name == 's_tradeId')->toOne(), sourceSetImplementationId = 's_prod_set', targetSetImplementationId = ''),
      $embeddedSetImpl
   ];

   let productByIdService  = $serviceStore.getServiceStoreElementById('ProductServices')->cast(@ServiceGroup).getServiceStoreElementById('ProductByIdService')->cast(@Service);
   let transform           = {s_prod:meta::external::store::service::tests::domain::S_Product[1] | $s_prod.s_tradeId->split(':')->at(0)};
   let idParamBuildInfos   = [^ServiceRequestParameterBuildInfo(serviceParameter = $productByIdService.parameters->at(0),
                                                                transform        = $transform),
                              ^ServiceRequestParameterBuildInfo(serviceParameter = $productByIdService.parameters->at(1),
                                                                transform        = $transform3)];

   let transform0          = {s_prod:meta::external::store::service::tests::domain::S_Product[1] | $s_prod.s_productId};
   let idParamBuildInfos1  = [^ServiceRequestParameterBuildInfo(serviceParameter = $productByIdService.parameters->at(0),
                                                                transform        = $transform0),
                              ^ServiceRequestParameterBuildInfo(serviceParameter = $productByIdService.parameters->at(1),
                                                                transform        = $transform3)];

   let productByNameService= $serviceStore.getServiceStoreElementById('ProductServices')->cast(@ServiceGroup).getServiceStoreElementById('ProductByNameService')->cast(@Service);
   let transform1           = {s_prod:meta::external::store::service::tests::domain::S_Product[1] | 'Product 30'};
   let nameParamBuildInfo   = ^ServiceRequestParameterBuildInfo(serviceParameter = $productByNameService.parameters->toOne(),
                                                                transform        = $transform1);

   let prodServicesMapping = [^ServiceMapping(service = $productByIdService, owner = $prodServiceSetImpl, requestBuildInfo = ^ServiceRequestBuildInfo(requestParametersBuildInfo = ^ServiceRequestParametersBuildInfo(parameterBuildInfoList = $idParamBuildInfos))),
                              ^ServiceMapping(service = $productByIdService, owner = $prodServiceSetImpl, requestBuildInfo = ^ServiceRequestBuildInfo(requestParametersBuildInfo = ^ServiceRequestParametersBuildInfo(parameterBuildInfoList = $idParamBuildInfos1))),
                              ^ServiceMapping(service = $productByNameService, owner = $prodServiceSetImpl, requestBuildInfo = ^ServiceRequestBuildInfo(requestParametersBuildInfo = ^ServiceRequestParametersBuildInfo(parameterBuildInfoList = $idParamBuildInfos1)))];

   $prodServiceSetImpl->mutateAdd('servicesMapping', $prodServicesMapping);
   $prodServiceSetImpl->mutateAdd('propertyMappings', $prodSetPropMappings);

   let XStoreMapping = $baseMapping.associationMappings->filter(am | $am.id == 's_cross_set')->toOne()->cast(@XStoreAssociationImplementation);
   let propertyMapping = $XStoreMapping.propertyMappings->toOne();
   let updatedPropMapping = ^$propertyMapping(sourceSetImplementationId = 's_trade_set', targetSetImplementationId = 's_prod_set');
   let updatedXStoreMapping = ^$XStoreMapping(propertyMappings = $updatedPropMapping);

   let neededClassMappings = $baseMapping.classMappings->filter(cm | $cm.id->in(['trade_set', 'trader_set', 'prod_set', 'synonym_set']));
   ^$baseMapping(classMappings = [$tradeServiceSetImpl, $prodServiceSetImpl, $embeddedSetImpl]->concatenate($neededClassMappings), associationMappings = $updatedXStoreMapping->concatenate($baseMapping.associationMappings->filter(am | $am.id == 'cross_set')->toOne()));
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy