├── .adr-dir ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── feature-request.yml │ └── question.yml ├── PULL_REQUEST_TEMPLATE.md ├── actions │ ├── await-workflow │ │ └── action.yaml │ ├── deploy-snapshot │ │ └── action.yaml │ ├── pr-is-mergeable │ │ └── action.yaml │ ├── scan-with-blackduck │ │ └── action.yaml │ ├── trigger-workflow │ │ └── action.yaml │ └── workflow-succeeded │ │ └── action.yaml ├── dependabot.yaml └── workflows │ ├── blackduck.yaml │ ├── cache-maven-dependencies.yaml │ ├── continuous-integration.yaml │ ├── dependabot-automerge.yaml │ ├── deploy-snapshot.yaml │ ├── fosstars-report.yml │ ├── main-build.yaml │ ├── perform-release.yml │ ├── prepare-release.yaml │ └── reuse.yaml ├── .gitignore ├── .pipeline ├── config.yml └── scripts │ ├── README.md │ ├── generate-javadoc-sourcepath-properties.py │ ├── generate-release-artifacts.py │ ├── get-maven-excludes.py │ ├── get-release-versions.py │ ├── notify.py │ ├── print-checkstyle.py │ ├── print-coverage.py │ ├── print-coverage.sh │ ├── print-pmd.py │ ├── print-pr-body.py │ ├── print-spotbugs.py │ ├── release_notes_automation.py │ ├── release_notes_template.md │ └── set-release-versions.py ├── CONTRIBUTING.md ├── LICENSE ├── LICENSES ├── Apache-2.0.txt └── CC0-1.0.txt ├── README.md ├── REUSE.toml ├── archetypes ├── pom.xml └── spring-boot3 │ ├── pom.xml │ └── src │ ├── main │ └── resources │ │ ├── META-INF │ │ └── maven │ │ │ └── archetype-metadata.xml │ │ └── archetype-resources │ │ ├── __gitignore__ │ │ ├── application │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── __packageInPathFormat__ │ │ │ │ │ ├── Application.java │ │ │ │ │ ├── AsynchronousConfiguration.java │ │ │ │ │ ├── SecurityConfiguration.java │ │ │ │ │ ├── controllers │ │ │ │ │ └── HelloWorldController.java │ │ │ │ │ └── models │ │ │ │ │ └── HelloWorldResponse.java │ │ │ └── resources │ │ │ │ ├── application.yml │ │ │ │ ├── logback-spring.xml │ │ │ │ └── static │ │ │ │ └── index.html │ │ │ └── test │ │ │ ├── java │ │ │ └── __packageInPathFormat__ │ │ │ │ ├── HelloWorldControllerTest.java │ │ │ │ └── UnitTest.java │ │ │ └── resources │ │ │ └── expected.json │ │ ├── manifest.yml │ │ └── pom.xml │ └── test │ └── resources │ └── projects │ └── basic │ ├── archetype.properties │ └── goal.txt ├── cloudplatform ├── caching │ ├── .gitignore │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── cache │ │ │ ├── CacheKey.java │ │ │ ├── CacheManager.java │ │ │ ├── CacheRuntimeException.java │ │ │ ├── CacheStats.java │ │ │ ├── CacheStatsMXBean.java │ │ │ ├── CacheUtil.java │ │ │ ├── GenericCacheKey.java │ │ │ └── SerializableCacheKey.java │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ └── cache │ │ ├── CacheKeyTest.java │ │ └── SerializableCacheKeyTest.java ├── cloudplatform-connectivity-scp-cf │ └── pom.xml ├── cloudplatform-connectivity │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── connectivity │ │ │ │ ├── AuthenticationType.java │ │ │ │ ├── BtpServiceOptions.java │ │ │ │ ├── ComplexDestinationPropertyFactory.java │ │ │ │ ├── DefaultDestination.java │ │ │ │ ├── DefaultDestinationLoader.java │ │ │ │ ├── DefaultHttpDestination.java │ │ │ │ ├── DefaultHttpDestinationBuilderProxyHandler.java │ │ │ │ ├── DefaultRfcDestination.java │ │ │ │ ├── DefaultServiceBindingDestinationLoaderChain.java │ │ │ │ ├── Destination.java │ │ │ │ ├── DestinationAccessor.java │ │ │ │ ├── DestinationHeaderProvider.java │ │ │ │ ├── DestinationKeyStoreComparator.java │ │ │ │ ├── DestinationLoader.java │ │ │ │ ├── DestinationLoaderChain.java │ │ │ │ ├── DestinationOptions.java │ │ │ │ ├── DestinationOptionsAugmenter.java │ │ │ │ ├── DestinationProperties.java │ │ │ │ ├── DestinationProperty.java │ │ │ │ ├── DestinationPropertyKey.java │ │ │ │ ├── DestinationRequestContext.java │ │ │ │ ├── DestinationType.java │ │ │ │ ├── DestinationUtility.java │ │ │ │ ├── EnvVarDestinationLoader.java │ │ │ │ ├── ErpDestinationHeaderProvider.java │ │ │ │ ├── Header.java │ │ │ │ ├── HttpDestination.java │ │ │ │ ├── HttpDestinationProperties.java │ │ │ │ ├── KeyStoreReader.java │ │ │ │ ├── OnBehalfOf.java │ │ │ │ ├── PrincipalPropagationMode.java │ │ │ │ ├── ProxyConfiguration.java │ │ │ │ ├── ProxyType.java │ │ │ │ ├── RfcDestination.java │ │ │ │ ├── RfcDestinationProperties.java │ │ │ │ ├── SecurityConfigurationStrategy.java │ │ │ │ ├── ServiceBindingDestinationLoader.java │ │ │ │ ├── ServiceBindingDestinationOptions.java │ │ │ │ ├── UriBuilder.java │ │ │ │ ├── UriPathMerger.java │ │ │ │ └── exception │ │ │ │ ├── DestinationAccessException.java │ │ │ │ ├── DestinationNotFoundException.java │ │ │ │ ├── DestinationOAuthTokenException.java │ │ │ │ ├── DestinationPathsNotMergeableException.java │ │ │ │ ├── DestinationTypeNotSupportedException.java │ │ │ │ └── HttpClientInstantiationException.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── services │ │ │ └── com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── connectivity │ │ │ ├── AccessorTest.java │ │ │ ├── AuthenticationTypeTest.java │ │ │ ├── BtpServiceOptionsTest.java │ │ │ ├── CustomDestinationRegistrationTest.java │ │ │ ├── DefaultDestinationBuilderTest.java │ │ │ ├── DefaultDestinationTest.java │ │ │ ├── DefaultHttpDestinationBuilderProxyHandlerTest.java │ │ │ ├── DefaultHttpDestinationBuilderTest.java │ │ │ ├── DefaultHttpDestinationTest.java │ │ │ ├── DefaultRfcDestinationTest.java │ │ │ ├── DefaultServiceBindingDestinationLoaderChainTest.java │ │ │ ├── DestinationAccessorTest.java │ │ │ ├── DestinationHeaderProviderTest.java │ │ │ ├── DestinationKeyStoreComparatorTest.java │ │ │ ├── DestinationLoaderChainTest.java │ │ │ ├── DestinationOptionsTest.java │ │ │ ├── DestinationPropertyKeyTest.java │ │ │ ├── DestinationTypeTest.java │ │ │ ├── DestinationUtilityTest.java │ │ │ ├── EnvVarDestinationLoaderTest.java │ │ │ ├── ErpDestinationHeaderProviderTest.java │ │ │ ├── HttpDestinationPropertiesTest.java │ │ │ ├── ProxyTypeTest.java │ │ │ └── ServiceBindingDestinationOptionsTest.java │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider ├── cloudplatform-core │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ ├── PlatformSslContextProvider.java │ │ │ │ ├── exception │ │ │ │ ├── CloudPlatformException.java │ │ │ │ ├── ObjectLookupFailedException.java │ │ │ │ ├── RequestHeadersAccessException.java │ │ │ │ └── ShouldNotHappenException.java │ │ │ │ ├── requestheader │ │ │ │ ├── DefaultRequestHeaderContainer.java │ │ │ │ ├── DefaultRequestHeaderFacade.java │ │ │ │ ├── RequestHeaderAccessor.java │ │ │ │ ├── RequestHeaderContainer.java │ │ │ │ ├── RequestHeaderFacade.java │ │ │ │ └── RequestHeaderThreadContextListener.java │ │ │ │ ├── servlet │ │ │ │ ├── DefaultLocaleFacade.java │ │ │ │ ├── LocaleAccessor.java │ │ │ │ └── LocaleFacade.java │ │ │ │ ├── thread │ │ │ │ ├── DefaultThreadContext.java │ │ │ │ ├── DefaultThreadContextDecoratorChain.java │ │ │ │ ├── DefaultThreadContextExecutorService.java │ │ │ │ ├── DefaultThreadContextListenerChain.java │ │ │ │ ├── Executable.java │ │ │ │ ├── LazyProperty.java │ │ │ │ ├── Property.java │ │ │ │ ├── ThreadContext.java │ │ │ │ ├── ThreadContextAccessor.java │ │ │ │ ├── ThreadContextDecorator.java │ │ │ │ ├── ThreadContextDecoratorChain.java │ │ │ │ ├── ThreadContextExecutor.java │ │ │ │ ├── ThreadContextExecutorService.java │ │ │ │ ├── ThreadContextExecutors.java │ │ │ │ ├── ThreadContextFacade.java │ │ │ │ ├── ThreadContextListener.java │ │ │ │ ├── ThreadContextListenerChain.java │ │ │ │ ├── ThreadLocalThreadContextFacade.java │ │ │ │ └── exception │ │ │ │ │ ├── ThreadContextAccessException.java │ │ │ │ │ ├── ThreadContextExecutionException.java │ │ │ │ │ ├── ThreadContextPropertyException.java │ │ │ │ │ └── ThreadContextPropertyNotFoundException.java │ │ │ │ └── util │ │ │ │ └── FacadeLocator.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── services │ │ │ ├── com.sap.cloud.sdk.cloudplatform.thread.ThreadContextFacade │ │ │ └── com.sap.cloud.sdk.cloudplatform.thread.ThreadContextListener │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ ├── requestheader │ │ │ ├── DefaultRequestHeaderContainerBuilderTest.java │ │ │ ├── DefaultRequestHeaderContainerTest.java │ │ │ ├── RequestHeaderAccessorTest.java │ │ │ ├── RequestHeaderContainerTest.java │ │ │ └── RequestHeaderThreadContextListenerTest.java │ │ │ ├── servlet │ │ │ └── DefaultLocaleFacadeTest.java │ │ │ └── thread │ │ │ ├── DefaultThreadContextTest.java │ │ │ ├── LazyPropertyTest.java │ │ │ ├── PropertyTest.java │ │ │ ├── ThreadContextExecutorTest.java │ │ │ └── ThreadContextUseCaseTest.java │ │ └── resources │ │ └── servicebinding │ │ ├── K8sBrokenLayout │ │ └── xsuaa │ │ │ └── multiple-json-files │ │ │ ├── first-json │ │ │ └── second-json │ │ ├── K8sDataLayout │ │ ├── k8s-data-specific │ │ │ └── binding │ │ │ │ ├── plan │ │ │ │ └── source │ │ └── xsuaa │ │ │ ├── k8s-data-xsuaa │ │ │ ├── plan │ │ │ └── source │ │ │ └── overloaded-xsuaa │ │ │ ├── plan │ │ │ └── source │ │ ├── K8sMixedLayout │ │ ├── k8s-mixed-specific │ │ │ ├── k8s-mixed-data │ │ │ │ ├── plan │ │ │ │ └── source │ │ │ ├── k8s-mixed-secret-key │ │ │ │ ├── credentials │ │ │ │ └── plan │ │ │ └── k8s-mixed-secret-root-key │ │ │ │ └── secretRootKey │ │ └── xsuaa │ │ │ ├── k8s-mixed-data-xsuaa │ │ │ ├── plan │ │ │ └── source │ │ │ ├── k8s-mixed-secret-key-xsuaa │ │ │ ├── credentials │ │ │ └── plan │ │ │ ├── k8s-mixed-secret-root-key-xsuaa │ │ │ └── secretRootKey │ │ │ └── overloaded-xsuaa │ │ │ ├── plan │ │ │ └── source │ │ ├── K8sSecretKeyLayout │ │ ├── k8s-secret-key-specific │ │ │ └── binding │ │ │ │ ├── credentials │ │ │ │ └── plan │ │ └── xsuaa │ │ │ ├── k8s-secret-key-xsuaa │ │ │ ├── credentials │ │ │ └── plan │ │ │ └── overloaded-xsuaa │ │ │ ├── credentials │ │ │ └── plan │ │ ├── K8sSecretRootKeyLayout │ │ ├── k8s-secret-root-key-specific │ │ │ └── binding │ │ │ │ └── secretRootKey │ │ └── xsuaa │ │ │ ├── k8s-secret-root-key-xsuaa │ │ │ └── secretRootKey │ │ │ └── overloaded-xsuaa │ │ │ └── secretRootKey │ │ └── valid_vcap_services.json ├── connectivity-apache-httpclient4 │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── connectivity │ │ │ │ ├── AbstractHttpClientCache.java │ │ │ │ ├── AbstractHttpClientFactory.java │ │ │ │ ├── AbstractX509SslContextProvider.java │ │ │ │ ├── AsciiUtils.java │ │ │ │ ├── CfPlatformSslContextProvider.java │ │ │ │ ├── CsrfToken.java │ │ │ │ ├── CsrfTokenRetriever.java │ │ │ │ ├── DefaultCsrfTokenRetriever.java │ │ │ │ ├── DefaultHttpClientCache.java │ │ │ │ ├── DefaultHttpClientFactory.java │ │ │ │ ├── HttpClientAccessor.java │ │ │ │ ├── HttpClientCache.java │ │ │ │ ├── HttpClientFactory.java │ │ │ │ ├── HttpClientWrapper.java │ │ │ │ ├── HttpEntityUtil.java │ │ │ │ ├── QueryParamGetter.java │ │ │ │ ├── SSLContextFactory.java │ │ │ │ ├── SSLSocketFactoryUtil.java │ │ │ │ ├── UriQueryMerger.java │ │ │ │ └── exception │ │ │ │ └── CsrfTokenRetrievalException.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── beans.xml │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── connectivity │ │ │ ├── AbstractX509SslContextProviderTest.java │ │ │ ├── ApacheHttpHeaderTest.java │ │ │ ├── AsciiUtilsTest.java │ │ │ ├── CfPlatformSslContextProviderTest.java │ │ │ ├── ClientCertificateAuthenticationLocalTest.java │ │ │ ├── CookieCachingTest.java │ │ │ ├── CsrfTokenRetrieverTest.java │ │ │ ├── DefaultHttpClientCacheTest.java │ │ │ ├── DefaultHttpClientFactoryTest.java │ │ │ ├── DestinationPropertiesToQueryParametersTest.java │ │ │ ├── HttpClientAccessorTest.java │ │ │ ├── HttpClientAndServerTrustTest.java │ │ │ ├── HttpClientCacheTest.java │ │ │ ├── HttpClientWrapperTest.java │ │ │ ├── KeyStoreReaderTest.java │ │ │ ├── SSLContextFactoryTest.java │ │ │ └── UriPathMergerTest.java │ │ └── resources │ │ ├── AbstractX509SslContextProviderTest │ │ ├── invalid_cert │ │ ├── invalid_key │ │ ├── valid_cert.pem │ │ └── valid_key.pem │ │ ├── ClientCertificateAuthenticationLocalTest │ │ ├── README.md │ │ ├── client-cert.conf │ │ ├── client-cert.crt │ │ ├── client-cert.key │ │ ├── client-cert.p12 │ │ └── client-cert.pkcs12 │ │ └── HttpClientAndServerTrustTest │ │ ├── client.cer │ │ ├── client_cacerts.jks │ │ ├── client_keystore.jks │ │ ├── readme.md │ │ ├── server.cer │ │ ├── server_cacerts.jks │ │ └── server_keystore.jks ├── connectivity-apache-httpclient5 │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── connectivity │ │ │ │ ├── AbstractX509SslContextProvider.java │ │ │ │ ├── ApacheHttpClient5Accessor.java │ │ │ │ ├── ApacheHttpClient5Cache.java │ │ │ │ ├── ApacheHttpClient5CacheBuilder.java │ │ │ │ ├── ApacheHttpClient5Factory.java │ │ │ │ ├── ApacheHttpClient5FactoryBuilder.java │ │ │ │ ├── ApacheHttpClient5Wrapper.java │ │ │ │ ├── CfPlatformSslContextProvider.java │ │ │ │ ├── DefaultApacheHttpClient5Cache.java │ │ │ │ ├── DefaultApacheHttpClient5Factory.java │ │ │ │ ├── QueryParamGetter.java │ │ │ │ └── SSLContextFactory.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── beans.xml │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── connectivity │ │ │ ├── ApacheHttpClient5AccessorTest.java │ │ │ ├── ApacheHttpClient5CacheBuilderTest.java │ │ │ ├── ApacheHttpClient5FactoryBuilderTest.java │ │ │ ├── ApacheHttpClient5HeaderTest.java │ │ │ ├── ClientCertificateAuthenticationLocalTest.java │ │ │ ├── DefaultApacheHttpClient5CacheTest.java │ │ │ ├── DefaultApacheHttpClient5FactoryTest.java │ │ │ └── HttpClientWrapperTest.java │ │ └── resources │ │ └── ClientCertificateAuthenticationLocalTest │ │ ├── README.md │ │ ├── client-cert.conf │ │ ├── client-cert.crt │ │ ├── client-cert.key │ │ ├── client-cert.p12 │ │ └── client-cert.pkcs12 ├── connectivity-destination-service │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ ├── connectivity │ │ │ │ ├── AuthTokenHeaderProvider.java │ │ │ │ ├── DestinationKeyStoreExtractor.java │ │ │ │ ├── DestinationRetrieval.java │ │ │ │ ├── DestinationRetrievalStrategy.java │ │ │ │ ├── DestinationRetrievalStrategyResolver.java │ │ │ │ ├── DestinationService.java │ │ │ │ ├── DestinationServiceAdapter.java │ │ │ │ ├── DestinationServiceFactory.java │ │ │ │ ├── DestinationServiceOptionsAugmenter.java │ │ │ │ ├── DestinationServiceRetrievalStrategy.java │ │ │ │ ├── DestinationServiceTokenExchangeStrategy.java │ │ │ │ ├── DestinationServiceV1Response.java │ │ │ │ ├── GetOrComputeAllDestinationsCommand.java │ │ │ │ └── GetOrComputeSingleDestinationCommand.java │ │ │ │ └── exception │ │ │ │ ├── MultipleServiceBindingsException.java │ │ │ │ └── NoServiceBindingException.java │ │ ├── resources │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── services │ │ │ │ ├── com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider │ │ │ │ └── com.sap.cloud.sdk.cloudplatform.connectivity.DestinationLoader │ │ └── webapp │ │ │ └── WEB-INF │ │ │ └── web.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ ├── connectivity │ │ ├── AuthTokenHeaderProviderTest.java │ │ ├── ConnectivityServiceTest.java │ │ ├── DestinationKeyStoreExtractorTest.java │ │ ├── DestinationRetrievalStrategyResolverTest.java │ │ ├── DestinationServiceAdapterTest.java │ │ ├── DestinationServiceAuthenticationTest.java │ │ ├── DestinationServiceCacheTest.java │ │ ├── DestinationServiceFactoryTest.java │ │ ├── DestinationServicePrincipalPropagationTest.java │ │ ├── DestinationServiceTest.java │ │ ├── DestinationServiceV1ResponseTest.java │ │ ├── ForwardAuthTokenTest.java │ │ ├── GetOrComputeAllDestinationsCommandTest.java │ │ ├── GetOrComputeDestinationCommandTest.java │ │ ├── GetOrComputeSingleDestinationCommandWithoutAllDestinationsTest.java │ │ ├── XsuaaSecurityTest.java │ │ └── XsuaaTokenMocker.java │ │ └── thread │ │ └── ThreadContextTest.java ├── connectivity-dwc │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ ├── DwcHeaderUtils.java │ │ │ │ ├── connectivity │ │ │ │ ├── DwcConfiguration.java │ │ │ │ ├── DwcHeaderProvider.java │ │ │ │ ├── MegacliteConnectivityProxyInformationResolver.java │ │ │ │ ├── MegacliteDestinationFactory.java │ │ │ │ ├── MegacliteServiceBinding.java │ │ │ │ ├── MegacliteServiceBindingAccessor.java │ │ │ │ └── MegacliteServiceBindingDestinationLoader.java │ │ │ │ ├── exception │ │ │ │ └── DwcHeaderNotFoundException.java │ │ │ │ ├── security │ │ │ │ ├── DwcAuthTokenFacade.java │ │ │ │ └── DwcPrincipalFacade.java │ │ │ │ └── tenant │ │ │ │ └── DwcTenantFacade.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ ├── com.sap.cloud.environment.servicebinding.api.ServiceBindingAccessor │ │ │ ├── com.sap.cloud.sdk.cloudplatform.connectivity.ServiceBindingDestinationLoader │ │ │ ├── com.sap.cloud.sdk.cloudplatform.security.AuthTokenFacade │ │ │ ├── com.sap.cloud.sdk.cloudplatform.security.principal.PrincipalFacade │ │ │ └── com.sap.cloud.sdk.cloudplatform.tenant.TenantFacade │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ ├── DwcHeaderUtilsTest.java │ │ ├── connectivity │ │ ├── DwcConfigurationTest.java │ │ ├── DwcHeaderProviderTest.java │ │ ├── MegacliteConnectivityProxyInformationResolverTest.java │ │ ├── MegacliteDestinationFactoryTest.java │ │ ├── MegacliteServiceBindingAccessorTest.java │ │ ├── MegacliteServiceBindingDestinationLoaderTest.java │ │ └── MegacliteServiceBindingTest.java │ │ ├── security │ │ ├── DwcAuthTokenFacadeTest.java │ │ └── DwcPrincipalFacadeTest.java │ │ └── tenant │ │ └── DwcTenantFacadeTest.java ├── connectivity-oauth │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── connectivity │ │ │ │ ├── BtpServicePropertySuppliers.java │ │ │ │ ├── DefaultOAuth2PropertySupplier.java │ │ │ │ ├── IdentityAuthenticationServiceBindingDestinationLoader.java │ │ │ │ ├── MultiUrlPropertySupplier.java │ │ │ │ ├── OAuth2DestinationBuilder.java │ │ │ │ ├── OAuth2HeaderProvider.java │ │ │ │ ├── OAuth2Options.java │ │ │ │ ├── OAuth2PropertySupplier.java │ │ │ │ ├── OAuth2PropertySupplierResolver.java │ │ │ │ ├── OAuth2Service.java │ │ │ │ ├── OAuth2ServiceBindingDestinationLoader.java │ │ │ │ └── SecurityLibWorkarounds.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── services │ │ │ └── com.sap.cloud.sdk.cloudplatform.connectivity.ServiceBindingDestinationLoader │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── connectivity │ │ │ ├── BtpServicePropertySuppliersTest.java │ │ │ ├── DefaultOAuth2PropertySupplierTest.java │ │ │ ├── IdentityAuthenticationServiceBindingDestinationLoaderTest.java │ │ │ ├── MultiUrlPropertySupplierTest.java │ │ │ ├── OAuth2DestinationBuilderTest.java │ │ │ ├── OAuth2IntegrationTest.java │ │ │ ├── OAuth2OnPremiseIntegrationTest.java │ │ │ ├── OAuth2ServiceBindingDestinationLoaderTest.java │ │ │ ├── OAuth2ServiceBuilderTest.java │ │ │ ├── OAuth2ServiceTest.java │ │ │ ├── SecurityLibWorkaroundsTest.java │ │ │ └── ServiceBindingTestUtility.java │ │ └── resources │ │ └── IdentityAuthenticationPropertySupplier │ │ ├── README.md │ │ ├── certificate.crt │ │ ├── csr.pem │ │ └── privatekey.pem ├── connectivity-ztis │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── connectivity │ │ │ └── ZeroTrustIdentityService.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── connectivity │ │ │ └── ZeroTrustIdentityServiceTest.java │ │ └── resources │ │ └── ZeroTrustIdentityServiceTest │ │ ├── cert.pem │ │ └── key.pem ├── dwc-cf │ └── pom.xml ├── pom.xml ├── resilience-api │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── resilience │ │ │ │ ├── CacheExpirationStrategy.java │ │ │ │ ├── CacheFilter.java │ │ │ │ ├── NoResilienceDecorationStrategy.java │ │ │ │ ├── ResilienceConfiguration.java │ │ │ │ ├── ResilienceDecorationStrategy.java │ │ │ │ ├── ResilienceDecorator.java │ │ │ │ ├── ResilienceIsolationKey.java │ │ │ │ ├── ResilienceIsolationMode.java │ │ │ │ └── ResilienceRuntimeException.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── beans.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ └── resilience │ │ ├── ResilienceConfigurationTest.java │ │ ├── ResilienceDecorationStrategyTest.java │ │ ├── ResilienceDecoratorQueuedOperationsTest.java │ │ └── ResilienceDecoratorTest.java ├── resilience │ └── pom.xml ├── resilience4j │ ├── .gitignore │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── resilience4j │ │ │ │ ├── BulkheadProvider.java │ │ │ │ ├── CircuitBreakerProvider.java │ │ │ │ ├── DefaultBulkheadProvider.java │ │ │ │ ├── DefaultCachingDecorator.java │ │ │ │ ├── DefaultCircuitBreakerProvider.java │ │ │ │ ├── DefaultRateLimiterProvider.java │ │ │ │ ├── DefaultRetryProvider.java │ │ │ │ ├── DefaultTimeLimiterProvider.java │ │ │ │ ├── GenericDecorator.java │ │ │ │ ├── RateLimiterProvider.java │ │ │ │ ├── Resilience4jDecorationStrategy.java │ │ │ │ ├── RetryProvider.java │ │ │ │ └── TimeLimiterProvider.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorationStrategy │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ └── resilience4j │ │ ├── CacheFilterTest.java │ │ ├── CircuitBreakerTest.java │ │ ├── ClassLoaderUtil.java │ │ ├── CustomResilienceStrategyTest.java │ │ ├── DefaultCachingDecoratorTest.java │ │ ├── NoopCacheProvider.java │ │ ├── RateLimiterTest.java │ │ ├── Resilience4jCachingCustomProviderTest.java │ │ ├── Resilience4jCachingDefaultProviderTest.java │ │ ├── Resilience4jDecorationAsyncTest.java │ │ ├── Resilience4jDecorationStrategyBuilderTest.java │ │ ├── Resilience4jDecorationStrategyClearCacheTest.java │ │ ├── Resilience4jDecorationStrategyTest.java │ │ ├── Resilience4jThreadContextTest.java │ │ ├── RetryTest.java │ │ ├── ThreadLocalTest.java │ │ └── TimeLimiterTest.java ├── scp-cf │ └── pom.xml ├── security │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── cloudplatform │ │ │ │ └── security │ │ │ │ ├── AuthToken.java │ │ │ │ ├── AuthTokenAccessor.java │ │ │ │ ├── AuthTokenDecoder.java │ │ │ │ ├── AuthTokenDecoderDefault.java │ │ │ │ ├── AuthTokenFacade.java │ │ │ │ ├── AuthTokenThreadContextListener.java │ │ │ │ ├── BasicAuthHeaderEncoder.java │ │ │ │ ├── BasicAuthenticationAccessor.java │ │ │ │ ├── BasicAuthenticationFacade.java │ │ │ │ ├── BasicAuthenticationThreadContextListener.java │ │ │ │ ├── BasicCredentials.java │ │ │ │ ├── BearerCredentials.java │ │ │ │ ├── ClientCertificate.java │ │ │ │ ├── ClientCredentials.java │ │ │ │ ├── Credentials.java │ │ │ │ ├── DefaultAuthTokenFacade.java │ │ │ │ ├── DefaultBasicAuthenticationFacade.java │ │ │ │ ├── ExecutableAuthTokenFacade.java │ │ │ │ ├── NoCredentials.java │ │ │ │ ├── SecurityContextThreadContextDecorator.java │ │ │ │ ├── exception │ │ │ │ ├── AuthTokenAccessException.java │ │ │ │ ├── BasicAuthenticationAccessException.java │ │ │ │ ├── TokenRequestDeniedException.java │ │ │ │ └── TokenRequestFailedException.java │ │ │ │ └── principal │ │ │ │ ├── BasicCredentialsPrincipalExtractor.java │ │ │ │ ├── DefaultPrincipal.java │ │ │ │ ├── DefaultPrincipalFacade.java │ │ │ │ ├── OAuth2AuthTokenPrincipalExtractor.java │ │ │ │ ├── OidcAuthTokenPrincipalExtractor.java │ │ │ │ ├── Principal.java │ │ │ │ ├── PrincipalAccessor.java │ │ │ │ ├── PrincipalExtractor.java │ │ │ │ ├── PrincipalFacade.java │ │ │ │ ├── PrincipalThreadContextListener.java │ │ │ │ └── exception │ │ │ │ └── PrincipalAccessException.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── services │ │ │ ├── com.sap.cloud.sdk.cloudplatform.thread.ThreadContextDecorator │ │ │ └── com.sap.cloud.sdk.cloudplatform.thread.ThreadContextListener │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ └── security │ │ ├── AuthTokenAccessorTest.java │ │ ├── AuthTokenDecoderIasTest.java │ │ ├── AuthTokenDecoderTest.java │ │ ├── BasicAuthHeaderEncoderTest.java │ │ ├── BasicAuthenticationAccessorTest.java │ │ ├── BasicAuthenticationThreadContextListenerTest.java │ │ ├── BasicCredentialsTest.java │ │ ├── BearerCredentialsTest.java │ │ ├── DefaultAuthTokenFacadeTest.java │ │ ├── DefaultBasicAuthenticationFacadeTest.java │ │ ├── SecurityContextDecoratorTest.java │ │ └── principal │ │ ├── DefaultPrincipalFacadeTest.java │ │ ├── OAuth2AuthTokenPrincipalExtractorTest.java │ │ ├── OidcAuthTokenPrincipalExtractorTest.java │ │ └── PrincipalAccessorTest.java ├── servlet-jakarta │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── servletjakarta │ │ │ └── RequestAccessorFilter.java │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── cloudplatform │ │ └── servletjakarta │ │ └── RequestAccessorFilterTest.java └── tenant │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── cloudplatform │ │ │ └── tenant │ │ │ ├── DefaultTenant.java │ │ │ ├── DefaultTenantFacade.java │ │ │ ├── ServiceBindingTenantExtractor.java │ │ │ ├── Tenant.java │ │ │ ├── TenantAccessor.java │ │ │ ├── TenantFacade.java │ │ │ ├── TenantThreadContextListener.java │ │ │ ├── TenantWithSubdomain.java │ │ │ └── exception │ │ │ └── TenantAccessException.java │ └── resources │ │ └── META-INF │ │ ├── beans.xml │ │ └── services │ │ └── com.sap.cloud.sdk.cloudplatform.thread.ThreadContextListener │ └── test │ └── java │ └── com │ └── sap │ └── cloud │ └── sdk │ └── cloudplatform │ ├── security │ └── AuthTokenTenantResolvingTest.java │ ├── tenant │ ├── DefaultTenantFacadeIasTest.java │ ├── DefaultTenantFacadeTest.java │ ├── DefaultTenantFacadeXsuaaTest.java │ ├── DefaultTenantTest.java │ ├── ServiceBindingTenantExtractorTest.java │ └── TenantAccessorTest.java │ └── thread │ └── ThreadContextDecoratorTest.java ├── codestyle ├── checkstyle.xml ├── findbugs.xml ├── intellij_inspections.xml ├── intellij_java_style.xml ├── java_formatter.xml ├── pmd.xml ├── sdk_specific_pmd_rules.xml └── spotbugs-exclusions.xml ├── datamodel ├── datamodel-metadata-generator │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── datamodel │ │ │ └── metadata │ │ │ └── generator │ │ │ ├── ApiUsageMetadata.java │ │ │ ├── DatamodelMetadataGenerator.java │ │ │ ├── DatamodelMetadataInput.java │ │ │ ├── DatamodelMetadataOutput.java │ │ │ ├── DefaultMavenRepositoryAccessor.java │ │ │ ├── InputProperties.java │ │ │ ├── JavaClassExplorer.java │ │ │ ├── JavaClassFromClasspath.java │ │ │ ├── JavaClassFromParser.java │ │ │ ├── JavaServiceMethodResolver.java │ │ │ ├── MavenCoordinate.java │ │ │ ├── MavenRepositoryAccessor.java │ │ │ ├── MetadataApiSpecificUsage.java │ │ │ ├── MetadataGenerationException.java │ │ │ ├── ODataApiUsageMetadata.java │ │ │ ├── ODataDatamodelMetadataProvider.java │ │ │ ├── ProtocolAgnosticMetadataProvider.java │ │ │ ├── ProtocolSpecificMetadata.java │ │ │ ├── ProtocolSpecificMetadataProvider.java │ │ │ ├── RestApiUsageMetadata.java │ │ │ ├── RestDatamodelMetadataProvider.java │ │ │ ├── ServiceStatus.java │ │ │ └── ServiceType.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── datamodel │ │ │ └── metadata │ │ │ └── generator │ │ │ ├── DatamodelMetadataGeneratorIntegrationTest.java │ │ │ ├── DefaultMavenRepositoryAccessorTest.java │ │ │ └── JavaServiceMethodResolverTest.java │ │ └── resources │ │ ├── DatamodelMetadataGeneratorIntegrationTest │ │ ├── ServiceWithoutApiUsageMetadata │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── ServiceWithoutApiUsageMetadata_CLIENT_JAVA.json │ │ ├── failing-client-generation │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── failing-client-generation_CLIENT_JAVA.json │ │ ├── odata-v2-cloud │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── odata-v2-cloud_CLIENT_JAVA.json │ │ ├── odata-v4-cloud │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── odata-v4-cloud_CLIENT_JAVA.json │ │ ├── odata-v4-no-pregenerated-lib │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── odata-v4-no-pregenerated-lib_CLIENT_JAVA.json │ │ ├── odata-v4-on-premise │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── odata-v4-on-premise_CLIENT_JAVA.json │ │ ├── rest-returning-list │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── rest-returning-list_CLIENT_JAVA.json │ │ ├── rest-returning-single-object │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── rest-returning-single-object_CLIENT_JAVA.json │ │ ├── rest-without-module-reference │ │ │ ├── input │ │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── rest-without-module-reference_CLIENT_JAVA.json │ │ └── versions-given-as-input-properties │ │ │ ├── input │ │ │ └── metadata-generator-properties.json │ │ │ └── output │ │ │ └── metadata │ │ │ └── versions-given-as-input-properties_CLIENT_JAVA.json │ │ ├── DefaultMavenRepositoryAccessorTest │ │ ├── correct-maven-metadata.xml │ │ ├── truncated-maven-metadata.xml │ │ └── wrong-schema-maven-metadata.xml │ │ └── JavaServiceMethodResolverTest │ │ └── com │ │ └── test │ │ ├── Animal.java │ │ ├── Person.java │ │ ├── RequestBuilderFeed.java │ │ ├── RequestBuilderGreet.java │ │ ├── RequestBuilderPet.java │ │ ├── ResultGreet.java │ │ ├── ServiceEntity.java │ │ └── ServicePerson.java ├── fluent-result │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ ├── result │ │ │ ├── AnnotatedFieldGsonExclusionStrategy.java │ │ │ ├── BigDecimalExtractor.java │ │ │ ├── BigIntegerExtractor.java │ │ │ ├── BooleanExtractor.java │ │ │ ├── ByteExtractor.java │ │ │ ├── CharacterExtractor.java │ │ │ ├── CollectedResultCollection.java │ │ │ ├── CollectionExtractor.java │ │ │ ├── DefaultCollectedResultCollection.java │ │ │ ├── DefaultResultCollection.java │ │ │ ├── DoubleExtractor.java │ │ │ ├── ElementName.java │ │ │ ├── ElementNameGsonFieldNamingStrategy.java │ │ │ ├── FloatExtractor.java │ │ │ ├── GenericCollectionExtractor.java │ │ │ ├── GenericObjectExtractor.java │ │ │ ├── GsonResultElementFactory.java │ │ │ ├── GsonResultObject.java │ │ │ ├── GsonResultPrimitive.java │ │ │ ├── IntegerExtractor.java │ │ │ ├── LongExtractor.java │ │ │ ├── ObjectExtractor.java │ │ │ ├── PrimitiveBasedObjectExtractor.java │ │ │ ├── ResultCollection.java │ │ │ ├── ResultElement.java │ │ │ ├── ResultElementFactory.java │ │ │ ├── ResultObject.java │ │ │ ├── ResultPrimitive.java │ │ │ ├── ShortExtractor.java │ │ │ └── StringExtractor.java │ │ │ └── typeconverter │ │ │ ├── AbstractTypeConverter.java │ │ │ ├── ConvertedObject.java │ │ │ ├── TypeConverter.java │ │ │ ├── TypeConverterGsonDeserializer.java │ │ │ └── exception │ │ │ └── ObjectNotConvertibleException.java │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── typeconverter │ │ ├── ConvertedObjectTest.java │ │ └── PrimitiveBasedObjectTest.java ├── odata-client │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── datamodel │ │ │ └── odata │ │ │ └── client │ │ │ ├── JsonLookup.java │ │ │ ├── JsonPath.java │ │ │ ├── ODataLiteralSerializer.java │ │ │ ├── ODataProtocol.java │ │ │ ├── ODataResponseDescriptor.java │ │ │ ├── ODataResponseDeserializer.java │ │ │ ├── adapter │ │ │ ├── BigDecimalAdapter.java │ │ │ ├── BinaryTypeAdapter.java │ │ │ ├── DurationTypeAdapter.java │ │ │ ├── LocalDateTypeAdapter.java │ │ │ ├── LocalTimeTypeAdapter.java │ │ │ ├── OffsetDateTimeTypeAdapter.java │ │ │ └── UuidTypeAdapter.java │ │ │ ├── exception │ │ │ ├── ODataConnectionException.java │ │ │ ├── ODataDeserializationException.java │ │ │ ├── ODataException.java │ │ │ ├── ODataRequestException.java │ │ │ ├── ODataResponseException.java │ │ │ ├── ODataSerializationException.java │ │ │ ├── ODataServiceError.java │ │ │ ├── ODataServiceErrorDetails.java │ │ │ └── ODataServiceErrorException.java │ │ │ ├── expression │ │ │ ├── Expressions.java │ │ │ ├── FieldReference.java │ │ │ ├── FieldUntyped.java │ │ │ ├── FilterExpression.java │ │ │ ├── FilterExpressionArithmetic.java │ │ │ ├── FilterExpressionCollection.java │ │ │ ├── FilterExpressionLogical.java │ │ │ ├── FilterExpressionString.java │ │ │ ├── FilterExpressionTemporal.java │ │ │ ├── FilterableBoolean.java │ │ │ ├── FilterableCollection.java │ │ │ ├── FilterableComparisonAbsolute.java │ │ │ ├── FilterableComparisonRelative.java │ │ │ ├── FilterableDate.java │ │ │ ├── FilterableDateTimeOffset.java │ │ │ ├── FilterableDuration.java │ │ │ ├── FilterableNumeric.java │ │ │ ├── FilterableString.java │ │ │ ├── FilterableTimeOfDay.java │ │ │ ├── ODataResourcePath.java │ │ │ ├── OrderExpression.java │ │ │ ├── ValueBinary.java │ │ │ ├── ValueBoolean.java │ │ │ ├── ValueCollection.java │ │ │ ├── ValueDate.java │ │ │ ├── ValueDateTime.java │ │ │ ├── ValueDateTimeOffset.java │ │ │ ├── ValueDuration.java │ │ │ ├── ValueEnum.java │ │ │ ├── ValueGuid.java │ │ │ ├── ValueNumeric.java │ │ │ ├── ValueString.java │ │ │ └── ValueTimeOfDay.java │ │ │ ├── query │ │ │ ├── Order.java │ │ │ ├── QuerySerializable.java │ │ │ ├── QuerySerializer.java │ │ │ └── StructuredQuery.java │ │ │ └── request │ │ │ ├── AbstractODataParameters.java │ │ │ ├── ETagSubmissionStrategy.java │ │ │ ├── HttpEntityReader.java │ │ │ ├── MultipartHttpResponse.java │ │ │ ├── MultipartParser.java │ │ │ ├── MultipartParserReader.java │ │ │ ├── MultipartSpliterator.java │ │ │ ├── NumberDeserializationStrategy.java │ │ │ ├── ODataEntityKey.java │ │ │ ├── ODataFormat.java │ │ │ ├── ODataFunctionParameters.java │ │ │ ├── ODataGsonBuilder.java │ │ │ ├── ODataHealthyResponseValidator.java │ │ │ ├── ODataHttpRequest.java │ │ │ ├── ODataRequestAction.java │ │ │ ├── ODataRequestBatch.java │ │ │ ├── ODataRequestCount.java │ │ │ ├── ODataRequestCreate.java │ │ │ ├── ODataRequestDelete.java │ │ │ ├── ODataRequestExecutable.java │ │ │ ├── ODataRequestFunction.java │ │ │ ├── ODataRequestGeneric.java │ │ │ ├── ODataRequestListener.java │ │ │ ├── ODataRequestRead.java │ │ │ ├── ODataRequestReadByKey.java │ │ │ ├── ODataRequestResult.java │ │ │ ├── ODataRequestResultDeserializable.java │ │ │ ├── ODataRequestResultGeneric.java │ │ │ ├── ODataRequestResultMultipart.java │ │ │ ├── ODataRequestResultMultipartGeneric.java │ │ │ ├── ODataRequestResultPagination.java │ │ │ ├── ODataRequestResultPaginationIterator.java │ │ │ ├── ODataRequestUpdate.java │ │ │ ├── ODataUriFactory.java │ │ │ ├── UpdateStrategy.java │ │ │ └── UriEncodingStrategy.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── datamodel │ │ │ └── odata │ │ │ └── client │ │ │ ├── ODataResponseParsingTest.java │ │ │ ├── exception │ │ │ └── ODataResponseErrorParsingTest.java │ │ │ ├── expression │ │ │ ├── ExpressionsFilterTest.java │ │ │ ├── ExpressionsTest.java │ │ │ ├── FilterExpressionsWithNullTest.java │ │ │ └── ODataEntityKeyTest.java │ │ │ └── request │ │ │ ├── BoundFunctionsTest.java │ │ │ ├── HttpEntityReaderTest.java │ │ │ ├── MultipartParserTest.java │ │ │ ├── ODataClientQueryBatchUnitTest.java │ │ │ ├── ODataDeltaLinkTest.java │ │ │ ├── ODataFetchAsStreamTest.java │ │ │ ├── ODataHealthyResponseValidatorTest.java │ │ │ ├── ODataHttpRequestTest.java │ │ │ ├── ODataInlineCountTest.java │ │ │ ├── ODataNextLinkTest.java │ │ │ ├── ODataPaginationIntegrationTest.java │ │ │ ├── ODataPaginationUnitTest.java │ │ │ ├── ODataQueryPropertyTest.java │ │ │ ├── ODataQueryReadByKeyTest.java │ │ │ ├── ODataQueryTest.java │ │ │ ├── ODataReferenceServiceTest.java │ │ │ ├── ODataRequestActionTest.java │ │ │ ├── ODataRequestCountTest.java │ │ │ ├── ODataRequestFunctionTest.java │ │ │ ├── ODataRequestReadTest.java │ │ │ ├── ODataRequestResultGenericTest.java │ │ │ ├── ODataRequestResultTest.java │ │ │ ├── ODataResponseComplexDataParsingTest.java │ │ │ ├── ODataResponseExceptionTest.java │ │ │ ├── ODataResponseParsingIntegrationTest.java │ │ │ ├── ODataResponsePrimitiveDataParsingTest.java │ │ │ └── ODataUriFactoryTest.java │ │ └── resources │ │ ├── MultipartParserTest │ │ ├── BatchReadResponseBody.txt │ │ └── BatchWriteResponseBody.txt │ │ ├── ODataClientQueryBatchUnitTest │ │ ├── BatchAllRequestBody.txt │ │ ├── BatchEmptyChangesetRequestBody.txt │ │ ├── BatchEmptyRequestBody.txt │ │ └── BatchReadRequestBody.txt │ │ ├── ODataFetchAsStreamTest │ │ └── files │ │ │ ├── POT01.pdf │ │ │ ├── SAP_logo.png │ │ │ └── test.txt │ │ ├── ODataInlineCountTest │ │ ├── odata-v2-response-with-inline-count.json │ │ ├── odata-v2-response-without-inline-count.json │ │ ├── odata-v4-response-with-inline-count.json │ │ └── odata-v4-response-without-inline-count.json │ │ └── ODataResponseParsingTest │ │ ├── Ticket_Collection_V2.json │ │ ├── Ticket_Collection_V4.json │ │ ├── Ticket_Function_V2.json │ │ ├── Ticket_Single_V2.json │ │ └── Ticket_Single_V4.json ├── odata-generator-utility │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── datamodel │ │ │ └── odata │ │ │ └── utility │ │ │ ├── AbstractNamingStrategy.java │ │ │ ├── EdmxValidator.java │ │ │ ├── LegacyClassScanner.java │ │ │ ├── NameSource.java │ │ │ ├── NamingStrategy.java │ │ │ ├── NamingUtils.java │ │ │ ├── S4HanaNamingStrategy.java │ │ │ ├── ServiceNameMappings.java │ │ │ └── SimpleNamingStrategy.java │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── datamodel │ │ └── odata │ │ └── utility │ │ ├── EdmxValidatorTest.java │ │ ├── LegacyClass.java │ │ ├── LegacyClassScannerTest.java │ │ ├── NamingUtilsTest.java │ │ ├── S4HanaNamingStrategyTest.java │ │ └── SimpleNamingStrategyTest.java ├── odata-v4 │ ├── odata-v4-api-sample │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── odatav4 │ │ │ │ │ └── sample │ │ │ │ │ ├── namespaces │ │ │ │ │ └── sdkgrocerystore │ │ │ │ │ │ ├── Address.java │ │ │ │ │ │ ├── Customer.java │ │ │ │ │ │ ├── DateRange.java │ │ │ │ │ │ ├── FloorPlan.java │ │ │ │ │ │ ├── OpeningHours.java │ │ │ │ │ │ ├── Product.java │ │ │ │ │ │ ├── ProductCategory.java │ │ │ │ │ │ ├── ProductCount.java │ │ │ │ │ │ ├── PurchaseHistoryItem.java │ │ │ │ │ │ ├── Receipt.java │ │ │ │ │ │ ├── Shelf.java │ │ │ │ │ │ └── Vendor.java │ │ │ │ │ └── services │ │ │ │ │ ├── DefaultSdkGroceryStoreService.java │ │ │ │ │ └── SdkGroceryStoreService.java │ │ │ └── resources │ │ │ │ ├── SDK_Grocery_Store.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odatav4 │ │ │ │ └── sample │ │ │ │ ├── MultipleEntitySetsTest.java │ │ │ │ ├── SdkGroceryStoreServiceTest.java │ │ │ │ └── UpdateEntityTest.java │ │ │ └── resources │ │ │ └── SdkGroceryStoreServiceTest │ │ │ └── mappings │ │ │ └── SdkGroceryStoreServiceTest.json │ ├── odata-v4-core │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odatav4 │ │ │ │ ├── adapter │ │ │ │ ├── CustomBigDecimalTypeAdapter.java │ │ │ │ ├── GsonCustomFieldAdapter.java │ │ │ │ ├── GsonODataConverterAdapter.java │ │ │ │ ├── GsonVdmAdapterFactory.java │ │ │ │ ├── GsonVdmEntityAdapter.java │ │ │ │ ├── GsonVdmEntityListAdapter.java │ │ │ │ ├── GsonVdmEnumAdapter.java │ │ │ │ ├── JacksonVdmEnumDeserializer.java │ │ │ │ ├── JacksonVdmEnumSerializer.java │ │ │ │ ├── JacksonVdmObjectDeserializer.java │ │ │ │ ├── JacksonVdmObjectSerializer.java │ │ │ │ └── ODataGenericConverter.java │ │ │ │ ├── core │ │ │ │ ├── AbstractBoundOperation.java │ │ │ │ ├── AbstractEntityBasedRequestBuilder.java │ │ │ │ ├── AbstractRequestBuilder.java │ │ │ │ ├── AbstractStructuredPropertyQuery.java │ │ │ │ ├── ActionRequestBuilder.java │ │ │ │ ├── ActionResponseCollection.java │ │ │ │ ├── ActionResponseSingle.java │ │ │ │ ├── BatchRequestBuilder.java │ │ │ │ ├── BatchResponse.java │ │ │ │ ├── BoundAction.java │ │ │ │ ├── BoundFunction.java │ │ │ │ ├── BoundOperation.java │ │ │ │ ├── CollectionValueActionRequestBuilder.java │ │ │ │ ├── CollectionValueFunctionRequestBuilder.java │ │ │ │ ├── ComplexProperty.java │ │ │ │ ├── ComplexPropertyQuery.java │ │ │ │ ├── CountRequestBuilder.java │ │ │ │ ├── CreateRequestBuilder.java │ │ │ │ ├── DecimalDescriptor.java │ │ │ │ ├── DeleteRequestBuilder.java │ │ │ │ ├── FunctionRequestBuilder.java │ │ │ │ ├── GetAllRequestBuilder.java │ │ │ │ ├── GetByKeyRequestBuilder.java │ │ │ │ ├── ModificationRequestBuilder.java │ │ │ │ ├── ModificationResponse.java │ │ │ │ ├── NavigableEntityCollection.java │ │ │ │ ├── NavigableEntitySingle.java │ │ │ │ ├── NavigationProperty.java │ │ │ │ ├── NavigationPropertyCollection.java │ │ │ │ ├── NavigationPropertyCollectionQuery.java │ │ │ │ ├── NavigationPropertySingleQuery.java │ │ │ │ ├── OperationsOnEntityCollections.java │ │ │ │ ├── Property.java │ │ │ │ ├── ProtocolQueryFilter.java │ │ │ │ ├── ProtocolQueryRead.java │ │ │ │ ├── ProtocolQueryReadCollection.java │ │ │ │ ├── ReadRequestBuilder.java │ │ │ │ ├── RequestBuilder.java │ │ │ │ ├── RequestBuilderExecutable.java │ │ │ │ ├── ResourcePathUtil.java │ │ │ │ ├── SearchExpression.java │ │ │ │ ├── ServiceWithNavigableEntities.java │ │ │ │ ├── ServiceWithNavigableEntitiesImpl.java │ │ │ │ ├── SimpleProperty.java │ │ │ │ ├── SingleValueActionRequestBuilder.java │ │ │ │ ├── SingleValueFunctionRequestBuilder.java │ │ │ │ ├── StructuredProperty.java │ │ │ │ ├── UpdateRequestBuilder.java │ │ │ │ ├── UpdateRequestHelperPatch.java │ │ │ │ ├── UpdateRequestHelperPut.java │ │ │ │ ├── VdmComplex.java │ │ │ │ ├── VdmEntity.java │ │ │ │ ├── VdmEntitySet.java │ │ │ │ ├── VdmEntityUtil.java │ │ │ │ ├── VdmEnum.java │ │ │ │ └── VdmObject.java │ │ │ │ └── expression │ │ │ │ ├── EntityReference.java │ │ │ │ ├── FieldOrdering.java │ │ │ │ ├── FilterableBoolean.java │ │ │ │ ├── FilterableCollection.java │ │ │ │ ├── FilterableComplex.java │ │ │ │ ├── FilterableDate.java │ │ │ │ ├── FilterableDateTime.java │ │ │ │ ├── FilterableDuration.java │ │ │ │ ├── FilterableEnum.java │ │ │ │ ├── FilterableGuid.java │ │ │ │ ├── FilterableNumeric.java │ │ │ │ ├── FilterableNumericDecimal.java │ │ │ │ ├── FilterableNumericInteger.java │ │ │ │ ├── FilterableString.java │ │ │ │ ├── FilterableTime.java │ │ │ │ └── FilterableValue.java │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odatav4 │ │ │ │ ├── TestUtility.java │ │ │ │ ├── adapter │ │ │ │ ├── BigDecimalSerialisationTest.java │ │ │ │ └── SerializerAdapterTest.java │ │ │ │ ├── core │ │ │ │ ├── BoundActionTest.java │ │ │ │ ├── BoundFunctionTest.java │ │ │ │ ├── CollectionValueActionRequestBuilderTest.java │ │ │ │ ├── CollectionValueFunctionRequestBuilderTest.java │ │ │ │ ├── CsrfTokenHandlingTest.java │ │ │ │ ├── CustomFilterExpressionTest.java │ │ │ │ ├── FieldSerializationTest.java │ │ │ │ ├── HeadersHandlingTest.java │ │ │ │ ├── ModificationResponseTest.java │ │ │ │ ├── NestedEntityTest.java │ │ │ │ ├── ODataRequestImplTest.java │ │ │ │ ├── ODataV4BatchRequestUnitTest.java │ │ │ │ ├── ODatav4BatchConnectionTest.java │ │ │ │ ├── RequestBuilderEtagParsingTest.java │ │ │ │ ├── SingleValueActionRequestBuilderTest.java │ │ │ │ ├── SingleValueFunctionRequestBuilderTest.java │ │ │ │ ├── TestEntity.java │ │ │ │ ├── TestEntityService.java │ │ │ │ ├── UpdateRequestHelperPatchTest.java │ │ │ │ ├── UpdateRequestHelperPutTest.java │ │ │ │ └── VdmEntityTest.java │ │ │ │ ├── expression │ │ │ │ └── FilterableOperandsTest.java │ │ │ │ └── referenceservice │ │ │ │ ├── BooleanQueriesTest.java │ │ │ │ ├── CollectionQueriesTest.java │ │ │ │ ├── ComparisonQueriesTest.java │ │ │ │ ├── CountEntityUnitTest.java │ │ │ │ ├── ETagTest.java │ │ │ │ ├── EncodedParameterTest.java │ │ │ │ ├── EncodedQueryTest.java │ │ │ │ ├── ODataClientBatchReferenceServiceIntegrationTest.java │ │ │ │ ├── ODataClientBatchResponseParsingIntegrationTest.java │ │ │ │ ├── ODataClientBatchResponseParsingUnitTest.java │ │ │ │ ├── ODataReferenceServiceByKeyTest.java │ │ │ │ ├── ODataReferenceServiceTest.java │ │ │ │ ├── ODataV4BatchReferenceServiceUnitTest.java │ │ │ │ ├── PropertyCustomSerializationTest.java │ │ │ │ ├── PropertySerializationTest.java │ │ │ │ ├── README.md │ │ │ │ ├── SearchQueriesTest.java │ │ │ │ ├── SelectNestedComplexPropertiesTest.java │ │ │ │ ├── TripPinUtility.java │ │ │ │ ├── UnboundActionTest.java │ │ │ │ ├── UnboundFunctionTest.java │ │ │ │ ├── namespaces │ │ │ │ └── trippin │ │ │ │ │ ├── Airline.java │ │ │ │ │ ├── Airport.java │ │ │ │ │ ├── AirportLocation.java │ │ │ │ │ ├── Beverage.java │ │ │ │ │ ├── City.java │ │ │ │ │ ├── Feature.java │ │ │ │ │ ├── Location.java │ │ │ │ │ ├── Person.java │ │ │ │ │ ├── PersonGender.java │ │ │ │ │ ├── PlanItem.java │ │ │ │ │ └── Trip.java │ │ │ │ └── services │ │ │ │ ├── DefaultTrippinService.java │ │ │ │ └── TrippinService.java │ │ │ └── resources │ │ │ ├── CollectionValueActionRequestBuilderTest │ │ │ └── ActionNoParametersRequestBody.json │ │ │ ├── CsrfTokenHandlingTest │ │ │ └── CreateResponse.json │ │ │ ├── ETagTest │ │ │ ├── GetAllResponseBody.json │ │ │ └── GetSingleResponseBody.json │ │ │ ├── HeadersHandlingTest │ │ │ └── CreateResponse.json │ │ │ ├── ODataClientBatchResponseParsingUnitTest │ │ │ ├── BatchEmptyRequest.txt │ │ │ ├── BatchEmptyResponse.txt │ │ │ ├── BatchOnlyReadsErrorResponse.txt │ │ │ ├── BatchOnlyReadsMissingRequest.txt │ │ │ ├── BatchOnlyReadsMissingResponse.txt │ │ │ ├── BatchOnlyReadsRequest.txt │ │ │ ├── BatchOnlyReadsResponse.txt │ │ │ ├── BatchReadsAndWritesErrorRequest.txt │ │ │ ├── BatchReadsAndWritesErrorResponse.txt │ │ │ ├── BatchReadsAndWritesErrorResponseWithoutChangeset.txt │ │ │ ├── BatchReadsAndWritesSuccessRequest.txt │ │ │ └── BatchReadsAndWritesSuccessResponse.txt │ │ │ ├── ODataV4BatchReferenceServiceUnitTest │ │ │ ├── BatchEmptyRequest.txt │ │ │ ├── BatchEmptyResponse.txt │ │ │ ├── BatchOnlyReadsErrorResponse.txt │ │ │ ├── BatchOnlyReadsRequest.txt │ │ │ ├── BatchOnlyReadsResponse.txt │ │ │ ├── BatchReadsAndWritesSuccessRequest.txt │ │ │ └── BatchReadsAndWritesSuccessResponse.txt │ │ │ ├── ODataV4BatchRequestUnitTest │ │ │ ├── BatchReadsAndWritesSuccessRequest.txt │ │ │ └── BatchReadsAndWritesSuccessResponse.txt │ │ │ ├── ODatav4BatchConnectionTest │ │ │ ├── BatchResponseWithChangeset.txt │ │ │ ├── BatchResponseWithError.txt │ │ │ └── BatchResponseWithoutChangeset.txt │ │ │ ├── SingleValueActionRequestBuilderTest │ │ │ ├── ActionComplexTypeRequestBody.json │ │ │ ├── ActionEntityRequestBody.json │ │ │ ├── ActionNoParametersRequestBody.json │ │ │ ├── ActionNullEntityRequestBody.json │ │ │ └── ActionParametersRequestBody.json │ │ │ └── unused_trippin.edmx │ ├── odata-v4-generator-maven-plugin │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── odatav4 │ │ │ │ │ └── generator │ │ │ │ │ ├── CompileScope.java │ │ │ │ │ └── DataModelGeneratorMojo.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── m2e │ │ │ │ └── lifecycle-mapping-metadata.xml │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odatav4 │ │ │ │ └── generator │ │ │ │ └── DataModelGeneratorMojoTest.java │ │ │ └── resources │ │ │ └── DataModelGeneratorMojoTest │ │ │ └── pom.xml │ ├── odata-v4-generator │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── odatav4 │ │ │ │ │ └── generator │ │ │ │ │ ├── AbstractServiceDetails.java │ │ │ │ │ ├── AllowedFunctionsResolver.java │ │ │ │ │ ├── AnnotationHelper.java │ │ │ │ │ ├── ApiFunction.java │ │ │ │ │ ├── BoundOperationGenerator.java │ │ │ │ │ ├── CodeModelClassGenerator.java │ │ │ │ │ ├── CommonConstants.java │ │ │ │ │ ├── CopyrightHeaderCodeWriter.java │ │ │ │ │ ├── DataModelGenerator.java │ │ │ │ │ ├── DataModelGeneratorConfig.java │ │ │ │ │ ├── DatamodelMetadataGeneratorAdapter.java │ │ │ │ │ ├── DefaultNameFormattingStrategy.java │ │ │ │ │ ├── DefaultServiceBatchChangeSetGenerator.java │ │ │ │ │ ├── DefaultServiceBatchGenerator.java │ │ │ │ │ ├── DeprecationUtils.java │ │ │ │ │ ├── EdmService.java │ │ │ │ │ ├── EdmUtils.java │ │ │ │ │ ├── EdmxFile.java │ │ │ │ │ ├── EntityMetadata.java │ │ │ │ │ ├── EntityPropertyModel.java │ │ │ │ │ ├── EntityPropertyModelAnnotationWrapper.java │ │ │ │ │ ├── EntitySetProcessor.java │ │ │ │ │ ├── FieldFunctionGenerator.java │ │ │ │ │ ├── GeneratorReferenceCodeWriter.java │ │ │ │ │ ├── JavadocUtils.java │ │ │ │ │ ├── LowercaseNameFormattingStrategy.java │ │ │ │ │ ├── MessageCollector.java │ │ │ │ │ ├── MetadataFileUtils.java │ │ │ │ │ ├── Multiplicity.java │ │ │ │ │ ├── NameFormattingStrategy.java │ │ │ │ │ ├── NamespaceClassGenerator.java │ │ │ │ │ ├── NamingContext.java │ │ │ │ │ ├── NavigationPropertyMethodsGenerator.java │ │ │ │ │ ├── NavigationPropertyModel.java │ │ │ │ │ ├── NavigationPropertyModelAnnotationWrapper.java │ │ │ │ │ ├── ODataGeneratorException.java │ │ │ │ │ ├── ODataGeneratorReadException.java │ │ │ │ │ ├── ODataGeneratorWriteException.java │ │ │ │ │ ├── ODataToVdmGenerator.java │ │ │ │ │ ├── OperationParameterModel.java │ │ │ │ │ ├── PreparedEntityBluePrint.java │ │ │ │ │ ├── SafeCodeWriter.java │ │ │ │ │ ├── Service.java │ │ │ │ │ ├── ServiceBatchChangeSetGenerator.java │ │ │ │ │ ├── ServiceBatchGenerator.java │ │ │ │ │ ├── ServiceClassGenerator.java │ │ │ │ │ ├── ServiceDetails.java │ │ │ │ │ ├── ServiceDetailsOpenApi3.java │ │ │ │ │ ├── ServiceDetailsParser.java │ │ │ │ │ ├── ServiceDetailsPojo.java │ │ │ │ │ ├── ServiceDetailsResolver.java │ │ │ │ │ ├── ServiceDetailsSwagger2.java │ │ │ │ │ ├── TypeKind.java │ │ │ │ │ ├── VdmObjectModel.java │ │ │ │ │ ├── VdmObjectModelAnnotationWrapper.java │ │ │ │ │ └── annotation │ │ │ │ │ ├── AnnotationDefinition.java │ │ │ │ │ ├── AnnotationParameter.java │ │ │ │ │ ├── AnnotationStrategy.java │ │ │ │ │ ├── DefaultAnnotationStrategy.java │ │ │ │ │ ├── EntityAnnotationModel.java │ │ │ │ │ ├── EntityPropertyAnnotationModel.java │ │ │ │ │ └── NavigationPropertyAnnotationModel.java │ │ │ └── resources │ │ │ │ └── version.properties │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odatav4 │ │ │ │ └── generator │ │ │ │ ├── AllowedFunctionsResolverTest.java │ │ │ │ ├── CustomSoftAssertions.java │ │ │ │ ├── DatamodelMetadataGenerationTest.java │ │ │ │ ├── EntitySetProcessorTest.java │ │ │ │ ├── GeneratorReferenceTest.java │ │ │ │ ├── KeepExistingSignaturesTest.java │ │ │ │ ├── MessageCollectorTest.java │ │ │ │ ├── NamingContextAssert.java │ │ │ │ ├── NamingContextTest.java │ │ │ │ ├── ODataGeneratorIntegrationTest.java │ │ │ │ ├── ServiceClassGeneratorTest.java │ │ │ │ ├── ServiceDetailsResolverTest.java │ │ │ │ └── annotation │ │ │ │ └── DefaultAnnotationStrategyTest.java │ │ │ └── resources │ │ │ ├── AllowedFunctionsResolverTest │ │ │ ├── Baseline.edmx │ │ │ ├── Baseline.json │ │ │ ├── InvalidAttributeValue.edmx │ │ │ ├── PartlyNoAnnotations.edmx │ │ │ └── UnrelatedAnnotations.edmx │ │ │ ├── DatamodelMetadataGenerationTest │ │ │ ├── input │ │ │ │ ├── SDK_Grocery_Store.edmx │ │ │ │ ├── metadata-generator-properties.json │ │ │ │ ├── odata-v2-spec.edmx │ │ │ │ ├── semantically-inconsistent-metadata.edmx │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ └── syntactically-inconsistent-metadata.edmx │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ ├── SDK_Grocery_Store_CLIENT_JAVA.json │ │ │ │ └── semantically-inconsistent-metadata_CLIENT_JAVA.json │ │ │ ├── KeepExistingSignaturesTest │ │ │ ├── FirstNameLastName │ │ │ │ └── metadata.edmx │ │ │ ├── FirstNameLastNameFoo │ │ │ │ └── metadata.edmx │ │ │ ├── LastNameFirstName │ │ │ │ └── metadata.edmx │ │ │ └── serviceNameMappings.properties │ │ │ ├── ServiceDetailsResolverTest │ │ │ ├── Baseline.edmx │ │ │ ├── DoubleAtomLink.edmx │ │ │ ├── EmptyNamespace.edmx │ │ │ ├── LongS4StyleAtomLink.edmx │ │ │ ├── MalformedUrl.edmx │ │ │ ├── MultipleNamespace.edmx │ │ │ ├── MultipleSchemas.edmx │ │ │ ├── NoNamespace.edmx │ │ │ ├── ShortS4StyleAtomLink.edmx │ │ │ ├── WithoutAtomLink.edmx │ │ │ ├── v2Baseline.json │ │ │ ├── v2DeprecatedService.json │ │ │ ├── v2NoBasePath.json │ │ │ ├── v2S4StyleUrl.json │ │ │ ├── v3Baseline.json │ │ │ ├── v3DeprecatedService.json │ │ │ ├── v3NoMeaningfulUrl.json │ │ │ ├── v3NoServersUrl.json │ │ │ └── v3S4StyleUrl.json │ │ │ └── oDataGeneratorIntegrationTest │ │ │ ├── actionsAndFunctionsTest │ │ │ ├── input │ │ │ │ ├── actionsAndFunctions.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── actionsandfunctions │ │ │ │ │ ├── Address.java │ │ │ │ │ ├── FunctionResult.java │ │ │ │ │ ├── NewComplexResult.java │ │ │ │ │ └── SimplePerson.java │ │ │ │ └── services │ │ │ │ ├── ActionsAndFunctionsService.java │ │ │ │ └── DefaultActionsAndFunctionsService.java │ │ │ ├── complexProperties │ │ │ ├── input │ │ │ │ ├── metadata.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── metadata │ │ │ │ │ ├── Relationship.java │ │ │ │ │ └── SimplePerson.java │ │ │ │ └── services │ │ │ │ ├── DefaultMetadataService.java │ │ │ │ └── MetadataService.java │ │ │ ├── explicitDeprecation │ │ │ ├── input │ │ │ │ ├── minimal_metadata.JSON │ │ │ │ ├── minimal_metadata.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── minimalmetadata │ │ │ │ │ └── SimplePerson.java │ │ │ │ └── services │ │ │ │ ├── DefaultMinimalMetadataService.java │ │ │ │ └── MinimalMetadataService.java │ │ │ ├── failOnWarning │ │ │ └── input │ │ │ │ └── noContentOnPurpose.xml │ │ │ ├── groceryStore │ │ │ ├── input │ │ │ │ ├── SDK_Grocery_Store.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── sdkgrocerystore │ │ │ │ │ ├── Address.java │ │ │ │ │ ├── Customer.java │ │ │ │ │ ├── DateRange.java │ │ │ │ │ ├── FloorPlan.java │ │ │ │ │ ├── OpeningHours.java │ │ │ │ │ ├── Product.java │ │ │ │ │ ├── ProductCategory.java │ │ │ │ │ ├── ProductCount.java │ │ │ │ │ ├── PurchaseHistoryItem.java │ │ │ │ │ ├── Receipt.java │ │ │ │ │ ├── Shelf.java │ │ │ │ │ └── Vendor.java │ │ │ │ └── services │ │ │ │ ├── DefaultSdkGroceryStoreService.java │ │ │ │ └── SdkGroceryStoreService.java │ │ │ ├── minimalTest │ │ │ ├── input │ │ │ │ ├── minimal_metadata.JSON │ │ │ │ ├── minimal_metadata.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── minimalmetadata │ │ │ │ │ └── SimplePerson.java │ │ │ │ └── services │ │ │ │ ├── DefaultMinimalMetadataService.java │ │ │ │ └── MinimalMetadataService.java │ │ │ ├── multipleEntitySets │ │ │ ├── input │ │ │ │ ├── multiple_entity_sets.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── multipleentitysets │ │ │ │ │ ├── FooType.java │ │ │ │ │ └── SimplePerson.java │ │ │ │ └── services │ │ │ │ ├── DefaultMultipleEntitySetsService.java │ │ │ │ └── MultipleEntitySetsService.java │ │ │ ├── pojoOnlyTest │ │ │ ├── input │ │ │ │ ├── actionsAndFunctions.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ └── namespaces │ │ │ │ └── actionsandfunctions │ │ │ │ └── SimplePerson.java │ │ │ ├── propertyNameClash │ │ │ ├── input │ │ │ │ ├── name-clash.edmx │ │ │ │ ├── name-clash.json │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── minimalmetadata │ │ │ │ │ ├── Friend.java │ │ │ │ │ └── SimplePerson.java │ │ │ │ └── services │ │ │ │ ├── DefaultMinimalMetadataService.java │ │ │ │ └── MinimalMetadataService.java │ │ │ └── testService │ │ │ ├── input │ │ │ ├── serviceNameMappings.properties │ │ │ └── test_service.edmx │ │ │ └── output │ │ │ └── testcomparison │ │ │ ├── namespaces │ │ │ └── test │ │ │ │ ├── A_TestComplexType.java │ │ │ │ ├── A_TestEnumType.java │ │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ │ ├── A_TestNestedComplexType.java │ │ │ │ ├── TestEntityCircularLinkChild.java │ │ │ │ ├── TestEntityCircularLinkParent.java │ │ │ │ ├── TestEntityLvl2MultiLink.java │ │ │ │ ├── TestEntityLvl2SingleLink.java │ │ │ │ ├── TestEntityMultiLink.java │ │ │ │ ├── TestEntityOtherMultiLink.java │ │ │ │ ├── TestEntitySingleLink.java │ │ │ │ ├── TestEntityStream.java │ │ │ │ ├── TestEntityV4.java │ │ │ │ └── TestEntityV4_Only_Function.java │ │ │ └── services │ │ │ ├── DefaultTestService.java │ │ │ └── TestService.java │ └── pom.xml ├── odata │ ├── odata-api-sample │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── odata │ │ │ │ │ └── sample │ │ │ │ │ ├── namespaces │ │ │ │ │ └── sdkgrocerystore │ │ │ │ │ │ ├── Address.java │ │ │ │ │ │ ├── AddressByKeyFluentHelper.java │ │ │ │ │ │ ├── AddressCreateFluentHelper.java │ │ │ │ │ │ ├── AddressDeleteFluentHelper.java │ │ │ │ │ │ ├── AddressFluentHelper.java │ │ │ │ │ │ ├── AddressUpdateFluentHelper.java │ │ │ │ │ │ ├── Customer.java │ │ │ │ │ │ ├── CustomerByKeyFluentHelper.java │ │ │ │ │ │ ├── CustomerCreateFluentHelper.java │ │ │ │ │ │ ├── CustomerFluentHelper.java │ │ │ │ │ │ ├── FloorPlan.java │ │ │ │ │ │ ├── FloorPlanByKeyFluentHelper.java │ │ │ │ │ │ ├── FloorPlanFluentHelper.java │ │ │ │ │ │ ├── GetProductQuantitiesFluentHelper.java │ │ │ │ │ │ ├── IsStoreOpenFluentHelper.java │ │ │ │ │ │ ├── OpeningHours.java │ │ │ │ │ │ ├── OpeningHoursByKeyFluentHelper.java │ │ │ │ │ │ ├── OpeningHoursFluentHelper.java │ │ │ │ │ │ ├── OpeningHoursUpdateFluentHelper.java │ │ │ │ │ │ ├── OrderProductFluentHelper.java │ │ │ │ │ │ ├── PrintReceiptFluentHelper.java │ │ │ │ │ │ ├── Product.java │ │ │ │ │ │ ├── ProductByKeyFluentHelper.java │ │ │ │ │ │ ├── ProductCount.java │ │ │ │ │ │ ├── ProductCreateFluentHelper.java │ │ │ │ │ │ ├── ProductFluentHelper.java │ │ │ │ │ │ ├── ProductUpdateFluentHelper.java │ │ │ │ │ │ ├── Receipt.java │ │ │ │ │ │ ├── ReceiptByKeyFluentHelper.java │ │ │ │ │ │ ├── ReceiptCreateFluentHelper.java │ │ │ │ │ │ ├── ReceiptFluentHelper.java │ │ │ │ │ │ ├── RevokeReceiptFluentHelper.java │ │ │ │ │ │ ├── Shelf.java │ │ │ │ │ │ ├── ShelfByKeyFluentHelper.java │ │ │ │ │ │ ├── ShelfCreateFluentHelper.java │ │ │ │ │ │ ├── ShelfDeleteFluentHelper.java │ │ │ │ │ │ ├── ShelfFluentHelper.java │ │ │ │ │ │ ├── ShelfUpdateFluentHelper.java │ │ │ │ │ │ ├── Vendor.java │ │ │ │ │ │ ├── VendorByKeyFluentHelper.java │ │ │ │ │ │ ├── VendorFluentHelper.java │ │ │ │ │ │ ├── batch │ │ │ │ │ │ ├── DefaultSdkGroceryStoreServiceBatch.java │ │ │ │ │ │ ├── DefaultSdkGroceryStoreServiceBatchChangeSet.java │ │ │ │ │ │ ├── SdkGroceryStoreServiceBatch.java │ │ │ │ │ │ └── SdkGroceryStoreServiceBatchChangeSet.java │ │ │ │ │ │ ├── field │ │ │ │ │ │ ├── AddressField.java │ │ │ │ │ │ ├── CustomerField.java │ │ │ │ │ │ ├── FloorPlanField.java │ │ │ │ │ │ ├── OpeningHoursField.java │ │ │ │ │ │ ├── ProductField.java │ │ │ │ │ │ ├── ReceiptField.java │ │ │ │ │ │ ├── ShelfField.java │ │ │ │ │ │ └── VendorField.java │ │ │ │ │ │ ├── link │ │ │ │ │ │ ├── AddressLink.java │ │ │ │ │ │ ├── AddressOneToOneLink.java │ │ │ │ │ │ ├── CustomerLink.java │ │ │ │ │ │ ├── CustomerOneToOneLink.java │ │ │ │ │ │ ├── FloorPlanLink.java │ │ │ │ │ │ ├── FloorPlanOneToOneLink.java │ │ │ │ │ │ ├── OpeningHoursLink.java │ │ │ │ │ │ ├── OpeningHoursOneToOneLink.java │ │ │ │ │ │ ├── ProductLink.java │ │ │ │ │ │ ├── ProductOneToOneLink.java │ │ │ │ │ │ ├── ReceiptLink.java │ │ │ │ │ │ ├── ReceiptOneToOneLink.java │ │ │ │ │ │ ├── ShelfLink.java │ │ │ │ │ │ ├── ShelfOneToOneLink.java │ │ │ │ │ │ ├── VendorLink.java │ │ │ │ │ │ └── VendorOneToOneLink.java │ │ │ │ │ │ └── selectable │ │ │ │ │ │ ├── AddressSelectable.java │ │ │ │ │ │ ├── CustomerSelectable.java │ │ │ │ │ │ ├── FloorPlanSelectable.java │ │ │ │ │ │ ├── OpeningHoursSelectable.java │ │ │ │ │ │ ├── ProductSelectable.java │ │ │ │ │ │ ├── ReceiptSelectable.java │ │ │ │ │ │ ├── ShelfSelectable.java │ │ │ │ │ │ └── VendorSelectable.java │ │ │ │ │ └── services │ │ │ │ │ ├── DefaultSdkGroceryStoreService.java │ │ │ │ │ └── SdkGroceryStoreService.java │ │ │ └── resources │ │ │ │ ├── SDK_Grocery_Store.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odata │ │ │ │ ├── helper │ │ │ │ └── FluentHelperUpdateToRequestTest.java │ │ │ │ └── sample │ │ │ │ ├── ExtendedEntityClassTest.java │ │ │ │ ├── FilterOnOneToOneNavigationPropertyTest.java │ │ │ │ ├── FluentHelperByKeyToRequestTest.java │ │ │ │ ├── FluentHelperCountExecuteRequestTest.java │ │ │ │ ├── FluentHelperCreateODataClientTest.java │ │ │ │ ├── FluentHelperDeleteToRequestTest.java │ │ │ │ ├── FluentHelperDeleteVersionIdentifierTest.java │ │ │ │ ├── FluentHelperReadTest.java │ │ │ │ ├── FluentHelperReadToRequestTest.java │ │ │ │ ├── FluentHelperReadVersionIdentifierTest.java │ │ │ │ ├── FluentHelperToRequestBuilderTest.java │ │ │ │ ├── ODataFetchMediaStreamTest.java │ │ │ │ └── VdmSerializationTest.java │ │ │ └── resources │ │ │ └── __files │ │ │ └── ODataFetchMediaStreamTest │ │ │ ├── SAP_logo.png │ │ │ └── test.txt │ ├── odata-core │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ ├── datamodel │ │ │ │ └── odata │ │ │ │ │ ├── adapter │ │ │ │ │ └── ODataNumberSerializer.java │ │ │ │ │ └── helper │ │ │ │ │ ├── CollectionValuedFluentHelperFunction.java │ │ │ │ │ ├── EntityField.java │ │ │ │ │ ├── EntityFieldAll.java │ │ │ │ │ ├── EntityLink.java │ │ │ │ │ ├── EntitySelectable.java │ │ │ │ │ ├── ExpressionFluentHelper.java │ │ │ │ │ ├── FluentHelperBasic.java │ │ │ │ │ ├── FluentHelperByKey.java │ │ │ │ │ ├── FluentHelperCount.java │ │ │ │ │ ├── FluentHelperCreate.java │ │ │ │ │ ├── FluentHelperDelete.java │ │ │ │ │ ├── FluentHelperExecutable.java │ │ │ │ │ ├── FluentHelperFactory.java │ │ │ │ │ ├── FluentHelperFunction.java │ │ │ │ │ ├── FluentHelperModification.java │ │ │ │ │ ├── FluentHelperRead.java │ │ │ │ │ ├── FluentHelperUpdate.java │ │ │ │ │ ├── ModificationResponse.java │ │ │ │ │ ├── ModifyPatchStrategy.java │ │ │ │ │ ├── ODataEntitySerializer.java │ │ │ │ │ ├── OneToOneLink.java │ │ │ │ │ ├── Order.java │ │ │ │ │ ├── SingleValuedFluentHelperFunction.java │ │ │ │ │ ├── VdmComplex.java │ │ │ │ │ ├── VdmEntity.java │ │ │ │ │ ├── VdmEntityUtil.java │ │ │ │ │ ├── VdmMediaEntity.java │ │ │ │ │ ├── VdmObject.java │ │ │ │ │ └── batch │ │ │ │ │ ├── BatchChangeSetFluentHelperBasic.java │ │ │ │ │ ├── BatchFluentHelperBasic.java │ │ │ │ │ ├── BatchRequestChangeSet.java │ │ │ │ │ ├── BatchRequestChangeSetOperation.java │ │ │ │ │ ├── BatchRequestOperation.java │ │ │ │ │ ├── BatchRequestRead.java │ │ │ │ │ ├── BatchResponse.java │ │ │ │ │ ├── BatchResponseChangeSet.java │ │ │ │ │ ├── BatchService.java │ │ │ │ │ ├── DefaultBatchResponseChangeSet.java │ │ │ │ │ ├── DefaultBatchResponseResult.java │ │ │ │ │ ├── FluentHelperBatchChangeSet.java │ │ │ │ │ ├── FluentHelperBatchEndChangeSet.java │ │ │ │ │ ├── FluentHelperServiceBatch.java │ │ │ │ │ └── FluentHelperServiceBatchExecute.java │ │ │ │ └── s4hana │ │ │ │ └── datamodel │ │ │ │ └── odata │ │ │ │ ├── adapter │ │ │ │ ├── AbstractCalendarAdapter.java │ │ │ │ ├── AbstractJacksonCalendarDeserializer.java │ │ │ │ ├── AbstractJacksonCalendarSerializer.java │ │ │ │ ├── IdentityConverter.java │ │ │ │ ├── JacksonLocalDateTimeDeserializer.java │ │ │ │ ├── JacksonLocalDateTimeSerializer.java │ │ │ │ ├── JacksonLocalTimeDeserializer.java │ │ │ │ ├── JacksonLocalTimeSerializer.java │ │ │ │ ├── JacksonZonedDateTimeDeserializer.java │ │ │ │ ├── JacksonZonedDateTimeSerializer.java │ │ │ │ ├── LocalDateTimeAdapter.java │ │ │ │ ├── LocalDateTimeCalendarConverter.java │ │ │ │ ├── LocalTimeAdapter.java │ │ │ │ ├── LocalTimeCalendarConverter.java │ │ │ │ ├── ODataBinaryAdapter.java │ │ │ │ ├── ODataBooleanAdapter.java │ │ │ │ ├── ODataCustomFieldAdapter.java │ │ │ │ ├── ODataDateTimeOffsetStringCalendarConverter.java │ │ │ │ ├── ODataDateTimeStringCalendarConverter.java │ │ │ │ ├── ODataField.java │ │ │ │ ├── ODataTimeStringCalendarConverter.java │ │ │ │ ├── ODataVdmEntityAdapter.java │ │ │ │ ├── ODataVdmEntityAdapterFactory.java │ │ │ │ ├── ODataVdmEntityListAdapter.java │ │ │ │ ├── ZonedDateTimeAdapter.java │ │ │ │ └── ZonedDateTimeCalendarConverter.java │ │ │ │ ├── annotation │ │ │ │ └── Key.java │ │ │ │ └── exception │ │ │ │ ├── NoSuchEntityFieldException.java │ │ │ │ └── ODataPayloadParsingFailedException.java │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ ├── datamodel │ │ │ │ └── odata │ │ │ │ │ ├── adapter │ │ │ │ │ ├── LocalDateTimeCalendarConverterTest.java │ │ │ │ │ ├── LocalTimeCalendarConverterTest.java │ │ │ │ │ ├── ZonedDateTimeAdapterTest.java │ │ │ │ │ └── ZonedDateTimeCalendarConverterTest.java │ │ │ │ │ └── helper │ │ │ │ │ ├── CreateViaNavigationPropertyTest.java │ │ │ │ │ ├── CsrfTokenHandlingTest.java │ │ │ │ │ ├── CustomFieldTypeConverterTest.java │ │ │ │ │ ├── FluentHelperEtagParsingTest.java │ │ │ │ │ ├── FunctionImportSingleDeserializationTest.java │ │ │ │ │ ├── FunctionImportSingleEntityTest.java │ │ │ │ │ ├── ModificationResponseTest.java │ │ │ │ │ ├── ODataBatchRequestTest.java │ │ │ │ │ ├── ODataChangedFieldsTest.java │ │ │ │ │ ├── ODataEntitySerializerTest.java │ │ │ │ │ ├── ODataFilterTest.java │ │ │ │ │ ├── ODataHeaderTest.java │ │ │ │ │ ├── ODataSelectExpandTest.java │ │ │ │ │ ├── ODataSerializationTest.java │ │ │ │ │ ├── ODataV2FunctionImportBatchIntegrationTest.java │ │ │ │ │ ├── ODataV2FunctionImportGetBatchIntegrationTest.java │ │ │ │ │ ├── ODataV2FunctionImportIntegrationTest.java │ │ │ │ │ ├── PaginationIntegrationTest.java │ │ │ │ │ ├── PaginationUnitTest.java │ │ │ │ │ ├── SerializerRaceConditionTest.java │ │ │ │ │ ├── ServicePathTest.java │ │ │ │ │ ├── SpecialCharactersTest.java │ │ │ │ │ ├── TestVdmComplex.java │ │ │ │ │ ├── TestVdmEntity.java │ │ │ │ │ ├── UncheckedFilterExpressionTest.java │ │ │ │ │ ├── VdmComplexTest.java │ │ │ │ │ ├── VdmEntityTest.java │ │ │ │ │ ├── VdmEntityVersionIdentifierTest.java │ │ │ │ │ └── batch │ │ │ │ │ ├── ODataV2BatchFunctionImportTest.java │ │ │ │ │ ├── ODataV2BatchRequestUnitTest.java │ │ │ │ │ ├── ODatav2BatchConnectionTest.java │ │ │ │ │ └── TestVdmEntityBatch.java │ │ │ │ └── s4hana │ │ │ │ └── datamodel │ │ │ │ └── odata │ │ │ │ └── adapter │ │ │ │ ├── LocalDateTimeAdapterTest.java │ │ │ │ ├── LocalTimeAdapterTest.java │ │ │ │ ├── ODataBinaryAdapterTest.java │ │ │ │ ├── ODataCustomFieldAdapterTest.java │ │ │ │ ├── ODataDateTimeStringCalendarConverterTest.java │ │ │ │ ├── ODataPrimitiveAdapterTest.java │ │ │ │ └── ZonedDateTimeAdapterTest.java │ │ │ └── resources │ │ │ ├── ODataV2BatchFunctionImportTest │ │ │ ├── BatchRequestFunctionImportWithGet.txt │ │ │ ├── BatchRequestFunctionImportWithPost.txt │ │ │ ├── BatchRequestFunctionImportWithPostWithCustomHeader.txt │ │ │ └── BatchResponse.txt │ │ │ ├── ODataV2BatchRequestUnitTest │ │ │ ├── BatchRequest.txt │ │ │ ├── BatchRequestWithCustomHeaders.txt │ │ │ └── BatchResponse.txt │ │ │ └── ODatav2BatchConnectionTest │ │ │ ├── BatchResponseWithChangeset.txt │ │ │ ├── BatchResponseWithError.txt │ │ │ └── BatchResponseWithoutChangeset.txt │ ├── odata-generator-maven-plugin │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── odata │ │ │ │ │ └── generator │ │ │ │ │ ├── CompileScope.java │ │ │ │ │ └── DataModelGeneratorMojo.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ └── m2e │ │ │ │ └── lifecycle-mapping-metadata.xml │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odata │ │ │ │ └── generator │ │ │ │ └── DataModelGeneratorMojoTest.java │ │ │ └── resources │ │ │ └── DataModelGeneratorMojoTest │ │ │ └── pom.xml │ ├── odata-generator │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── odata │ │ │ │ │ └── generator │ │ │ │ │ ├── AbstractServiceDetails.java │ │ │ │ │ ├── AllowedFunctionsResolver.java │ │ │ │ │ ├── AnnotationHelper.java │ │ │ │ │ ├── ApiFunction.java │ │ │ │ │ ├── CodeModelClassGenerator.java │ │ │ │ │ ├── CodeModelUtils.java │ │ │ │ │ ├── CommonConstants.java │ │ │ │ │ ├── CopyrightHeaderCodeWriter.java │ │ │ │ │ ├── DataModelGenerator.java │ │ │ │ │ ├── DataModelGeneratorConfig.java │ │ │ │ │ ├── DatamodelMetadataGeneratorAdapter.java │ │ │ │ │ ├── DefaultNameFormattingStrategy.java │ │ │ │ │ ├── DefaultServiceBatchChangeSetGenerator.java │ │ │ │ │ ├── DefaultServiceBatchGenerator.java │ │ │ │ │ ├── DeprecationUtils.java │ │ │ │ │ ├── EdmService.java │ │ │ │ │ ├── EdmUtils.java │ │ │ │ │ ├── EdmxFile.java │ │ │ │ │ ├── EntityFieldGenerator.java │ │ │ │ │ ├── EntityLinkGenerator.java │ │ │ │ │ ├── EntityMetadata.java │ │ │ │ │ ├── EntityPropertyModel.java │ │ │ │ │ ├── EntityPropertyModelAnnotationWrapper.java │ │ │ │ │ ├── EntitySelectableGenerator.java │ │ │ │ │ ├── EntitySetProcessor.java │ │ │ │ │ ├── FieldFunctionGenerator.java │ │ │ │ │ ├── FluentHelperClassGenerator.java │ │ │ │ │ ├── FunctionImportParameterModel.java │ │ │ │ │ ├── GeneratorReferenceCodeWriter.java │ │ │ │ │ ├── JavadocUtils.java │ │ │ │ │ ├── LowercaseNameFormattingStrategy.java │ │ │ │ │ ├── MessageCollector.java │ │ │ │ │ ├── MetadataFileUtils.java │ │ │ │ │ ├── Multiplicity.java │ │ │ │ │ ├── NameFormattingStrategy.java │ │ │ │ │ ├── NamespaceClassGenerator.java │ │ │ │ │ ├── NamingContext.java │ │ │ │ │ ├── NavigationPropertyMethodsGenerator.java │ │ │ │ │ ├── NavigationPropertyModel.java │ │ │ │ │ ├── NavigationPropertyModelAnnotationWrapper.java │ │ │ │ │ ├── ODataGeneratorException.java │ │ │ │ │ ├── ODataGeneratorReadException.java │ │ │ │ │ ├── ODataGeneratorWriteException.java │ │ │ │ │ ├── ODataToVdmGenerator.java │ │ │ │ │ ├── PreparedEntityBluePrint.java │ │ │ │ │ ├── SafeCodeWriter.java │ │ │ │ │ ├── Service.java │ │ │ │ │ ├── ServiceBatchChangeSetGenerator.java │ │ │ │ │ ├── ServiceBatchGenerator.java │ │ │ │ │ ├── ServiceClassGenerator.java │ │ │ │ │ ├── ServiceDetails.java │ │ │ │ │ ├── ServiceDetailsOpenApi3.java │ │ │ │ │ ├── ServiceDetailsParser.java │ │ │ │ │ ├── ServiceDetailsPojo.java │ │ │ │ │ ├── ServiceDetailsResolver.java │ │ │ │ │ ├── ServiceDetailsSwagger2.java │ │ │ │ │ ├── TypeKind.java │ │ │ │ │ ├── VdmObjectModel.java │ │ │ │ │ ├── VdmObjectModelAnnotationWrapper.java │ │ │ │ │ └── annotation │ │ │ │ │ ├── AnnotationDefinition.java │ │ │ │ │ ├── AnnotationParameter.java │ │ │ │ │ ├── AnnotationStrategy.java │ │ │ │ │ ├── DefaultAnnotationStrategy.java │ │ │ │ │ ├── EntityAnnotationModel.java │ │ │ │ │ ├── EntityPropertyAnnotationModel.java │ │ │ │ │ └── NavigationPropertyAnnotationModel.java │ │ │ └── resources │ │ │ │ └── version.properties │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── odata │ │ │ │ └── generator │ │ │ │ ├── AllowedFunctionsResolverTest.java │ │ │ │ ├── CustomSoftAssertions.java │ │ │ │ ├── DatamodelMetadataGenerationTest.java │ │ │ │ ├── EntitySetProcessorTest.java │ │ │ │ ├── GeneratorReferenceTest.java │ │ │ │ ├── KeepExistingSignaturesTest.java │ │ │ │ ├── NamingContextAssert.java │ │ │ │ ├── NamingContextTest.java │ │ │ │ ├── ODataGeneratorIntegrationTest.java │ │ │ │ ├── ServiceClassGeneratorTest.java │ │ │ │ ├── ServiceDetailsResolverTest.java │ │ │ │ └── annotation │ │ │ │ └── DefaultAnnotationStrategyTest.java │ │ │ └── resources │ │ │ ├── AllowedFunctionsResolverTest │ │ │ ├── Baseline.edmx │ │ │ ├── Baseline.json │ │ │ ├── InvalidAttributeValue.edmx │ │ │ ├── PartlyNoAnnotations.edmx │ │ │ └── UnrelatedAnnotations.edmx │ │ │ ├── DatamodelMetadataGenerationTest │ │ │ ├── input │ │ │ │ ├── SDK_Grocery_Store.edmx │ │ │ │ ├── metadata-generator-properties.json │ │ │ │ ├── odata-v4-spec.edmx │ │ │ │ ├── semantically-incorrect-metadata.edmx │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ ├── syntactically-incorrect-metadata.edmx │ │ │ │ └── v2-structured-with-unexpected-version.edmx │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ ├── SDK_Grocery_Store_CLIENT_JAVA.json │ │ │ │ └── semantically-incorrect-metadata_CLIENT_JAVA.json │ │ │ ├── KeepExistingSignaturesTest │ │ │ ├── FirstNameLastName │ │ │ │ └── metadata.edmx │ │ │ ├── FirstNameLastNameFoo │ │ │ │ └── metadata.edmx │ │ │ ├── LastNameFirstName │ │ │ │ └── metadata.edmx │ │ │ └── serviceNameMappings.properties │ │ │ ├── ServiceDetailsResolverTest │ │ │ ├── Baseline.edmx │ │ │ ├── DoubleAtomLink.edmx │ │ │ ├── EmptyNamespace.edmx │ │ │ ├── LongS4StyleAtomLink.edmx │ │ │ ├── MalformedUrl.edmx │ │ │ ├── MultipleNamespace.edmx │ │ │ ├── MultipleSchemas.edmx │ │ │ ├── NoNamespace.edmx │ │ │ ├── ShortS4StyleAtomLink.edmx │ │ │ ├── WithoutAtomLink.edmx │ │ │ ├── v2Baseline.json │ │ │ ├── v2DeprecatedService.json │ │ │ ├── v2NoBasePath.json │ │ │ ├── v2S4StyleUrl.json │ │ │ ├── v3Baseline.json │ │ │ ├── v3DeprecatedService.json │ │ │ ├── v3NoMeaningfulUrl.json │ │ │ ├── v3NoServersUrl.json │ │ │ └── v3S4StyleUrl.json │ │ │ └── oDataGeneratorIntegrationTest │ │ │ ├── failOnWarning │ │ │ └── input │ │ │ │ └── noContentOnPurpose.xml │ │ │ ├── functionImportClash │ │ │ ├── input │ │ │ │ ├── FunctionImportNameClash.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── functionimportnameclash │ │ │ │ │ ├── BP.java │ │ │ │ │ ├── BPByKeyFluentHelper.java │ │ │ │ │ ├── BPByKeyFluentHelper_2.java │ │ │ │ │ ├── BPCreateFluentHelper.java │ │ │ │ │ ├── BPCreateFluentHelper_2.java │ │ │ │ │ ├── BPDeleteFluentHelper.java │ │ │ │ │ ├── BPDeleteFluentHelper_2.java │ │ │ │ │ ├── BPFluentHelper.java │ │ │ │ │ ├── BPUpdateFluentHelper.java │ │ │ │ │ ├── BPUpdateFluentHelper_2.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultFunctionImportNameClashServiceBatch.java │ │ │ │ │ ├── DefaultFunctionImportNameClashServiceBatchChangeSet.java │ │ │ │ │ ├── FunctionImportNameClashServiceBatch.java │ │ │ │ │ └── FunctionImportNameClashServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ └── BPField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── BPLink.java │ │ │ │ │ └── BPOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ └── BPSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultFunctionImportNameClashService.java │ │ │ │ └── FunctionImportNameClashService.java │ │ │ ├── groceryStore │ │ │ ├── input │ │ │ │ ├── SDK_Grocery_Store.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── sdkgrocerystore │ │ │ │ │ ├── Address.java │ │ │ │ │ ├── AddressByKeyFluentHelper.java │ │ │ │ │ ├── AddressCreateFluentHelper.java │ │ │ │ │ ├── AddressDeleteFluentHelper.java │ │ │ │ │ ├── AddressFluentHelper.java │ │ │ │ │ ├── AddressUpdateFluentHelper.java │ │ │ │ │ ├── Customer.java │ │ │ │ │ ├── CustomerByKeyFluentHelper.java │ │ │ │ │ ├── CustomerCreateFluentHelper.java │ │ │ │ │ ├── CustomerFluentHelper.java │ │ │ │ │ ├── FloorPlan.java │ │ │ │ │ ├── FloorPlanByKeyFluentHelper.java │ │ │ │ │ ├── FloorPlanFluentHelper.java │ │ │ │ │ ├── GetProductQuantitiesFluentHelper.java │ │ │ │ │ ├── IsStoreOpenFluentHelper.java │ │ │ │ │ ├── OpeningHours.java │ │ │ │ │ ├── OpeningHoursByKeyFluentHelper.java │ │ │ │ │ ├── OpeningHoursFluentHelper.java │ │ │ │ │ ├── OpeningHoursUpdateFluentHelper.java │ │ │ │ │ ├── OrderProductFluentHelper.java │ │ │ │ │ ├── PrintReceiptFluentHelper.java │ │ │ │ │ ├── Product.java │ │ │ │ │ ├── ProductByKeyFluentHelper.java │ │ │ │ │ ├── ProductCount.java │ │ │ │ │ ├── ProductCreateFluentHelper.java │ │ │ │ │ ├── ProductFluentHelper.java │ │ │ │ │ ├── ProductUpdateFluentHelper.java │ │ │ │ │ ├── Receipt.java │ │ │ │ │ ├── ReceiptByKeyFluentHelper.java │ │ │ │ │ ├── ReceiptCreateFluentHelper.java │ │ │ │ │ ├── ReceiptFluentHelper.java │ │ │ │ │ ├── RevokeReceiptFluentHelper.java │ │ │ │ │ ├── Shelf.java │ │ │ │ │ ├── ShelfByKeyFluentHelper.java │ │ │ │ │ ├── ShelfCreateFluentHelper.java │ │ │ │ │ ├── ShelfDeleteFluentHelper.java │ │ │ │ │ ├── ShelfFluentHelper.java │ │ │ │ │ ├── ShelfUpdateFluentHelper.java │ │ │ │ │ ├── Vendor.java │ │ │ │ │ ├── VendorByKeyFluentHelper.java │ │ │ │ │ ├── VendorFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultSdkGroceryStoreServiceBatch.java │ │ │ │ │ ├── DefaultSdkGroceryStoreServiceBatchChangeSet.java │ │ │ │ │ ├── SdkGroceryStoreServiceBatch.java │ │ │ │ │ └── SdkGroceryStoreServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── AddressField.java │ │ │ │ │ ├── CustomerField.java │ │ │ │ │ ├── FloorPlanField.java │ │ │ │ │ ├── OpeningHoursField.java │ │ │ │ │ ├── ProductField.java │ │ │ │ │ ├── ReceiptField.java │ │ │ │ │ ├── ShelfField.java │ │ │ │ │ └── VendorField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── AddressLink.java │ │ │ │ │ ├── AddressOneToOneLink.java │ │ │ │ │ ├── CustomerLink.java │ │ │ │ │ ├── CustomerOneToOneLink.java │ │ │ │ │ ├── FloorPlanLink.java │ │ │ │ │ ├── FloorPlanOneToOneLink.java │ │ │ │ │ ├── OpeningHoursLink.java │ │ │ │ │ ├── OpeningHoursOneToOneLink.java │ │ │ │ │ ├── ProductLink.java │ │ │ │ │ ├── ProductOneToOneLink.java │ │ │ │ │ ├── ReceiptLink.java │ │ │ │ │ ├── ReceiptOneToOneLink.java │ │ │ │ │ ├── ShelfLink.java │ │ │ │ │ ├── ShelfOneToOneLink.java │ │ │ │ │ ├── VendorLink.java │ │ │ │ │ └── VendorOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── AddressSelectable.java │ │ │ │ │ ├── CustomerSelectable.java │ │ │ │ │ ├── FloorPlanSelectable.java │ │ │ │ │ ├── OpeningHoursSelectable.java │ │ │ │ │ ├── ProductSelectable.java │ │ │ │ │ ├── ReceiptSelectable.java │ │ │ │ │ ├── ShelfSelectable.java │ │ │ │ │ └── VendorSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultSdkGroceryStoreService.java │ │ │ │ └── SdkGroceryStoreService.java │ │ │ ├── invalidService │ │ │ └── v4_service.edmx │ │ │ ├── keyNamedField │ │ │ ├── input │ │ │ │ ├── EntityWithKeyNamedField.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── entitywithkeynamedfield │ │ │ │ │ ├── EntityWithoutKeyLabel.java │ │ │ │ │ ├── EntityWithoutKeyLabelByKeyFluentHelper.java │ │ │ │ │ ├── EntityWithoutKeyLabelCreateFluentHelper.java │ │ │ │ │ ├── EntityWithoutKeyLabelDeleteFluentHelper.java │ │ │ │ │ ├── EntityWithoutKeyLabelFluentHelper.java │ │ │ │ │ ├── EntityWithoutKeyLabelUpdateFluentHelper.java │ │ │ │ │ ├── SomeTypeLabel.java │ │ │ │ │ ├── SomeTypeLabelByKeyFluentHelper.java │ │ │ │ │ ├── SomeTypeLabelCreateFluentHelper.java │ │ │ │ │ ├── SomeTypeLabelDeleteFluentHelper.java │ │ │ │ │ ├── SomeTypeLabelFluentHelper.java │ │ │ │ │ ├── SomeTypeLabelUpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultEntitywithkeynamedfieldServiceBatch.java │ │ │ │ │ ├── DefaultEntitywithkeynamedfieldServiceBatchChangeSet.java │ │ │ │ │ ├── EntitywithkeynamedfieldServiceBatch.java │ │ │ │ │ └── EntitywithkeynamedfieldServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── EntityWithoutKeyLabelField.java │ │ │ │ │ └── SomeTypeLabelField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── EntityWithoutKeyLabelLink.java │ │ │ │ │ ├── EntityWithoutKeyLabelOneToOneLink.java │ │ │ │ │ ├── SomeTypeLabelLink.java │ │ │ │ │ └── SomeTypeLabelOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── EntityWithoutKeyLabelSelectable.java │ │ │ │ │ └── SomeTypeLabelSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultEntitywithkeynamedfieldService.java │ │ │ │ └── EntitywithkeynamedfieldService.java │ │ │ ├── minimalTestWithExplicitDeprecation │ │ │ ├── input │ │ │ │ ├── minimal_metadata.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── minimalmetadata │ │ │ │ │ ├── SimplePerson.java │ │ │ │ │ ├── SimplePersonByKeyFluentHelper.java │ │ │ │ │ ├── SimplePersonCreateFluentHelper.java │ │ │ │ │ ├── SimplePersonDeleteFluentHelper.java │ │ │ │ │ ├── SimplePersonFluentHelper.java │ │ │ │ │ ├── SimplePersonUpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultMinimalMetadataServiceBatch.java │ │ │ │ │ ├── DefaultMinimalMetadataServiceBatchChangeSet.java │ │ │ │ │ ├── MinimalMetadataServiceBatch.java │ │ │ │ │ └── MinimalMetadataServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ └── SimplePersonField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── SimplePersonLink.java │ │ │ │ │ └── SimplePersonOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ └── SimplePersonSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultMinimalMetadataService.java │ │ │ │ └── MinimalMetadataService.java │ │ │ ├── multipleEntitySets │ │ │ ├── input │ │ │ │ ├── multiple_entity_sets.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── multipleentitysets │ │ │ │ │ ├── FooType.java │ │ │ │ │ ├── FooTypeByKeyFluentHelper.java │ │ │ │ │ ├── FooTypeCreateFluentHelper.java │ │ │ │ │ ├── FooTypeDeleteFluentHelper.java │ │ │ │ │ ├── FooTypeFluentHelper.java │ │ │ │ │ ├── FooTypeUpdateFluentHelper.java │ │ │ │ │ ├── SimplePerson.java │ │ │ │ │ ├── SimplePersonByKeyFluentHelper.java │ │ │ │ │ ├── SimplePersonCreateFluentHelper.java │ │ │ │ │ ├── SimplePersonDeleteFluentHelper.java │ │ │ │ │ ├── SimplePersonFluentHelper.java │ │ │ │ │ ├── SimplePersonUpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultMultipleEntitySetsServiceBatch.java │ │ │ │ │ ├── DefaultMultipleEntitySetsServiceBatchChangeSet.java │ │ │ │ │ ├── MultipleEntitySetsServiceBatch.java │ │ │ │ │ └── MultipleEntitySetsServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── FooTypeField.java │ │ │ │ │ └── SimplePersonField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── FooTypeLink.java │ │ │ │ │ ├── FooTypeOneToOneLink.java │ │ │ │ │ ├── SimplePersonLink.java │ │ │ │ │ └── SimplePersonOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── FooTypeSelectable.java │ │ │ │ │ └── SimplePersonSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultMultipleEntitySetsService.java │ │ │ │ └── MultipleEntitySetsService.java │ │ │ ├── propertyNameClash │ │ │ ├── input │ │ │ │ ├── name-clash.edmx │ │ │ │ └── serviceNameMappings.properties │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── nameclash │ │ │ │ │ ├── TestEntityMultiLink.java │ │ │ │ │ ├── TestEntityMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityV2.java │ │ │ │ │ ├── TestEntityV2ByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityV2CreateFluentHelper.java │ │ │ │ │ ├── TestEntityV2DeleteFluentHelper.java │ │ │ │ │ ├── TestEntityV2FluentHelper.java │ │ │ │ │ ├── TestEntityV2UpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultNameClashServiceBatch.java │ │ │ │ │ ├── DefaultNameClashServiceBatchChangeSet.java │ │ │ │ │ ├── NameClashServiceBatch.java │ │ │ │ │ └── NameClashServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── TestEntityMultiLinkField.java │ │ │ │ │ └── TestEntityV2Field.java │ │ │ │ │ ├── link │ │ │ │ │ ├── TestEntityMultiLinkLink.java │ │ │ │ │ ├── TestEntityMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityV2Link.java │ │ │ │ │ └── TestEntityV2OneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── TestEntityMultiLinkSelectable.java │ │ │ │ │ └── TestEntityV2Selectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultNameClashService.java │ │ │ │ └── NameClashService.java │ │ │ ├── testService │ │ │ ├── input │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ └── test_service.edmx │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── test │ │ │ │ │ ├── A_OtherTestComplexType.java │ │ │ │ │ ├── A_TestComplexType.java │ │ │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ │ │ ├── A_TestNestedComplexType.java │ │ │ │ │ ├── ContinueFluentHelper.java │ │ │ │ │ ├── CreateTestComplexFluentHelper.java │ │ │ │ │ ├── MediaEntity.java │ │ │ │ │ ├── MediaEntityByKeyFluentHelper.java │ │ │ │ │ ├── MediaEntityCreateFluentHelper.java │ │ │ │ │ ├── MediaEntityDeleteFluentHelper.java │ │ │ │ │ ├── MediaEntityFluentHelper.java │ │ │ │ │ ├── MediaEntityUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLink.java │ │ │ │ │ ├── TestEntityMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLink.java │ │ │ │ │ ├── TestEntitySingleLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityV2.java │ │ │ │ │ ├── TestEntityV2ByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityV2CreateFluentHelper.java │ │ │ │ │ ├── TestEntityV2DeleteFluentHelper.java │ │ │ │ │ ├── TestEntityV2FluentHelper.java │ │ │ │ │ ├── TestEntityV2UpdateFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportGETFluentHelper.java │ │ │ │ │ ├── TestFunctionImportMultipleParamsFluentHelper.java │ │ │ │ │ ├── TestFunctionImportNoReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportPOSTFluentHelper.java │ │ │ │ │ ├── TestFunctionImportUnprecedentedComplexReturnFluentHelper.java │ │ │ │ │ ├── Unrelated.java │ │ │ │ │ ├── UnrelatedByKeyFluentHelper.java │ │ │ │ │ ├── UnrelatedCreateFluentHelper.java │ │ │ │ │ ├── UnrelatedDeleteFluentHelper.java │ │ │ │ │ ├── UnrelatedFluentHelper.java │ │ │ │ │ ├── UnrelatedUpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultTestServiceBatch.java │ │ │ │ │ ├── DefaultTestServiceBatchChangeSet.java │ │ │ │ │ ├── TestServiceBatch.java │ │ │ │ │ └── TestServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── MediaEntityField.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkField.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkField.java │ │ │ │ │ ├── TestEntityMultiLinkField.java │ │ │ │ │ ├── TestEntityOtherMultiLinkField.java │ │ │ │ │ ├── TestEntitySingleLinkField.java │ │ │ │ │ ├── TestEntityV2Field.java │ │ │ │ │ └── UnrelatedField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── MediaEntityLink.java │ │ │ │ │ ├── MediaEntityOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityMultiLinkLink.java │ │ │ │ │ ├── TestEntityMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntitySingleLinkLink.java │ │ │ │ │ ├── TestEntitySingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityV2Link.java │ │ │ │ │ ├── TestEntityV2OneToOneLink.java │ │ │ │ │ ├── UnrelatedLink.java │ │ │ │ │ └── UnrelatedOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── MediaEntitySelectable.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkSelectable.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkSelectable.java │ │ │ │ │ ├── TestEntityMultiLinkSelectable.java │ │ │ │ │ ├── TestEntityOtherMultiLinkSelectable.java │ │ │ │ │ ├── TestEntitySingleLinkSelectable.java │ │ │ │ │ ├── TestEntityV2Selectable.java │ │ │ │ │ └── UnrelatedSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultTestService.java │ │ │ │ └── TestService.java │ │ │ ├── testServiceDeprecation │ │ │ ├── input │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ ├── test_service.edmx │ │ │ │ └── test_service.json │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── test │ │ │ │ │ ├── A_TestComplexType.java │ │ │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ │ │ ├── A_TestNestedComplexType.java │ │ │ │ │ ├── ContinueFluentHelper.java │ │ │ │ │ ├── CreateTestComplexFluentHelper.java │ │ │ │ │ ├── MediaEntity.java │ │ │ │ │ ├── MediaEntityFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLink.java │ │ │ │ │ ├── TestEntityMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLink.java │ │ │ │ │ ├── TestEntitySingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntityV2.java │ │ │ │ │ ├── TestEntityV2CreateFluentHelper.java │ │ │ │ │ ├── TestEntityV2FluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportGETFluentHelper.java │ │ │ │ │ ├── TestFunctionImportMultipleParamsFluentHelper.java │ │ │ │ │ ├── TestFunctionImportNoReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportPOSTFluentHelper.java │ │ │ │ │ ├── Unrelated.java │ │ │ │ │ ├── UnrelatedFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultTestServiceBatch.java │ │ │ │ │ ├── DefaultTestServiceBatchChangeSet.java │ │ │ │ │ ├── TestServiceBatch.java │ │ │ │ │ └── TestServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── MediaEntityField.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkField.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkField.java │ │ │ │ │ ├── TestEntityMultiLinkField.java │ │ │ │ │ ├── TestEntityOtherMultiLinkField.java │ │ │ │ │ ├── TestEntitySingleLinkField.java │ │ │ │ │ ├── TestEntityV2Field.java │ │ │ │ │ └── UnrelatedField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── MediaEntityLink.java │ │ │ │ │ ├── MediaEntityOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityMultiLinkLink.java │ │ │ │ │ ├── TestEntityMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntitySingleLinkLink.java │ │ │ │ │ ├── TestEntitySingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityV2Link.java │ │ │ │ │ ├── TestEntityV2OneToOneLink.java │ │ │ │ │ ├── UnrelatedLink.java │ │ │ │ │ └── UnrelatedOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── MediaEntitySelectable.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkSelectable.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkSelectable.java │ │ │ │ │ ├── TestEntityMultiLinkSelectable.java │ │ │ │ │ ├── TestEntityOtherMultiLinkSelectable.java │ │ │ │ │ ├── TestEntitySingleLinkSelectable.java │ │ │ │ │ ├── TestEntityV2Selectable.java │ │ │ │ │ └── UnrelatedSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultTestService.java │ │ │ │ └── TestService.java │ │ │ ├── testServiceEntitySets │ │ │ ├── input │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ └── test_service.edmx │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── test │ │ │ │ │ ├── A_TestComplexType.java │ │ │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ │ │ ├── A_TestNestedComplexType.java │ │ │ │ │ ├── ContinueFluentHelper.java │ │ │ │ │ ├── CreateTestComplexFluentHelper.java │ │ │ │ │ ├── TestEntityV2.java │ │ │ │ │ ├── TestEntityV2ByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityV2CreateFluentHelper.java │ │ │ │ │ ├── TestEntityV2DeleteFluentHelper.java │ │ │ │ │ ├── TestEntityV2FluentHelper.java │ │ │ │ │ ├── TestEntityV2UpdateFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportGETFluentHelper.java │ │ │ │ │ ├── TestFunctionImportMultipleParamsFluentHelper.java │ │ │ │ │ ├── TestFunctionImportNoReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportPOSTFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultTestServiceBatch.java │ │ │ │ │ ├── DefaultTestServiceBatchChangeSet.java │ │ │ │ │ ├── TestServiceBatch.java │ │ │ │ │ └── TestServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ └── TestEntityV2Field.java │ │ │ │ │ ├── link │ │ │ │ │ ├── TestEntityV2Link.java │ │ │ │ │ └── TestEntityV2OneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ └── TestEntityV2Selectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultTestService.java │ │ │ │ └── TestService.java │ │ │ ├── testServiceFunctionImports │ │ │ ├── input │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ └── test_service.edmx │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── test │ │ │ │ │ ├── A_TestComplexType.java │ │ │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ │ │ ├── A_TestNestedComplexType.java │ │ │ │ │ ├── MediaEntity.java │ │ │ │ │ ├── MediaEntityByKeyFluentHelper.java │ │ │ │ │ ├── MediaEntityCreateFluentHelper.java │ │ │ │ │ ├── MediaEntityDeleteFluentHelper.java │ │ │ │ │ ├── MediaEntityFluentHelper.java │ │ │ │ │ ├── MediaEntityUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLink.java │ │ │ │ │ ├── TestEntityMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLink.java │ │ │ │ │ ├── TestEntitySingleLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityV2.java │ │ │ │ │ ├── TestEntityV2ByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityV2CreateFluentHelper.java │ │ │ │ │ ├── TestEntityV2DeleteFluentHelper.java │ │ │ │ │ ├── TestEntityV2FluentHelper.java │ │ │ │ │ ├── TestEntityV2UpdateFluentHelper.java │ │ │ │ │ ├── TestFunctionImportNoReturnFluentHelper.java │ │ │ │ │ ├── Unrelated.java │ │ │ │ │ ├── UnrelatedByKeyFluentHelper.java │ │ │ │ │ ├── UnrelatedCreateFluentHelper.java │ │ │ │ │ ├── UnrelatedDeleteFluentHelper.java │ │ │ │ │ ├── UnrelatedFluentHelper.java │ │ │ │ │ ├── UnrelatedUpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultTestServiceBatch.java │ │ │ │ │ ├── DefaultTestServiceBatchChangeSet.java │ │ │ │ │ ├── TestServiceBatch.java │ │ │ │ │ └── TestServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── MediaEntityField.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkField.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkField.java │ │ │ │ │ ├── TestEntityMultiLinkField.java │ │ │ │ │ ├── TestEntityOtherMultiLinkField.java │ │ │ │ │ ├── TestEntitySingleLinkField.java │ │ │ │ │ ├── TestEntityV2Field.java │ │ │ │ │ └── UnrelatedField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── MediaEntityLink.java │ │ │ │ │ ├── MediaEntityOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityMultiLinkLink.java │ │ │ │ │ ├── TestEntityMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntitySingleLinkLink.java │ │ │ │ │ ├── TestEntitySingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityV2Link.java │ │ │ │ │ ├── TestEntityV2OneToOneLink.java │ │ │ │ │ ├── UnrelatedLink.java │ │ │ │ │ └── UnrelatedOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── MediaEntitySelectable.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkSelectable.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkSelectable.java │ │ │ │ │ ├── TestEntityMultiLinkSelectable.java │ │ │ │ │ ├── TestEntityOtherMultiLinkSelectable.java │ │ │ │ │ ├── TestEntitySingleLinkSelectable.java │ │ │ │ │ ├── TestEntityV2Selectable.java │ │ │ │ │ └── UnrelatedSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultTestService.java │ │ │ │ └── TestService.java │ │ │ ├── testServiceNoApiLinks │ │ │ ├── input │ │ │ │ ├── serviceNameMappings.properties │ │ │ │ └── test_service.edmx │ │ │ └── output │ │ │ │ └── testcomparison │ │ │ │ ├── namespaces │ │ │ │ └── test │ │ │ │ │ ├── A_TestComplexType.java │ │ │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ │ │ ├── A_TestNestedComplexType.java │ │ │ │ │ ├── ContinueFluentHelper.java │ │ │ │ │ ├── CreateTestComplexFluentHelper.java │ │ │ │ │ ├── MediaEntity.java │ │ │ │ │ ├── MediaEntityByKeyFluentHelper.java │ │ │ │ │ ├── MediaEntityCreateFluentHelper.java │ │ │ │ │ ├── MediaEntityDeleteFluentHelper.java │ │ │ │ │ ├── MediaEntityFluentHelper.java │ │ │ │ │ ├── MediaEntityUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLink.java │ │ │ │ │ ├── TestEntityMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkFluentHelper.java │ │ │ │ │ ├── TestEntityOtherMultiLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLink.java │ │ │ │ │ ├── TestEntitySingleLinkByKeyFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkCreateFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkDeleteFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkFluentHelper.java │ │ │ │ │ ├── TestEntitySingleLinkUpdateFluentHelper.java │ │ │ │ │ ├── TestEntityV2.java │ │ │ │ │ ├── TestEntityV2ByKeyFluentHelper.java │ │ │ │ │ ├── TestEntityV2CreateFluentHelper.java │ │ │ │ │ ├── TestEntityV2DeleteFluentHelper.java │ │ │ │ │ ├── TestEntityV2FluentHelper.java │ │ │ │ │ ├── TestEntityV2UpdateFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportComplexReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEdmReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportEntityReturnTypeCollectionFluentHelper.java │ │ │ │ │ ├── TestFunctionImportGETFluentHelper.java │ │ │ │ │ ├── TestFunctionImportMultipleParamsFluentHelper.java │ │ │ │ │ ├── TestFunctionImportNoReturnFluentHelper.java │ │ │ │ │ ├── TestFunctionImportPOSTFluentHelper.java │ │ │ │ │ ├── Unrelated.java │ │ │ │ │ ├── UnrelatedByKeyFluentHelper.java │ │ │ │ │ ├── UnrelatedCreateFluentHelper.java │ │ │ │ │ ├── UnrelatedDeleteFluentHelper.java │ │ │ │ │ ├── UnrelatedFluentHelper.java │ │ │ │ │ ├── UnrelatedUpdateFluentHelper.java │ │ │ │ │ ├── batch │ │ │ │ │ ├── DefaultTestServiceBatch.java │ │ │ │ │ ├── DefaultTestServiceBatchChangeSet.java │ │ │ │ │ ├── TestServiceBatch.java │ │ │ │ │ └── TestServiceBatchChangeSet.java │ │ │ │ │ ├── field │ │ │ │ │ ├── MediaEntityField.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkField.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkField.java │ │ │ │ │ ├── TestEntityMultiLinkField.java │ │ │ │ │ ├── TestEntityOtherMultiLinkField.java │ │ │ │ │ ├── TestEntitySingleLinkField.java │ │ │ │ │ ├── TestEntityV2Field.java │ │ │ │ │ └── UnrelatedField.java │ │ │ │ │ ├── link │ │ │ │ │ ├── MediaEntityLink.java │ │ │ │ │ ├── MediaEntityOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkLink.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkLink.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityMultiLinkLink.java │ │ │ │ │ ├── TestEntityMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkLink.java │ │ │ │ │ ├── TestEntityOtherMultiLinkOneToOneLink.java │ │ │ │ │ ├── TestEntitySingleLinkLink.java │ │ │ │ │ ├── TestEntitySingleLinkOneToOneLink.java │ │ │ │ │ ├── TestEntityV2Link.java │ │ │ │ │ ├── TestEntityV2OneToOneLink.java │ │ │ │ │ ├── UnrelatedLink.java │ │ │ │ │ └── UnrelatedOneToOneLink.java │ │ │ │ │ └── selectable │ │ │ │ │ ├── MediaEntitySelectable.java │ │ │ │ │ ├── TestEntityLvl2MultiLinkSelectable.java │ │ │ │ │ ├── TestEntityLvl2SingleLinkSelectable.java │ │ │ │ │ ├── TestEntityMultiLinkSelectable.java │ │ │ │ │ ├── TestEntityOtherMultiLinkSelectable.java │ │ │ │ │ ├── TestEntitySingleLinkSelectable.java │ │ │ │ │ ├── TestEntityV2Selectable.java │ │ │ │ │ └── UnrelatedSelectable.java │ │ │ │ └── services │ │ │ │ ├── DefaultTestService.java │ │ │ │ └── TestService.java │ │ │ └── testServicePojos │ │ │ ├── input │ │ │ ├── serviceNameMappings.properties │ │ │ └── test_service.edmx │ │ │ └── output │ │ │ └── testcomparison │ │ │ └── namespaces │ │ │ └── test │ │ │ ├── A_TestComplexType.java │ │ │ ├── A_TestLvl2NestedComplexType.java │ │ │ ├── A_TestNestedComplexType.java │ │ │ ├── MediaEntity.java │ │ │ ├── TestEntityLvl2MultiLink.java │ │ │ ├── TestEntityLvl2SingleLink.java │ │ │ ├── TestEntityMultiLink.java │ │ │ ├── TestEntityOtherMultiLink.java │ │ │ ├── TestEntitySingleLink.java │ │ │ ├── TestEntityV2.java │ │ │ └── Unrelated.java │ └── pom.xml ├── openapi │ ├── openapi-api-sample │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── openapi │ │ │ │ │ └── sample │ │ │ │ │ ├── api │ │ │ │ │ ├── OrdersApi.java │ │ │ │ │ └── SodasApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── AllOf.java │ │ │ │ │ ├── AnyOf.java │ │ │ │ │ ├── Bar.java │ │ │ │ │ ├── Cola.java │ │ │ │ │ ├── Fanta.java │ │ │ │ │ ├── FantaFlavor.java │ │ │ │ │ ├── FlavorType.java │ │ │ │ │ ├── Foo.java │ │ │ │ │ ├── OneOf.java │ │ │ │ │ ├── OneOfWithDiscriminator.java │ │ │ │ │ ├── OneOfWithDiscriminatorAndMapping.java │ │ │ │ │ ├── OneOfWithEnumDiscriminator.java │ │ │ │ │ ├── Order.java │ │ │ │ │ ├── OrderWithTimestamp.java │ │ │ │ │ ├── Soda.java │ │ │ │ │ └── SodaWithId.java │ │ │ └── resources │ │ │ │ └── sodastore.yaml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── datamodel │ │ │ └── openapi │ │ │ └── sample │ │ │ └── api │ │ │ ├── DeserializationTest.java │ │ │ ├── OneOfDeserializationTest.java │ │ │ └── SerializationTest.java │ ├── openapi-core │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── services │ │ │ │ └── openapi │ │ │ │ ├── apiclient │ │ │ │ ├── ApiClient.java │ │ │ │ ├── RFC3339DateFormat.java │ │ │ │ └── auth │ │ │ │ │ ├── ApiKeyAuth.java │ │ │ │ │ ├── Authentication.java │ │ │ │ │ ├── HttpBasicAuth.java │ │ │ │ │ ├── OAuth.java │ │ │ │ │ └── OAuthFlow.java │ │ │ │ └── core │ │ │ │ ├── AbstractOpenApiService.java │ │ │ │ ├── OpenApiRequestException.java │ │ │ │ ├── OpenApiResponse.java │ │ │ │ └── OpenApiService.java │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── services │ │ │ └── openapi │ │ │ ├── apiclient │ │ │ ├── ApiClientExtensionsDeserializationTest.java │ │ │ ├── ApiClientFromDestinationTest.java │ │ │ └── ApiClientViaConstructorTest.java │ │ │ ├── genericparameter │ │ │ └── GenericParameterTest.java │ │ │ └── genericreturntype │ │ │ ├── GenericReturnTypeTest.java │ │ │ └── TestApi.java │ ├── openapi-generator-maven-plugin │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── openapi │ │ │ │ │ └── generator │ │ │ │ │ ├── CompileScope.java │ │ │ │ │ └── DataModelGeneratorMojo.java │ │ │ └── resources │ │ │ │ └── m2e │ │ │ │ └── lifecycle-mapping-metadata.xml │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── openapi │ │ │ │ └── generator │ │ │ │ ├── DataModelGeneratorMojoIntegrationTest.java │ │ │ │ └── DataModelGeneratorMojoUnitTest.java │ │ │ └── resources │ │ │ ├── DataModelGeneratorMojoIntegrationTest │ │ │ └── sodastore │ │ │ │ ├── input │ │ │ │ ├── pom.xml │ │ │ │ └── sodastore.yaml │ │ │ │ └── output │ │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── rest │ │ │ │ └── sodastore │ │ │ │ ├── api │ │ │ │ └── DefaultApi.java │ │ │ │ └── model │ │ │ │ ├── NewSoda.java │ │ │ │ ├── Soda.java │ │ │ │ └── UpdateSoda.java │ │ │ └── DataModelGeneratorMojoUnitTest │ │ │ ├── testAdditionalPropertiesAndEnablingAnyOfOneOf │ │ │ └── pom.xml │ │ │ ├── testEmptyRequiredParameter │ │ │ └── pom.xml │ │ │ ├── testInvocationWithAllParameters │ │ │ ├── input │ │ │ │ └── sodastore.yaml │ │ │ └── pom.xml │ │ │ ├── testInvocationWithMandatoryParameters │ │ │ ├── input │ │ │ │ └── sodastore.yaml │ │ │ └── pom.xml │ │ │ ├── testInvocationWithUnexpectedApiMaturity │ │ │ ├── input │ │ │ │ └── sodastore.yaml │ │ │ └── pom.xml │ │ │ ├── testInvocationWithUnexpectedLogLevel │ │ │ └── input │ │ │ │ └── sodastore.yaml │ │ │ └── testSkipExecution │ │ │ └── pom.xml │ ├── openapi-generator │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── datamodel │ │ │ │ │ └── openapi │ │ │ │ │ └── generator │ │ │ │ │ ├── ApiClassNameFieldPreprocessor.java │ │ │ │ │ ├── ClassPathResourceValidator.java │ │ │ │ │ ├── CustomJavaClientCodegen.java │ │ │ │ │ ├── DataModelGenerator.java │ │ │ │ │ ├── DatamodelMetadataGeneratorAdapter.java │ │ │ │ │ ├── GenerationConfigurationConverter.java │ │ │ │ │ ├── GeneratorCustomProperties.java │ │ │ │ │ ├── MethodNameFieldPreprocessor.java │ │ │ │ │ ├── OpenApiSpec.java │ │ │ │ │ ├── OpenApiSpecUtil.java │ │ │ │ │ ├── PreprocessingStep.java │ │ │ │ │ ├── PreprocessingStepOrchestrator.java │ │ │ │ │ ├── ValidationKeywordsPreprocessor.java │ │ │ │ │ ├── exception │ │ │ │ │ └── OpenApiGeneratorException.java │ │ │ │ │ └── model │ │ │ │ │ ├── ApiMaturity.java │ │ │ │ │ ├── GenerationConfiguration.java │ │ │ │ │ └── GenerationResult.java │ │ │ └── resources │ │ │ │ ├── openapi-generator │ │ │ │ ├── .openapi-generator-ignore │ │ │ │ └── mustache-templates │ │ │ │ │ ├── Readme.md │ │ │ │ │ ├── auth │ │ │ │ │ ├── ApiKeyAuth.mustache │ │ │ │ │ ├── Authentication.mustache │ │ │ │ │ ├── HttpBasicAuth.mustache │ │ │ │ │ ├── HttpBearerAuth.mustache │ │ │ │ │ ├── OAuth.mustache │ │ │ │ │ └── OAuthFlow.mustache │ │ │ │ │ ├── libraries │ │ │ │ │ └── resttemplate │ │ │ │ │ │ ├── api.mustache │ │ │ │ │ │ └── auth │ │ │ │ │ │ ├── ApiKeyAuth.mustache │ │ │ │ │ │ ├── Authentication.mustache │ │ │ │ │ │ ├── HttpBasicAuth.mustache │ │ │ │ │ │ ├── HttpBearerAuth.mustache │ │ │ │ │ │ ├── OAuth.mustache │ │ │ │ │ │ └── OAuthFlow.mustache │ │ │ │ │ ├── licenseInfo.mustache │ │ │ │ │ ├── model.mustache │ │ │ │ │ ├── modelEnum.mustache │ │ │ │ │ ├── modelInnerEnum.mustache │ │ │ │ │ ├── oneof_interface.mustache │ │ │ │ │ ├── pojo.mustache │ │ │ │ │ ├── pojoBuilder.mustache │ │ │ │ │ ├── typeInfoAnnotation.mustache │ │ │ │ │ └── xmlAnnotation.mustache │ │ │ │ └── version.properties │ │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── datamodel │ │ │ │ └── openapi │ │ │ │ └── generator │ │ │ │ ├── ApiClassNameFieldPreprocessorTest.java │ │ │ │ ├── DataModelGeneratorIntegrationTest.java │ │ │ │ ├── DataModelGeneratorUnitTest.java │ │ │ │ ├── DatamodelMetadataGenerationTest.java │ │ │ │ ├── GenerationConfigurationConverterTest.java │ │ │ │ ├── MethodNameFieldPreprocessorTest.java │ │ │ │ ├── PreprocessingStepOrchestratorTest.java │ │ │ │ ├── ValidationKeywordsPreprocessorTest.java │ │ │ │ └── model │ │ │ │ ├── ApiMaturityTest.java │ │ │ │ └── GenerationConfigurationBuilderTest.java │ │ │ └── resources │ │ │ ├── ApiClassNameFieldPreprocessorTest │ │ │ ├── empty-extension-field.json │ │ │ ├── extension-field-api-suffix.json │ │ │ ├── extension-field-on-operation-level.json │ │ │ ├── extension-field-on-path-level.json │ │ │ ├── extension-field-on-root-level.json │ │ │ ├── extension-field-on-various-levels.json │ │ │ └── no-extension-field.json │ │ │ ├── DataModelGeneratorIntegrationTest │ │ │ ├── api-class-for-ai-sdk │ │ │ │ ├── input │ │ │ │ │ └── sodastore.json │ │ │ │ └── output │ │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── services │ │ │ │ │ └── builder │ │ │ │ │ ├── api │ │ │ │ │ ├── AwesomeSodaApi.java │ │ │ │ │ ├── AwesomeSodasApi.java │ │ │ │ │ └── DefaultApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── NewSoda.java │ │ │ │ │ ├── Soda.java │ │ │ │ │ └── UpdateSoda.java │ │ │ ├── api-class-vendor-extension-json │ │ │ │ ├── input │ │ │ │ │ └── sodastore.json │ │ │ │ └── output │ │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── services │ │ │ │ │ └── apiclassvendorextension │ │ │ │ │ ├── api │ │ │ │ │ ├── AwesomeSodaApi.java │ │ │ │ │ ├── AwesomeSodasApi.java │ │ │ │ │ └── DefaultApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── NewSoda.java │ │ │ │ │ ├── Soda.java │ │ │ │ │ └── UpdateSoda.java │ │ │ ├── api-class-vendor-extension-yaml │ │ │ │ ├── input │ │ │ │ │ └── sodastore.yaml │ │ │ │ └── output │ │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── services │ │ │ │ │ └── apiclassvendorextension │ │ │ │ │ ├── api │ │ │ │ │ └── DefaultApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── NewSoda.java │ │ │ │ │ ├── Soda.java │ │ │ │ │ └── UpdateSoda.java │ │ │ ├── generate-apis │ │ │ │ ├── input │ │ │ │ │ └── sodastore.yaml │ │ │ │ └── output │ │ │ │ │ └── test │ │ │ │ │ ├── AllOf.java │ │ │ │ │ ├── AnyOf.java │ │ │ │ │ ├── Cola.java │ │ │ │ │ ├── Fanta.java │ │ │ │ │ ├── OneOf.java │ │ │ │ │ ├── OneOfWithDiscriminator.java │ │ │ │ │ └── OneOfWithDiscriminatorAndMapping.java │ │ │ ├── input-spec-with-builder │ │ │ │ ├── input │ │ │ │ │ └── sodastore.JSON │ │ │ │ └── output │ │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── services │ │ │ │ │ └── builder │ │ │ │ │ ├── api │ │ │ │ │ ├── AwesomeSodaApi.java │ │ │ │ │ ├── AwesomeSodasApi.java │ │ │ │ │ └── DefaultApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── NewSoda.java │ │ │ │ │ ├── Soda.java │ │ │ │ │ └── UpdateSoda.java │ │ │ ├── input-spec-with-uppercase-file-extension │ │ │ │ ├── input │ │ │ │ │ └── sodastore.JSON │ │ │ │ └── output │ │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── services │ │ │ │ │ └── uppercasefileextension │ │ │ │ │ ├── api │ │ │ │ │ ├── AwesomeSodaApi.java │ │ │ │ │ ├── AwesomeSodasApi.java │ │ │ │ │ └── DefaultApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── NewSoda.java │ │ │ │ │ ├── Soda.java │ │ │ │ │ └── UpdateSoda.java │ │ │ ├── oneof-interfaces-disabled │ │ │ │ ├── input │ │ │ │ │ └── sodastore.yaml │ │ │ │ └── output │ │ │ │ │ └── test │ │ │ │ │ ├── AllOf.java │ │ │ │ │ ├── AnyOf.java │ │ │ │ │ ├── Cola.java │ │ │ │ │ ├── ColaTemperature.java │ │ │ │ │ ├── DefaultApi.java │ │ │ │ │ ├── Fanta.java │ │ │ │ │ ├── OneOf.java │ │ │ │ │ ├── OneOfWithDiscriminator.java │ │ │ │ │ └── OneOfWithDiscriminatorAndMapping.java │ │ │ ├── oneof-interfaces-enabled │ │ │ │ ├── input │ │ │ │ │ └── sodastore.yaml │ │ │ │ └── output │ │ │ │ │ └── test │ │ │ │ │ ├── AllOf.java │ │ │ │ │ ├── AnyOf.java │ │ │ │ │ ├── Cola.java │ │ │ │ │ ├── ColaTemperature.java │ │ │ │ │ ├── DefaultApi.java │ │ │ │ │ ├── Fanta.java │ │ │ │ │ ├── FantaFlavor.java │ │ │ │ │ ├── OneOf.java │ │ │ │ │ ├── OneOfWithDiscriminator.java │ │ │ │ │ └── OneOfWithDiscriminatorAndMapping.java │ │ │ ├── partial-generation │ │ │ │ ├── input │ │ │ │ │ └── sodastore.json │ │ │ │ └── output │ │ │ │ │ └── com │ │ │ │ │ └── sap │ │ │ │ │ └── cloud │ │ │ │ │ └── sdk │ │ │ │ │ └── services │ │ │ │ │ └── builder │ │ │ │ │ ├── api │ │ │ │ │ └── DefaultApi.java │ │ │ │ │ └── model │ │ │ │ │ ├── Soda.java │ │ │ │ │ ├── SodaWithFoo.java │ │ │ │ │ └── UpdateSoda.java │ │ │ └── remove-operation-id-prefix │ │ │ │ ├── input │ │ │ │ └── sodastore.json │ │ │ │ └── output │ │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── services │ │ │ │ └── builder │ │ │ │ ├── api │ │ │ │ ├── OrdersApi.java │ │ │ │ └── SodasApi.java │ │ │ │ └── model │ │ │ │ ├── Order.java │ │ │ │ ├── OrderWithTimestamp.java │ │ │ │ ├── Soda.java │ │ │ │ └── SodaWithId.java │ │ │ ├── DataModelGeneratorUnitTest │ │ │ └── sodastore.yaml │ │ │ ├── DatamodelMetadataGenerationTest │ │ │ ├── failing-generation-validation-fields │ │ │ │ ├── input │ │ │ │ │ ├── failing-sodastore.yaml │ │ │ │ │ └── metadata-generator-properties.json │ │ │ │ └── output │ │ │ │ │ └── metadata │ │ │ │ │ └── failing-sodastore_CLIENT_JAVA.json │ │ │ ├── failing-generation │ │ │ │ ├── input │ │ │ │ │ ├── failing-generation.yaml │ │ │ │ │ └── metadata-generator-properties.json │ │ │ │ └── output │ │ │ │ │ └── metadata │ │ │ │ │ └── failing-generation_CLIENT_JAVA.json │ │ │ └── simple-sodastore │ │ │ │ ├── input │ │ │ │ ├── metadata-generator-properties.json │ │ │ │ └── sodastore.yaml │ │ │ │ └── output │ │ │ │ └── metadata │ │ │ │ └── sodastore_CLIENT_JAVA.json │ │ │ ├── MethodNameFieldPreprocessorTest │ │ │ ├── sodastore-with-empty-method-name-extension-field.json │ │ │ ├── sodastore-with-method-name-extension-field-without-parameters.json │ │ │ ├── sodastore-with-method-name-extension-field.json │ │ │ └── sodastore-without-method-name-extension-field.json │ │ │ ├── PreprocessingStepOrchestratorTest │ │ │ ├── sodastore-broken-file.yaml │ │ │ ├── sodastore.json │ │ │ ├── sodastore.txt │ │ │ └── sodastore.yaml │ │ │ └── ValidationKeywordsPreprocessorTest │ │ │ ├── AggregatorDirectSchemaChild.json │ │ │ ├── AggregatorInPathSchema.json │ │ │ ├── AggregatorNestedSchemaChild.json │ │ │ ├── sodastore-with-allOf.json │ │ │ └── sodastore.json │ └── pom.xml ├── pom.xml └── soap │ ├── pom.xml │ └── src │ └── main │ └── java │ └── com │ └── sap │ └── cloud │ └── sdk │ └── s4hana │ └── connectivity │ └── soap │ ├── Axis2CustomConverterListener.java │ ├── DefaultHttpClientTransportSender.java │ ├── DefaultHttpSender.java │ ├── SoapCustomConverter.java │ ├── SoapException.java │ └── SoapRequest.java ├── dependency-bundles ├── bom │ └── pom.xml ├── modules-bom │ └── pom.xml └── sdk-core │ └── pom.xml ├── docs ├── architecture │ ├── 0001-record-architecture-decisions.md │ ├── 0002-re-start-numbering-of-adrs.md │ └── 0003-use-github-actions-for-pipeline.md ├── blogs │ ├── img │ │ ├── part1-diff.png │ │ ├── part1-ospo-template.png │ │ ├── part1-release-notes-vdm-deprecation.png │ │ ├── part2-git.png │ │ ├── part2-timeline.png │ │ ├── part3-main-build.png │ │ ├── part3-module-inventory.png │ │ ├── part3-plugins.png │ │ ├── part3-pr-build.png │ │ ├── part3-prepare-release.png │ │ └── part3-test.png │ ├── oss-part1.md │ ├── oss-part2.md │ └── oss-part3.md ├── how-to │ ├── add-maven-module.md │ ├── module-templates │ │ ├── template-code-pom.xml │ │ ├── template-group-pom.xml │ │ └── template-parent-pom.xml │ ├── release.md │ ├── setup-intellij.md │ └── view-code-ql-scan-results.md └── images │ ├── code-ql-pr-comment.png │ ├── code-scanning-results-pr.png │ └── code-scanning-tab.png ├── javadoc.overview.html ├── latest.json ├── lombok.config ├── module-inventory.json ├── pom.xml ├── release_notes.md ├── s4hana ├── pom.xml ├── rfc │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── s4hana │ │ │ └── connectivity │ │ │ └── rfc │ │ │ ├── AbapToSoapNameConverter.java │ │ │ ├── AbstractRemoteFunctionRequest.java │ │ │ ├── AbstractRemoteFunctionRequestResult.java │ │ │ ├── AbstractTransactionFactory.java │ │ │ ├── BapiRequest.java │ │ │ ├── BapiRequestResult.java │ │ │ ├── BapiTransactionFactory.java │ │ │ ├── CommitStrategy.java │ │ │ ├── CustomSoapListDeserializer.java │ │ │ ├── DefaultJCoFunctionRetriever.java │ │ │ ├── DefaultRemoteFunctionErrorMapper.java │ │ │ ├── ExceptionPropagatingRemoteFunctionRequestErrorHandler.java │ │ │ ├── Fields.java │ │ │ ├── IgnoringErrorsRemoteFunctionRequestErrorHandler.java │ │ │ ├── JCoErpNoopConverter.java │ │ │ ├── JCoFieldToResultReader.java │ │ │ ├── JCoFunctionRetriever.java │ │ │ ├── JCoTransaction.java │ │ │ ├── MessageResultReader.java │ │ │ ├── Parameter.java │ │ │ ├── ParameterFields.java │ │ │ ├── ParameterKind.java │ │ │ ├── RemoteFunctionCache.java │ │ │ ├── RemoteFunctionErrorMapper.java │ │ │ ├── RemoteFunctionExceptionPriority.java │ │ │ ├── RemoteFunctionGsonBuilder.java │ │ │ ├── RemoteFunctionRequestErrorHandler.java │ │ │ ├── RemoteFunctionRequestExecutor.java │ │ │ ├── ResultElementJsonDeserializer.java │ │ │ ├── RfmRequest.java │ │ │ ├── RfmRequestResult.java │ │ │ ├── RfmTransactionFactory.java │ │ │ ├── SoapGsonResultElementFactory.java │ │ │ ├── SoapGsonResultPrimitive.java │ │ │ ├── SoapNamespace.java │ │ │ ├── SoapRemoteFunctionRequestSerializer.java │ │ │ ├── SoapSerializedRequestBuilder.java │ │ │ ├── SoapTransaction.java │ │ │ ├── Table.java │ │ │ ├── TableAsVector.java │ │ │ ├── TableRow.java │ │ │ ├── Transaction.java │ │ │ ├── Value.java │ │ │ ├── ValueType.java │ │ │ └── exception │ │ │ ├── AccessDeniedException.java │ │ │ ├── AccessDeniedExceptionFactory.java │ │ │ ├── InvalidParameterException.java │ │ │ ├── InvalidParameterExceptionFactory.java │ │ │ ├── MissingErpConfigException.java │ │ │ ├── MissingErpConfigurationExceptionFactory.java │ │ │ ├── MissingParameterException.java │ │ │ ├── MissingParameterFactory.java │ │ │ ├── NotImplementedException.java │ │ │ ├── NotImplementedExceptionFactory.java │ │ │ ├── ParameterNotFoundException.java │ │ │ ├── ParameterNotFoundFactory.java │ │ │ ├── RemoteFunctionCommitFailedException.java │ │ │ ├── RemoteFunctionException.java │ │ │ ├── RemoteFunctionExceptionFactory.java │ │ │ ├── RemoteFunctionRollbackFailedException.java │ │ │ ├── WrongCustomizingException.java │ │ │ └── WrongCustomizingExceptionFactory.java │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── sap │ │ │ └── cloud │ │ │ └── sdk │ │ │ └── s4hana │ │ │ └── connectivity │ │ │ └── rfc │ │ │ ├── AbapToSoapNameConverterTest.java │ │ │ ├── AbstractRemoteFunctionExceptionHandlingTest.java │ │ │ ├── BapiExceptionHandlingTest.java │ │ │ ├── BapiRequestSimpleFieldsParameterTest.java │ │ │ ├── BapiRequestTableAndStructureTest.java │ │ │ ├── BapiRequestTest.java │ │ │ ├── DataCollectionProgramTextsRfm.java │ │ │ ├── DataCollectionProgramTextsRfmTest.java │ │ │ ├── DefaultJCoFunctionRetrieverTest.java │ │ │ ├── JCoErpNoopConverterTest.java │ │ │ ├── JCoFieldToResultReaderTest.java │ │ │ ├── JCoTransactionTest.java │ │ │ ├── JCoTransactionValueTest.java │ │ │ ├── RemoteFunctionCacheTest.java │ │ │ ├── RemoteFunctionRequestExecutorTest.java │ │ │ ├── RfmExceptionHandlingTest.java │ │ │ ├── RfmRequestCommitHandlingTest.java │ │ │ ├── RfmRequestParameterTest.java │ │ │ ├── RfmRequestTest.java │ │ │ ├── SoapRemoteFunctionRequestExecutorTest.java │ │ │ └── SoapRemoteFunctionResultTableSerializationTest.java │ │ └── resources │ │ └── DataCollectionProgramTextsRfmTest │ │ └── response.xml ├── s4hana-connectivity │ ├── .gitignore │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── sap │ │ │ │ └── cloud │ │ │ │ └── sdk │ │ │ │ └── s4hana │ │ │ │ └── connectivity │ │ │ │ ├── AbstractRequestSerializer.java │ │ │ │ ├── DurationDeserializer.java │ │ │ │ ├── ErpHttpRequestExecutor.java │ │ │ │ ├── ErpTypeGsonTypeAdapterFactory.java │ │ │ │ ├── ErpTypeSerializer.java │ │ │ │ ├── Request.java │ │ │ │ ├── RequestExecutionMeasurements.java │ │ │ │ ├── RequestExecutor.java │ │ │ │ ├── RequestMethod.java │ │ │ │ ├── RequestResult.java │ │ │ │ ├── RequestSerializer.java │ │ │ │ ├── SerializedRequest.java │ │ │ │ ├── SerializedRequestResult.java │ │ │ │ ├── ServiceUriBuilder.java │ │ │ │ └── exception │ │ │ │ ├── AccessDeniedException.java │ │ │ │ ├── CloudConnectorException.java │ │ │ │ ├── LogonErrorException.java │ │ │ │ ├── RequestExecutionException.java │ │ │ │ └── RequestSerializationException.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── beans.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── s4hana │ │ └── connectivity │ │ ├── ErpTypeSerializerTest.java │ │ └── MessageTypeTest.java └── s4hana-core │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── com │ │ └── sap │ │ └── cloud │ │ └── sdk │ │ └── s4hana │ │ ├── serialization │ │ ├── AbstractErpTypeConverter.java │ │ ├── BigDecimalConverter.java │ │ ├── BigIntegerConverter.java │ │ ├── BooleanConverter.java │ │ ├── ByteConverter.java │ │ ├── CharacterConverter.java │ │ ├── DecimalBasedErpType.java │ │ ├── DistributionChannel.java │ │ ├── DistributionChannelConverter.java │ │ ├── DoubleConverter.java │ │ ├── ErpBoolean.java │ │ ├── ErpBooleanConverter.java │ │ ├── ErpDecimal.java │ │ ├── ErpDecimalConverter.java │ │ ├── ErpInteger.java │ │ ├── ErpType.java │ │ ├── ErpTypeConverter.java │ │ ├── FloatConverter.java │ │ ├── IntegerBasedErpType.java │ │ ├── IntegerConverter.java │ │ ├── InvertedLocalDate.java │ │ ├── InvertedLocalDateConverter.java │ │ ├── LocalDateConverter.java │ │ ├── LocalDateErpType.java │ │ ├── LocalTimeConverter.java │ │ ├── LocalTimeErpType.java │ │ ├── LocaleConverter.java │ │ ├── LongConverter.java │ │ ├── MessageClass.java │ │ ├── MessageClassConverter.java │ │ ├── MessageNumber.java │ │ ├── MessageNumberConverter.java │ │ ├── MessageType.java │ │ ├── MessageTypeConverter.java │ │ ├── RemoteFunctionError.java │ │ ├── RemoteFunctionMessage.java │ │ ├── SapClient.java │ │ ├── SapClientConverter.java │ │ ├── ShortConverter.java │ │ ├── StringBasedErpType.java │ │ ├── StringBasedErpTypeConverter.java │ │ ├── StringRepresentableKey.java │ │ └── YearConverter.java │ │ └── types │ │ └── Year.java │ └── test │ └── java │ └── com │ └── sap │ └── cloud │ └── sdk │ └── s4hana │ └── serialization │ ├── ErpBooleanTest.java │ ├── ErpDecimalTest.java │ └── StringBasedErpTypeTest.java ├── scripts ├── common │ ├── __init__.py │ ├── _maven_module │ │ ├── __init__.py │ │ ├── maven_module_reader.py │ │ ├── maven_module_reader_configuration.json │ │ └── maven_module_reader_configuration.py │ ├── maven_module.py │ ├── release_audience.py │ └── release_maturity.py └── create_module_inventory_file.py └── testutil ├── pom.xml └── src ├── main └── java │ └── com │ └── sap │ └── cloud │ └── sdk │ └── testutil │ ├── AuthTokenContext.java │ ├── DirectoryContentAssertionUtil.java │ ├── PrincipalContext.java │ ├── TenantContext.java │ ├── TestConfigurationError.java │ ├── TestContext.java │ └── TestContextApi.java └── test └── java └── com └── sap └── cloud └── sdk └── testutil └── TestContextTest.java /.adr-dir: -------------------------------------------------------------------------------- 1 | docs/architecture/ 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: Question 2 | description: Ask a question about the SAP Cloud SDK for Java. 3 | labels: 4 | - question 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | This repository is for Java related issues only. Please open [JavaScript / TypeScript issues here](https://github.com/SAP/cloud-sdk-js/issues/new/choose) 10 | - type: textarea 11 | attributes: 12 | label: "Ask the Question" 13 | description: Give a clear and concise description. 14 | validations: 15 | required: true 16 | -------------------------------------------------------------------------------- /.github/workflows/fosstars-report.yml: -------------------------------------------------------------------------------- 1 | name: "Fosstars (Security)" 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | - cron: "0 0 * * *" 6 | 7 | jobs: 8 | create_fosstars_report: 9 | runs-on: ubuntu-latest 10 | name: "Security rating" 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: SAP/fosstars-rating-core-action@v1.14.0 14 | with: 15 | report-branch: fosstars-report 16 | token: "${{ secrets.GITHUB_TOKEN }}" 17 | -------------------------------------------------------------------------------- /.github/workflows/reuse.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. 2 | # 3 | # SPDX-License-Identifier: CC0-1.0 4 | 5 | name: REUSE Compliance Check 6 | 7 | on: 8 | push: 9 | branches: ["main"] 10 | 11 | jobs: 12 | test: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | - name: REUSE Compliance Check 17 | uses: fsfe/reuse-action@v5.0.0 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/target/ 2 | **/.settings/ 3 | **/.project 4 | **/.classpath 5 | **/.DS_Store 6 | **/*.pyc 7 | **/*.pmd 8 | **/*.fpr 9 | **/*.ipr 10 | **/*.iws 11 | **/*.iml 12 | **/*.idea 13 | **/*.vscode 14 | **/.cache 15 | **/.cache-main 16 | **/WebContent 17 | META-INF/application.xml 18 | **/*.sublime-project 19 | **/*.sublime-workspace 20 | pom.xml.versionsBackup 21 | /mvnrepo 22 | /temp 23 | **/*.log 24 | **/*.trc 25 | **/metadata/*.edmx 26 | **/swagger/*.json 27 | local_m2/* 28 | # ignore junit temporary directories 29 | **/junit[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ 30 | **/vdm-integration-tests/serviceNameMappings.properties 31 | .venv 32 | .mvn 33 | mvnw 34 | mvnw.cmd 35 | **/.factorypath 36 | mvnvm.properties 37 | javadoc.properties 38 | 39 | **/.openapi-generator/** 40 | 41 | 42 | local_maven_repo 43 | badges/ 44 | .java-version 45 | -------------------------------------------------------------------------------- /.pipeline/config.yml: -------------------------------------------------------------------------------- 1 | steps: 2 | detectExecuteScan: 3 | projectName: 'SHC - CLOUD SDK' 4 | groups: 5 | - 'CLOUD SDK 4.0' 6 | serverUrl: 'https://sap.blackducksoftware.com/' 7 | mavenExcludedScopes: ["provided", "test"] 8 | failOn: ['BLOCKER', 'CRITICAL', 'MAJOR'] 9 | versioningModel: "major" 10 | detectTools: ['DETECTOR', 'BINARY_SCAN'] 11 | 12 | stages: 13 | test: 14 | coverageThresholds: 15 | instruction: 75 16 | branch: 67 17 | complexity: 65 18 | line: 76 19 | method: 71 20 | class: 80 21 | codeCheck: 22 | checkstyle: 23 | high: '14'# Open tasks (to do or fix me) 24 | normal: '0' 25 | low: '0' 26 | findbugs: #SpotBugs 27 | high: '0' 28 | normal: '0' 29 | low: '0' 30 | pmd: 31 | high: '0' 32 | normal: '0' 33 | low: '0' 34 | -------------------------------------------------------------------------------- /.pipeline/scripts/README.md: -------------------------------------------------------------------------------- 1 | ## CI Scripts 2 | 3 | The files here are used by the GitHub Actions workflows, but can also be used locally. 4 | Their purpose is to improve the pipeline UX by parsing result files and printing results in a readable way. 5 | -------------------------------------------------------------------------------- /.pipeline/scripts/generate-javadoc-sourcepath-properties.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | 4 | def write_javadoc_sourcepath_properties(): 5 | with open("module-inventory.json", "r") as file: 6 | module_inventory = json.load(file) 7 | 8 | with open("javadoc.properties", "w") as output: 9 | output.write("javadoc.sourcepath = ") 10 | 11 | for i, module in enumerate(module_inventory, start=1): 12 | if module["releaseAudience"] != "Public": 13 | continue 14 | target_path = module["pomFile"].replace("pom.xml", "target/delombok;") 15 | if i == len(module_inventory): 16 | output.write(target_path) 17 | else: 18 | output.write(target_path + "\\\n") 19 | 20 | 21 | def main(): 22 | write_javadoc_sourcepath_properties() 23 | 24 | 25 | if __name__ == '__main__': 26 | main() 27 | -------------------------------------------------------------------------------- /.pipeline/scripts/notify.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | 4 | payload = {"text":f"Github Action Workflow {os.getenv('WORKFLOW')} failed on branch {os.getenv('BRANCH_NAME')}: {os.getenv('WORKFLOW_RUN_URL')}"} 5 | res = requests.post(os.getenv('SLACK_WEBHOOK'), json=payload) 6 | -------------------------------------------------------------------------------- /.pipeline/scripts/print-coverage.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | python -m venv .venv 5 | source ./.venv/bin/activate 6 | pip install jacoco-badge-generator 7 | 8 | python3 -m jacoco_badge_generator --jacoco-csv-file $(find . -name jacoco.csv | tr "\n" " ") 9 | -------------------------------------------------------------------------------- /.pipeline/scripts/release_notes_template.md: -------------------------------------------------------------------------------- 1 | ## 5.X.0-SNAPSHOT 2 | 3 | [All Release Changes](https://github.com/SAP/cloud-sdk-java/releases) 4 | 5 | ### 🚧 Known Issues 6 | 7 | - 8 | 9 | ### 🔧 Compatibility Notes 10 | 11 | - 12 | 13 | ### ✨ New Functionality 14 | 15 | - 16 | 17 | ### 📈 Improvements 18 | 19 | - 20 | 21 | ### 🐛 Fixed Issues 22 | 23 | - 24 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/__gitignore__: -------------------------------------------------------------------------------- 1 | **/credentials.* 2 | **/target/ 3 | /s4hana_pipeline 4 | **/*.log 5 | **/*.trc 6 | **/.settings/ 7 | **/.project 8 | **/.classpath 9 | **/.idea 10 | **/*.iml 11 | **/.vscode 12 | **/node_modules 13 | **/.DS_Store 14 | .pipeline/commonPipelineEnvironment 15 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/application/src/main/java/__packageInPathFormat__/models/HelloWorldResponse.java: -------------------------------------------------------------------------------- 1 | #set( $symbol_pound = '#' ) 2 | #set( $symbol_dollar = '$' ) 3 | #set( $symbol_escape = '\' ) 4 | package ${package}.models; 5 | 6 | import com.fasterxml.jackson.annotation.JsonProperty; 7 | 8 | @SuppressWarnings("PMD.UnusedPrivateField") 9 | public class HelloWorldResponse 10 | { 11 | @JsonProperty("hello") 12 | private final String name; 13 | 14 | public HelloWorldResponse( final String name ) { 15 | this.name = name; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/application/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8080 3 | 4 | --- 5 | #-- The below configuration is enabled **only** when activating the 'local' profile for Spring Boot 6 | spring: 7 | config: 8 | activate: 9 | on-profile: 10 | - local 11 | 12 | #-- The following lines are required to run your application locally. Please refer to this documentation for further information: 13 | #-- https://github.com/SAP/cloud-security-xsuaa-integration/tree/main/spring-security#local-setup-fails-with-application-failed-to-start 14 | sap: 15 | security: 16 | services: 17 | xsuaa: 18 | xsappname: your-app-name 19 | uaadomain: uaadomain 20 | clientid: your-client-id 21 | clientsecret: your-client-secret 22 | url: https://yourdomain.uaadomain 23 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/application/src/main/resources/logback-spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/application/src/test/java/__packageInPathFormat__/UnitTest.java: -------------------------------------------------------------------------------- 1 | #set( $symbol_pound = '#' ) 2 | #set( $symbol_dollar = '$' ) 3 | #set( $symbol_escape = '\' ) 4 | package ${package}; 5 | 6 | import org.junit.jupiter.api.Test; 7 | 8 | import static org.junit.jupiter.api.Assertions.*; 9 | 10 | class UnitTest 11 | { 12 | @Test 13 | void test() 14 | { 15 | assertTrue(true); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/application/src/test/resources/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "world" 3 | } 4 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/main/resources/archetype-resources/manifest.yml: -------------------------------------------------------------------------------- 1 | --- 2 | applications: 3 | 4 | - name: ${artifactId} 5 | memory: 1500M 6 | timeout: 300 7 | random-route: true 8 | path: application/target/${artifactId}-application.jar 9 | buildpacks: 10 | - sap_java_buildpack 11 | env: 12 | TARGET_RUNTIME: main 13 | SPRING_PROFILES_ACTIVE: 'cloud' 14 | JBP_CONFIG_SAPJVM_MEMORY_SIZES: 'metaspace:128m..' 15 | JBP_CONFIG_COMPONENTS: 'jres: [''com.sap.xs.java.buildpack.jre.SAPMachineJRE'']' 16 | JBP_CONFIG_SAP_MACHINE_JRE: '{ use_offline_repository: false, version: 17.0.15 }' 17 | # services: 18 | # - my-application-logs 19 | # - my-xsuaa 20 | # - my-destination 21 | # - my-connectivity 22 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/test/resources/projects/basic/archetype.properties: -------------------------------------------------------------------------------- 1 | #Mon May 08 13:37:59 CEST 2017 2 | package=it.pkg 3 | version=0.1-SNAPSHOT 4 | groupId=archetype.it 5 | artifactId=basic 6 | gitignore=.gitignore 7 | -------------------------------------------------------------------------------- /archetypes/spring-boot3/src/test/resources/projects/basic/goal.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/archetypes/spring-boot3/src/test/resources/projects/basic/goal.txt -------------------------------------------------------------------------------- /cloudplatform/caching/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.settings/ 3 | /.project 4 | /src/main/generated 5 | /.classpath 6 | -------------------------------------------------------------------------------- /cloudplatform/caching/src/main/java/com/sap/cloud/sdk/cloudplatform/cache/CacheStats.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.cache; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * POJO implmentation of the {@link CacheStatsMXBean} interface. 7 | */ 8 | @Data 9 | public class CacheStats implements CacheStatsMXBean 10 | { 11 | private final long cacheSize; 12 | private final long hitCount; 13 | private final long missCount; 14 | private final long loadSuccessCount; 15 | private final long loadExceptionCount; 16 | private final long totalLoadTime; 17 | private final long evictionCount; 18 | } 19 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/DestinationHeaderProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import java.util.List; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * Allows to provide additional headers for a specific destination. 9 | */ 10 | public interface DestinationHeaderProvider 11 | { 12 | /** 13 | * Provides a list of {@link Header} objects which should be used with the given destination for a request URI. 14 | * 15 | * @param requestContext 16 | * The destination and request specific context. 17 | * @return The headers to use with the given destination. 18 | */ 19 | @Nonnull 20 | List
getHeaders( @Nonnull final DestinationRequestContext requestContext ); 21 | } 22 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/DestinationRequestContext.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import java.net.URI; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | import lombok.AccessLevel; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.Getter; 10 | import lombok.RequiredArgsConstructor; 11 | 12 | /** 13 | * The destination and request specific context. 14 | */ 15 | @Getter 16 | @EqualsAndHashCode 17 | @RequiredArgsConstructor( access = AccessLevel.PACKAGE ) 18 | public class DestinationRequestContext 19 | { 20 | @Nonnull 21 | private final HttpDestination destination; 22 | 23 | @Nonnull 24 | private final URI requestUri; 25 | } 26 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/Header.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import javax.annotation.Nonnull; 4 | import javax.annotation.Nullable; 5 | 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.RequiredArgsConstructor; 9 | import lombok.ToString; 10 | 11 | /** 12 | * A name-value pair representing a header (for example, an HTTP header). 13 | */ 14 | @EqualsAndHashCode 15 | @ToString 16 | @Getter 17 | @RequiredArgsConstructor 18 | public class Header 19 | { 20 | @Nonnull 21 | private final String name; 22 | 23 | @Nullable 24 | private final String value; 25 | } 26 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/HttpDestination.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | /** 4 | * Platform independent representation of a HTTP destination as a collection of key-value pairs. 5 | */ 6 | public interface HttpDestination extends HttpDestinationProperties 7 | { 8 | // This interface has been kept to ease the upgrade from v4 to v5. 9 | } 10 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/OnBehalfOf.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | /** 4 | * Represents the behalf upon which an outbound request can be made. 5 | * 6 | * @since 4.10.0 7 | */ 8 | public enum OnBehalfOf 9 | { 10 | /** 11 | * A technical user for the provider account. 12 | * 13 | * @since 4.10.0 14 | */ 15 | TECHNICAL_USER_PROVIDER, 16 | // TECHNICAL_USER_SUBSCRIBER, 17 | /** 18 | * A technical user based on tenant set in the current context. 19 | * 20 | * @since 4.10.0 21 | */ 22 | TECHNICAL_USER_CURRENT_TENANT, 23 | /** 24 | * A named user based on the auth token set in the current context. 25 | * 26 | * @since 4.10.0 27 | */ 28 | NAMED_USER_CURRENT_TENANT 29 | } 30 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/RfcDestination.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | /** 4 | * Platform independent representation of a rfc destination as a collection of key-value pairs. 5 | *

6 | * Additionally, provides an easy way to decorate itself with a given decorator function. 7 | * 8 | * @deprecated Please use {@link Destination} instead. 9 | */ 10 | @Deprecated 11 | public interface RfcDestination extends Destination, RfcDestinationProperties 12 | { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/RfcDestinationProperties.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | /** 4 | * Adds RFC relevant fields to the "generic" destination. 5 | * 6 | * @deprecated Please use {@link DefaultDestination} instead. 7 | */ 8 | @Deprecated 9 | public interface RfcDestinationProperties extends DestinationProperties 10 | { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/cloudplatform-connectivity/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.connectivity.ErpDestinationHeaderProvider 2 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-connectivity/src/test/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProviderTest$TestDestinationHeaderProvider -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/java/com/sap/cloud/sdk/cloudplatform/PlatformSslContextProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform; 2 | 3 | import javax.annotation.Nonnull; 4 | import javax.net.ssl.SSLContext; 5 | 6 | import io.vavr.control.Try; 7 | 8 | /** 9 | * Creates an SslContext based on properties of the platform. 10 | */ 11 | @FunctionalInterface 12 | public interface PlatformSslContextProvider 13 | { 14 | /** 15 | * Try to create an {@link SSLContext} based on an identity provided by the platform. For example, the platform may 16 | * provide X509 certificates in environment variables or on the file system. 17 | * 18 | * @return A {@link Try} containing either the derived SSL context or a failure. 19 | */ 20 | @Nonnull 21 | Try tryGetContext(); 22 | } 23 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/java/com/sap/cloud/sdk/cloudplatform/requestheader/RequestHeaderFacade.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.requestheader; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import io.vavr.control.Try; 6 | 7 | /** 8 | * This class provides access to the {@link RequestHeaderContainer} for the current context. 9 | */ 10 | @FunctionalInterface 11 | public interface RequestHeaderFacade 12 | { 13 | /** 14 | * Returns a {@link Try} that might contain the {@link RequestHeaderContainer} of the current context. 15 | * 16 | * @return A {@link Try} that might contain the {@link RequestHeaderContainer} of the current context. 17 | */ 18 | @Nonnull 19 | Try tryGetRequestHeaders(); 20 | } 21 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/java/com/sap/cloud/sdk/cloudplatform/thread/Executable.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.thread; 2 | 3 | /** 4 | * An class for executing code while allowing throwing checked exceptions. It is therefore similar to {@link Runnable}, 5 | * but allows checked exceptions to be thrown in the execution block. 6 | */ 7 | @SuppressWarnings( "PMD.SignatureDeclareThrowsException" ) 8 | @FunctionalInterface 9 | public interface Executable 10 | { 11 | /** 12 | * Executes some logic, or throws an exception if unable to do so. 13 | * 14 | * @throws Exception 15 | * If there is an issue while executing. 16 | */ 17 | void execute() 18 | throws Exception; 19 | } 20 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/java/com/sap/cloud/sdk/cloudplatform/thread/exception/ThreadContextPropertyNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.thread.exception; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * Exception indicating a ThreadContext property not being found. 9 | */ 10 | @NoArgsConstructor 11 | public class ThreadContextPropertyNotFoundException extends ThreadContextPropertyException 12 | { 13 | private static final long serialVersionUID = -4099758265561452522L; 14 | 15 | /** 16 | * Default constructor. 17 | * 18 | * @param propertyName 19 | * Property name not found. 20 | */ 21 | public ThreadContextPropertyNotFoundException( @Nonnull final String propertyName ) 22 | { 23 | super("Property '" + propertyName + "' does not exist."); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/cloudplatform-core/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.thread.ThreadContextFacade: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.thread.ThreadLocalThreadContextFacade 2 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.thread.ThreadContextListener: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.requestheader.RequestHeaderThreadContextListener 2 | -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sBrokenLayout/xsuaa/multiple-json-files/first-json: -------------------------------------------------------------------------------- 1 | { 2 | "a": "b" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sBrokenLayout/xsuaa/multiple-json-files/second-json: -------------------------------------------------------------------------------- 1 | { 2 | "c": "d" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sDataLayout/k8s-data-specific/binding/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sDataLayout/k8s-data-specific/binding/source: -------------------------------------------------------------------------------- 1 | k8s-data -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sDataLayout/xsuaa/k8s-data-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sDataLayout/xsuaa/k8s-data-xsuaa/source: -------------------------------------------------------------------------------- 1 | k8s-data -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sDataLayout/xsuaa/overloaded-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sDataLayout/xsuaa/overloaded-xsuaa/source: -------------------------------------------------------------------------------- 1 | k8s-data -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/k8s-mixed-specific/k8s-mixed-data/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/k8s-mixed-specific/k8s-mixed-data/source: -------------------------------------------------------------------------------- 1 | k8s-mixed-data -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/k8s-mixed-specific/k8s-mixed-secret-key/credentials: -------------------------------------------------------------------------------- 1 | { 2 | "source": "k8s-mixed-secret-key" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/k8s-mixed-specific/k8s-mixed-secret-key/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/k8s-mixed-specific/k8s-mixed-secret-root-key/secretRootKey: -------------------------------------------------------------------------------- 1 | { 2 | "plan": "lite", 3 | "source": "k8s-mixed-secret-root-key" 4 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/k8s-mixed-data-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/k8s-mixed-data-xsuaa/source: -------------------------------------------------------------------------------- 1 | k8s-mixed-data -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/k8s-mixed-secret-key-xsuaa/credentials: -------------------------------------------------------------------------------- 1 | { 2 | "source": "k8s-mixed-secret-key" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/k8s-mixed-secret-key-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/k8s-mixed-secret-root-key-xsuaa/secretRootKey: -------------------------------------------------------------------------------- 1 | { 2 | "plan": "lite", 3 | "source": "k8s-mixed-secret-root-key" 4 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/overloaded-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sMixedLayout/xsuaa/overloaded-xsuaa/source: -------------------------------------------------------------------------------- 1 | k8s-mixed-data -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretKeyLayout/k8s-secret-key-specific/binding/credentials: -------------------------------------------------------------------------------- 1 | { 2 | "source": "k8s-secret-key" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretKeyLayout/k8s-secret-key-specific/binding/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretKeyLayout/xsuaa/k8s-secret-key-xsuaa/credentials: -------------------------------------------------------------------------------- 1 | { 2 | "source": "k8s-secret-key" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretKeyLayout/xsuaa/k8s-secret-key-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretKeyLayout/xsuaa/overloaded-xsuaa/credentials: -------------------------------------------------------------------------------- 1 | { 2 | "source": "k8s-secret-key" 3 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretKeyLayout/xsuaa/overloaded-xsuaa/plan: -------------------------------------------------------------------------------- 1 | lite -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretRootKeyLayout/k8s-secret-root-key-specific/binding/secretRootKey: -------------------------------------------------------------------------------- 1 | { 2 | "plan": "lite", 3 | "source": "k8s-secret-root-key" 4 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretRootKeyLayout/xsuaa/k8s-secret-root-key-xsuaa/secretRootKey: -------------------------------------------------------------------------------- 1 | { 2 | "plan": "lite", 3 | "source": "k8s-secret-root-key" 4 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/K8sSecretRootKeyLayout/xsuaa/overloaded-xsuaa/secretRootKey: -------------------------------------------------------------------------------- 1 | { 2 | "plan": "lite", 3 | "source": "k8s-secret-root-key" 4 | } -------------------------------------------------------------------------------- /cloudplatform/cloudplatform-core/src/test/resources/servicebinding/valid_vcap_services.json: -------------------------------------------------------------------------------- 1 | { 2 | "xsuaa": [ 3 | { 4 | "name": "vcap-xsuaa", 5 | "plan": "lite", 6 | "credentials": { 7 | "source": "vcap" 8 | } 9 | }, 10 | { 11 | "name": "overloaded-xsuaa", 12 | "plan": "lite", 13 | "credentials": { 14 | "source": "vcap" 15 | } 16 | } 17 | ], 18 | "vcap-specific": [ 19 | { 20 | "name": "binding", 21 | "plan": "lite", 22 | "credentials": { 23 | "source": "vcap" 24 | } 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/CsrfToken.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.Value; 7 | 8 | /** 9 | * CSRF token wrapper type. 10 | */ 11 | @Value 12 | @RequiredArgsConstructor 13 | public class CsrfToken 14 | { 15 | @Nonnull 16 | String token; 17 | } 18 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/UriQueryMerger.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import java.net.URI; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * Interface to resolve the request URI for a given request. This is used to determine the full request URI. 9 | */ 10 | @FunctionalInterface 11 | public interface UriQueryMerger 12 | { 13 | /** 14 | * Returns the request URI for the given request. This method is used to resolve the request URI 15 | * 16 | * @param requestUri 17 | * the request uri to merge. 18 | * @return the request URI. 19 | */ 20 | @Nonnull 21 | URI mergeRequestUri( @Nonnull final URI requestUri ); 22 | } 23 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/java/com/sap/cloud/sdk/cloudplatform/connectivity/ApacheHttpHeaderTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class ApacheHttpHeaderTest 8 | { 9 | @Test 10 | void testToString() 11 | { 12 | final Header header = new Header("key", "value"); 13 | 14 | final HttpClientWrapper.ApacheHttpHeader apacheHttpHeader = new HttpClientWrapper.ApacheHttpHeader(header); 15 | 16 | assertThat(apacheHttpHeader.toString()).isEqualTo("ApacheHttpHeader(header=Header(name=key, value=(hidden)))"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/java/com/sap/cloud/sdk/cloudplatform/connectivity/AsciiUtilsTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class AsciiUtilsTest 8 | { 9 | @Test 10 | void testRemoveNonPrintableCharacters() 11 | { 12 | final AsciiUtils asciiUtils = new AsciiUtils(); 13 | 14 | assertThat(asciiUtils.removeNonPrintableCharacters("Some\nString")).isEqualTo("SomeString"); 15 | assertThat(asciiUtils.removeNonPrintableCharacters("Some\rString")).isEqualTo("SomeString"); 16 | assertThat(asciiUtils.removeNonPrintableCharacters("Some\tString")).isEqualTo("SomeString"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/java/com/sap/cloud/sdk/cloudplatform/connectivity/HttpClientAccessorTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class HttpClientAccessorTest 8 | { 9 | @Test 10 | void testDefaultHttpClientCache() 11 | { 12 | assertThat(HttpClientAccessor.getHttpClientCache()).isExactlyInstanceOf(DefaultHttpClientCache.class); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/AbstractX509SslContextProviderTest/invalid_cert: -------------------------------------------------------------------------------- 1 | 1234 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/AbstractX509SslContextProviderTest/invalid_key: -------------------------------------------------------------------------------- 1 | 1234 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/ClientCertificateAuthenticationLocalTest/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Credentials 3 | 4 | The credential files are generated from command line. This process can be automated. 5 | 6 | ## CREATE CLIENT CREDENTIALS 7 | 8 | * Generate key pair 9 | ```bash 10 | openssl req -x509 -newkey rsa:2048 -utf8 -days 3650 -nodes -config client-cert.conf -keyout client-cert.key -out client-cert.crt 11 | ``` 12 | 13 | * Generate _PKCS#12_ keystore 14 | ```bash 15 | openssl pkcs12 -export -inkey client-cert.key -in client-cert.crt -out client-cert.p12 -password "pass:cca-password" 16 | ``` 17 | 18 | * Transform to JKS 19 | 20 | ```bash 21 | keytool -importkeystore -deststorepass "cca-password" -destkeypass "cca-password" -srckeystore client-cert.p12 -srcstorepass "cca-password" -deststoretype pkcs12 -destkeystore client-cert.pkcs12 22 | ``` 23 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.conf: -------------------------------------------------------------------------------- 1 | [CA_default] 2 | copy_extensions = copy 3 | 4 | [req] 5 | default_bits = 4096 6 | prompt = no 7 | default_md = sha256 8 | distinguished_name = req_distinguished_name 9 | x509_extensions = v3_ca 10 | 11 | [req_distinguished_name] 12 | C = DE 13 | ST = Brandenburg 14 | O = Potsdam 15 | emailAddress = cloudsdk@sap.com 16 | CN = localhost 17 | 18 | [v3_ca] 19 | basicConstraints = CA:FALSE 20 | keyUsage = digitalSignature, keyEncipherment 21 | subjectAltName = @alternate_names 22 | 23 | [alternate_names] 24 | DNS.1 = localhost 25 | IP.1 = 127.0.0.1 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.p12 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.pkcs12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.pkcs12 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/client.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/client.cer -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/client_cacerts.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/client_cacerts.jks -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/client_keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/client_keystore.jks -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/server.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/server.cer -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/server_cacerts.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/server_cacerts.jks -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/server_keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient4/src/test/resources/HttpClientAndServerTrustTest/server_keystore.jks -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient5/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/java/com/sap/cloud/sdk/cloudplatform/connectivity/ApacheHttpClient5AccessorTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class ApacheHttpClient5AccessorTest 8 | { 9 | @Test 10 | void testDefaultHttpClientCache() 11 | { 12 | assertThat(ApacheHttpClient5Accessor.getHttpClientCache()) 13 | .isExactlyInstanceOf(DefaultApacheHttpClient5Cache.class); 14 | } 15 | 16 | @Test 17 | void testDefaultHttpClientFactory() 18 | { 19 | assertThat(ApacheHttpClient5Accessor.getHttpClientFactory()) 20 | .isExactlyInstanceOf(DefaultApacheHttpClient5Factory.class); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/java/com/sap/cloud/sdk/cloudplatform/connectivity/ApacheHttpClient5CacheBuilderTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import static org.assertj.core.api.Assertions.assertThatNoException; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class ApacheHttpClient5CacheBuilderTest 8 | { 9 | @Test 10 | void testBuilderContainsOptionalParametersOnly() 11 | { 12 | // make sure we can build a new cache instance without supplying any parameters 13 | assertThatNoException().isThrownBy(() -> new ApacheHttpClient5CacheBuilder().build()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/java/com/sap/cloud/sdk/cloudplatform/connectivity/ApacheHttpClient5FactoryBuilderTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import static org.assertj.core.api.Assertions.assertThatNoException; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class ApacheHttpClient5FactoryBuilderTest 8 | { 9 | 10 | @Test 11 | void testBuilderContainsOptionalParametersOnly() 12 | { 13 | // make sure we can build a new factory instance without supplying any parameters 14 | assertThatNoException().isThrownBy(() -> new ApacheHttpClient5FactoryBuilder().build()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/resources/ClientCertificateAuthenticationLocalTest/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Credentials 3 | 4 | The credential files are generated from command line. This process can be automated. 5 | 6 | ## CREATE CLIENT CREDENTIALS 7 | 8 | * Generate key pair 9 | ```bash 10 | openssl req -x509 -newkey rsa:2048 -utf8 -days 3650 -nodes -config client-cert.conf -keyout client-cert.key -out client-cert.crt 11 | ``` 12 | 13 | * Generate _PKCS#12_ keystore 14 | ```bash 15 | openssl pkcs12 -export -inkey client-cert.key -in client-cert.crt -out client-cert.p12 -password "pass:cca-password" 16 | ``` 17 | 18 | * Transform to JKS 19 | 20 | ```bash 21 | keytool -importkeystore -deststorepass "cca-password" -destkeypass "cca-password" -srckeystore client-cert.p12 -srcstorepass "cca-password" -deststoretype pkcs12 -destkeystore client-cert.pkcs12 22 | ``` 23 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.conf: -------------------------------------------------------------------------------- 1 | [CA_default] 2 | copy_extensions = copy 3 | 4 | [req] 5 | default_bits = 4096 6 | prompt = no 7 | default_md = sha256 8 | distinguished_name = req_distinguished_name 9 | x509_extensions = v3_ca 10 | 11 | [req_distinguished_name] 12 | C = DE 13 | ST = Brandenburg 14 | O = Potsdam 15 | emailAddress = cloudsdk@sap.com 16 | CN = localhost 17 | 18 | [v3_ca] 19 | basicConstraints = CA:FALSE 20 | keyUsage = digitalSignature, keyEncipherment 21 | subjectAltName = @alternate_names 22 | 23 | [alternate_names] 24 | DNS.1 = localhost 25 | IP.1 = 127.0.0.1 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient5/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.p12 -------------------------------------------------------------------------------- /cloudplatform/connectivity-apache-httpclient5/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.pkcs12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-apache-httpclient5/src/test/resources/ClientCertificateAuthenticationLocalTest/client-cert.pkcs12 -------------------------------------------------------------------------------- /cloudplatform/connectivity-destination-service/src/main/java/com/sap/cloud/sdk/cloudplatform/connectivity/DestinationRetrieval.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.connectivity; 2 | 3 | import java.util.function.Supplier; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | import lombok.Getter; 8 | import lombok.RequiredArgsConstructor; 9 | 10 | @RequiredArgsConstructor 11 | @Getter 12 | class DestinationRetrieval 13 | { 14 | @Nonnull 15 | private final Supplier result; 16 | 17 | @Nonnull 18 | private final OnBehalfOf onBehalfOf; 19 | 20 | DestinationServiceV1Response get() 21 | { 22 | return getResult().get(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-destination-service/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-destination-service/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/connectivity-destination-service/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-destination-service/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.DestinationHeaderProvider -------------------------------------------------------------------------------- /cloudplatform/connectivity-destination-service/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.DestinationLoader: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.connectivity.DestinationService 2 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-destination-service/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | testServlet 10 | com.sap.cloud.sdk.cloudplatform.connectivity.XsuaaSecurityTest$TestServlet 11 | 12 | 13 | testServlet 14 | /app 15 | 16 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-dwc/src/main/resources/META-INF/services/com.sap.cloud.environment.servicebinding.api.ServiceBindingAccessor: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.connectivity.MegacliteServiceBindingAccessor 2 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-dwc/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.ServiceBindingDestinationLoader: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.connectivity.MegacliteServiceBindingDestinationLoader 2 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-dwc/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.security.AuthTokenFacade: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.security.DwcAuthTokenFacade 2 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-dwc/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.security.principal.PrincipalFacade: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.security.DwcPrincipalFacade -------------------------------------------------------------------------------- /cloudplatform/connectivity-dwc/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.tenant.TenantFacade: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.tenant.DwcTenantFacade 2 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-oauth/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/connectivity-oauth/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/connectivity-oauth/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.connectivity.ServiceBindingDestinationLoader: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2ServiceBindingDestinationLoader 2 | com.sap.cloud.sdk.cloudplatform.connectivity.IdentityAuthenticationServiceBindingDestinationLoader 3 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-oauth/src/test/resources/IdentityAuthenticationPropertySupplier/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Credentials 3 | 4 | The credential files are generated from command line. This process can be automated. 5 | 6 | ## CREATE CLIENT CREDENTIALS 7 | 8 | * Generate an **RSA** private key: 9 | ```bash 10 | openssl genrsa -out privatekey.pem 2048 -traditional 11 | ``` 12 | 13 | * Generate a **C**ertificate **S**igning **R**equest: 14 | ```bash 15 | openssl req -new -key privatekey.pem -out csr.pem 16 | ``` 17 | 18 | * Sign the **CSR** with the **RSA** private key: 19 | ```bash 20 | openssl x509 -req -days 3650 -in csr.pem -signkey privatekey.pem -out certificate.pem 21 | ``` 22 | -------------------------------------------------------------------------------- /cloudplatform/connectivity-ztis/src/test/resources/ZeroTrustIdentityServiceTest/key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOt7smVohjk5hhbL0 3 | iXozlFrgtoBXVKtVzadX3X7ohv6hRANCAARCv3HNbB6kWJwEwfHwFEO/7VIE8GBF 4 | 59iI7p7nZWXmugUfa2Lnc32ijODsVbN7i+XkMWB+b7C3yL2LYBXz07ts 5 | -----END PRIVATE KEY----- -------------------------------------------------------------------------------- /cloudplatform/resilience-api/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/resilience-api/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/resilience4j/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.settings/ 3 | /.project 4 | /src/main/generated 5 | /.classpath 6 | -------------------------------------------------------------------------------- /cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/BulkheadProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.resilience4j; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.resilience.ResilienceConfiguration; 6 | 7 | import io.github.resilience4j.bulkhead.Bulkhead; 8 | 9 | /** 10 | * Provider for bulkheads. 11 | */ 12 | public interface BulkheadProvider 13 | { 14 | /** 15 | * Provides a bulkhead. 16 | * 17 | * @param configuration 18 | * The configuration for constructing the bulkhead. 19 | * 20 | * @return A bulkhead. 21 | */ 22 | @Nonnull 23 | Bulkhead getBulkhead( @Nonnull final ResilienceConfiguration configuration ); 24 | } 25 | -------------------------------------------------------------------------------- /cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/CircuitBreakerProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.resilience4j; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.resilience.ResilienceConfiguration; 6 | 7 | import io.github.resilience4j.circuitbreaker.CircuitBreaker; 8 | 9 | /** 10 | * Provider for circuit breakers. 11 | */ 12 | public interface CircuitBreakerProvider 13 | { 14 | /** 15 | * Provides a circuit breaker. 16 | * 17 | * @param configuration 18 | * The configuration for constructing the circuit breaker. 19 | * 20 | * @return A circuit breaker. 21 | */ 22 | @Nonnull 23 | CircuitBreaker getCircuitBreaker( @Nonnull final ResilienceConfiguration configuration ); 24 | } 25 | -------------------------------------------------------------------------------- /cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/RateLimiterProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.resilience4j; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.resilience.ResilienceConfiguration; 6 | 7 | import io.github.resilience4j.ratelimiter.RateLimiter; 8 | 9 | /** 10 | * Provider for rate limiters. 11 | */ 12 | @FunctionalInterface 13 | public interface RateLimiterProvider 14 | { 15 | /** 16 | * Provides a rate limiter. 17 | * 18 | * @param configuration 19 | * The configuration for constructing the rate limiter. 20 | * 21 | * @return A rate limiter. 22 | */ 23 | @Nonnull 24 | RateLimiter getRateLimiter( @Nonnull final ResilienceConfiguration configuration ); 25 | } 26 | -------------------------------------------------------------------------------- /cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/RetryProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.resilience4j; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.resilience.ResilienceConfiguration; 6 | 7 | import io.github.resilience4j.retry.Retry; 8 | 9 | /** 10 | * Provider for retries. 11 | */ 12 | public interface RetryProvider 13 | { 14 | /** 15 | * Provides a retry. 16 | * 17 | * @param configuration 18 | * The configuration for constructing the retry. 19 | * 20 | * @return A retry. 21 | */ 22 | @Nonnull 23 | Retry getRetry( @Nonnull final ResilienceConfiguration configuration ); 24 | } 25 | -------------------------------------------------------------------------------- /cloudplatform/resilience4j/src/main/java/com/sap/cloud/sdk/cloudplatform/resilience4j/TimeLimiterProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.resilience4j; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.resilience.ResilienceConfiguration; 6 | 7 | import io.github.resilience4j.timelimiter.TimeLimiter; 8 | 9 | /** 10 | * Provider for time limiters. 11 | */ 12 | public interface TimeLimiterProvider 13 | { 14 | /** 15 | * Provides a time limiter. 16 | * 17 | * @param configuration 18 | * The configuration for constructing the time limiter. 19 | * 20 | * @return A time limiter. 21 | */ 22 | @Nonnull 23 | TimeLimiter getTimeLimiter( @Nonnull final ResilienceConfiguration configuration ); 24 | } 25 | -------------------------------------------------------------------------------- /cloudplatform/resilience4j/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.resilience.ResilienceDecorationStrategy: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.resilience4j.Resilience4jDecorationStrategy -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/AuthTokenDecoderDefault.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.auth0.jwt.JWT; 6 | import com.sap.cloud.sdk.cloudplatform.security.exception.AuthTokenAccessException; 7 | 8 | import io.vavr.control.Try; 9 | import lombok.extern.slf4j.Slf4j; 10 | 11 | @Slf4j 12 | class AuthTokenDecoderDefault implements AuthTokenDecoder 13 | { 14 | @Nonnull 15 | @Override 16 | public AuthToken decode( @Nonnull final String encodedJwt ) 17 | throws AuthTokenAccessException 18 | { 19 | return Try 20 | .of(() -> new AuthToken(JWT.decode(encodedJwt))) 21 | .getOrElseThrow(e -> new AuthTokenAccessException("Failed to decode the access token.", e)); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/BasicAuthenticationFacade.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import io.vavr.control.Try; 6 | 7 | /** 8 | * Facade for retrieving the current {@link BasicCredentials}. 9 | */ 10 | @FunctionalInterface 11 | public interface BasicAuthenticationFacade 12 | { 13 | /** 14 | * Retrieves the username password pair and returns them as {@link Try.Success}. If they could not be retrieved or 15 | * an error occurred while parsing them a {@link Try.Failure} containing the exception will be returned. 16 | * 17 | * @return A {@link Try} containing either the retrieved {@code BasicCredentials} or an {@link Exception}. 18 | */ 19 | @Nonnull 20 | Try tryGetBasicCredentials(); 21 | } 22 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/ClientCertificate.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.Value; 6 | 7 | /** 8 | * Simple credential implementation based on a clientId and certificate. 9 | */ 10 | @Value 11 | public class ClientCertificate implements Credentials 12 | { 13 | @Nonnull 14 | String clientId; 15 | 16 | @Nonnull 17 | String certificate; 18 | 19 | @Nonnull 20 | String key; 21 | 22 | @Override 23 | @Nonnull 24 | public String toString() 25 | { 26 | return "ClientCertificate(clientId=" + clientId + ", certificate=(hidden), key=(hidden))"; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/ClientCredentials.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.Data; 6 | 7 | /** 8 | * Simple credential implementation based on a clientId and clientSecret. 9 | */ 10 | @Data 11 | public class ClientCredentials implements Credentials 12 | { 13 | @Nonnull 14 | private final String clientId; 15 | 16 | @Nonnull 17 | private final String clientSecret; 18 | 19 | @Override 20 | @Nonnull 21 | public String toString() 22 | { 23 | return "ClientCredentials(clientId=" + clientId + ", clientSecret=(hidden))"; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/Credentials.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | /** 4 | * Marker interface representing credentials needed to log in to a remote. 5 | */ 6 | public interface Credentials 7 | { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/NoCredentials.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | /** 4 | * Empty implementation of the {@code Credentials} interface to be used for a user having no credentials. 5 | */ 6 | public class NoCredentials implements Credentials 7 | { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/principal/DefaultPrincipal.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security.principal; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.Data; 6 | import lombok.Getter; 7 | 8 | /** 9 | * This implementation of {@link Principal} represents the information available for an authenticated entity. 10 | */ 11 | @Data 12 | public class DefaultPrincipal implements Principal 13 | { 14 | @Getter 15 | @Nonnull 16 | private final String principalId; 17 | 18 | /** 19 | * Creates a new {@link DefaultPrincipal}. 20 | * 21 | * @param principalId 22 | * The ID of the principal 23 | */ 24 | public DefaultPrincipal( @Nonnull final String principalId ) 25 | { 26 | this.principalId = principalId; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/principal/Principal.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security.principal; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * This represents the information available an authenticated entity. 7 | *

8 | * In case of basic authentication this will directly represent a user, in case of client credentials this is the 9 | * client. 10 | */ 11 | @FunctionalInterface 12 | public interface Principal 13 | { 14 | /** 15 | * The identifier for this Principal. 16 | * 17 | * @return The identifier. 18 | */ 19 | @Nonnull 20 | String getPrincipalId(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/principal/PrincipalExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security.principal; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import io.vavr.control.Try; 6 | 7 | @FunctionalInterface 8 | interface PrincipalExtractor 9 | { 10 | @Nonnull 11 | Try tryGetCurrentPrincipal(); 12 | } 13 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/java/com/sap/cloud/sdk/cloudplatform/security/principal/PrincipalFacade.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security.principal; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import io.vavr.control.Try; 6 | 7 | /** 8 | * Facade interface encapsulating the logic to access {@link Principal} information. 9 | */ 10 | public interface PrincipalFacade 11 | { 12 | /** 13 | * Returns a {@link Try} of the current {@link Principal}. 14 | * 15 | * @return A {@link Try} of the current {@link Principal}. 16 | */ 17 | @Nonnull 18 | Try tryGetCurrentPrincipal(); 19 | } 20 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/security/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/security/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.thread.ThreadContextDecorator: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.security.SecurityContextThreadContextDecorator 2 | -------------------------------------------------------------------------------- /cloudplatform/security/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.thread.ThreadContextListener: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.security.principal.PrincipalThreadContextListener 2 | com.sap.cloud.sdk.cloudplatform.security.AuthTokenThreadContextListener 3 | com.sap.cloud.sdk.cloudplatform.security.BasicAuthenticationThreadContextListener 4 | -------------------------------------------------------------------------------- /cloudplatform/security/src/test/java/com/sap/cloud/sdk/cloudplatform/security/BasicAuthHeaderEncoderTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class BasicAuthHeaderEncoderTest 8 | { 9 | @Test 10 | void testEncodeUserNamePassword() 11 | { 12 | final String username = "63b2dc0c-5c37-30a3-af7b-cc40c305484d"; 13 | final String password = "1db8ec85-75b4-3593-9035-dc3b5b1aca73"; 14 | 15 | final String expected = 16 | "NjNiMmRjMGMtNWMzNy0zMGEzLWFmN2ItY2M0MGMzMDU0ODRkOjFkYjhlYzg1LTc1YjQtMzU5My05MDM1LWRjM2I1YjFhY2E3Mw=="; 17 | 18 | final String result = BasicAuthHeaderEncoder.encodeUserPasswordBase64(username, password); 19 | assertThat(result).isEqualTo(expected); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /cloudplatform/security/src/test/java/com/sap/cloud/sdk/cloudplatform/security/BasicCredentialsTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.security; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class BasicCredentialsTest 8 | { 9 | 10 | @Test 11 | void testHttpHeaderValue() 12 | { 13 | assertThat(new BasicCredentials("user", "pass").getHttpHeaderValue()).isEqualTo("Basic dXNlcjpwYXNz"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cloudplatform/tenant/src/main/java/com/sap/cloud/sdk/cloudplatform/tenant/Tenant.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.tenant; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * An interface representing a Tenant on the SAP Business Technology Platform. 7 | */ 8 | public interface Tenant 9 | { 10 | /** 11 | * Getter for the id of a tenant.
12 | * 13 | * @return The identifier of the tenant. 14 | */ 15 | @Nonnull 16 | String getTenantId(); 17 | } 18 | -------------------------------------------------------------------------------- /cloudplatform/tenant/src/main/java/com/sap/cloud/sdk/cloudplatform/tenant/TenantWithSubdomain.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.tenant; 2 | 3 | import javax.annotation.Nullable; 4 | 5 | /** 6 | * Represents a {@link Tenant) that can be accessed through a subdomain. 7 | */ 8 | public interface TenantWithSubdomain extends Tenant 9 | { 10 | /** 11 | * The subdomain of the tenant. 12 | * 13 | * @return The tenant subdomain. 14 | */ 15 | @Nullable 16 | String getSubdomain(); 17 | } 18 | -------------------------------------------------------------------------------- /cloudplatform/tenant/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/tenant/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /cloudplatform/tenant/src/main/resources/META-INF/services/com.sap.cloud.sdk.cloudplatform.thread.ThreadContextListener: -------------------------------------------------------------------------------- 1 | com.sap.cloud.sdk.cloudplatform.tenant.TenantThreadContextListener 2 | -------------------------------------------------------------------------------- /cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/DefaultTenantTest.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.cloudplatform.tenant; 2 | 3 | import static org.assertj.core.api.Assertions.assertThatThrownBy; 4 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 5 | 6 | import org.junit.jupiter.api.Test; 7 | 8 | class DefaultTenantTest 9 | { 10 | @Test 11 | void testNullParameters() 12 | { 13 | assertThatThrownBy(() -> new DefaultTenant(null, null)).isExactlyInstanceOf(NullPointerException.class); 14 | 15 | DefaultTenant tenant = new DefaultTenant("foo", null); 16 | assertDoesNotThrow(tenant::toString); 17 | assertDoesNotThrow(tenant::hashCode); 18 | assertDoesNotThrow(() -> tenant.equals(tenant)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/ServiceBindingTenantExtractorTest.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/cloudplatform/tenant/src/test/java/com/sap/cloud/sdk/cloudplatform/tenant/ServiceBindingTenantExtractorTest.java -------------------------------------------------------------------------------- /codestyle/spotbugs-exclusions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/DatamodelMetadataInput.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | import java.net.URI; 4 | import java.nio.file.Path; 5 | import java.time.ZonedDateTime; 6 | 7 | import javax.annotation.Nonnull; 8 | 9 | import lombok.Builder; 10 | import lombok.Value; 11 | 12 | /** 13 | * Metadata about the Virtual Data Model. 14 | */ 15 | @Value 16 | @Builder 17 | public class DatamodelMetadataInput 18 | { 19 | boolean codeGenerationSuccessful; 20 | @Nonnull 21 | Path apiSpecFilePath; 22 | @Nonnull 23 | ZonedDateTime generationTime; 24 | @Nonnull 25 | String description; 26 | @Nonnull 27 | MavenCoordinate generatorMavenCoordinate; 28 | @Nonnull 29 | URI generatorRepositoryLink; 30 | @Nonnull 31 | ProtocolSpecificMetadata protocolSpecificMetadata; 32 | } 33 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/InputProperties.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | import javax.annotation.Nullable; 4 | 5 | import lombok.Value; 6 | 7 | @Value 8 | class InputProperties 9 | { 10 | @Nullable 11 | String mavenGroupId; 12 | @Nullable 13 | String mavenArtifactId; 14 | @Nullable 15 | String featureDocumentationUri; 16 | @Nullable 17 | String libraryVersion; 18 | @Nullable 19 | String generatorVersion; 20 | } 21 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/MavenCoordinate.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.Builder; 6 | import lombok.Value; 7 | 8 | /** 9 | * Coordinate for a Maven module, consisting of group id and artifact id. 10 | */ 11 | @Value 12 | @Builder 13 | public class MavenCoordinate 14 | { 15 | @Nonnull 16 | String groupId; 17 | @Nonnull 18 | String artifactId; 19 | 20 | @Override 21 | @Nonnull 22 | public String toString() 23 | { 24 | return groupId + ":" + artifactId; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/MavenRepositoryAccessor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import io.vavr.control.Try; 6 | 7 | interface MavenRepositoryAccessor 8 | { 9 | /** 10 | * Reads the latest version of a Maven module from the default Maven repository (Maven Central). 11 | * 12 | * @param mavenCoordinate 13 | * The coordinate of the Maven module 14 | * @return A {@link Try} wrapping the latest version of the related module 15 | */ 16 | @Nonnull 17 | Try getLatestModuleVersion( @Nonnull final MavenCoordinate mavenCoordinate ); 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/MetadataGenerationException.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | /** 4 | * Indicates an error during VDM metadata generation. 5 | */ 6 | public class MetadataGenerationException extends RuntimeException 7 | { 8 | private static final long serialVersionUID = -199677362491505868L; 9 | 10 | MetadataGenerationException( final String message ) 11 | { 12 | super(message); 13 | } 14 | 15 | MetadataGenerationException( final String message, final Throwable cause ) 16 | { 17 | super(message, cause); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/ProtocolSpecificMetadataProvider.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import io.vavr.control.Option; 6 | 7 | interface ProtocolSpecificMetadataProvider 8 | { 9 | @Nonnull 10 | Option getMavenCoordinate(); 11 | 12 | @Nonnull 13 | Option getApiSpecificUsage( @Nonnull final DatamodelMetadataInput datamodelMetadataInput ); 14 | 15 | @Nonnull 16 | DatamodelMetadataOutput.ApiType getApiType(); 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/ServiceStatus.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | enum ServiceStatus 6 | { 7 | @SerializedName( "certified" ) 8 | CERTIFIED, 9 | @SerializedName( "verified" ) 10 | VERIFIED, 11 | @SerializedName( "failed" ) 12 | FAILED, 13 | @SerializedName( "unknown" ) 14 | UNKNOWN 15 | } 16 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/main/java/com/sap/cloud/sdk/datamodel/metadata/generator/ServiceType.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.metadata.generator; 2 | 3 | /** 4 | * The Service Type denotes the protocol of the service, like OData V2, OData V4, REST or SOAP. 5 | */ 6 | public enum ServiceType 7 | { 8 | /** 9 | * OData V2. 10 | */ 11 | ODATA_V2, 12 | /** 13 | * OData V4. 14 | */ 15 | ODATA_V4, 16 | /** 17 | * REST. 18 | */ 19 | REST, 20 | /** 21 | * SOAP. 22 | */ 23 | SOAP; 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/ServiceWithoutApiUsageMetadata/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/ServiceWithoutApiUsageMetadata/output/metadata/ServiceWithoutApiUsageMetadata_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "verified", 3 | "language": "Java", 4 | "apiType": "OData", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": null 7 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/failing-client-generation/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/failing-client-generation/output/metadata/failing-client-generation_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "failed", 3 | "language": "Java", 4 | "apiType": "OData", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": null 7 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/odata-v2-cloud/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.s4hana", 3 | "mavenArtifactId": "s4hana-api-odata" 4 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/odata-v4-cloud/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.s4hana", 3 | "mavenArtifactId": "s4hana-api-odata-v4" 4 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/odata-v4-no-pregenerated-lib/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/odata-v4-on-premise/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.s4hana", 3 | "mavenArtifactId": "s4hana-api-odata-v4-onpremise" 4 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/rest-returning-list/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.services", 3 | "mavenArtifactId": "scp-workflow-cf", 4 | "featureDocumentationUri": "https://sap.github.io/cloud-sdk/docs/java/features/rest/clients/scp-workflow-rest-api" 5 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/rest-returning-list/output/metadata/rest-returning-list_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "certified", 3 | "language": "Java", 4 | "apiType": "OpenAPI", 5 | "pregeneratedLibrary": { 6 | "groupId": "com.sap.cloud.sdk.services", 7 | "artifactId": "scp-workflow-cf", 8 | "version": "1.1.1", 9 | "compatibilityNotes": "", 10 | "description": "rest-library" 11 | }, 12 | "apiSpecificUsage": "import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor;\nimport com.sap.cloud.sdk.cloudplatform.connectivity.Destination;\nimport com.sap.foo.api.FooApi;\nimport java.util.List;\nimport com.sap.foo.model.BarModel;\n\nfinal Destination destination = DestinationAccessor.getDestination(\"MyDestination\");\nfinal FooApi service = new FooApi(destination);\nfinal List result = service.invokeFoo();" 13 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/rest-returning-single-object/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.services", 3 | "mavenArtifactId": "scp-workflow-cf", 4 | "featureDocumentationUri": "https://sap.github.io/cloud-sdk/docs/java/features/rest/clients/scp-workflow-rest-api" 5 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/rest-returning-single-object/output/metadata/rest-returning-single-object_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "certified", 3 | "language": "Java", 4 | "apiType": "OpenAPI", 5 | "pregeneratedLibrary": { 6 | "groupId": "com.sap.cloud.sdk.services", 7 | "artifactId": "scp-workflow-cf", 8 | "version": "1.1.1", 9 | "compatibilityNotes": "", 10 | "description": "rest-library" 11 | }, 12 | "apiSpecificUsage": "import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor;\nimport com.sap.cloud.sdk.cloudplatform.connectivity.Destination;\nimport com.sap.foo.api.FooApi;\nimport com.sap.foo.model.BarModel;\n\nfinal Destination destination = DestinationAccessor.getDestination(\"MyDestination\");\nfinal FooApi service = new FooApi(destination);\nfinal BarModel result = service.invokeFoo();" 13 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/rest-without-module-reference/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "featureDocumentationUri": "https://sap.github.io/cloud-sdk/docs/java/features/rest/clients/scp-workflow-rest-api" 3 | } 4 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/rest-without-module-reference/output/metadata/rest-without-module-reference_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "verified", 3 | "language": "Java", 4 | "apiType": "OpenAPI", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": "import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor;\nimport com.sap.cloud.sdk.cloudplatform.connectivity.Destination;\nimport com.sap.foo.api.FooApi;\nimport com.sap.foo.model.BarModel;\n\nfinal Destination destination = DestinationAccessor.getDestination(\"MyDestination\");\nfinal FooApi service = new FooApi(destination);\nfinal BarModel result = service.invokeFoo();" 7 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DatamodelMetadataGeneratorIntegrationTest/versions-given-as-input-properties/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "libraryVersion": "99.99.99", 3 | "generatorVersion": "88.88.88" 4 | } -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/DefaultMavenRepositoryAccessorTest/truncated-maven-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.sap.cloud.sdk.datamodel 4 | odata-generator 5 | 6 | ___SNIP SNAP ___ -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/Animal.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | public interface Animal { 4 | } 5 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/Person.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | public interface Person { 4 | } 5 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/RequestBuilderFeed.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import io.vavr.Tuple3; 4 | 5 | import java.net.URI; 6 | 7 | public abstract class RequestBuilderFeed { 8 | public Tuple3 execute(URI origin) { 9 | return null; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/RequestBuilderGreet.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.net.URI; 4 | import java.util.Optional; 5 | 6 | public class RequestBuilderGreet { 7 | public Optional execute(URI origin) { 8 | return Optional.empty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/RequestBuilderPet.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import io.vavr.control.Try; 4 | 5 | import java.net.URI; 6 | 7 | public interface RequestBuilderPet { 8 | 9 | Try execute(URI origin); 10 | } 11 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/ResultGreet.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | public interface ResultGreet { 4 | } 5 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/ServiceEntity.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.util.List; 4 | import com.sap.cloud.sdk.datamodel.metadata.generator.JavaServiceMethodResolverTest; 5 | 6 | public abstract class ServiceEntity extends JavaServiceMethodResolverTest.ThingService { 7 | public RequestBuilderPet pet(Animal animal) { 8 | return null; 9 | } 10 | 11 | public RequestBuilderFeed feed(List animals) { 12 | return null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /datamodel/datamodel-metadata-generator/src/test/resources/JavaServiceMethodResolverTest/com/test/ServicePerson.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | public class ServicePerson extends ServiceEntity { 4 | public RequestBuilderGreet greetFriend(Person other) { 5 | return null; 6 | } 7 | 8 | public RequestBuilderGreet greetTeacher(Person other) { 9 | return null; 10 | } 11 | 12 | public RequestBuilderGreet greetNeighbor(Person other) { 13 | return null; 14 | } 15 | 16 | public RequestBuilderGreet ignoreAction() { 17 | return null; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/BigDecimalExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import java.math.BigDecimal; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code BigDecimal}. 9 | */ 10 | public class BigDecimalExtractor implements ObjectExtractor 11 | { 12 | @Nonnull 13 | @Override 14 | public BigDecimal extract( @Nonnull final ResultElement resultElement ) 15 | { 16 | return resultElement.asBigDecimal(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/BigIntegerExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import java.math.BigInteger; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code BigInteger}. 9 | */ 10 | public class BigIntegerExtractor implements ObjectExtractor 11 | { 12 | @Nonnull 13 | @Override 14 | public BigInteger extract( @Nonnull final ResultElement resultElement ) 15 | { 16 | return resultElement.asBigInteger(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/BooleanExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Boolean}. 7 | */ 8 | public class BooleanExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Boolean extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asBoolean(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/ByteExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Byte}. 7 | */ 8 | public class ByteExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Byte extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asByte(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/CharacterExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Character}. 7 | */ 8 | public class CharacterExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Character extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asCharacter(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/DoubleExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Double}. 7 | */ 8 | public class DoubleExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Double extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asDouble(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/ElementName.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.annotation.Nonnull; 9 | 10 | /** 11 | * Annotation indicating the name of an element. 12 | */ 13 | @Retention( RetentionPolicy.RUNTIME ) 14 | @Target( ElementType.FIELD ) 15 | public @interface ElementName { 16 | 17 | /** 18 | * The name by which the annotated field can be identified. 19 | * 20 | * @return The identifiable name of the field. 21 | */ 22 | @Nonnull 23 | String value(); 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/FloatExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Float}. 7 | */ 8 | public class FloatExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Float extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asFloat(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/IntegerExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Integer}. 7 | */ 8 | public class IntegerExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Integer extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asInteger(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/LongExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Long}. 7 | */ 8 | public class LongExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Long extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asLong(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/ShortExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code Short}. 7 | */ 8 | public class ShortExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public Short extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asShort(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/fluent-result/src/main/java/com/sap/cloud/sdk/result/StringExtractor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.result; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * {@code ObjectExtractor} implementation transforming a given {@code ResultElement} to a {@code String}. 7 | */ 8 | public class StringExtractor implements ObjectExtractor 9 | { 10 | @Nonnull 11 | @Override 12 | public String extract( @Nonnull final ResultElement resultElement ) 13 | { 14 | return resultElement.asString(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/main/java/com/sap/cloud/sdk/datamodel/odata/client/expression/FilterExpression.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.client.expression; 2 | 3 | import java.util.List; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * Generic interface to describe an OData filter expression. 9 | */ 10 | public interface FilterExpression extends Expressions.Operand 11 | { 12 | /** 13 | * String representation of the OData filter expression operator. 14 | * 15 | * @return The operator. 16 | */ 17 | @Nonnull 18 | String getOperator(); 19 | 20 | /** 21 | * List of the operands used for the OData filter expression. 22 | * 23 | * @return The operands. 24 | */ 25 | @Nonnull 26 | List getOperands(); 27 | } 28 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/main/java/com/sap/cloud/sdk/datamodel/odata/client/query/Order.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.client.query; 2 | 3 | /** 4 | * Used with orderBy methods in entity fluent helper objects to set the sorting order of field values. 5 | */ 6 | public enum Order 7 | { 8 | /** 9 | * Sort field values in ascending order. 10 | */ 11 | ASC, 12 | 13 | /** 14 | * Sort field values in descending order. 15 | */ 16 | DESC 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/main/java/com/sap/cloud/sdk/datamodel/odata/client/request/ODataRequestResultMultipart.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.client.request; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Generic type of an OData request result. 7 | */ 8 | public interface ODataRequestResultMultipart 9 | { 10 | /** 11 | * Get the result from the OData batch response for a specific sub-request. 12 | * 13 | * @param request 14 | * The request to look for in the OData batch response. 15 | * @return The OData result, that was extracted from the original OData batch response. 16 | */ 17 | @Nonnull 18 | ODataRequestResult getResult( @Nonnull final ODataRequestGeneric request ); 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataClientQueryBatchUnitTest/BatchEmptyChangesetRequestBody.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: multipart/mixed;boundary=changeset_00000000-0000-0000-0000-000000000002 3 | 4 | --changeset_00000000-0000-0000-0000-000000000002-- 5 | 6 | --batch_00000000-0000-0000-0000-000000000001-- 7 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataClientQueryBatchUnitTest/BatchEmptyRequestBody.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001-- 2 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataClientQueryBatchUnitTest/BatchReadRequestBody.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | Content-ID: 1 5 | 6 | GET Entity?$filter=Fieldname%20eq%20'hello' HTTP/1.1 7 | Accept: application/json 8 | 9 | 10 | --batch_00000000-0000-0000-0000-000000000001-- 11 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataFetchAsStreamTest/files/POT01.pdf: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:30a80065b9207f2f18f7363686e5c707a76a3b78d15943b18d768b0a528e5677 3 | size 328271 4 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataFetchAsStreamTest/files/SAP_logo.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4bd807355d288e24abcae4b049eea21a04abcbff32207090d0adc5b6bc6155e4 3 | size 42309 4 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataFetchAsStreamTest/files/test.txt: -------------------------------------------------------------------------------- 1 | Test file content -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataResponseParsingTest/Ticket_Function_V2.json: -------------------------------------------------------------------------------- 1 | { 2 | "d": { 3 | "Partner": { 4 | "Ticket": "1000001", 5 | "TicketCategory": "2", 6 | "TicketName": "TESTSUPPLIER01", 7 | "TicketGrouping": "BP02", 8 | "TicketUUID": "34c6020a-aaaa-1111-2222-af75a376b0f9", 9 | "CorrespondenceLanguage": "", 10 | "CreatedByUser": "ABC34c6020a", 11 | "CreationDate": "\/Date(1430784000000)\/", 12 | "CreationTime": "PT09H50M04S", 13 | "TicketIsBlocked": false, 14 | "TicketType": "", 15 | "ETag": "ABC20180116144654" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataResponseParsingTest/Ticket_Single_V2.json: -------------------------------------------------------------------------------- 1 | { 2 | "d" : { 3 | "__metadata" : { 4 | "id" : "https://127.0.0.1/endpoint/url/Ticket('1000001')", 5 | "uri" : "https://127.0.0.1/endpoint/url/Ticket('1000001')", 6 | "type" : "API_TICKET.TicketType" 7 | }, 8 | "Ticket" : "1000001", 9 | "TicketCategory" : "2", 10 | "TicketName" : "TESTSUPPLIER01", 11 | "TicketGrouping" : "BP02", 12 | "TicketUUID" : "34c6020a-aaaa-1111-2222-af75a376b0f9", 13 | "CorrespondenceLanguage" : "", 14 | "CreatedByUser" : "ABC34c6020a", 15 | "CreationDate" : "\/Date(1430784000000)\/", 16 | "CreationTime" : "PT09H50M04S", 17 | "TicketIsBlocked" : false, 18 | "TicketType" : "", 19 | "ETag" : "ABC20180116144654" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /datamodel/odata-client/src/test/resources/ODataResponseParsingTest/Ticket_Single_V4.json: -------------------------------------------------------------------------------- 1 | { 2 | "@odata.context": "/v4/tickets", 3 | "Ticket" : "1000001", 4 | "TicketCategory" : "2", 5 | "TicketName" : "TESTSUPPLIER01", 6 | "TicketGrouping" : "BP02", 7 | "TicketUUID" : "34c6020a-aaaa-1111-2222-af75a376b0f9", 8 | "CorrespondenceLanguage" : "", 9 | "CreatedByUser" : "ABC34c6020a", 10 | "CreationDate" : "\/Date(1430784000000)\/", 11 | "CreationTime" : "PT09H50M04S", 12 | "TicketIsBlocked" : false, 13 | "TicketType" : "", 14 | "ETag" : "ABC20180116144654" 15 | } -------------------------------------------------------------------------------- /datamodel/odata-generator-utility/src/main/java/com/sap/cloud/sdk/datamodel/odata/utility/NameSource.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.utility; 2 | 3 | /** 4 | * An enum representing the logic to be used by the {@code NamingStrategy} for determining the source for the java 5 | * namings. 6 | */ 7 | public enum NameSource 8 | { 9 | /** 10 | * Specifies that the name of an entity/property should be used to determine the java namings. 11 | */ 12 | NAME, 13 | 14 | /** 15 | * Specifies that the sap:label of an entity/property should be used to determine the java namings. If the label is 16 | * not provided (null, empty, or blank) the name will be used. 17 | */ 18 | LABEL 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata-generator-utility/src/main/java/com/sap/cloud/sdk/datamodel/odata/utility/SimpleNamingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.utility; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * Represents the default {@link NamingStrategy} implementation, which generates syntactically correct Java names 9 | * without doing any additional modifications. 10 | */ 11 | @NoArgsConstructor 12 | public class SimpleNamingStrategy extends AbstractNamingStrategy 13 | { 14 | /** 15 | * Initializes a new {@link SimpleNamingStrategy} with the given {@code nameSource}. 16 | * 17 | * @param nameSource 18 | * The {@link NameSource} to use. 19 | */ 20 | public SimpleNamingStrategy( @Nonnull final NameSource nameSource ) 21 | { 22 | super(nameSource); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata-generator-utility/src/test/java/com/sap/cloud/sdk/datamodel/odata/utility/LegacyClass.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.utility; 2 | 3 | final class LegacyClass 4 | { 5 | LegacyClass( final Object ignore1, final Object ignore2, final String a, final Integer b, final Object c ) 6 | { 7 | // place holder 8 | } 9 | 10 | private void testMethod( final String a, final Integer b, final Object c ) 11 | { 12 | // place holder 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-api-sample/src/main/resources/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # SDK Grocery Store 3 | SDK_Grocery_Store.className = SdkGroceryStore 4 | SDK_Grocery_Store.packageName = sdkgrocerystore 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/core/DecimalDescriptor.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.core; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Annotation indicating the precision and scale of a decimal field 10 | */ 11 | @Retention( RetentionPolicy.RUNTIME ) 12 | @Target( ElementType.FIELD ) 13 | public @interface DecimalDescriptor { 14 | 15 | /** 16 | * The associated precision of the decimal number 17 | * 18 | * @return The associated precision of the decimal number 19 | */ 20 | int precision(); 21 | 22 | /** 23 | * The associated scale of the decimal number 24 | * 25 | * @return The associated scale of the decimal number 26 | */ 27 | int scale(); 28 | } 29 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/core/Property.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.core; 2 | 3 | import com.sap.cloud.sdk.datamodel.odata.client.expression.FieldReference; 4 | 5 | /** 6 | * Generic entity property. 7 | * 8 | * @param 9 | * The generic entity type for this property. 10 | */ 11 | public interface Property extends FieldReference 12 | { 13 | } 14 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/core/ReadRequestBuilder.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.core; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Interface to mark OData request types as reading operation. 7 | * 8 | * @param 9 | * The type of the request's result, if any. 10 | * 11 | * @see GetAllRequestBuilder 12 | * @see GetByKeyRequestBuilder 13 | * @see FunctionRequestBuilder 14 | */ 15 | public interface ReadRequestBuilder extends RequestBuilder 16 | { 17 | /** 18 | * Activates the CSRF token retrieval for this OData request. This is useful if the server does require CSRF tokens 19 | * as part of the request. 20 | * 21 | * @return The same builder 22 | */ 23 | @Nonnull 24 | ReadRequestBuilder withCsrfToken(); 25 | } 26 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/core/StructuredProperty.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.core; 2 | 3 | /** 4 | * Interface representing a structural property of {@link EntityT} that points towards an object of {@link TargetT}. 5 | * Structured properties are either complex types or navigational properties. 6 | * 7 | * @see com.sap.cloud.sdk.datamodel.odatav4.core.ComplexProperty 8 | * @see com.sap.cloud.sdk.datamodel.odatav4.core.NavigationProperty 9 | * 10 | * @param 11 | * Entity this property is part of. 12 | * @param 13 | * {@link VdmObject} this property represents. 14 | */ 15 | interface StructuredProperty, TargetT extends VdmObject> extends Property 16 | { 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/core/VdmComplex.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.core; 2 | 3 | /** 4 | * Complex type in the virtual data model. 5 | * 6 | * @param 7 | * Object type of the complex type. 8 | */ 9 | public abstract class VdmComplex extends VdmObject 10 | { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/core/VdmEntitySet.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.core; 2 | 3 | /** 4 | * Empty interface to indicate operative support for querying the OData service for the related EntitySet. 5 | */ 6 | public interface VdmEntitySet 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/expression/EntityReference.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.expression; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Generic interface to provide the original entity class reference. 7 | * 8 | * @param 9 | * Type of the entity which references the value. 10 | */ 11 | public interface EntityReference 12 | { 13 | /** 14 | * Get the type of the entity which references the value. 15 | * 16 | * @return The entity type, 17 | */ 18 | @Nonnull 19 | Class getEntityType(); 20 | } 21 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/expression/FilterableGuid.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.expression; 2 | 3 | import java.util.UUID; 4 | 5 | /** 6 | * Fluent helper class to provide filter functions to OData expressions referenced by Guid. 7 | * 8 | * @param 9 | * Type of the entity which references the value. 10 | */ 11 | public interface FilterableGuid extends FilterableValue 12 | { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/CollectionValueActionRequestBuilderTest/ActionNoParametersRequestBody.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/CsrfTokenHandlingTest/CreateResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@odata.context": "/sap/ODATA_SRV$metadata#People/$entity", 3 | "ShoeSize": 46 4 | } 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ETagTest/GetAllResponseBody.json: -------------------------------------------------------------------------------- 1 | { 2 | "value": [ 3 | { 4 | "@context": "context", 5 | "@type": "type", 6 | "@etag": "W/\"123\"", 7 | "UserName": "russellwhyte", 8 | "FirstName": "Russell", 9 | "LastName": "Whyte" 10 | }, 11 | { 12 | "@context": "context", 13 | "@type": "type", 14 | "@etag": "W/\"999\"", 15 | "UserName": "scottketchum", 16 | "FirstName": "Scott", 17 | "LastName": "Ketchum" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ETagTest/GetSingleResponseBody.json: -------------------------------------------------------------------------------- 1 | { 2 | "UserName": "russellwhyte", 3 | "FirstName": "Russell", 4 | "LastName": "Whyte" 5 | } 6 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/HeadersHandlingTest/CreateResponse.json: -------------------------------------------------------------------------------- 1 | { 2 | "@odata.context": "/sap/ODATA_SRV$metadata#People/$entity", 3 | "ShoeSize": 46 4 | } 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataClientBatchResponseParsingUnitTest/BatchEmptyRequest.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001-- 2 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataClientBatchResponseParsingUnitTest/BatchEmptyResponse.txt: -------------------------------------------------------------------------------- 1 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef-- 2 | 3 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataClientBatchResponseParsingUnitTest/BatchOnlyReadsMissingRequest.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | Content-ID: 1 5 | 6 | GET People(%27one%27) HTTP/1.1 7 | Accept: application/json 8 | 9 | 10 | --batch_00000000-0000-0000-0000-000000000001 11 | Content-Type: application/http 12 | Content-Transfer-Encoding: binary 13 | Content-ID: 2 14 | 15 | GET People(%27two%27) HTTP/1.1 16 | Accept: application/json 17 | 18 | 19 | --batch_00000000-0000-0000-0000-000000000001 20 | Content-Type: application/http 21 | Content-Transfer-Encoding: binary 22 | Content-ID: 3 23 | 24 | GET People(%27three%27) HTTP/1.1 25 | Accept: application/json 26 | 27 | 28 | --batch_00000000-0000-0000-0000-000000000001-- 29 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataClientBatchResponseParsingUnitTest/BatchOnlyReadsMissingResponse.txt: -------------------------------------------------------------------------------- 1 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | 5 | HTTP/1.1 200 OK 6 | Content-Type: application/json; odata.metadata=minimal; odata.streaming=true 7 | OData-Version: 4.0 8 | 9 | {"@odata.context":"https://services.odata.org/TripPinRESTierService/(S(w3zgpoiit3rigb4hkixmletd))/$metadata#People","value":[{"UserName":"one"}]} 10 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef 11 | Content-Type: application/http 12 | Content-Transfer-Encoding: binary 13 | 14 | HTTP/1.1 404 Not Found 15 | Content-Type: application/json; odata.metadata=minimal; odata.streaming=true 16 | OData-Version: 4.0 17 | 18 | {"error":{"code":"","message":"The request resource is not found."}} 19 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef-- 20 | 21 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataClientBatchResponseParsingUnitTest/BatchOnlyReadsRequest.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | Content-ID: 1 5 | 6 | GET People?$top=1 HTTP/1.1 7 | Accept: application/json 8 | 9 | 10 | --batch_00000000-0000-0000-0000-000000000001 11 | Content-Type: application/http 12 | Content-Transfer-Encoding: binary 13 | Content-ID: 2 14 | 15 | GET People?$top=2&$skip=1 HTTP/1.1 16 | Accept: application/json 17 | 18 | 19 | --batch_00000000-0000-0000-0000-000000000001-- 20 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataV4BatchReferenceServiceUnitTest/BatchEmptyRequest.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001-- 2 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataV4BatchReferenceServiceUnitTest/BatchEmptyResponse.txt: -------------------------------------------------------------------------------- 1 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef-- 2 | 3 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODataV4BatchReferenceServiceUnitTest/BatchOnlyReadsRequest.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | Content-ID: 1 5 | 6 | GET People?$top=1 HTTP/1.1 7 | Accept: application/json 8 | 9 | 10 | --batch_00000000-0000-0000-0000-000000000001 11 | Content-Type: application/http 12 | Content-Transfer-Encoding: binary 13 | Content-ID: 2 14 | 15 | GET People?$top=2&$skip=1 HTTP/1.1 16 | Accept: application/json 17 | 18 | 19 | --batch_00000000-0000-0000-0000-000000000001-- 20 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/ODatav4BatchConnectionTest/BatchResponseWithoutChangeset.txt: -------------------------------------------------------------------------------- 1 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | 5 | HTTP/1.1 200 OK 6 | Content-Type: application/json; odata.metadata=minimal; odata.streaming=true 7 | OData-Version: 4.0 8 | 9 | {"@odata.context":"https://localhost/service/$metadata#TestEntity","value":[{"id":"adam"},{"id":"eve"},{"id":"foobar"}]} 10 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef 11 | Content-Type: application/http 12 | Content-Transfer-Encoding: binary 13 | 14 | HTTP/1.1 200 OK 15 | Content-Type: application/json; odata.metadata=minimal; odata.streaming=true 16 | OData-Version: 4.0 17 | 18 | {"@odata.context":"https://localhost/service/$metadata#TestEntity/$entity","id":"foobar"} 19 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef-- -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/SingleValueActionRequestBuilderTest/ActionComplexTypeRequestBody.json: -------------------------------------------------------------------------------- 1 | { 2 | "complexEntity": {"@odata.type": "#com.sap.cloud.sdk.ComplexType", 3 | "City": "Stockholm", 4 | "Country": "Sweden" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/SingleValueActionRequestBuilderTest/ActionEntityRequestBody.json: -------------------------------------------------------------------------------- 1 | { 2 | "entityParameter": {"@odata.type": "#com.sap.cloud.sdk.TestEntity", 3 | "Name": "Tester"} 4 | } 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/SingleValueActionRequestBuilderTest/ActionNoParametersRequestBody.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/SingleValueActionRequestBuilderTest/ActionNullEntityRequestBody.json: -------------------------------------------------------------------------------- 1 | { 2 | "entityParameter": null 3 | } 4 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-core/src/test/resources/SingleValueActionRequestBuilderTest/ActionParametersRequestBody.json: -------------------------------------------------------------------------------- 1 | { 2 | "stringParameter" : "test", 3 | "booleanParameter" : true, 4 | "integerParameter" : 9000, 5 | "decimalParameter" : 3.14, 6 | "durationParameter" : "PT8H", 7 | "dateTimeOffsetParameter":"2020-03-12T05:02:30Z", 8 | "timeOfDayParameter":"13:03:39.999" 9 | } -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | generate 8 | 9 | 10 | 11 | 12 | false 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/ApiFunction.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | enum ApiFunction 4 | { 5 | READ, 6 | READ_BY_KEY, 7 | CREATE, 8 | UPDATE, 9 | DELETE, 10 | NAVIGATE; 11 | } 12 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/CommonConstants.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | class CommonConstants 4 | { 5 | static final String CLASS_NAME_FIELD_SUFFIX = "Field"; 6 | static final String CLASS_NAME_LINK_SUFFIX = "Link"; 7 | static final String INLINE_MAP_NAME = "cloudSdkValues"; 8 | } 9 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/DefaultNameFormattingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * NameFormattingStrategy used by default in the {@link NamingContext}. This strategy does nothing, i.e. simply returns 7 | * the input. 8 | */ 9 | public class DefaultNameFormattingStrategy implements NameFormattingStrategy 10 | { 11 | @Nonnull 12 | @Override 13 | public String applyFormat( @Nonnull final String input ) 14 | { 15 | return input; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EntityMetadata.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import com.sun.codemodel.JDefinedClass; 4 | import com.sun.codemodel.JPackage; 5 | 6 | import lombok.Data; 7 | 8 | @Data 9 | final class EntityMetadata 10 | { 11 | private final JPackage namespacePackage; 12 | private final JDefinedClass generatedEntityClass; 13 | private final String entitySetName; 14 | } 15 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/LowercaseNameFormattingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import java.util.Locale; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * The NameFormattingStrategy used when processing an entity's properties. Used in {@link NamingContext}. 9 | */ 10 | public class LowercaseNameFormattingStrategy implements NameFormattingStrategy 11 | { 12 | @Nonnull 13 | @Override 14 | public String applyFormat( @Nonnull final String input ) 15 | { 16 | return input.toLowerCase(Locale.ENGLISH); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/Multiplicity.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | /** 4 | * Enumeration representing the multiplicity of an OData navigation property. 5 | */ 6 | enum Multiplicity 7 | { 8 | /** 9 | * Zero or one associated entity. 10 | */ 11 | ZERO_TO_ONE, 12 | 13 | /** 14 | * One to many entities. 15 | */ 16 | MANY, 17 | 18 | /** 19 | * One to one entity. 20 | */ 21 | ONE 22 | } 23 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/NameFormattingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * NameFormattingStrategy that can be used in the {@link NamingContext} in the OData VDM generator. Implement this 7 | * interface to create a custom NameFormattingStrategy and set in the NamingContext's constructor. 8 | */ 9 | public interface NameFormattingStrategy 10 | { 11 | /** 12 | * Returns the input string formatted according to the rules of the respective implementation of this interface. 13 | * 14 | * @param input 15 | * The string that should be formatted. 16 | * @return A formatted string. 17 | */ 18 | @Nonnull 19 | String applyFormat( @Nonnull final String input ); 20 | } 21 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/NavigationPropertyModelAnnotationWrapper.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.datamodel.odatav4.generator.annotation.NavigationPropertyAnnotationModel; 6 | 7 | import lombok.RequiredArgsConstructor; 8 | 9 | @RequiredArgsConstructor 10 | class NavigationPropertyModelAnnotationWrapper implements NavigationPropertyAnnotationModel 11 | { 12 | private final NavigationPropertyModel model; 13 | 14 | @Nonnull 15 | @Override 16 | public String getEdmName() 17 | { 18 | return model.getEdmName(); 19 | } 20 | 21 | @Override 22 | public boolean isManyMultiplicity() 23 | { 24 | return Multiplicity.MANY == model.getMultiplicity(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/OperationParameterModel.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import com.sun.codemodel.JType; 4 | 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | final class OperationParameterModel 11 | { 12 | private String edmName; 13 | private String edmType; 14 | private String javaName; 15 | private JType javaType; 16 | private String description; 17 | private boolean isNullable; 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/ServiceDetailsPojo.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import java.util.List; 4 | 5 | import io.vavr.control.Option; 6 | import lombok.Data; 7 | 8 | @Data 9 | class ServiceDetailsPojo implements ServiceDetails 10 | { 11 | private String serviceUrl; 12 | private Info info; 13 | private ExternalDocs externalDocs; 14 | private String minErpVersion; 15 | private List extOverview; 16 | private StateInfo stateInfo; 17 | private boolean isDeprecated; 18 | 19 | @Override 20 | public Option getStateInfo() 21 | { 22 | return Option.of(stateInfo); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/ServiceDetailsSwagger2.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import com.sap.cloud.sdk.result.ElementName; 4 | 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | /** 9 | * This class contains any Swagger 2.0 specific fields and how to retrieve them from the JSON Swagger file. 10 | */ 11 | @Data 12 | @EqualsAndHashCode( callSuper = true ) 13 | class ServiceDetailsSwagger2 extends AbstractServiceDetails 14 | { 15 | @ElementName( "basePath" ) 16 | private String serviceUrl = "/"; 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/TypeKind.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | enum TypeKind 4 | { 5 | PRIMITIVE, 6 | COMPLEX, 7 | ENTITY, 8 | ENUM 9 | } 10 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/VdmObjectModelAnnotationWrapper.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.datamodel.odatav4.generator.annotation.EntityAnnotationModel; 6 | 7 | import lombok.RequiredArgsConstructor; 8 | 9 | @RequiredArgsConstructor 10 | class VdmObjectModelAnnotationWrapper implements EntityAnnotationModel 11 | { 12 | private final VdmObjectModel model; 13 | 14 | @Override 15 | public int getNumberOfProperties() 16 | { 17 | return model.getProperties().size(); 18 | } 19 | 20 | @Nonnull 21 | @Override 22 | public String getJavaClassName() 23 | { 24 | return model.getJavaClassName(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/annotation/EntityAnnotationModel.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator.annotation; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Data structure representing an OData entity or complex type. 7 | */ 8 | public interface EntityAnnotationModel 9 | { 10 | /** 11 | * Number of properties of the represented entity or complex type. 12 | * 13 | * @return the number of properties contained in the entity or complex type. 14 | */ 15 | int getNumberOfProperties(); 16 | 17 | /** 18 | * Name of the Java class that will represent this entity or complex type. 19 | * 20 | * @return the Java class name of this entity or complex type. 21 | */ 22 | @Nonnull 23 | String getJavaClassName(); 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/annotation/NavigationPropertyAnnotationModel.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator.annotation; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Data structure representing an OData navigation property. 7 | */ 8 | public interface NavigationPropertyAnnotationModel 9 | { 10 | /** 11 | * Name of the navigation property as defined in the OData EDM. 12 | * 13 | * @return the OData EDM name. 14 | */ 15 | @Nonnull 16 | String getEdmName(); 17 | 18 | /** 19 | * Checks whether the relation is 1..n (one-to-many), or not. 20 | * 21 | * @return {@code true} if this navigation is a one-to-many relation, {@code false} else. 22 | */ 23 | boolean isManyMultiplicity(); 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/main/resources/version.properties: -------------------------------------------------------------------------------- 1 | version.sdk = ${project.version} 2 | version.vdm = ${project.version} 3 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/java/com/sap/cloud/sdk/datamodel/odatav4/generator/CustomSoftAssertions.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odatav4.generator; 2 | 3 | import org.assertj.core.api.AutoCloseableSoftAssertions; 4 | 5 | class CustomSoftAssertions extends AutoCloseableSoftAssertions 6 | { 7 | public NamingContextAssert assertThat( final NamingContext actual ) 8 | { 9 | return proxy(NamingContextAssert.class, NamingContext.class, actual); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/DatamodelMetadataGenerationTest/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenArtifactId": "nice-artifact-id", 3 | "mavenGroupId": "nice-group-id", 4 | "generatorVersion": "88.88.88", 5 | "libraryVersion": "99.99.99" 6 | } -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/DatamodelMetadataGenerationTest/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # semantically-inconsistent-metadata 3 | semantically-inconsistent-metadata.className = SemanticallyInconsistentMetadata 4 | semantically-inconsistent-metadata.packageName = semanticallyinconsistentmetadata 5 | 6 | # SDK Grocery Store 7 | SDK_Grocery_Store.className = SdkGroceryStore 8 | SDK_Grocery_Store.packageName = sdkgrocerystore 9 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/DatamodelMetadataGenerationTest/output/metadata/semantically-inconsistent-metadata_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "failed", 3 | "language": "Java", 4 | "apiType": "OData", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": null 7 | } -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/KeepExistingSignaturesTest/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # metadata 3 | metadata.className = Metadata 4 | metadata.packageName = metadata 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/actionsAndFunctionsTest/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # actionsAndFunctions 3 | actionsAndFunctions.className = ActionsAndFunctions 4 | actionsAndFunctions.packageName = actionsandfunctions 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/complexProperties/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # metadata 3 | metadata.className = Metadata 4 | metadata.packageName = metadata 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/explicitDeprecation/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # minimal metadata 3 | minimal_metadata.className = MinimalMetadata 4 | minimal_metadata.packageName = minimalmetadata 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/failOnWarning/input/noContentOnPurpose.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/groceryStore/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # SDK Grocery Store 3 | SDK_Grocery_Store.className = SdkGroceryStore 4 | SDK_Grocery_Store.packageName = sdkgrocerystore 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/minimalTest/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # minimal metadata 3 | minimal_metadata.className = MinimalMetadata 4 | minimal_metadata.packageName = minimalmetadata 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/multipleEntitySets/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # minimal metadata 3 | minimal_metadata.className = MinimalMetadata 4 | minimal_metadata.packageName = minimalmetadata 5 | 6 | # multiple entity sets 7 | multiple_entity_sets.className = MultipleEntitySets 8 | multiple_entity_sets.packageName = multipleentitysets 9 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/pojoOnlyTest/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # actionsAndFunctions 3 | actionsAndFunctions.className = ActionsAndFunctions 4 | actionsAndFunctions.packageName = actionsandfunctions 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/propertyNameClash/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # minimal metadata 3 | name-clash.className = MinimalMetadata 4 | name-clash.packageName = minimalmetadata 5 | -------------------------------------------------------------------------------- /datamodel/odata-v4/odata-v4-generator/src/test/resources/oDataGeneratorIntegrationTest/testService/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # test service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-api-sample/src/main/java/com/sap/cloud/sdk/datamodel/odata/sample/namespaces/sdkgrocerystore/batch/SdkGroceryStoreServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package com.sap.cloud.sdk.datamodel.odata.sample.namespaces.sdkgrocerystore.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | /** 10 | * Interface to the batch object of an 11 | * {@code com.sap.cloud.sdk.datamodel.odata.sample.services.SdkGroceryStoreService SdkGroceryStoreService} service. 12 | * 13 | */ 14 | public interface SdkGroceryStoreServiceBatch 15 | extends 16 | FluentHelperServiceBatch 17 | { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-api-sample/src/main/resources/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # SDK Grocery Store 3 | SDK_Grocery_Store.className = SdkGroceryStore 4 | SDK_Grocery_Store.packageName = sdkgrocerystore 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-api-sample/src/test/resources/__files/ODataFetchMediaStreamTest/SAP_logo.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4bd807355d288e24abcae4b049eea21a04abcbff32207090d0adc5b6bc6155e4 3 | size 42309 4 | -------------------------------------------------------------------------------- /datamodel/odata/odata-api-sample/src/test/resources/__files/ODataFetchMediaStreamTest/test.txt: -------------------------------------------------------------------------------- 1 | Test file content -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/ModifyPatchStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper; 2 | 3 | import com.google.common.annotations.Beta; 4 | 5 | /** 6 | * Strategy to determine how a patch operation should be applied to an entity. 7 | * 8 | * @since 5.16.0 9 | */ 10 | @Beta 11 | public enum ModifyPatchStrategy 12 | { 13 | /** Only the top level fields can be patched */ 14 | SHALLOW, 15 | 16 | /** All top level and nested fields can be patched, resulting in JSON containing only the changed fields */ 17 | RECURSIVE_DELTA, 18 | 19 | /** 20 | * All top level and nested fields can be patched, resulting in JSON containing the full value of complex object. 21 | */ 22 | RECURSIVE_FULL 23 | } 24 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/Order.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper; 2 | 3 | /** 4 | * Used with orderBy methods in entity fluent helper objects to set the sorting order of field values. 5 | */ 6 | public enum Order 7 | { 8 | /** 9 | * Sort field values in ascending order. 10 | */ 11 | ASC, 12 | 13 | /** 14 | * Sort field values in descending order. 15 | */ 16 | DESC 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/VdmComplex.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper; 2 | 3 | import lombok.EqualsAndHashCode; 4 | 5 | /** 6 | * Complex type in the virtual data model. 7 | * 8 | * @param 9 | * Object type of the complex type. 10 | */ 11 | @EqualsAndHashCode( callSuper = true, doNotUseGetters = true ) 12 | public abstract class VdmComplex extends VdmObject 13 | { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/batch/BatchRequestChangeSetOperation.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper.batch; 2 | 3 | import java.util.function.Consumer; 4 | 5 | import com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestBatch; 6 | import com.sap.cloud.sdk.datamodel.odata.helper.FluentHelperBasic; 7 | 8 | import lombok.AccessLevel; 9 | import lombok.Getter; 10 | import lombok.RequiredArgsConstructor; 11 | 12 | @RequiredArgsConstructor 13 | @Getter( AccessLevel.PACKAGE ) 14 | class BatchRequestChangeSetOperation 15 | { 16 | private final Consumer changeSetConsumer; 17 | private final FluentHelperBasic fluentHelper; 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/batch/BatchRequestOperation.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper.batch; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.datamodel.odata.client.request.ODataRequestBatch; 6 | 7 | /** 8 | * Common interface for items on root level of an OData batch request. 9 | */ 10 | interface BatchRequestOperation 11 | { 12 | void addToRequestBuilder( @Nonnull final ODataRequestBatch requestBatch ); 13 | } 14 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/batch/BatchResponseChangeSet.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper.batch; 2 | 3 | import java.util.List; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.VdmEntity; 8 | 9 | /** 10 | * Interface to evaluate the response of a single changeset from an OData batch response. 11 | */ 12 | public interface BatchResponseChangeSet 13 | { 14 | /** 15 | * Get all newly created entities from this changeset. 16 | * 17 | * @return A list of generic {@link VdmEntity} instances. The consumer can type-check, evaluate and cast its 18 | * entries. 19 | */ 20 | @Nonnull 21 | List> getCreatedEntities(); 22 | } 23 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/batch/BatchService.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper.batch; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Interface to expose the batch feature for service class. 7 | * 8 | * @param 9 | * The type of the Batch instance. 10 | */ 11 | public interface BatchService 12 | { 13 | /** 14 | * Instantiate a new FluentHelper instance for a single OData batch request. 15 | * 16 | * @return A new instance of an OData batch request associated with the service object. 17 | */ 18 | @Nonnull 19 | FluentHelperBatchT batch(); 20 | } 21 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/batch/FluentHelperBatchEndChangeSet.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper.batch; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Interface to finish the definition of a single changeset. 7 | * 8 | * @param 9 | * Type of the implementing OData batch request class 10 | */ 11 | public interface FluentHelperBatchEndChangeSet 12 | { 13 | /** 14 | * Finish the definition of a single changeset and return to the parent OData batch request instance. All changesets 15 | * will be evaluated independently from each other. 16 | * 17 | * @return The current OData batch request instance. 18 | */ 19 | @Nonnull 20 | FluentHelperT endChangeSet(); 21 | } 22 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/datamodel/odata/helper/batch/FluentHelperServiceBatchExecute.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.helper.batch; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; 6 | 7 | /** 8 | * Interface to provide execute methods. 9 | * 10 | */ 11 | public interface FluentHelperServiceBatchExecute 12 | { 13 | /** 14 | * Executes the underlying batch query including the stored changeset operations. 15 | * 16 | * @param destination 17 | * Destination object for resolving the {@code HttpClient} when executing the underlying OData query. 18 | * 19 | * @return A single result element, holding each changeset response. 20 | */ 21 | @Nonnull 22 | BatchResponse executeRequest( @Nonnull final Destination destination ); 23 | } 24 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/main/java/com/sap/cloud/sdk/s4hana/datamodel/odata/annotation/Key.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.datamodel.odata.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Annotation to mark a field in a VDM entity as being a key field. This means that the annotated field plus any other 10 | * fields with this annotation uniquely identify an instance of 11 | * {@link com.sap.cloud.sdk.datamodel.odata.helper.VdmEntity}. The VDM generator will add this annotation to the entity 12 | * classes it creates based on the OData EDMX ({@code } tag under {@code }) 13 | */ 14 | @Retention( RetentionPolicy.RUNTIME ) 15 | @Target( ElementType.FIELD ) 16 | public @interface Key { 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/test/resources/ODataV2BatchFunctionImportTest/BatchRequestFunctionImportWithGet.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | Content-ID: 1 5 | 6 | GET awesomeFunction?FirstName='John'&LastName='Doe' HTTP/1.1 7 | Accept: application/json 8 | 9 | 10 | --batch_00000000-0000-0000-0000-000000000001-- 11 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/test/resources/ODataV2BatchFunctionImportTest/BatchRequestFunctionImportWithPost.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: multipart/mixed;boundary=changeset_00000000-0000-0000-0000-000000000002 3 | 4 | --changeset_00000000-0000-0000-0000-000000000002 5 | Content-Type: application/http 6 | Content-Transfer-Encoding: binary 7 | Content-ID: 1 8 | 9 | POST awesomeFunction?FirstName='John'&LastName='Doe' HTTP/1.1 10 | Accept: application/json 11 | Content-Type: application/json 12 | 13 | {} 14 | 15 | --changeset_00000000-0000-0000-0000-000000000002-- 16 | 17 | --batch_00000000-0000-0000-0000-000000000001-- 18 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/test/resources/ODataV2BatchFunctionImportTest/BatchRequestFunctionImportWithPostWithCustomHeader.txt: -------------------------------------------------------------------------------- 1 | --batch_00000000-0000-0000-0000-000000000001 2 | Content-Type: multipart/mixed;boundary=changeset_00000000-0000-0000-0000-000000000002 3 | 4 | --changeset_00000000-0000-0000-0000-000000000002 5 | Content-Type: application/http 6 | Content-Transfer-Encoding: binary 7 | Content-ID: 1 8 | 9 | POST awesomeFunction?FirstName='John'&LastName='Doe' HTTP/1.1 10 | Accept: application/json 11 | Content-Type: application/json 12 | foo: bar 13 | 14 | {} 15 | 16 | --changeset_00000000-0000-0000-0000-000000000002-- 17 | 18 | --batch_00000000-0000-0000-0000-000000000001-- 19 | -------------------------------------------------------------------------------- /datamodel/odata/odata-core/src/test/resources/ODatav2BatchConnectionTest/BatchResponseWithoutChangeset.txt: -------------------------------------------------------------------------------- 1 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef 2 | Content-Type: application/http 3 | Content-Transfer-Encoding: binary 4 | 5 | HTTP/1.1 200 OK 6 | Content-Type: application/json 7 | 8 | {"d":{"results":[{"StringValue":"Foo","IntegerValue":42}]}} 9 | 10 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef 11 | Content-Type: application/http 12 | Content-Transfer-Encoding: binary 13 | 14 | HTTP/1.1 200 OK 15 | Content-Type: application/json 16 | 17 | {"d":{"StringValue":"Foo","IntegerValue":9000}} 18 | 19 | --batchresponse_76ef6b0a-a0e2-4f31-9f70-f5d3f73a6bef-- 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator-maven-plugin/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | generate 8 | 9 | 10 | 11 | 12 | false 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/ApiFunction.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | enum ApiFunction 4 | { 5 | READ, 6 | READ_BY_KEY, 7 | CREATE, 8 | UPDATE, 9 | DELETE; 10 | } 11 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/CodeModelUtils.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sun.codemodel.JExpressionImpl; 6 | import com.sun.codemodel.JFormatter; 7 | 8 | class CodeModelUtils 9 | { 10 | @Nonnull 11 | static JExpressionImpl directExpression( @Nonnull final String source ) 12 | { 13 | return new JExpressionImpl() 14 | { 15 | public void generate( @Nonnull final JFormatter f ) 16 | { 17 | f.p(source); 18 | } 19 | }; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/CommonConstants.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | class CommonConstants 4 | { 5 | static final String CLASS_NAME_FIELD_SUFFIX = "Field"; 6 | static final String CLASS_NAME_LINK_SUFFIX = "Link"; 7 | static final String INLINE_MAP_NAME = "cloudSdkValues"; 8 | } 9 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/DefaultNameFormattingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * NameFormattingStrategy used by default in the {@link NamingContext}. This strategy does nothing, i.e. simply returns 7 | * the input. 8 | */ 9 | public class DefaultNameFormattingStrategy implements NameFormattingStrategy 10 | { 11 | @Nonnull 12 | @Override 13 | public String applyFormat( @Nonnull final String input ) 14 | { 15 | return input; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/EntityMetadata.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import com.sun.codemodel.JDefinedClass; 4 | import com.sun.codemodel.JPackage; 5 | 6 | import lombok.Data; 7 | 8 | @Data 9 | final class EntityMetadata 10 | { 11 | private final JPackage namespacePackage; 12 | private final JDefinedClass generatedEntityClass; 13 | private final String entityTypeName; 14 | private final String entitySetName; 15 | } 16 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/FunctionImportParameterModel.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import com.sun.codemodel.JType; 4 | 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | final class FunctionImportParameterModel 11 | { 12 | private String edmName; 13 | private String edmType; 14 | private String javaName; 15 | private JType javaType; 16 | private String description; 17 | private Boolean nullable; 18 | 19 | public boolean isNonnull() 20 | { 21 | return nullable == null || !nullable; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/LowercaseNameFormattingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import java.util.Locale; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * The NameFormattingStrategy used when processing an entity's properties. Used in {@link NamingContext}. 9 | */ 10 | public class LowercaseNameFormattingStrategy implements NameFormattingStrategy 11 | { 12 | @Nonnull 13 | @Override 14 | public String applyFormat( @Nonnull final String input ) 15 | { 16 | return input.toLowerCase(Locale.ENGLISH); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/Multiplicity.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | /** 4 | * Enumeration representing the multiplicity of an OData navigation property. 5 | */ 6 | enum Multiplicity 7 | { 8 | /** 9 | * Zero or one associated entity. 10 | */ 11 | ZERO_TO_ONE, 12 | 13 | /** 14 | * One to many entities. 15 | */ 16 | MANY, 17 | 18 | /** 19 | * One to one entity. 20 | */ 21 | ONE 22 | } 23 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/NameFormattingStrategy.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * NameFormattingStrategy that can be used in the {@link NamingContext} in the OData VDM generator. Implement this 7 | * interface to create a custom NameFormattingStrategy and set in the NamingContext's constructor. 8 | */ 9 | public interface NameFormattingStrategy 10 | { 11 | /** 12 | * Returns the input string formatted according to the rules of the respective implementation of this interface. 13 | * 14 | * @param input 15 | * The string that should be formatted. 16 | * @return A formatted string. 17 | */ 18 | @Nonnull 19 | String applyFormat( @Nonnull final String input ); 20 | } 21 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/NavigationPropertyModelAnnotationWrapper.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.datamodel.odata.generator.annotation.NavigationPropertyAnnotationModel; 6 | 7 | import lombok.RequiredArgsConstructor; 8 | 9 | @RequiredArgsConstructor 10 | class NavigationPropertyModelAnnotationWrapper implements NavigationPropertyAnnotationModel 11 | { 12 | private final NavigationPropertyModel model; 13 | 14 | @Nonnull 15 | @Override 16 | public String getEdmName() 17 | { 18 | return model.getEdmName(); 19 | } 20 | 21 | @Override 22 | public boolean isManyMultiplicity() 23 | { 24 | return Multiplicity.MANY == model.getMultiplicity(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/ServiceDetailsPojo.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import java.util.List; 4 | 5 | import io.vavr.control.Option; 6 | import lombok.Data; 7 | 8 | @Data 9 | class ServiceDetailsPojo implements ServiceDetails 10 | { 11 | private String serviceUrl; 12 | private Info info; 13 | private ExternalDocs externalDocs; 14 | private String minErpVersion; 15 | private List extOverview; 16 | private StateInfo stateInfo; 17 | private boolean isDeprecated; 18 | 19 | @Override 20 | public Option getStateInfo() 21 | { 22 | return Option.of(stateInfo); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/ServiceDetailsSwagger2.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import com.sap.cloud.sdk.result.ElementName; 4 | 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | /** 9 | * This class contains any Swagger 2.0 specific fields and how to retrieve them from the JSON Swagger file. 10 | */ 11 | @Data 12 | @EqualsAndHashCode( callSuper = true ) 13 | class ServiceDetailsSwagger2 extends AbstractServiceDetails 14 | { 15 | @ElementName( "basePath" ) 16 | private String serviceUrl = "/"; 17 | } 18 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/TypeKind.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | enum TypeKind 4 | { 5 | SIMPLE, 6 | COMPLEX, 7 | ENTITY 8 | } 9 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/VdmObjectModelAnnotationWrapper.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.datamodel.odata.generator.annotation.EntityAnnotationModel; 6 | 7 | import lombok.RequiredArgsConstructor; 8 | 9 | @RequiredArgsConstructor 10 | class VdmObjectModelAnnotationWrapper implements EntityAnnotationModel 11 | { 12 | private final VdmObjectModel model; 13 | 14 | @Override 15 | public int getNumberOfProperties() 16 | { 17 | return model.getProperties().size(); 18 | } 19 | 20 | @Nonnull 21 | @Override 22 | public String getJavaClassName() 23 | { 24 | return model.getJavaClassName(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/annotation/EntityAnnotationModel.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator.annotation; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Data structure representing an OData entity or complex type. 7 | */ 8 | public interface EntityAnnotationModel 9 | { 10 | /** 11 | * Number of properties of the represented entity or complex type. 12 | * 13 | * @return the number of properties contained in the entity or complex type. 14 | */ 15 | int getNumberOfProperties(); 16 | 17 | /** 18 | * Name of the Java class that will represent this entity or complex type. 19 | * 20 | * @return the Java class name of this entity or complex type. 21 | */ 22 | @Nonnull 23 | String getJavaClassName(); 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/annotation/NavigationPropertyAnnotationModel.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator.annotation; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Data structure representing an OData navigation property. 7 | */ 8 | public interface NavigationPropertyAnnotationModel 9 | { 10 | /** 11 | * Name of the navigation property as defined in the OData EDM. 12 | * 13 | * @return the OData EDM name. 14 | */ 15 | @Nonnull 16 | String getEdmName(); 17 | 18 | /** 19 | * Checks whether the relation is 1..n (one-to-many), or not. 20 | * 21 | * @return {@code true} if this navigation is a one-to-many relation, {@code false} else. 22 | */ 23 | boolean isManyMultiplicity(); 24 | } 25 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/main/resources/version.properties: -------------------------------------------------------------------------------- 1 | version.sdk = ${project.version} 2 | version.vdm = ${project.version} 3 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/java/com/sap/cloud/sdk/datamodel/odata/generator/CustomSoftAssertions.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.odata.generator; 2 | 3 | import org.assertj.core.api.AutoCloseableSoftAssertions; 4 | 5 | class CustomSoftAssertions extends AutoCloseableSoftAssertions 6 | { 7 | public NamingContextAssert assertThat( final NamingContext actual ) 8 | { 9 | return proxy(NamingContextAssert.class, NamingContext.class, actual); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/DatamodelMetadataGenerationTest/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenArtifactId": "nice-artifact-id", 3 | "mavenGroupId": "nice-group-id", 4 | "generatorVersion": "88.88.88", 5 | "libraryVersion": "99.99.99" 6 | } -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/DatamodelMetadataGenerationTest/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # semantically-incorrect-metadata 3 | semantically-incorrect-metadata.className = SemanticallyIncorrectMetadata 4 | semantically-incorrect-metadata.packageName = semanticallyincorrectmetadata 5 | 6 | # SDK Grocery Store 7 | SDK_Grocery_Store.className = SdkGroceryStore 8 | SDK_Grocery_Store.packageName = sdkgrocerystore 9 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/DatamodelMetadataGenerationTest/output/metadata/semantically-incorrect-metadata_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "failed", 3 | "language": "Java", 4 | "apiType": "OData", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": null 7 | } -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/KeepExistingSignaturesTest/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # metadata 3 | metadata.className = Metadata 4 | metadata.packageName = metadata 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/failOnWarning/input/noContentOnPurpose.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/functionImportClash/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # FunctionImportNameClash 3 | FunctionImportNameClash.className = FunctionImportNameClash 4 | FunctionImportNameClash.packageName = functionimportnameclash 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/functionImportClash/output/testcomparison/namespaces/functionimportnameclash/batch/FunctionImportNameClashServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.functionimportnameclash.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.FunctionImportNameClashService FunctionImportNameClashService} service. 12 | * 13 | */ 14 | public interface FunctionImportNameClashServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/groceryStore/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # SDK Grocery Store 3 | SDK_Grocery_Store.className = SdkGroceryStore 4 | SDK_Grocery_Store.packageName = sdkgrocerystore 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/groceryStore/output/testcomparison/namespaces/sdkgrocerystore/batch/SdkGroceryStoreServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.sdkgrocerystore.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.SdkGroceryStoreService SdkGroceryStoreService} service. 12 | * 13 | */ 14 | public interface SdkGroceryStoreServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/keyNamedField/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # EntityWithKeyNamedField 3 | EntityWithKeyNamedField.className = Entitywithkeynamedfield 4 | EntityWithKeyNamedField.packageName = entitywithkeynamedfield 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/keyNamedField/output/testcomparison/namespaces/entitywithkeynamedfield/batch/EntitywithkeynamedfieldServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.entitywithkeynamedfield.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.EntitywithkeynamedfieldService EntitywithkeynamedfieldService} service. 12 | * 13 | */ 14 | public interface EntitywithkeynamedfieldServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/minimalTestWithExplicitDeprecation/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # minimal metadata 3 | minimal_metadata.className = MinimalMetadata 4 | minimal_metadata.packageName = minimalmetadata 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/minimalTestWithExplicitDeprecation/output/testcomparison/namespaces/minimalmetadata/batch/MinimalMetadataServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.minimalmetadata.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.MinimalMetadataService MinimalMetadataService} service. 12 | * 13 | */ 14 | public interface MinimalMetadataServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/multipleEntitySets/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # minimal metadata 3 | minimal_metadata.className = MinimalMetadata 4 | minimal_metadata.packageName = minimalmetadata 5 | 6 | # multiple entity sets 7 | multiple_entity_sets.className = MultipleEntitySets 8 | multiple_entity_sets.packageName = multipleentitysets 9 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/multipleEntitySets/output/testcomparison/namespaces/multipleentitysets/batch/MultipleEntitySetsServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.multipleentitysets.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.MultipleEntitySetsService MultipleEntitySetsService} service. 12 | * 13 | */ 14 | public interface MultipleEntitySetsServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/propertyNameClash/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # name-clash 3 | name-clash.className = NameClash 4 | name-clash.packageName = nameclash 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/propertyNameClash/output/testcomparison/namespaces/nameclash/batch/NameClashServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.nameclash.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.NameClashService NameClashService} service. 12 | * 13 | */ 14 | public interface NameClashServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testService/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # test service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testService/output/testcomparison/namespaces/test/batch/TestServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.test.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.TestService TestService} service. 12 | * 13 | */ 14 | public interface TestServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceDeprecation/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # Test Service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceDeprecation/output/testcomparison/namespaces/test/batch/TestServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.test.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.TestService TestService} service. 12 | * 13 | */ 14 | public interface TestServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceEntitySets/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # test service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceEntitySets/output/testcomparison/namespaces/test/batch/TestServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.test.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.TestService TestService} service. 12 | * 13 | */ 14 | public interface TestServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceFunctionImports/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # test service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceFunctionImports/output/testcomparison/namespaces/test/batch/TestServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.test.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.TestService TestService} service. 12 | * 13 | */ 14 | public interface TestServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceNoApiLinks/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # test service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServiceNoApiLinks/output/testcomparison/namespaces/test/batch/TestServiceBatch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2025 SAP SE or an SAP affiliate company. All rights reserved. 3 | */ 4 | 5 | package testcomparison.namespaces.test.batch; 6 | 7 | import com.sap.cloud.sdk.datamodel.odata.helper.batch.FluentHelperServiceBatch; 8 | 9 | 10 | /** 11 | * Interface to the batch object of an {@code testcomparison.services.TestService TestService} service. 12 | * 13 | */ 14 | public interface TestServiceBatch 15 | extends FluentHelperServiceBatch 16 | { 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /datamodel/odata/odata-generator/src/test/resources/oDataGeneratorIntegrationTest/testServicePojos/input/serviceNameMappings.properties: -------------------------------------------------------------------------------- 1 | 2 | # test service 3 | test_service.className = Test 4 | test_service.packageName = test 5 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-core/src/main/java/com/sap/cloud/sdk/services/openapi/apiclient/auth/Authentication.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.services.openapi.apiclient.auth; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import org.springframework.http.HttpHeaders; 6 | import org.springframework.util.MultiValueMap; 7 | 8 | /** 9 | * Representing a method to authenticate at the REST API 10 | */ 11 | public interface Authentication 12 | { 13 | /** 14 | * Apply authentication settings to header and / or query parameters. 15 | * 16 | * @param queryParams 17 | * The query parameters for the request 18 | * @param headerParams 19 | * The header parameters for the request 20 | */ 21 | void applyToParams( @Nonnull MultiValueMap queryParams, @Nonnull HttpHeaders headerParams ); 22 | } 23 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-core/src/main/java/com/sap/cloud/sdk/services/openapi/apiclient/auth/OAuthFlow.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.services.openapi.apiclient.auth; 2 | 3 | /** 4 | * Supported OAuth flows to authenticate at the REST API 5 | */ 6 | public enum OAuthFlow 7 | { 8 | /** 9 | * Authenticate with an access code 10 | */ 11 | accessCode, 12 | 13 | /** 14 | * Authenticate implicitly 15 | */ 16 | implicit, 17 | 18 | /** 19 | * Authenticate with password 20 | */ 21 | password, 22 | 23 | /** 24 | * Authenticate as application 25 | */ 26 | application 27 | } 28 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-core/src/main/java/com/sap/cloud/sdk/services/openapi/core/OpenApiService.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.services.openapi.core; 2 | 3 | /** 4 | * Marker interface to tag a OpenAPI service as part of the SAP Cloud SDK. 5 | */ 6 | public interface OpenApiService 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator-maven-plugin/src/main/resources/m2e/lifecycle-mapping-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | generate 8 | 9 | 10 | 11 | 12 | false 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/java/com/sap/cloud/sdk/datamodel/openapi/generator/OpenApiSpec.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.datamodel.openapi.generator; 2 | 3 | import java.nio.file.Path; 4 | 5 | import com.fasterxml.jackson.databind.JsonNode; 6 | 7 | import lombok.Value; 8 | 9 | @Value 10 | class OpenApiSpec 11 | { 12 | Path filePath; 13 | JsonNode jsonNode; 14 | } 15 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/.openapi-generator-ignore: -------------------------------------------------------------------------------- 1 | # OpenAPI Generator Ignore 2 | # Lines beginning with a # are comments 3 | 4 | # This should match build.sh located anywhere. 5 | build.sh 6 | 7 | settings.gradle 8 | README.md 9 | gradlew.bat 10 | gradlew 11 | gradle.properties 12 | git_push.sh 13 | build.sbt 14 | build.gradle 15 | .travis.yml 16 | gradle/** 17 | /gradle/wrapper 18 | /gradle/ 19 | gradle 20 | gradle/ 21 | src/main/AndroidManifest.xml 22 | pom.xml -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/Readme.md: -------------------------------------------------------------------------------- 1 | **Instructions while updating Mustache template updates** 2 | 3 | 1. Please note that while updating the mustache templates also check if changes have been made to the `ApiClient.mustache` and `RFC3339DateFormat.mustache` 4 | files in the Open source OpenAPI generator templates. And if yes, incorporate these changes directly to the implementation files in `openapi-core` module. -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/auth/Authentication.mustache: -------------------------------------------------------------------------------- 1 | {{>licenseInfo}} 2 | 3 | package {{invokerPackage}}.auth; 4 | 5 | import {{invokerPackage}}.Pair; 6 | 7 | import java.util.Map; 8 | import java.util.List; 9 | 10 | public interface Authentication { 11 | /** 12 | * Apply authentication settings to header and query params. 13 | * 14 | * @param queryParams List of query parameters 15 | * @param headerParams Map of header parameters 16 | */ 17 | void applyToParams(List queryParams, Map headerParams); 18 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/auth/OAuth.mustache: -------------------------------------------------------------------------------- 1 | {{>licenseInfo}} 2 | 3 | package {{invokerPackage}}.auth; 4 | 5 | import {{invokerPackage}}.Pair; 6 | 7 | import java.util.Map; 8 | import java.util.List; 9 | 10 | public class OAuth implements Authentication { 11 | private String accessToken; 12 | 13 | public String getAccessToken() { 14 | return accessToken; 15 | } 16 | 17 | public void setAccessToken(String accessToken) { 18 | this.accessToken = accessToken; 19 | } 20 | 21 | @Override 22 | public void applyToParams(List queryParams, Map headerParams) { 23 | if (accessToken != null) { 24 | headerParams.put("Authorization", "Bearer " + accessToken); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/auth/OAuthFlow.mustache: -------------------------------------------------------------------------------- 1 | {{>licenseInfo}} 2 | 3 | package {{invokerPackage}}.auth; 4 | 5 | public enum OAuthFlow { 6 | accessCode, //called authorizationCode in OpenAPI 3.0 7 | implicit, 8 | password, 9 | application //called clientCredentials in OpenAPI 3.0 10 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/libraries/resttemplate/auth/Authentication.mustache: -------------------------------------------------------------------------------- 1 | 2 | package {{invokerPackage}}.auth; 3 | 4 | import org.springframework.http.HttpHeaders; 5 | import org.springframework.util.MultiValueMap; 6 | import javax.annotation.Nonnull; 7 | import com.google.common.annotations.Beta; 8 | 9 | /** 10 | * Representing a method to authenticate at the REST API 11 | */ 12 | @Beta 13 | public interface Authentication { 14 | /** 15 | * Apply authentication settings to header and / or query parameters. 16 | * @param queryParams The query parameters for the request 17 | * @param headerParams The header parameters for the request 18 | */ 19 | void applyToParams( @Nonnull MultiValueMap queryParams, @Nonnull HttpHeaders headerParams); 20 | } 21 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/libraries/resttemplate/auth/OAuthFlow.mustache: -------------------------------------------------------------------------------- 1 | 2 | package {{invokerPackage}}.auth; 3 | 4 | import com.google.common.annotations.Beta; 5 | 6 | /** 7 | * Supported OAuth flows to authenticate at the REST API 8 | */ 9 | @Beta 10 | public enum OAuthFlow { 11 | /** 12 | * Authenticate with an access code 13 | */ 14 | accessCode, 15 | 16 | /** 17 | * Authenticate implicitly 18 | */ 19 | implicit, 20 | 21 | /** 22 | * Authenticate with password 23 | */ 24 | password, 25 | 26 | /** 27 | * Authenticate as application 28 | */ 29 | application 30 | } 31 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/licenseInfo.mustache: -------------------------------------------------------------------------------- 1 | /* 2 | * {{{appName}}} 3 | * {{{appDescription}}} 4 | * 5 | * {{#infoEmail}}Contact: {{{.}}}{{/infoEmail}} 6 | * 7 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 8 | * https://openapi-generator.tech 9 | * Do not edit the class manually. 10 | */ -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/openapi-generator/mustache-templates/xmlAnnotation.mustache: -------------------------------------------------------------------------------- 1 | {{#withXml}} 2 | 3 | @XmlRootElement({{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}name = "{{xmlName}}{{^xmlName}}{{classname}}{{/xmlName}}") 4 | @XmlAccessorType(XmlAccessType.FIELD) 5 | {{#jackson}} 6 | @JacksonXmlRootElement({{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}localName = "{{xmlName}}{{^xmlName}}{{classname}}{{/xmlName}}"){{/jackson}}{{/withXml}} -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/main/resources/version.properties: -------------------------------------------------------------------------------- 1 | version.sdk = ${project.version} 2 | version.vdm = ${project.version} 3 | -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/DatamodelMetadataGenerationTest/failing-generation-validation-fields/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.services", 3 | "mavenArtifactId": "some-random-artifact", 4 | "featureDocumentationUri": "https://sap.github.io/cloud-sdk/docs/java/features/rest/clients/doesn't-matter", 5 | "libraryVersion": "88.88.88", 6 | "generatorVersion": "99.99.99" 7 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/DatamodelMetadataGenerationTest/failing-generation-validation-fields/output/metadata/failing-sodastore_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "failed", 3 | "language": "Java", 4 | "apiType": "OpenAPI", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": null 7 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/DatamodelMetadataGenerationTest/failing-generation/input/failing-generation.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.0 2 | info: 3 | title: Soda Store API 4 | version: 1.0.0 5 | description: API for managing sodas in a soda store 6 | 7 | !paths: -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/DatamodelMetadataGenerationTest/failing-generation/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.services", 3 | "mavenArtifactId": "some-artifact-id", 4 | "featureDocumentationUri": "https://sap.github.io/cloud-sdk/docs/java/features/rest/clients/some-artifact-id-api", 5 | "libraryVersion": "88.88.88", 6 | "generatorVersion": "99.99.99" 7 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/DatamodelMetadataGenerationTest/failing-generation/output/metadata/failing-generation_CLIENT_JAVA.json: -------------------------------------------------------------------------------- 1 | { 2 | "serviceStatus": "failed", 3 | "language": "Java", 4 | "apiType": "OpenAPI", 5 | "pregeneratedLibrary": null, 6 | "apiSpecificUsage": null 7 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/DatamodelMetadataGenerationTest/simple-sodastore/input/metadata-generator-properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "mavenGroupId": "com.sap.cloud.sdk.services", 3 | "mavenArtifactId": "some-artifact-id", 4 | "featureDocumentationUri": "https://sap.github.io/cloud-sdk/docs/java/features/rest/clients/some-artifact-id-api", 5 | "libraryVersion": "88.88.88", 6 | "generatorVersion": "99.99.99" 7 | } -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/PreprocessingStepOrchestratorTest/sodastore-broken-file.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.0 2 | info: 3 | title: Soda Store API 4 | version: 1.0.0 5 | description: API for managing sodas in a soda store 6 | 7 | paths: 8 | /sodas: 9 | get: 10 | summary: Get a list of all sodas 11 | operationId: getSodas 12 | x-sap-cloud-sdk-api-name: awesomeListSodas 13 | ---- broken here ----- snip snap ---- -------------------------------------------------------------------------------- /datamodel/openapi/openapi-generator/src/test/resources/PreprocessingStepOrchestratorTest/sodastore.txt: -------------------------------------------------------------------------------- 1 | Unsupported file extension -------------------------------------------------------------------------------- /datamodel/soap/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/soap/DefaultHttpClientTransportSender.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.soap; 2 | 3 | import org.apache.axis2.transport.http.AbstractHTTPSender; 4 | import org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender; 5 | 6 | class DefaultHttpClientTransportSender extends HTTPClient4TransportSender 7 | { 8 | @Override 9 | protected AbstractHTTPSender createHTTPSender() 10 | { 11 | return new DefaultHttpSender(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/architecture/0001-record-architecture-decisions.md: -------------------------------------------------------------------------------- 1 | # 1. Record architecture decisions 2 | 3 | Date: 2023-05-02 4 | 5 | ## Status 6 | 7 | Accepted 8 | 9 | ## Context 10 | 11 | We need to record the architectural decisions made on this project. 12 | 13 | ## Decision 14 | 15 | We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). 16 | 17 | ## Consequences 18 | 19 | See Michael Nygard's article, linked above. 20 | -------------------------------------------------------------------------------- /docs/architecture/0002-re-start-numbering-of-adrs.md: -------------------------------------------------------------------------------- 1 | # 2. Re-start numbering of ADRs 2 | 3 | Date: 2023-05-02 4 | 5 | ## Status 6 | 7 | Accepted 8 | 9 | ## Context 10 | 11 | This project started not as an open source project. 12 | The existing internal repo already made use of ADR. 13 | 14 | ## Decision 15 | 16 | The open source repo starts numbering ADR with `0001`. 17 | 18 | ## Consequences 19 | 20 | - ADR IDs are not unique across the internal and the public repo 21 | - ADR numbering in the public repo is simpler compared to starting numbering with an offset 22 | - Starting at an offset of for example `100` might lead to confusion and out of order numbering when new ADRs are created 23 | -------------------------------------------------------------------------------- /docs/architecture/0003-use-github-actions-for-pipeline.md: -------------------------------------------------------------------------------- 1 | # 3. Use GitHub Actions for pipeline 2 | 3 | Date: 2023-05-02 4 | 5 | ## Status 6 | 7 | Accepted 8 | 9 | ## Context 10 | 11 | The SAP Cloud SDK for Java used Jenkins for CI so far. 12 | The SAP Cloud SDK for JavaScript already uses GitHub Actions for CI. 13 | 14 | ## Decision 15 | 16 | The SAP Cloud SDK for Java will use GitHub Actions for CI in the future. 17 | 18 | ## Consequences 19 | 20 | - We can make use of GitHub's hosted runners, freeing us from the burden of maintaining our own server 21 | - We need to rewrite our CI scripts 22 | - While going open source, many aspects of the existing pipeline are obsolete, so this is not that bad 23 | - We can use this to re-think and simplify our CI setup 24 | -------------------------------------------------------------------------------- /docs/blogs/img/part1-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part1-diff.png -------------------------------------------------------------------------------- /docs/blogs/img/part1-ospo-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part1-ospo-template.png -------------------------------------------------------------------------------- /docs/blogs/img/part1-release-notes-vdm-deprecation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part1-release-notes-vdm-deprecation.png -------------------------------------------------------------------------------- /docs/blogs/img/part2-git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part2-git.png -------------------------------------------------------------------------------- /docs/blogs/img/part2-timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part2-timeline.png -------------------------------------------------------------------------------- /docs/blogs/img/part3-main-build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part3-main-build.png -------------------------------------------------------------------------------- /docs/blogs/img/part3-module-inventory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part3-module-inventory.png -------------------------------------------------------------------------------- /docs/blogs/img/part3-plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part3-plugins.png -------------------------------------------------------------------------------- /docs/blogs/img/part3-pr-build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part3-pr-build.png -------------------------------------------------------------------------------- /docs/blogs/img/part3-prepare-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part3-prepare-release.png -------------------------------------------------------------------------------- /docs/blogs/img/part3-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/blogs/img/part3-test.png -------------------------------------------------------------------------------- /docs/images/code-ql-pr-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/images/code-ql-pr-comment.png -------------------------------------------------------------------------------- /docs/images/code-scanning-results-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/images/code-scanning-results-pr.png -------------------------------------------------------------------------------- /docs/images/code-scanning-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/docs/images/code-scanning-tab.png -------------------------------------------------------------------------------- /latest.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "5.20.0-SNAPSHOT" 3 | } 4 | -------------------------------------------------------------------------------- /lombok.config: -------------------------------------------------------------------------------- 1 | lombok.addLombokGeneratedAnnotation = true 2 | lombok.addNullAnnotations = javax -------------------------------------------------------------------------------- /release_notes.md: -------------------------------------------------------------------------------- 1 | ## 5.X.0-SNAPSHOT 2 | 3 | [All Release Changes](https://github.com/SAP/cloud-sdk-java/releases) 4 | 5 | ### 🚧 Known Issues 6 | 7 | - 8 | 9 | ### 🔧 Compatibility Notes 10 | 11 | - 12 | 13 | ### ✨ New Functionality 14 | 15 | - 16 | 17 | ### 📈 Improvements 18 | 19 | - 20 | 21 | ### 🐛 Fixed Issues 22 | 23 | - Fix `CVE-2025-48734` by transitive dependency update in `connectivity-ztis`. 24 | -------------------------------------------------------------------------------- /s4hana/rfc/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/rfc/JCoFunctionRetriever.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.rfc; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException; 6 | import com.sap.conn.jco.JCoDestination; 7 | import com.sap.conn.jco.JCoException; 8 | import com.sap.conn.jco.JCoFunction; 9 | 10 | interface JCoFunctionRetriever 11 | { 12 | @Nonnull 13 | JCoFunction retrieveJCoFunction( @Nonnull final String functionName, @Nonnull final JCoDestination destination ) 14 | throws JCoException, 15 | DestinationAccessException; 16 | } 17 | -------------------------------------------------------------------------------- /s4hana/rfc/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/rfc/Parameter.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.rfc; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.AccessLevel; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.RequiredArgsConstructor; 9 | import lombok.ToString; 10 | 11 | @Getter( AccessLevel.PACKAGE ) 12 | @EqualsAndHashCode 13 | @ToString 14 | @RequiredArgsConstructor( access = AccessLevel.PACKAGE ) 15 | class Parameter 16 | { 17 | @Nonnull 18 | private final ParameterKind parameterKind; 19 | 20 | @Nonnull 21 | private final Value parameterValue; 22 | } 23 | -------------------------------------------------------------------------------- /s4hana/rfc/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/rfc/RemoteFunctionErrorMapper.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.rfc; 2 | 3 | import java.util.Map; 4 | 5 | import com.sap.cloud.sdk.s4hana.connectivity.rfc.exception.RemoteFunctionExceptionFactory; 6 | 7 | interface RemoteFunctionErrorMapper 8 | { 9 | @Deprecated 10 | Map> getMapping(); 11 | 12 | @Deprecated 13 | Map getPriorities(); 14 | } 15 | -------------------------------------------------------------------------------- /s4hana/rfc/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/rfc/RemoteFunctionExceptionPriority.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.rfc; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | 8 | @AllArgsConstructor 9 | class RemoteFunctionExceptionPriority implements Comparable 10 | { 11 | @Getter 12 | private final int value; 13 | 14 | /** 15 | * @deprecated This module will be discontinued, along with its classes and methods. 16 | */ 17 | @Deprecated 18 | @Override 19 | public int compareTo( @Nonnull final RemoteFunctionExceptionPriority o ) 20 | { 21 | return Integer.compare(getValue(), o.getValue()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /s4hana/rfc/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/rfc/ValueType.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.rfc; 2 | 3 | /** 4 | * Value type for remote functions. 5 | */ 6 | enum ValueType 7 | { 8 | /** 9 | * One Value with valueType FIELD contains one object. 10 | */ 11 | FIELD, 12 | 13 | /** 14 | * One Value with valueType STRUCTURE contains a list of Values. 15 | */ 16 | STRUCTURE, 17 | 18 | /** 19 | * One Value with valueType TABLE contains a list of lists of Values. 20 | */ 21 | TABLE 22 | } 23 | -------------------------------------------------------------------------------- /s4hana/rfc/src/test/java/com/sap/cloud/sdk/s4hana/connectivity/rfc/DataCollectionProgramTextsRfm.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity.rfc; 2 | 3 | import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; 4 | 5 | @Deprecated 6 | public class DataCollectionProgramTextsRfm 7 | { 8 | private static final String RFC_NAME = "FCXL_GET_PROGRAM_TEXTS"; 9 | 10 | public RfmRequestResult execute( final Destination destination ) 11 | throws com.sap.cloud.sdk.s4hana.connectivity.exception.RequestExecutionException 12 | { 13 | final RfmRequest rfcRequest = 14 | new RfmRequest(RFC_NAME, false) 15 | .withExporting("ED_LANGU", "SYLANGU") 16 | .withImporting("EXCEPTION", "FCXL_MESSG-MESSAGE") 17 | .withTable("E_PROGRAM_TEXTS", "FCXL_PTEXT") 18 | .end(); 19 | return rfcRequest.execute(destination); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /s4hana/s4hana-connectivity/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.settings/ 3 | /.project 4 | /src/main/generated 5 | /.classpath 6 | -------------------------------------------------------------------------------- /s4hana/s4hana-connectivity/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/RequestMethod.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity; 2 | 3 | /** 4 | * Enumeration representing possible HTTP methods for ERP request execution. 5 | * 6 | * @deprecated This module will be discontinued, along with its classes and methods. 7 | */ 8 | @Deprecated 9 | public enum RequestMethod 10 | { 11 | /** 12 | * GET 13 | */ 14 | GET, 15 | /** 16 | * HEAD 17 | */ 18 | HEAD, 19 | /** 20 | * POST 21 | */ 22 | POST, 23 | /** 24 | * PUT 25 | */ 26 | PUT, 27 | /** 28 | * PATCH 29 | */ 30 | PATCH, 31 | /** 32 | * DELETE 33 | */ 34 | DELETE, 35 | /** 36 | * OPTIONS 37 | */ 38 | OPTIONS 39 | } 40 | -------------------------------------------------------------------------------- /s4hana/s4hana-connectivity/src/main/java/com/sap/cloud/sdk/s4hana/connectivity/RequestResult.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.connectivity; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Common interface for ERP request results. 7 | * 8 | * @param 9 | * The generic request type. 10 | * @param 11 | * The generic request result type. 12 | * 13 | * @deprecated This module will be discontinued, along with its classes and methods. 14 | */ 15 | @Deprecated 16 | public interface RequestResult, RequestResultT extends RequestResult> 17 | { 18 | /** 19 | * ERP request from which this result originates. 20 | * 21 | * @return The ERP request. 22 | */ 23 | @Nonnull 24 | RequestT getRequest(); 25 | } 26 | -------------------------------------------------------------------------------- /s4hana/s4hana-connectivity/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/s4hana/s4hana-connectivity/src/main/resources/META-INF/beans.xml -------------------------------------------------------------------------------- /s4hana/s4hana-core/src/main/java/com/sap/cloud/sdk/s4hana/serialization/ErpType.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.serialization; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.annotation.Nonnull; 6 | 7 | /** 8 | * ERP type. 9 | * 10 | * @param 11 | * The generic sub class type. 12 | * 13 | * @deprecated This module will be discontinued, along with its classes and methods. 14 | */ 15 | @Deprecated 16 | public interface ErpType> extends Serializable 17 | { 18 | /** 19 | * Get the type converter for the ERP type. 20 | * 21 | * @return The type converter. 22 | */ 23 | @Nonnull 24 | ErpTypeConverter getTypeConverter(); 25 | } 26 | -------------------------------------------------------------------------------- /s4hana/s4hana-core/src/main/java/com/sap/cloud/sdk/s4hana/serialization/ErpTypeConverter.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.serialization; 2 | 3 | import com.sap.cloud.sdk.typeconverter.TypeConverter; 4 | 5 | /** 6 | * Type converter for converting types to and from their ERP counterparts. 7 | *

8 | * Important: Implementations must be thread-safe. 9 | * 10 | * @param 11 | * The generic sub class type. 12 | * 13 | * @deprecated This module will be discontinued, along with its classes and methods. 14 | */ 15 | @Deprecated 16 | public interface ErpTypeConverter extends TypeConverter 17 | { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /s4hana/s4hana-core/src/main/java/com/sap/cloud/sdk/s4hana/serialization/RemoteFunctionError.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.serialization; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.EqualsAndHashCode; 5 | 6 | /** 7 | * The wrapper class for MessageClass and MessageNumber. 8 | * 9 | * @deprecated This module will be discontinued, along with its classes and methods. 10 | */ 11 | @AllArgsConstructor 12 | @EqualsAndHashCode 13 | @Deprecated 14 | public class RemoteFunctionError 15 | { 16 | private final MessageClass messageClass; 17 | private final MessageNumber messageNumber; 18 | } 19 | -------------------------------------------------------------------------------- /s4hana/s4hana-core/src/main/java/com/sap/cloud/sdk/s4hana/serialization/StringRepresentableKey.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.s4hana.serialization; 2 | 3 | import javax.annotation.Nonnull; 4 | 5 | /** 6 | * Represents a key that can be represented as a String. 7 | * 8 | * @deprecated This module will be discontinued, along with its classes and methods. 9 | */ 10 | @Deprecated 11 | public interface StringRepresentableKey 12 | { 13 | /** 14 | * Returns the String representation of this key. 15 | * 16 | * @return This key as a String. 17 | */ 18 | @Nonnull 19 | String getKeyAsString(); 20 | } 21 | -------------------------------------------------------------------------------- /scripts/common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/scripts/common/__init__.py -------------------------------------------------------------------------------- /scripts/common/_maven_module/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SAP/cloud-sdk-java/5d6b5d80a46cfff72cae55812b2025eb757d30d8/scripts/common/_maven_module/__init__.py -------------------------------------------------------------------------------- /scripts/common/_maven_module/maven_module_reader_configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignoredModules": [ 3 | { 4 | "groupId": "^\\$\\{groupId\\}.*", 5 | "artifactId": ".*", 6 | "useRegexValidation": true, 7 | "reason": "Archetype template." 8 | }, 9 | { 10 | "groupId": ".*", 11 | "artifactId": "^\\$\\{artifactId\\}.*", 12 | "useRegexValidation": true, 13 | "reason": "Archetype template." 14 | }, 15 | { 16 | "groupId": "com.company", 17 | "artifactId": "application", 18 | "useRegexValidation": false, 19 | "reason": "Used for test purposes." 20 | } 21 | ], 22 | "ignoredPoms": [ 23 | { 24 | "path": ".+[\\/\\\\]target[\\/\\\\]test-classes[\\/\\\\].+", 25 | "useRegexValidation": true, 26 | "reason": "Compiled module." 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /scripts/common/release_audience.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ReleaseAudience(Enum): 5 | NONE = "None" 6 | PUBLIC = "Public" 7 | 8 | def __repr__(self) -> str: 9 | return str(self) 10 | 11 | def __str__(self) -> str: 12 | return self.value 13 | -------------------------------------------------------------------------------- /scripts/common/release_maturity.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ReleaseMaturity(Enum): 5 | BETA = "Beta" 6 | STABLE = "Stable" 7 | DEPRECATED = "Deprecated" 8 | 9 | def __repr__(self) -> str: 10 | return str(self) 11 | 12 | def __str__(self) -> str: 13 | return self.value 14 | -------------------------------------------------------------------------------- /testutil/src/main/java/com/sap/cloud/sdk/testutil/TestContextApi.java: -------------------------------------------------------------------------------- 1 | package com.sap.cloud.sdk.testutil; 2 | 3 | import javax.annotation.Nonnull; 4 | import javax.annotation.Nullable; 5 | 6 | /** 7 | * Baseline interface for the {@code TestContext} interfaces. 8 | */ 9 | public interface TestContextApi 10 | { 11 | /** 12 | * Set a property in the thread context. 13 | * 14 | * @param key 15 | * the key of the property 16 | * @param value 17 | * the value of the property. If {@code null}, the property will be removed. 18 | */ 19 | void setProperty( @Nonnull final String key, @Nullable final Object value ); 20 | } 21 | --------------------------------------------------------------------------------